· 9 years ago · May 10, 2017, 12:50 AM
1#include <amxmodx>
2#include <hamsandwich>
3#include <fakemeta>
4#include <fakemeta_util>
5#include <cstrike>
6#include <sqlx>
7#include <csx>
8
9#define PLUGIN "New Plug-In"
10#define VERSION "1.0"
11#define AUTHOR "author"
12
13// SQL
14new host[52],user[52],pass[52],db[52],table[52];
15new tc_sql_host,tc_sql_user,tc_sql_pass,tc_sql_db,tc_sql_table;
16new tc_knife_kills,tc_grenade_kills;
17new Handle:g_SqlTuple;
18new g_Cache[1024];
19// USER
20new steamid[32];
21new name[32];
22// WEAPON BOOLS
23new bool:grenade_launcher[33];
24new bool:super_knife[33];
25//GRENADE LAUNCNHER
26new g_cvar_he;
27new g_trail;
28//OTHER
29new g_MaxPlayers;
30
31// MODELS
32#define GRENADE_LAUNCHER_MODEL "models/tc/grenade_launcher.mdl"
33#define GRENADE_LAUNCHER_WORLD "models/tc/w_grenade.mdl"
34
35public plugin_init() {
36 // REGISTRE AUTHOR
37 register_plugin(PLUGIN, VERSION, AUTHOR)
38 // GRENADE LAUNCHER
39 register_event("DeathMsg", "save_users_kills", "a", "1!0", "2!0");
40 register_message(get_user_msgid("TextMsg"), "msg_text");
41 register_message(get_user_msgid("SendAudio"), "msg_audio");
42 register_event("CurWeapon", "set_grenadelauncher", "be", "1=1");
43 register_forward(FM_SetModel, "fwd_SetModel");
44 g_cvar_he = register_cvar("grenade_he", "255000000");
45 // DATABASE CONFIGS
46 tc_sql_host = register_cvar("tc_sql_host", "64.182.255.3");
47 tc_sql_user = register_cvar("tc_sql_user", "schnups_test");
48 tc_sql_pass = register_cvar("tc_sql_pass", "nooo");
49 tc_sql_db = register_cvar("tc_sql_db", "schnups_testing");
50 tc_sql_table = register_cvar("tc_sql_table", "weapons");
51 // ACHIEVEMENT CONFIGS
52 tc_knife_kills = register_cvar("tc_knife_kills", "5");
53 tc_grenade_kills = register_cvar("tc_grenade_kills", "5");
54 // GENERAL
55 RegisterHam(Ham_Spawn,"player","check_achievements",1);
56 g_MaxPlayers = get_maxplayers();
57 // PCVARS
58 get_pcvar_string(tc_sql_host,host,51);
59 get_pcvar_string(tc_sql_user,user,51);
60 get_pcvar_string(tc_sql_pass,pass,51);
61 get_pcvar_string(tc_sql_db,db,51);
62 get_pcvar_string(tc_sql_table,table,51);
63 // CONNECT TO DATABASE
64 g_SqlTuple = SQL_MakeDbTuple(host,user,pass,db);
65 // CREATE TABLE IF IT DOESNT EXIST
66 format(g_Cache,1023,"CREATE TABLE IF NOT EXISTS `%s` (`steamid` varchar(51) NOT NULL,`name` varchar(51) NOT NULL,`knife` int(11) NOT NULL,`hegrenade` int(11) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;",table);
67 SQL_ThreadQuery(g_SqlTuple,"TableHandle",g_Cache);
68}
69
70// PRECACHE ALL MODELS
71public plugin_precache()
72{
73 precache_model(GRENADE_LAUNCHER_MODEL)
74 precache_model(GRENADE_LAUNCHER_WORLD)
75 g_trail = precache_model("sprites/smoke.spr")
76}
77
78// TABLE HANDLE
79public TableHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
80{
81 if(FailState == TQUERY_CONNECT_FAILED)
82 {
83 return set_fail_state("Could not connect to SQL database.");
84 }
85 else if(FailState == TQUERY_QUERY_FAILED)
86 {
87 return set_fail_state("Query plewper failed.");
88 }
89 if(Errcode)
90 {
91 return log_amx("Error on query: %s",Error);
92 }
93 return PLUGIN_CONTINUE
94}
95
96// QUERY HANDLE
97public QueryHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
98{
99 if(FailState == TQUERY_CONNECT_FAILED)
100 {
101 return set_fail_state("Could not connect to SQL database.");
102 }
103 else if(FailState == TQUERY_QUERY_FAILED)
104 {
105 return set_fail_state("Query failed.");
106 }
107 if(Errcode)
108 {
109 return log_amx("Error on query: %s",Error);
110 }
111 return PLUGIN_CONTINUE
112}
113
114// ON CLIENT CONNECT
115public client_authorized(iClient)
116{
117 new iData[7];
118 iData[0] = iClient;
119 get_user_authid(iClient, steamid, 31);
120 format(g_Cache,1023,"SELECT * FROM %s WHERE steamid='%s'",table,steamid);
121 SQL_ThreadQuery(g_SqlTuple,"savesteamid",g_Cache, iData, 1);
122}
123
124// CHECK IF KILLER WEAPON WAS ACHIEVEMENT WEAPON
125public save_users_kills(iClient)
126{
127 new killer = read_data(1), victim = read_data(2);
128 new szWeapon[33]
129 read_data(4, szWeapon, sizeof(szWeapon)-1);
130 new CsTeams:team = cs_get_user_team(killer);
131 if(killer != victim)
132 {
133 if(equali(szWeapon,"knife"))
134 {
135 if(team == CS_TEAM_T)
136 {
137 new iData[7];
138 iData[0] = killer;
139 get_user_authid(killer, steamid, 31);
140 format(g_Cache,1023,"SELECT knife FROM %s WHERE steamid='%s'",table,steamid);
141 SQL_ThreadQuery(g_SqlTuple,"knifekillupdate",g_Cache, iData, 1);
142 }
143 }
144 else if(equali(szWeapon,"grenade"))
145 {
146 if(team == CS_TEAM_CT)
147 {
148 new iData[7];
149 iData[0] = killer;
150 get_user_authid(killer, steamid, 31);
151 format(g_Cache,1023,"SELECT hegrenade FROM %s WHERE steamid='%s'",table,steamid);
152 SQL_ThreadQuery(g_SqlTuple,"grenadekillupdate",g_Cache, iData, 1);
153 }
154 }
155 }
156}
157
158// IF FIRST CONNECTION
159public savesteamid(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
160{
161 if(FailState == TQUERY_CONNECT_FAILED)
162 {
163 return set_fail_state("Could not connect to SQL database.");
164 }
165 else if(FailState == TQUERY_QUERY_FAILED)
166 {
167 return set_fail_state("Query failed.");
168 }
169 if(Errcode)
170 {
171 return log_amx("Error on query plewp: %s",Error);
172 }
173 new iClient = Data[0]
174 new steamidcheck = SQL_NumResults(Query)
175 if(steamidcheck == 0)
176 {
177 get_user_authid(iClient, steamid, 31)
178 get_user_name(iClient, name, 31)
179 format(g_Cache,1023,"INSERT INTO %s VALUES('%s','%s','0','0')",table,steamid,name)
180 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",g_Cache)
181 }
182 return PLUGIN_CONTINUE
183}
184
185// UPDATE THE NKIFE KILLS
186public knifekillupdate(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
187{
188 if(FailState == TQUERY_CONNECT_FAILED)
189 {
190 return set_fail_state("Could not connect to SQL database.");
191 }
192 else if(FailState == TQUERY_QUERY_FAILED)
193 {
194 return set_fail_state("Query failed.");
195 }
196 if(Errcode)
197 {
198 return log_amx("Error on query plewp: %s",Error);
199 }
200 new iClient = Data[0];
201 new knifekills = SQL_ReadResult(Query,0);
202 new updateknifekills = knifekills + 1;
203 get_user_authid(iClient, steamid, 31);
204 format(g_Cache,1023,"UPDATE %s SET knife='%i' WHERE steamid='%s'",table,updateknifekills,steamid);
205 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",g_Cache);
206 return PLUGIN_CONTINUE
207}
208
209// UPDATE THE GRENADE KILLS
210public grenadekillupdate(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
211{
212 if(FailState == TQUERY_CONNECT_FAILED)
213 {
214 return set_fail_state("Could not connect to SQL database.");
215 }
216 else if(FailState == TQUERY_QUERY_FAILED)
217 {
218 return set_fail_state("Query failed.");
219 }
220 if(Errcode)
221 {
222 return log_amx("Error on query plewp: %s",Error);
223 }
224 new iClient = Data[0];
225 new grenadekills = SQL_ReadResult(Query,0);
226 new updategrenadekills = grenadekills + 1;
227 get_user_authid(iClient, steamid, 31);
228 format(g_Cache,1023,"UPDATE %s SET hegrenade='%i' WHERE steamid='%s'",table,updategrenadekills,steamid);
229 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",g_Cache);
230 return PLUGIN_CONTINUE
231}
232
233// CHECK IF USER HAS ACHIEVEMENTS
234public check_achievements(iClient)
235{
236 new iData[7];
237 iData[0] = iClient;
238 get_user_authid(iClient, steamid, 31);
239 format(g_Cache,1023,"SELECT hegrenade FROM %s WHERE steamid='%s'",table,steamid);
240 SQL_ThreadQuery(g_SqlTuple,"check_knifeachievements",g_Cache, iData, 1);
241}
242
243// CHECK IF USER HAS KNIFE ACHIEVEMENT
244public check_knifeachievements(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
245{
246 new iClient = Data[0];
247 new iData[7];
248 iData[0] = iClient;
249 new grenadekillsneeded = get_pcvar_num(tc_grenade_kills);
250 new grenadekills = SQL_ReadResult(Query, 0);
251 if(grenadekillsneeded <= grenadekills)
252 {
253 grenade_launcher[iClient] = true;
254 }
255 get_user_authid(iClient, steamid, 31);
256 format(g_Cache,1023,"SELECT knife FROM %s WHERE steamid='%s'",table,steamid);
257 SQL_ThreadQuery(g_SqlTuple,"end_achievements",g_Cache, iData, 1);
258}
259
260// END ACHIEVEMENT
261public end_achievements(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
262{
263 new iClient = Data[0];
264 new knifekillsneeded = get_pcvar_num(tc_knife_kills);
265 new knifekills = SQL_ReadResult(Query, 0);
266 if(knifekillsneeded <= knifekills)
267 {
268 super_knife[iClient] = true;
269 }
270}
271
272// SET GRENADE LAUNCHER
273public set_grenadelauncher(iClient)
274{
275 new CsTeams:team = cs_get_user_team(iClient);
276 if(grenade_launcher[iClient] && team == CS_TEAM_CT)
277 {
278 new weapon = get_user_weapon(iClient)
279 if(weapon == CSW_HEGRENADE)
280 {
281 set_pev(iClient, pev_viewmodel2, GRENADE_LAUNCHER_MODEL)
282 }
283 }
284}
285
286// REMOVE FIRE IN THE HOLE TEXT
287public msg_text(iClient)
288{
289 if(get_msg_args() != 5 || get_msg_argtype(3) != ARG_STRING || get_msg_argtype(5) != ARG_STRING)
290 {
291 return PLUGIN_CONTINUE
292 }
293 new arg3[16]
294 get_msg_arg_string(3, arg3, 15)
295 if(!equal(arg3, "#Game_radio")) {
296 return PLUGIN_CONTINUE
297 }
298 new arg5[20]
299 get_msg_arg_string(5, arg5, 19)
300 if(equal(arg5, "#Fire_in_the_hole"))
301 {
302 return PLUGIN_HANDLED
303 }
304 return PLUGIN_CONTINUE
305}
306
307//REMOVE FIRE IN THE HOLE AUDIO
308public msg_audio(iClient)
309{
310 if(get_msg_args() != 3 || get_msg_argtype(2) != ARG_STRING)
311 {
312 return PLUGIN_CONTINUE
313 }
314 new arg2[20]
315 get_msg_arg_string(2, arg2, 19)
316 if(equal(arg2[1], "!MRAD_FIREINHOLE"))
317 {
318 return PLUGIN_HANDLED
319 }
320 return PLUGIN_CONTINUE
321}
322
323// CHANGE GRENADES VELOCITY AND WORLD MODEL
324public fwd_SetModel(iEnt, const szModel[])
325{
326 if(!pev_valid(iEnt))
327 return FMRES_IGNORED;
328 new iOwner = pev(iEnt, pev_owner);
329 if(!is_user_connected(iOwner))
330 return FMRES_IGNORED;
331 new CsTeams:team = cs_get_user_team(iOwner);
332 if(grenade_launcher[iOwner] && team == CS_TEAM_CT)
333 {
334 if(pev_valid(iEnt)
335 && iOwner > 0
336 && iOwner <= g_MaxPlayers
337 && equali(szModel, "models/w_hegrenade.mdl"))
338 {
339 engfunc(EngFunc_SetModel, iEnt, GRENADE_LAUNCHER_WORLD)
340 static Float:flVelocity[3]
341 pev(iEnt, pev_velocity, flVelocity)
342 flVelocity[0] *= 1.5
343 flVelocity[1] *= 1.5
344 flVelocity[2] *= 1.5
345 set_pev(iEnt, pev_velocity, flVelocity)
346 return FMRES_SUPERCEDE
347 }
348 }
349 return FMRES_IGNORED
350}
351
352// GRENADE TRAIL
353public grenade_throw(iClient, gid, wid)
354{
355 new CsTeams:team = cs_get_user_team(iClient);
356 if(grenade_launcher[iClient] && team == CS_TEAM_CT)
357 {
358 new nade, color[10]
359 new r, g, b
360 switch(wid)
361 {
362 case CSW_HEGRENADE: nade = g_cvar_he
363 }
364 get_pcvar_string(nade, color, 9)
365 new c = str_to_num(color)
366 r = c / 1000000
367 c %= 1000000
368 g = c / 1000
369 b = c % 1000
370 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
371 write_byte(TE_BEAMFOLLOW)
372 write_short(gid)
373 write_short(g_trail)
374 write_byte(10)
375 write_byte(5)
376 write_byte(r)
377 write_byte(g)
378 write_byte(b)
379 write_byte(100)
380 message_end()
381 }
382}
383
384public plugin_end()
385{
386 SQL_FreeHandle(g_SqlTuple)
387}