· 8 years ago · Jul 23, 2018, 08:52 PM
1#include "gunxpmod.cfg"
2#include <amxmodx>
3#include <amxmisc>
4#include <fakemeta>
5#include <fun>
6#include <cstrike>
7#include <sqlx>
8#include <hamsandwich>
9#include <gunxpmod>
10
11#define VERSION "1.0"
12#define DB_HOST "localhost"
13#define DB_USER "root"
14#define DB_PASS "36#52F@%"
15#define DB_DATA "gunxp"
16
17#define GIVE_WEAPO_MENU 0
18#define MAXXP 9000000
19
20#define TABLE_NAME "levels"
21#define is_player(%1) (1 <= %1 <= g_maxplayers)
22
23#define OFFSET_PRIMARYWEAPON 116
24#define TASK_SHOW_LEVEL 10113
25#define fm_cs_set_user_nobuy(%1) set_pdata_int(%1, 235, get_pdata_int(%1, 235) & ~(1<<0) ) //no weapon buy
26
27new PlayerXp[33], PlayerLevel[33], PlayerPrestige[33];
28new bool:ITEM[33];
29new g_Menu[33], g_Pasir[33], g_give_xp[33];
30new g_remember_selection[33], g_kills[33], g_remember_selection_pistol[33];
31new g_maxplayers, g_msgHudSync1, SayTxT, enable_grenades;
32new levelspr, show_level_text, show_rank;
33new xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, xp_mega, mega_kills, enable_mega, p_Enabled, level_style;
34new enable_admin_xp, admin_xp, cvar_prestige_auto, save_on;
35new enable_steam_xp/*, steam_xp*/;
36new cvar_bot_weapons;
37
38native SavePowers(id)
39 native SetPowersLoaded(id, bool:set)
40 native LoadPowers(id)
41
42/*================================================================================
43[MySQLx Vars, other]
44=================================================================================*/
45new Handle:g_hTuple;
46new gPlayerSave[33];
47
48new gCanLoad, gCanSave;
49
50new bool:gStatsLoaded[33];
51new g_logfile[64];
52
53new const WEAPONCONST[MAXLEVEL][] = { "weapon_glock18", "weapon_usp", "weapon_p228", "weapon_fiveseven", "weapon_deagle", "weapon_elite", "weapon_tmp",
54 "weapon_mac10", "weapon_ump45", "weapon_mp5navy", "weapon_p90", "weapon_scout", "weapon_famas", "weapon_galil", "weapon_m3", "weapon_xm1014",
55"weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_sg552", "weapon_sg550", "weapon_g3sg1", "weapon_awp", "weapon_m249", "", "",
56"", "", "", "", "", "", "", "", "", "",
57"", "", "", "", "", "", "", "", "", "", "" }; // Give Weapons
58
59new const WEAPONMDL[MAXLEVEL][] = { "models/w_glock18.mdl", "models/w_usp.mdl", "models/w_p228.mdl", "models/w_fiveseven.mdl", "models/w_deagle.mdl", "models/w_elite.mdl", "models/w_tmp.mdl",
60 "models/w_mac10.mdl", "models/w_ump45.mdl", "models/w_mp5.mdl", "models/w_p90.mdl", "models/w_scout.mdl", "models/w_famas.mdl", "models/w_galil.mdl", "models/w_m3.mdl", "models/w_xm1014.mdl",
61"models/w_ak47.mdl", "models/w_m4a1.mdl", "models/w_aug.mdl", "models/w_sg552.mdl", "models/w_sg550.mdl", "models/w_g3sg1.mdl", "models/w_awp.mdl", "models/w_m249.mdl", "", "",
62"", "", "", "", "", "", "", "", "", "",
63"", "", "", "", "", "", "", "", "", "",
64"" }; // Blocks pick up weapon, don't change!
65
66new const AMMOCONST[MAXLEVEL] = { 17, 16, 1, 11, 26, 10, 23, 7, 12, 19, 30, 3, 15, 14, 21, 5, 28, 22, 8, 27, 13, 24, 18, 20 }; // Weapons ID(CSW) don't change!
67
68new dproto_protocol
69new dproto_provider
70
71/*================================================================================
72[Plugin natives,precache,init]
73=================================================================================*/
74public plugin_init()
75{
76 register_plugin("Gun XP", VERSION, "HITLER");
77 register_cvar("gxm_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
78 set_cvar_string("gxm_version", VERSION)
79
80 register_clcmd("say level", "showlevel");
81 register_clcmd("say /level", "showlevel");
82
83 register_clcmd("say /top20", "showtop20");
84
85 register_clcmd("say /menu", "show_main_menu_info");
86 register_clcmd("say menu", "show_main_menu_info");
87
88 register_clcmd("say /off", "off_main_menu");
89 register_clcmd("say off", "off_main_menu");
90
91 register_clcmd("say /save", "cmdSave");
92 register_clcmd("say save", "cmdSave");
93
94 register_clcmd("say /prs", "cmdPrs");
95 register_clcmd("say prs", "cmdPrs");
96 register_clcmd("say /guns","guns");
97 register_clcmd("set_prs", "set_prestige", ADMIN_RCON, "<name> <amount>")
98 register_clcmd("set_xp", "set_xp", ADMIN_RCON, "<name> <amount>")
99
100 register_concmd("remove_xp", "cmd_remove_xp", ADMIN_RCON, "add_xp <name> <amount>" );
101
102 p_Enabled = register_cvar( "gxm_enable", "1" ); // Plugin enabled? 1 = Yes, 0 = No.
103
104 cvar_prestige_auto = register_cvar( "gxm_prs_auto", "0" ); // Prestige auto? 1 = Yes, 0 = No.
105
106 xp_kill = register_cvar("gxm_xp","100"); // How much xp gain if you killed someone?
107 show_level_text = register_cvar("gxm_level_text","1"); // Show your level by : 1 = HUD message, 0 = Simple colored text message.
108 show_rank = register_cvar("gxm_show_rank","1"); // Show rank in /top20? 1 = Yes, 0 = No.
109 level_style = register_cvar("gxm_level_style","0"); // You will gain each level new gun : 1 = Yes, 0 = No,select your gun by menu.
110 enable_grenades = register_cvar("gxm_grenades","1"); // Give to player grenades? 1 = Yes, 0 = No.
111
112 save_on = register_cvar("gxm_save_on", "0"); // When save xp? 1 = On exit, 0 = on kill.
113
114 enable_triple = register_cvar("gxm_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
115 xp_triple = register_cvar("gxm_triple_xp","3"); // How much bonus xp give for Triple Kill?
116 triple_kills = register_cvar("gxm_triple_kills","50"); // How much kills needed to give bonus xp?
117
118 enable_ultra = register_cvar("gxm_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
119 xp_ultra = register_cvar("gxm_ultra_xp","5"); // How much bonus xp give for Ultra Kill?
120 ultra_kills = register_cvar("gxm_ultra_kills","75"); // How much kills needed to give bonus xp?
121
122 enable_mega = register_cvar("gxm_mega","1"); // Enable Mega Kill bonus xp? 1 = Yes, 0 = No.
123 xp_mega = register_cvar("gxm_mega_xp","10"); // How much bonus xp give for Mega Kill?
124 mega_kills = register_cvar("gxm_mega_kills","100"); // How much kills needed to give bonus xp?
125
126 enable_admin_xp = register_cvar("gxm_admin_xp","1"); // Enable Extra xp for killing? 1 = Yes, 0 = No.
127 admin_xp = register_cvar("gxm_extra_xp","200"); // How much extra xp give to admins?
128
129 cvar_bot_weapons = register_cvar("gxm_bots_guns", "1"); //Give weapon for bots?
130
131 enable_steam_xp = register_cvar("gxm_extra_steam", "0");
132 /*steam_xp = register_cvar("gxm_extra_steam_xp", "1.15"); //percentes*/
133
134 // Events //
135 register_event("DeathMsg", "event_deathmsg", "a");
136 register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
137
138 // Forwards //
139 RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
140
141 register_forward(FM_Touch, "fwd_Touch");
142
143 // Messages //
144 #if defined NORMAL_MOD || defined ZOMBIE_SWARM
145 register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
146 #endif
147
148 // Other //
149 register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
150
151 register_dictionary("gunxpmod.txt");
152
153 SayTxT = get_user_msgid("SayText");
154
155 g_msgHudSync1 = CreateHudSyncObj()
156 g_maxplayers = get_maxplayers();
157
158 get_time("gunxpmod_%Y%m%d.log", g_logfile, charsmax(g_logfile));
159 log_to_file(g_logfile, "-------------------- %s --------------------", get_mapname_ex());
160
161 dproto_protocol = get_cvar_pointer ("dp_r_protocol")
162 dproto_provider = get_cvar_pointer ("dp_r_id_provider")
163
164 set_task(5.0, "LoadConnected");
165 gCanLoad = 0;
166 gCanSave = 0;
167 log_amx("Paleido leveliu uzkrovimo taska!");
168}
169
170public plugin_natives()
171{
172 // Player natives //
173 register_native("get_user_xp", "native_get_user_xp", 1);
174 register_native("set_user_xp", "native_set_user_xp", 1);
175
176 register_native("get_user_level", "native_get_user_level", 1);
177 register_native("set_user_level", "native_set_user_level", 1);
178
179 register_native("set_user_prestige", "native_set_user_prestige", 1);
180 register_native("get_user_prestige", "native_get_user_prestige", 1);
181
182 register_native("get_user_max_level", "native_get_user_max_level", 1);
183
184 register_native("get_user_save_type", "native_get_save_type", 1);
185
186 register_native("gxm_save_level", "native_gxm_save_level", 1);
187
188 register_native("gxm_level_loaded", "native_gxm_level_loaded", 1);
189}
190public plugin_cfg()
191{
192 new ConfDir[32], File[192];
193
194 get_configsdir( ConfDir, charsmax( ConfDir ) );
195 formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
196
197 if( !file_exists( File ) )
198 {
199 server_print( "File %s doesn't exist!", File );
200 write_file( File, " ", -1 );
201 }
202 else
203 {
204 server_print( "%s successfully loaded.", File );
205 server_cmd( "exec %s", File );
206 }
207}
208public plugin_precache()
209{
210 g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);
211
212 new szTables[513]; format(szTables, 512, "CREATE TABLE IF NOT EXISTS `%s` (`id` int(11) NOT NULL AUTO_INCREMENT, `player_id` varchar(32) NOT NULL, `player_level` int(8) NOT NULL, `player_xp` int(16) NOT NULL, `player_prestige` int(16) NOT NULL, `player_name` varchar(255) NOT NULL, `player_last_date` datetime NOT NULL, PRIMARY KEY (`id`,`player_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;", TABLE_NAME);
213 SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables);
214
215 levelspr = precache_model("sprites/blast.spr");
216
217 engfunc(EngFunc_PrecacheSound, LevelUp);
218}
219
220// Give Prestige
221public set_prestige (id, level, cid) {
222
223 if(!cmd_access(id, level, cid, 3))
224 return PLUGIN_HANDLED;
225
226 new arg[32], arg2[32];
227 read_argv(1, arg, 32);
228 read_argv(2, arg2, 31);
229
230 new player = cmd_target(id,arg,2);
231 if(!player) return PLUGIN_HANDLED;
232
233 new prestigeamount = str_to_num(arg2);
234 set_user_prestige(player, prestigeamount);
235
236 if( prestigeamount < 0 )
237 {
238 console_print(id, "You can't give player prestige lower that 0");
239 return PLUGIN_HANDLED;
240 }
241
242 new player_name[32], admin_name[32];
243 get_user_name(player, player_name, 31);
244 get_user_name(id, admin_name, 31);
245
246 switch(get_cvar_num("amx_show_activity"))
247 {
248 case 2: ColorChat(id, "!gADMIN !y%s: give !t%s %i !gPrestige", admin_name, player_name, prestigeamount);
249 case 1: ColorChat(id, "!gADMIN: !ygive !t%s %i !gPrestige", player_name, prestigeamount);
250 }
251
252 return PLUGIN_HANDLED;
253}
254// Give XP
255public set_xp (id, level, cid) {
256
257 if(!cmd_access(id, level, cid, 3))
258 return PLUGIN_HANDLED;
259
260 new arg[32], arg2[32];
261 read_argv(1, arg, 32);
262 read_argv(2, arg2, 31);
263
264 new player = cmd_target(id,arg,2);
265 if(!player) return PLUGIN_HANDLED;
266
267 new xpamount = str_to_num(arg2);
268 set_user_xp(player, xpamount);
269
270 if( xpamount < 0 )
271 {
272 console_print(id, "You can't give player XP lower that 0");
273 return PLUGIN_HANDLED;
274 }
275
276 new player_name[32], admin_name[32];
277 get_user_name(player, player_name, 31);
278 get_user_name(id, admin_name, 31);
279
280 switch(get_cvar_num("amx_show_activity"))
281 {
282 case 2: ColorChat(id, "!gADMIN !y%s: give !t%s %i !gXP", admin_name, player_name, xpamount);
283 case 1: ColorChat(id, "!gADMIN: !ygive !t%s %i !gXP", player_name, xpamount);
284 }
285
286 return PLUGIN_HANDLED;
287}
288
289public cmd_remove_xp(id, level, cid)
290{
291 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
292 {
293 return PLUGIN_HANDLED;
294 }
295
296 new Arg1[64], Target
297 read_argv(1, Arg1, 63)
298 Target = cmd_target(id, Arg1, 0)
299
300 new iXP[32], Value
301 read_argv(2, iXP, 31)
302 Value = str_to_num(iXP)
303
304 if(iXP[0] == '-')
305 {
306 console_print(id, "You can't have a '-' in the value!")
307 return PLUGIN_HANDLED;
308 }
309
310 if(!Target)
311 {
312 console_print(id, "Target not found!")
313 return PLUGIN_HANDLED;
314 }
315
316 if(Value > PlayerXp[Target])
317 {
318 console_print(id, "You can't remove more than %d!", PlayerXp[Target])
319 return PLUGIN_HANDLED;
320 }
321
322 if(Value < 1)
323 {
324 console_print(id, "You can't remove 0!")
325 return PLUGIN_HANDLED;
326 }
327
328 new AdminName[32]
329 get_user_name(id, AdminName, 31)
330
331 new TargetName[32]
332 get_user_name(Target, TargetName, 31)
333
334 PlayerXp[Target] = PlayerXp[Target] - Value
335 check_level(Target)
336
337 ColorChat(Target, "/gADMIN: /ctr%s /yhas removed %d of your XP", AdminName, Value)
338
339 return PLUGIN_HANDLED;
340}
341
342public LoadConnected()
343{
344 gCanLoad = 1;
345 gCanSave = 1;
346 load_powers();
347
348 for(new i=1; i <= 32; i++) {
349 if(is_user_connected(i)) {
350 LoadLevel(i);
351 }
352 }
353 log_amx("Uzkrove levelius!");
354}
355
356public client_putinserver(id)
357{
358 gStatsLoaded[id] = false;
359 PlayerPrestige[id] = 0;
360 PlayerLevel[id] = 0;
361 PlayerXp[id] = 0;
362
363 g_remember_selection[id] = MAX_PISTOLS_MENU2;
364 g_remember_selection_pistol[id] = 0;
365
366 g_kills[id] = 0;
367 g_Menu[id] = 0;
368 g_Pasir[id] = 0;
369
370 if(gCanLoad) { set_task(0.5, "LoadLevel", id); }
371 set_task(0.1, "set_xp_count", id);
372}
373
374public client_disconnect(id)
375{
376 if(get_pcvar_num(save_on) && gCanSave) { SaveLevel(id); }
377
378 PlayerXp[id] = 0;
379 PlayerLevel[id] = 0;
380 PlayerPrestige[id] = 0;
381
382 remove_task( TASK_SHOW_LEVEL + id );
383}
384
385public set_xp_count(id)
386{
387 if(get_pcvar_num(enable_admin_xp) && get_user_flags(id) & ADMIN_EXTRA) {
388 g_give_xp[id] = get_pcvar_num(xp_kill)+get_pcvar_num(admin_xp);
389 }
390 else { g_give_xp[id] = get_pcvar_num(xp_kill); }
391}
392public cmdPrs(id)
393{
394 if(get_pcvar_num(cvar_prestige_auto))
395 return PLUGIN_HANDLED;
396
397 new menu = menu_create("\y[\rGunXp\y]\w:\yBuy Prestige", "PrsHandle");
398 new call = menu_makecallback("Call_Back");
399
400 menu_additem(menu, "1 Prestige - \r 150 000 Xp", _, 0, PlayerXp[id] < 150000 ? call : -1);
401 menu_additem(menu, "3 Prestige - \r 400 000 Xp", _, 0, PlayerXp[id] < 400000 ? call : -1);
402 menu_additem(menu, "5 Prestige - \r 650 000 Xp", _, 0, PlayerXp[id] < 650000 ? call : -1);
403 menu_additem(menu, "10 Prestige - \r 110 0000 Xp", _, 0, PlayerXp[id] < 1100000 ? call : -1);
404
405 menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
406 menu_display(id, menu, 0);
407
408 return PLUGIN_HANDLED;
409}
410
411public PrsHandle(id, menu, item)
412{
413 if(item == MENU_EXIT)
414 {
415 menu_destroy(menu);
416 return PLUGIN_HANDLED;
417 }
418
419 switch(item)
420 {
421 case 0:
422 {
423 PlayerXp[id] -= 150000;
424 PlayerPrestige[id] += 1;
425
426 SaveLevel(id);
427 print_colorchat(id, "!g[GunXP] !yYou bought !g1 !tPrestige!y!");
428 }
429 case 1:
430 {
431 PlayerXp[id] -= 400000;
432 PlayerPrestige[id] += 3;
433
434 SaveLevel(id);
435 print_colorchat(id, "!g[GunXP] !yYou bought !g3 !tPrestige!y!");
436 }
437 case 2:
438 {
439 PlayerXp[id] -= 650000;
440 PlayerPrestige[id] += 5;
441
442 SaveLevel(id);
443 print_colorchat(id, "!g[GunXP] !yYou bought !g5 !tPrestige!y!");
444 }
445 case 3:
446 {
447 PlayerXp[id] -= 1100000;
448 PlayerPrestige[id] += 10;
449
450 SaveLevel(id);
451 print_colorchat(id, "!g[GunXP] !yYou bought !g10 !tPrestige!y!");
452 }
453 }
454 return PLUGIN_HANDLED;
455}
456
457public cmdSave(id)
458{
459 new menu = menu_create("Choose save type:", "SaveHandle");
460 new call = menu_makecallback("Call_Back");
461
462 menu_additem(menu, "Steam ID", _, 0, gPlayerSave[id] == 1 ? call : -1);
463 menu_additem(menu, "Name", _, 0, gPlayerSave[id] == 2 ? call : -1);
464 menu_additem(menu, "IP", _, 0, gPlayerSave[id] == 3 ? call : -1);
465
466 menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
467 menu_display(id, menu, 0);
468
469 return PLUGIN_HANDLED;
470}
471
472public SaveHandle(id, menu, item)
473{
474 if(item == MENU_EXIT)
475 {
476 menu_destroy(menu);
477 return PLUGIN_HANDLED;
478 }
479
480 switch(item)
481 {
482 case 0:
483 {
484 SavePowers(id)
485 static szQuery[256];
486 formatex( szQuery, 255, "UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_authid_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
487 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
488 set_player_id(id, 1);
489 log_to_file(g_logfile, "[SAVE] UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_authid_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
490
491 print_colorchat(id, "!g[GunXP] !yFrom now your LEVEL will be saved on !tSTEAMID!");
492
493 SetPowersLoaded(id, false)
494 LoadPowers(id)
495 }
496 case 1:
497 {
498 SavePowers(id)
499 static szQuery[256];
500 formatex( szQuery, 255, "UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_name_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
501 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
502 set_player_id(id, 2);
503 log_to_file(g_logfile, "[SAVE] UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_name_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
504
505 print_colorchat(id, "!g[GunXP] !yFrom now your LEVEL will be saved on !tNAME!");
506
507 SetPowersLoaded(id, false)
508 LoadPowers(id)
509 }
510 case 2:
511 {
512 SavePowers(id)
513 static szQuery[256];
514 formatex( szQuery, 255, "UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_ip_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
515 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
516 set_player_id(id, 3);
517 log_to_file(g_logfile, "[SAVE] UPDATE `%s` SET `player_id` = '%s', `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, get_user_ip_ex(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
518
519 print_colorchat(id, "!g[GunXP] !yFrom now your LEVEL will be saved on !tIP!");
520
521 SetPowersLoaded(id, false)
522 LoadPowers(id)
523 }
524 }
525 return PLUGIN_HANDLED;
526}
527
528public Call_Back(id, menu, item)
529 return ITEM_DISABLED;
530
531public guns_main_menu(id)
532{
533 if(!g_Pasir[id])
534 {
535 set_task(0.1, "autoguns", id)
536 return PLUGIN_HANDLED;
537 }
538 else
539 {
540 print_colorchat(id, "^x04[GunXP]^x01 You've got weapons!");
541 }
542 return PLUGIN_HANDLED;
543}
544
545public off_main_menu(id)
546{
547 if(g_Menu[id])
548 {
549 g_Menu[id] = 0;
550 print_colorchat(id, "^x04[GunXP]^x01 Auto gun is off!");
551
552 if(!g_Pasir[id])
553 set_task(0.1, "autoguns", id);
554 }
555 return PLUGIN_HANDLED;
556}
557
558public Message_StatusIcon(iMsgId, MSG_DEST, id)
559{
560 if( !get_pcvar_num(p_Enabled) )
561 return PLUGIN_HANDLED;
562
563 static szIcon[5]
564 get_msg_arg_string(2, szIcon, 4)
565 if( szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z' )
566 {
567 if( get_msg_arg_int(1))
568 {
569 fm_cs_set_user_nobuy(id)
570 return PLUGIN_HANDLED;
571 }
572 }
573
574 return PLUGIN_CONTINUE;
575}
576public fwd_Touch(ent, id)
577{
578 if (!is_user_alive(id) || !pev_valid( ent ) )
579 return FMRES_IGNORED;
580
581 static szEntModel[32];
582 pev( ent , pev_model , szEntModel , 31 );
583
584 for (new level_equip_id = PlayerLevel[id] + 1; level_equip_id < MAXLEVEL; level_equip_id++)
585 {
586 if ( equali( szEntModel , WEAPONMDL[level_equip_id] ) )
587 {
588 return FMRES_SUPERCEDE;
589 }
590 }
591
592 return FMRES_IGNORED;
593}
594public guns(id)
595{
596 if(ITEM[id] )
597 {
598 client_printcolor(id, "/g[GunXp] /yYou have already selected weapons!");
599 return PLUGIN_HANDLED;
600 }
601 else
602 {
603 if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT )
604 {
605 show_main_menu_level(id);
606 ITEM[id] = true;
607 }
608 }
609 return PLUGIN_HANDLED;
610}
611public fwd_PlayerSpawn(id)
612{
613 if(!get_pcvar_num(p_Enabled) || !is_user_alive(id) )
614 return;
615
616 show_menu(id, 0, "^n", 1);
617
618 if(get_pcvar_num(show_level_text)) { remove_task( TASK_SHOW_LEVEL + id ); set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id); }
619
620 #if defined ZOMBIE_SWARM
621 if(!get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT) { StripPlayerWeapons(id); set_task(0.1, "autoguns", id); }
622 if(get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT) { set_task(0.3, "give_weapon", id); }
623 if(get_pcvar_num(cvar_bot_weapons) && is_user_bot(id) && cs_get_user_team(id) == CS_TEAM_CT) { set_task(0.3, "give_weapon", id); }
624 #endif
625
626 #if defined NORMAL_MOD
627 if(!get_pcvar_num(level_style)) { StripPlayerWeapons(id); set_task(0.1, "autoguns", id); }
628 if(get_pcvar_num(level_style)) { set_task(0.3, "give_weapon", id); }
629 if(get_pcvar_num(cvar_bot_weapons) && is_user_bot(id)) { set_task(0.3, "give_weapon", id); }
630 #endif
631
632 #if defined ZOMBIE_PLAGUE
633 if(!get_pcvar_num(level_style)) { StripPlayerWeapons(id); set_task(0.3, "autoguns", id); }
634 if(get_pcvar_num(level_style)) { set_task(0.3, "give_weapon", id); }
635 if(get_pcvar_num(cvar_bot_weapons) && is_user_bot(id) && cs_get_user_team(id) == CS_TEAM_CT) { set_task(0.3, "give_weapon", id); }
636 #endif
637
638
639}
640
641#if defined ZOMBIE_PLAGUE
642public zp_user_humanized_post(id, survivor)
643{
644 if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) || survivor)
645 return;
646
647 if(!get_pcvar_num(level_style))
648 {
649 StripPlayerWeapons(id);
650
651 set_task(0.3, "autoguns", id)
652 }
653}
654#endif
655
656public autoguns(id)
657{
658 if(!is_user_connected(id))
659 return;
660
661 #if defined ZOMBIE_PLAGUE
662 if(zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T)
663 return;
664 #endif
665
666 #if defined ZOMBIE_SWARM
667 if(cs_get_user_team(id) == CS_TEAM_T)
668 return;
669 #endif
670
671 if(!g_Menu[id])
672 {
673 show_main_menu_level(id);
674 client_printcolor(id, "%L", LANG_SERVER, "GUNS_COMMAND");
675 }
676 else
677 {
678 if ( PlayerLevel[id] > MAX_PISTOLS_MENU2 - 1 )
679 {
680 give_weapon_menu(id, g_remember_selection[id], 1, 1);
681 give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
682 }
683 else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
684 {
685 give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
686 }
687 client_printcolor(id, "%L", LANG_SERVER, "OFF_COMMAND");
688 }
689}
690
691public FwdClientKill( const id )
692{
693 if( !is_user_alive(id) )
694 return FMRES_IGNORED;
695
696 g_kills[id] = 0
697
698 return FMRES_IGNORED;
699}
700
701#if defined ZOMBIE_PLAGUE
702public zp_user_infected_post(g_victim, g_attacker)
703{
704 if(!get_pcvar_num(p_Enabled))
705 return;
706
707 if(!(1 <= g_attacker <= 32))
708 return;
709
710 if(!(1 <= g_victim <= 32))
711 return;
712
713 g_kills[g_victim] = 0;
714
715 if(get_pcvar_num(enable_admin_xp) && get_user_flags(g_victim) & ADMIN_EXTRA)
716 g_give_xp[g_victim] = get_pcvar_num(xp_kill)+get_pcvar_num(admin_xp);
717 else
718 g_give_xp[g_victim] = get_pcvar_num(xp_kill);
719
720 if(get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
721 g_give_xp[g_attacker] = get_pcvar_num(xp_kill)+get_pcvar_num(admin_xp);
722 else
723 g_give_xp[g_attacker] = get_pcvar_num(xp_kill);
724
725 new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
726 new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
727 new counted_mega = get_pcvar_num(xp_kill) + get_pcvar_num(xp_mega)
728
729 if((1 <= g_attacker <= g_maxplayers))
730 {
731 if(g_victim != g_attacker)
732 {
733 g_kills[g_attacker]++;
734 if(PlayerLevel[g_attacker] < MAXLEVEL)
735 {
736 if(PlayerXp[g_attacker] < MAXXP)
737 {
738 if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
739 {
740 PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
741 }
742
743 if(get_pcvar_num(enable_steam_xp))
744 {
745 new protocol = get_pcvar_num(dproto_protocol);
746 new provider_num = get_pcvar_num(dproto_provider);
747
748 if(protocol == 48 && provider_num == 2)
749 {
750 /*new float:add_xp = (get_user_flags(g_attacker) & ADMIN_EXTRA) ? (get_pcvar_num(admin_xp)+get_pcvar_num(xp_kill))*get_pcvar_float(steam_xp) : get_pcvar_num(xp_kill)*get_pcvar_float(steam_xp);
751
752 PlayerXp[g_attacker] += floatround(add_xp);*/
753 }
754 }
755
756 if(get_bonus_xp(g_attacker))
757 {
758 PlayerXp[g_attacker] += get_bonus_xp(g_attacker);
759 set_hudmessage(255, 40, 0, 0.50, 0.35, 1, 2.0, 2.0)
760 show_hudmessage(g_attacker, "+%d bonus xp", get_bonus_xp(g_attacker));
761 }
762
763 if ((get_pcvar_num(triple_kills) <= g_kills[g_attacker]) && (g_kills[g_attacker] < get_pcvar_num(ultra_kills)) && get_pcvar_num(enable_triple))
764 {
765 PlayerXp[g_attacker] += counted_triple
766
767 set_hudmessage(0, 40, 255, 0.50, 0.33, 1, 2.0, 2.0)
768 show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
769
770 g_give_xp[g_attacker] += counted_triple;
771 }
772 else if ((get_pcvar_num(ultra_kills) <= g_kills[g_attacker]) && (g_kills[g_attacker] < get_pcvar_num(mega_kills)) && get_pcvar_num(enable_ultra))
773 {
774 PlayerXp[g_attacker] += counted_ultra
775
776 set_hudmessage(255, 30, 0, 0.50, 0.33, 1, 2.0, 2.0)
777 show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
778
779 g_give_xp[g_attacker] += counted_ultra;
780 }
781 else if (get_pcvar_num(mega_kills) <= g_kills[g_attacker] && get_pcvar_num(enable_mega))
782 {
783 PlayerXp[g_attacker] += counted_mega
784
785 set_hudmessage(50, 0, 255, 0.50, 0.33, 1, 2.0, 2.0)
786 show_hudmessage(g_attacker, "%L", LANG_SERVER, "MEGA_XP", counted_mega + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
787
788 g_give_xp[g_attacker] += counted_mega;
789 }
790 else
791 {
792 PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
793
794 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
795 show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
796 }
797 check_level(g_attacker)
798 }
799 }
800 }
801 }
802}
803#endif
804
805
806public event_deathmsg()
807{
808 if( !get_pcvar_num(p_Enabled) )
809 return;
810
811 new g_attacker = read_data(1);
812 new g_victim = read_data(2);
813
814 if(!(1 <= g_attacker <= 32))
815 return;
816
817 if(!(1 <= g_victim <= 32))
818 return;
819
820 g_kills[g_victim] = 0;
821
822 if(get_pcvar_num(enable_admin_xp) && get_user_flags(g_victim) & ADMIN_EXTRA)
823 g_give_xp[g_victim] = get_pcvar_num(xp_kill)+get_pcvar_num(admin_xp);
824 else
825 g_give_xp[g_victim] = get_pcvar_num(xp_kill);
826
827 if(get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
828 g_give_xp[g_attacker] = get_pcvar_num(xp_kill)+get_pcvar_num(admin_xp);
829 else
830 g_give_xp[g_attacker] = get_pcvar_num(xp_kill);
831
832 new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
833 new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
834 new counted_mega = get_pcvar_num(xp_kill) + get_pcvar_num(xp_mega)
835
836 if((1 <= g_attacker <= g_maxplayers))
837 {
838 if(g_victim != g_attacker)
839 {
840 g_kills[g_attacker]++;
841 if(PlayerLevel[g_attacker] < MAXLEVEL)
842 {
843 if(PlayerXp[g_attacker] < MAXXP)
844 {
845 if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
846 {
847 PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
848 }
849
850 if(get_pcvar_num(enable_steam_xp))
851 {
852 new protocol = get_pcvar_num(dproto_protocol);
853 new provider_num = get_pcvar_num(dproto_provider);
854
855 if(protocol == 48 && provider_num == 2)
856 {
857 /*new float:add_xp = (get_user_flags(g_attacker) & ADMIN_EXTRA) ? (get_pcvar_num(admin_xp)+get_pcvar_num(xp_kill))*get_pcvar_float(steam_xp) : get_pcvar_num(xp_kill)*get_pcvar_float(steam_xp);
858
859 PlayerXp[g_attacker] += floatround(add_xp);*/
860 }
861 }
862
863 if(get_bonus_xp(g_attacker))
864 {
865 PlayerXp[g_attacker] += get_bonus_xp(g_attacker);
866 }
867
868 if ((get_pcvar_num(triple_kills) <= g_kills[g_attacker]) && (g_kills[g_attacker] < get_pcvar_num(ultra_kills)) && get_pcvar_num(enable_triple))
869 {
870 PlayerXp[g_attacker] += counted_triple
871
872 set_hudmessage(0, 40, 255, 0.50, 0.33, 1, 2.0, 2.0)
873 show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
874
875 g_give_xp[g_attacker] += counted_triple;
876 }
877 else if ((get_pcvar_num(ultra_kills) <= g_kills[g_attacker]) && (g_kills[g_attacker] < get_pcvar_num(mega_kills)) && get_pcvar_num(enable_ultra))
878 {
879 PlayerXp[g_attacker] += counted_ultra
880
881 set_hudmessage(255, 30, 0, 0.50, 0.33, 1, 2.0, 2.0)
882 show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
883
884 g_give_xp[g_attacker] += counted_ultra;
885 }
886 else if (get_pcvar_num(mega_kills) <= g_kills[g_attacker] && get_pcvar_num(enable_mega))
887 {
888 PlayerXp[g_attacker] += counted_mega
889
890 set_hudmessage(50, 0, 255, 0.50, 0.33, 1, 2.0, 2.0)
891 show_hudmessage(g_attacker, "%L", LANG_SERVER, "MEGA_XP", counted_mega + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
892
893 g_give_xp[g_attacker] += counted_mega;
894 }
895 else
896 {
897 PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
898
899 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
900 show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
901 }
902 check_level(g_attacker)
903 }
904 }
905 }
906 }
907}
908
909public Event_StatusValue(id)
910{
911 new target = read_data(2)
912 if(target != id && target != 0 && get_pcvar_num(p_Enabled))
913 {
914 set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2)
915 ShowSyncHudMsg(id, g_msgHudSync1, "%L", LANG_SERVER, "LEVEL_TEXT", get_user_name_ex(target), PlayerLevel[target], PlayerPrestige[target], RANKLEVELS[PlayerLevel[target]])
916 }
917}
918
919public task_show_level(task)
920{
921 new id = task - TASK_SHOW_LEVEL
922
923 if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
924 return;
925 static need;
926 if(g_give_xp[id])
927 need = floatround(((LEVELS[PlayerLevel[id]] - PlayerXp[id])/g_give_xp[id])*1.0) + 1;
928 else
929 need = floatround((LEVELS[PlayerLevel[id]] - PlayerXp[id])*1.0) + 1;
930 set_hudmessage(0, 255, 255, 0.02, 0.0, 0, 0.0, 0.3, 0.0, 0.0)
931 ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], need, PlayerXp[id], LEVELS[PlayerLevel[id]], PlayerPrestige[id], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
932
933 set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
934}
935public showlevel(id)
936{
937 if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(show_level_text) )
938 return PLUGIN_HANDLED;
939
940 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
941 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], PlayerPrestige[id], RANKLEVELS[PlayerLevel[id]]);
942
943 return PLUGIN_HANDLED;
944}
945
946public descriptionx(id)
947{
948 new szMotd[2048], szTitle[64], iPos = 0
949 format(szTitle, 63, "Info")
950 iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
951 iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
952 iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
953
954 iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
955
956 show_motd(id, szMotd, szTitle)
957 return PLUGIN_HANDLED;
958}
959
960public check_level(id)
961{
962 if(PlayerXp[id] >= MAXXP && get_pcvar_num(cvar_prestige_auto))
963 {
964 PlayerLevel[id] = 0;
965 PlayerXp[id] = 0;
966 PlayerPrestige[id] += 1;
967 g_Menu[id] = 0;
968
969 emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
970
971 client_printcolor(0, "%L", LANG_SERVER, "PRESTIGE_UP", get_user_name_ex(id), PlayerPrestige[id]);
972 SaveLevel(id);
973 }
974
975 if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
976 {
977 while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
978 {
979 PlayerLevel[id]++;
980
981 if(is_user_alive(id))
982 {
983 if ( get_pcvar_num(level_style) )
984 {
985 give_weapon(id);
986 }
987
988 if(g_remember_selection[id] > GUN_LEVELS[PlayerLevel[id]] && g_remember_selection[id] > GIVE_WEAPO_MENU)
989 {
990 g_remember_selection[id] = 0;
991 g_remember_selection_pistol[id] = 0;
992 }
993
994 g_Menu[id] = 0;
995 new p_origin[3];
996 get_user_origin(id, p_origin, 0);
997
998 set_sprite(p_origin, levelspr, 30)
999 }
1000 emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
1001
1002 client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", get_user_name_ex(id), PlayerLevel[id]);
1003
1004 if(PlayerLevel[id] == 23)
1005 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_UP_SELF");
1006 }
1007 }
1008
1009 if(!get_pcvar_num(save_on) && gCanSave) { SaveLevel(id); }
1010}
1011
1012// Main Menu Info
1013public show_main_menu_info(id)
1014{
1015 if ( !get_pcvar_num(p_Enabled) )
1016 return;
1017
1018 static menu[510], len;
1019 len = 0;
1020
1021 new xKeys3 = MENU_KEY_0|MENU_KEY_1;
1022
1023 // Title
1024 len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
1025
1026 len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
1027 if ( get_pcvar_num(show_rank) )
1028 {
1029 xKeys3 |= (MENU_KEY_2)
1030
1031 len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
1032 }
1033 else
1034 {
1035 len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
1036 }
1037
1038 if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
1039 {
1040 xKeys3 |= (MENU_KEY_3)
1041
1042 len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "UNLOCKS_MENU")
1043 }
1044
1045 if(find_plugin_byfile("gunxpmod_powers.amxx") != INVALID_PLUGIN_ID)
1046 {
1047 xKeys3 |= (MENU_KEY_4)
1048
1049 len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "PRESTIGE_SHOP")
1050 }
1051
1052 if(find_plugin_byfile("Priv_menu.amxx") != INVALID_PLUGIN_ID)
1053 {
1054 xKeys3 |= (MENU_KEY_5)
1055
1056 len += formatex(menu[len], sizeof menu - 1 - len, "\r5. \w%L^n", id, "PRIV_MENU")
1057 }
1058
1059 if(find_plugin_byfile("shop.amxx") != INVALID_PLUGIN_ID)
1060 {
1061 xKeys3 |= (MENU_KEY_6)
1062
1063 len += formatex(menu[len], sizeof menu - 1 - len, "\r6. \w%L^n", id, "SHOP_MENU")
1064 }
1065
1066 len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
1067
1068 show_menu(id, xKeys3, menu, -1, "Main Menu")
1069}
1070public main_menu_info(id, key)
1071{
1072 switch (key)
1073 {
1074 case 0:
1075 {
1076 show_main_menu_info(id)
1077
1078 descriptionx(id)
1079 }
1080 case 1:
1081 {
1082 showtop20(id)
1083
1084 show_main_menu_info(id)
1085 }
1086 case 2:
1087 {
1088 show_main_menu_info(id)
1089
1090 if(callfunc_begin( "menus", "gunxpmod_shop") == 1)
1091 print_colorchat(id, "!g[GunXP] !yYou are now in Unlocks Menu!")
1092 {
1093 callfunc_push_int( id );
1094 callfunc_end();
1095 }
1096 }
1097 case 3:
1098 {
1099 show_main_menu_info(id)
1100
1101 if(callfunc_begin( "cmdPower", "gunxpmod_powers") == 1)
1102 print_colorchat(id, "!g[GunXP] !yYou are now in Powers Menu!")
1103 {
1104 callfunc_push_int( id );
1105 callfunc_end();
1106 }
1107 }
1108 case 4:
1109 {
1110 show_main_menu_info(id)
1111
1112 if(callfunc_begin( "cmd_menu", "Priv_menu.amxx") == 1)
1113 print_colorchat(id, "!g[GunXP] !yYou are now in Privilege Menu!")
1114 {
1115 callfunc_push_int( id );
1116 callfunc_end();
1117 }
1118 }
1119 case 5:
1120 {
1121 show_main_menu_info(id)
1122
1123 if(callfunc_begin( "cmd_Shop", "shop.amxx") == 1)
1124 print_colorchat(id, "!g[GunXP] !yYou are now in Shop Menu!")
1125 {
1126 callfunc_push_int( id );
1127 callfunc_end();
1128 }
1129 }
1130 case 9:
1131 {
1132 return PLUGIN_HANDLED;
1133 }
1134}
1135
1136return PLUGIN_HANDLED;
1137}
1138// Main Menu Level Style
1139public show_main_menu_level(id)
1140{
1141if ( !is_user_alive(id) )
1142 return;
1143
1144 new szInfo[60], szChooseT[40], szLastG[40], szMenuG[40];
1145 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
1146
1147 new menu = menu_create(szInfo , "main_menu_level");
1148
1149 formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
1150 menu_additem(menu, szChooseT, "1", 0);
1151
1152 formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
1153 menu_additem(menu, szLastG, "2", 0);
1154
1155 if(g_Menu[id])
1156 {
1157 formatex(szMenuG, charsmax(szMenuG), "%L", LANG_SERVER, "MENU_GUNS_ON");
1158 }
1159 else
1160 {
1161 formatex(szMenuG, charsmax(szMenuG), "%L", LANG_SERVER, "MENU_GUNS_OFF");
1162 }
1163 menu_additem(menu, szMenuG, "3", 0);
1164
1165 new szExit[15];
1166 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
1167
1168 menu_setprop(menu, MPROP_EXITNAME, szExit);
1169
1170 menu_display(id , menu , 0);
1171}
1172public main_menu_level(id , menu , item)
1173{
1174 if ( !is_user_alive(id) )
1175 {
1176 return PLUGIN_HANDLED;
1177 }
1178
1179 #if defined ZOMBIE_PLAGUE
1180 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
1181 return PLUGIN_HANDLED;
1182 #endif
1183
1184 if(item == MENU_EXIT)
1185 {
1186 menu_destroy(menu);
1187 return PLUGIN_HANDLED;
1188 }
1189 new data[6], iName[64];
1190 new access, callback;
1191 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
1192
1193 new item_id = str_to_num(data);
1194
1195 switch (item_id)
1196 {
1197 case 1: // show pistols
1198 {
1199 show_menu_level_pistol(id);
1200 }
1201 case 2: // last weapons
1202 {
1203 if ( PlayerLevel[id] > MAX_PISTOLS_MENU2 - 1 )
1204 {
1205 give_weapon_menu(id, g_remember_selection[id], 1, 1);
1206 give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
1207 }
1208 else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
1209 {
1210 give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
1211 }
1212 }
1213 case 3:
1214 {
1215 if(!g_Menu[id])
1216 {
1217 g_Menu[id] = 1;
1218 show_main_menu_level(id);
1219 }
1220 else
1221 {
1222 g_Menu[id] = 0;
1223 show_main_menu_level(id);
1224 }
1225 }
1226 }
1227
1228 menu_destroy(menu);
1229 return PLUGIN_HANDLED;
1230}
1231
1232// Menu Level Style Pistols
1233public show_menu_level_pistol(id)
1234{
1235 if ( !is_user_alive(id) )
1236 return;
1237
1238 new szInfo[60];
1239 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
1240
1241 new menu = menu_create(szInfo , "pistol_menu");
1242
1243 for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
1244 {
1245 new szItems[60], szTempid[32];
1246
1247 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
1248 {
1249 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
1250 num_to_str(item_id, szTempid, charsmax(szTempid) );
1251 menu_additem(menu, szItems, szTempid, 0);
1252 }
1253 else if ( GUN_LEVELS[item_id] <= GIVE_WEAPO_MENU && PlayerLevel[id] < GUN_LEVELS[item_id])
1254 {
1255 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU_GIVE", RANK[item_id], GUN_LEVELS[item_id] )
1256 num_to_str(item_id, szTempid, charsmax(szTempid) );
1257 menu_additem(menu, szItems, szTempid, 0);
1258 }
1259 else if(GUN_LEVELS[item_id] > GIVE_WEAPO_MENU && PlayerLevel[id] <= GUN_LEVELS[item_id])
1260 {
1261 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
1262 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
1263 }
1264
1265 }
1266
1267 new szNext[15], szBack[15], szExit[15];
1268 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
1269 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
1270 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
1271
1272 menu_setprop(menu, MPROP_BACKNAME, szBack)
1273 menu_setprop(menu, MPROP_NEXTNAME, szNext)
1274 menu_setprop(menu, MPROP_EXITNAME, szExit)
1275
1276 menu_display(id , menu , 0);
1277}
1278
1279public pistol_menu(id , menu , item)
1280{
1281 if ( !is_user_alive(id) )
1282 {
1283 return PLUGIN_HANDLED;
1284 }
1285
1286 #if defined ZOMBIE_PLAGUE
1287 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
1288 return PLUGIN_HANDLED;
1289 #endif
1290
1291 if(item == MENU_EXIT)
1292 {
1293 menu_destroy(menu);
1294 return PLUGIN_HANDLED;
1295 }
1296 new data[6], iName[64];
1297 new access, callback;
1298 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
1299
1300 new item_id = str_to_num(data);
1301
1302 g_remember_selection_pistol[id] = item_id;
1303
1304 give_weapon_menu(id, item_id, 1, 1);
1305
1306 if(PlayerLevel[id] < MAX_PISTOLS_MENU - 1)
1307 g_Pasir[id] = 1;
1308
1309 if((PlayerLevel[id] > MAX_PISTOLS_MENU - 1) || GIVE_WEAPO_MENU > MAX_PISTOLS_MENU - 1)
1310 show_menu_level(id);
1311
1312 menu_destroy(menu);
1313 return PLUGIN_HANDLED;
1314}
1315
1316// Menu Level Style Primary
1317public show_menu_level(id)
1318{
1319 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU2 )
1320 return;
1321
1322 new szInfo[100];
1323 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
1324
1325 new menu = menu_create(szInfo , "level_menu");
1326
1327 for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
1328 {
1329 new szItems[512], szTempid[32];
1330 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
1331 {
1332 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
1333 num_to_str(item_id, szTempid, charsmax(szTempid) );
1334 menu_additem(menu, szItems, szTempid, 0);
1335 }
1336 else if ( GUN_LEVELS[item_id] <= GIVE_WEAPO_MENU && PlayerLevel[id] < GUN_LEVELS[item_id])
1337 {
1338 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU_GIVE", RANK[item_id], GUN_LEVELS[item_id] )
1339 num_to_str(item_id, szTempid, charsmax(szTempid) );
1340 menu_additem(menu, szItems, szTempid, 0);
1341 }
1342 else if(GUN_LEVELS[item_id] > GIVE_WEAPO_MENU && PlayerLevel[id] < GUN_LEVELS[item_id])
1343 {
1344 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
1345 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
1346 }
1347 }
1348
1349 new szNext[15], szBack[15], szExit[15];
1350 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
1351 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
1352 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
1353
1354 menu_setprop(menu, MPROP_BACKNAME, szBack)
1355 menu_setprop(menu, MPROP_NEXTNAME, szNext)
1356 menu_setprop(menu, MPROP_EXITNAME, szExit)
1357
1358 menu_display(id , menu , 0);
1359}
1360
1361public level_menu(id , menu , item)
1362{
1363 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU2 )
1364 return PLUGIN_HANDLED;
1365
1366 #if defined ZOMBIE_PLAGUE
1367 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
1368 return PLUGIN_HANDLED;
1369 #endif
1370
1371 if(item == MENU_EXIT)
1372 {
1373 menu_destroy(menu);
1374 return PLUGIN_HANDLED;
1375 }
1376 new data[6], iName[64];
1377 new access, callback;
1378 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
1379
1380 new item_id = str_to_num(data);
1381
1382 g_remember_selection[id] = item_id;
1383
1384 give_weapon_menu(id, item_id, 0, 0);
1385
1386 g_Pasir[id] = 1;
1387
1388 menu_destroy(menu);
1389 return PLUGIN_HANDLED;
1390}
1391
1392public CallbackMenu(id, menu, item)
1393{
1394 return ITEM_DISABLED;
1395}
1396
1397// Selected by menu or remember selection and give item
1398public give_weapon_menu(id, selection, strip, givegren)
1399{
1400 #if defined ZOMBIE_SWARM
1401 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
1402 {
1403 if ( strip )
1404 {
1405 StripPlayerWeapons(id);
1406 }
1407
1408 if ( get_pcvar_num(enable_grenades) && givegren )
1409 {
1410 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1411 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1412 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1413 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1414 }
1415
1416 give_item(id, WEAPONCONST[selection]);
1417
1418 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
1419 g_Pasir[id] = 1;
1420 }
1421 #endif
1422
1423 #if defined NORMAL_MOD
1424 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
1425 {
1426 if ( strip )
1427 {
1428 StripPlayerWeapons(id);
1429 }
1430
1431 if ( get_pcvar_num(enable_grenades) && givegren )
1432 {
1433 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1434 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1435 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1436 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1437 }
1438
1439 give_item(id, WEAPONCONST[selection]);
1440
1441 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
1442 g_Pasir[id] = 1;
1443 }
1444 #endif
1445
1446 #if defined ZOMBIE_PLAGUE
1447 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
1448 {
1449 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T)
1450 return;
1451
1452 if ( strip )
1453 {
1454 StripPlayerWeapons(id);
1455 }
1456
1457 if ( get_pcvar_num(enable_grenades) && givegren )
1458 {
1459 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1460 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1461 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1462 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1463 }
1464
1465 give_item(id, WEAPONCONST[selection]);
1466
1467 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
1468 g_Pasir[id] = 1;
1469 }
1470 #endif
1471}
1472
1473public give_weapon(id)
1474{
1475 #if defined ZOMBIE_SWARM
1476 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
1477 {
1478 StripPlayerWeapons(id);
1479
1480 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
1481 {
1482 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1483 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1484 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1485 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1486 }
1487
1488 give_item(id, WEAPONCONST[PlayerLevel[id]]);
1489
1490 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
1491 }
1492 #endif
1493
1494 #if defined NORMAL_MOD
1495 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
1496 {
1497 StripPlayerWeapons(id);
1498
1499 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
1500 {
1501 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1502 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1503 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1504 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1505 }
1506
1507 give_item(id, WEAPONCONST[PlayerLevel[id]]);
1508
1509 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
1510 }
1511 #endif
1512
1513 #if defined ZOMBIE_PLAGUE
1514 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
1515 {
1516 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T)
1517 return;
1518
1519 StripPlayerWeapons(id);
1520
1521 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
1522 {
1523 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1524 give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
1525 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
1526 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
1527 }
1528
1529 give_item(id, WEAPONCONST[PlayerLevel[id]]);
1530
1531 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
1532 }
1533 #endif
1534}
1535
1536public set_sprite(p_origin[3], sprite, radius)
1537{
1538 // Explosion
1539 message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
1540 write_byte(TE_EXPLOSION)
1541 write_coord(p_origin[0])
1542 write_coord(p_origin[1])
1543 write_coord(p_origin[2])
1544 write_short(sprite)
1545 write_byte(radius)
1546 write_byte(15)
1547 write_byte(4)
1548 message_end()
1549}
1550//Shows Top 20
1551public showtop20(id)
1552{
1553 if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
1554 return;
1555
1556 static Sort[33][2];
1557 new players[32],num,count,index;
1558 get_players(players,num);
1559
1560 for(new i = 0; i < num; i++)
1561 {
1562 index = players[i];
1563 Sort[count][0] = index;
1564 Sort[count][1] = PlayerXp[index];
1565 count++;
1566 }
1567
1568 SortCustom2D(Sort,count,"CompareXp");
1569 new motd[1501],iLen;
1570 iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
1571 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
1572
1573 new y = clamp(count,0,20);
1574 new kindex;
1575
1576 for(new x = 0; x < y; x++)
1577 {
1578 kindex = Sort[x][0];
1579
1580 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, get_user_name_ex(kindex), Sort[x][1]);
1581 }
1582 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
1583 show_motd(id,motd, "Top 20");
1584}
1585
1586public CompareXp(elem1[], elem2[])
1587{
1588 if(elem1[1] > elem2[1])
1589 return -1;
1590 else if(elem1[1] < elem2[1])
1591 return 1;
1592
1593 return 0;
1594}
1595// Command to set player Level
1596public cmd_give_level(id, level, cid)
1597{
1598 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
1599 {
1600 return PLUGIN_HANDLED;
1601 }
1602
1603 new Arg1[64], Target
1604 read_argv(1, Arg1, 63)
1605 Target = cmd_target(id, Arg1, 0)
1606
1607 new iLevel[32], Value
1608 read_argv(2, iLevel, 31)
1609 Value = str_to_num(iLevel)
1610
1611 if(iLevel[0] == '-')
1612 {
1613 console_print(id, "You can't have a '-' in the value!")
1614 return PLUGIN_HANDLED;
1615 }
1616
1617 if(!Target)
1618 {
1619 console_print(id, "Target not found!")
1620 return PLUGIN_HANDLED;
1621 }
1622
1623 if(Value > MAXLEVEL-1)
1624 {
1625 console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
1626 return PLUGIN_HANDLED;
1627 }
1628
1629 if(Value < 1)
1630 {
1631 console_print(id, "You can't set less than 1!")
1632 return PLUGIN_HANDLED;
1633 }
1634
1635 PlayerLevel[Target] = Value - 1
1636 PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
1637 check_level(Target)
1638
1639 client_printcolor(Target, "/gADMIN: /ctr%s /yhas set your level to /g%d", get_user_name_ex(id), Value)
1640
1641 return PLUGIN_HANDLED;
1642}
1643
1644// Command to set player Prestige
1645public cmd_give_prestige(id, level, cid)
1646{
1647 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
1648 {
1649 return PLUGIN_HANDLED;
1650 }
1651
1652 new Arg1[64], Target
1653 read_argv(1, Arg1, 63)
1654 Target = cmd_target(id, Arg1, 0)
1655
1656 new iLevel[32], Value
1657 read_argv(2, iLevel, 31)
1658 Value = str_to_num(iLevel)
1659
1660 if(iLevel[0] == '-')
1661 {
1662 console_print(id, "You can't have a '-' in the value!")
1663 return PLUGIN_HANDLED;
1664 }
1665
1666 if(!Target)
1667 {
1668 console_print(id, "Target not found!")
1669 return PLUGIN_HANDLED;
1670 }
1671
1672 if(Value < 0)
1673 {
1674 console_print(id, "You can't set less than 0!")
1675 return PLUGIN_HANDLED;
1676 }
1677
1678 if(Value > 999)
1679 {
1680 console_print(id, "You can't set more than 999!")
1681 return PLUGIN_HANDLED;
1682 }
1683
1684 PlayerPrestige[Target] = Value
1685 check_level(Target)
1686
1687 client_printcolor(Target, "/gADMIN: /ctr%s /yhas set your Prestige to /g%d", get_user_name_ex(id), Value)
1688
1689 return PLUGIN_HANDLED;
1690}
1691
1692// Command to set player XP
1693public cmd_give_xp(id, level, cid)
1694{
1695 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
1696 {
1697 return PLUGIN_HANDLED;
1698 }
1699
1700 new Arg1[64], Target
1701 read_argv(1, Arg1, 63)
1702 Target = cmd_target(id, Arg1, 0)
1703
1704 new iLevel[32], Value
1705 read_argv(2, iLevel, 31)
1706 Value = str_to_num(iLevel)
1707
1708 if(iLevel[0] == '-')
1709 {
1710 console_print(id, "You can't have a '-' in the value!")
1711 return PLUGIN_HANDLED;
1712 }
1713
1714 if(!Target)
1715 {
1716 console_print(id, "Target not found!")
1717 return PLUGIN_HANDLED;
1718 }
1719
1720 if(Value < 0)
1721 {
1722 console_print(id, "You can't set less than 0!")
1723 return PLUGIN_HANDLED;
1724 }
1725
1726 if(Value > MAXXP)
1727 {
1728 console_print(id, "You can't set more than 150000!")
1729 return PLUGIN_HANDLED;
1730 }
1731
1732 PlayerXp[Target] = Value - 1
1733 check_level(Target)
1734
1735 client_printcolor(Target, "/gADMIN: /ctr%s /yhas set your XP to /g%d", get_user_name_ex(id), Value)
1736
1737 return PLUGIN_HANDLED;
1738}
1739
1740// ============================================================//
1741// [~ Saving / Loading datas ~] //
1742// ============================================================//
1743public QueryCreateTable(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
1744{
1745 if(iFailState == TQUERY_CONNECT_FAILED)
1746 {
1747 log_to_file(g_logfile, "[MySQLx_Init] Could not connect to database. [%d] %s", iError, szError);
1748 return;
1749 }
1750 else if(iFailState == TQUERY_QUERY_FAILED)
1751 {
1752 log_to_file(g_logfile, "[MySQLx_Init] Neapyko apdoroti uzklausos. [%d] %s", iError, szError);
1753 return;
1754 }
1755}
1756SaveLevel(id)
1757{
1758if(gStatsLoaded[id] && gCanSave)
1759{
1760 static szQuery[512];
1761 formatex( szQuery, 511, "UPDATE `%s` SET `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
1762 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
1763 log_to_file(g_logfile, "[SAVE] UPDATE `%s` SET `player_level` = '%d', `player_xp` = '%d', `player_prestige` = '%d', `player_name` = '%s', `player_last_date` = '%s' WHERE `player_id` = '%s';", TABLE_NAME, PlayerLevel[id], PlayerXp[id], PlayerPrestige[id], get_user_name_ex(id), get_time_ex(), get_player_id(id));
1764}
1765}
1766public LoadLevel(id)
1767{
1768if(!is_user_connected(id))
1769 return;
1770
1771 static szQuery[256], iData[1]; iData[0] = id;
1772 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE (`player_id` = '%s' OR `player_id` = '%s' OR `player_id` = '%s')", TABLE_NAME, get_user_name_ex(id), get_user_authid_ex(id), get_user_ip_ex(id));
1773 SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
1774}
1775
1776public QuerySelect( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1777{
1778 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_amx("%s", szError); return; }
1779 else
1780 {
1781 new id = iData[0];
1782
1783 if(SQL_NumResults(hQuery))
1784 {
1785 new szPlayerID[64];
1786 SQL_ReadResult(hQuery, 1, szPlayerID, 63);
1787
1788 if(equal(szPlayerID, get_user_authid_ex(id))) { set_player_id(id, 1); }
1789 else if(equal(szPlayerID, get_user_name_ex(id))) { set_player_id(id, 2); }
1790 else { set_player_id(id, 3); }
1791
1792 PlayerLevel[id] = SQL_ReadResult(hQuery, 2);
1793 PlayerXp[id] = SQL_ReadResult(hQuery, 3);
1794 PlayerPrestige[id] = SQL_ReadResult(hQuery, 4);
1795
1796 SQL_NextRow(hQuery);
1797 log_to_file(g_logfile, "[LOAD] SELECT * FROM `%s` WHERE (`player_id` = '%s' OR `player_id` = '%s' OR `player_id` = '%s'); [FOUND - %s] Level - %d | XP - %d | Prestige - %d", TABLE_NAME, get_user_name_ex(id), get_user_authid_ex(id), get_user_ip_ex(id), get_player_id(id), PlayerLevel[id], PlayerXp[id], PlayerPrestige[id]);
1798 }
1799 else
1800 {
1801 static szQuery[256];
1802 formatex(szQuery, 255, "INSERT INTO `%s` VALUES ('', '%s', '0', '0', '0', '%s', '%s');", TABLE_NAME, get_user_ip_ex(id), get_user_name_ex(id), get_time_ex());
1803 iData[ 0 ] = id;
1804 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery, iData, 1 );
1805
1806 set_player_id(id, 3);
1807
1808 PlayerLevel[id] = 0;
1809 PlayerXp[id] = 0;
1810 PlayerPrestige[id] = 0;
1811
1812 log_to_file(g_logfile, "[LOAD] INSERT INTO `%s` VALUES ('', '%s', '0', '0', '0', '%s', '%s');", TABLE_NAME, get_user_ip_ex(id), get_user_name_ex(id), get_time_ex());
1813 }
1814 gStatsLoaded[id] = true;
1815 }
1816}
1817public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1818{
1819 if(iFailState == TQUERY_CONNECT_FAILED)
1820 {
1821 log_to_file(g_logfile, "[Load/SaveLevel] Could not connect to database. [%d] %s", iError, szError);
1822 return;
1823 }
1824 else if(iFailState == TQUERY_QUERY_FAILED)
1825 {
1826 log_to_file(g_logfile, "[Load/SaveLevel] Neapyko apdoroti uzklausos. [%d] %s", iError, szError);
1827 return;
1828 }
1829}
1830
1831// ============================================================//
1832// [~ Natives ~] //
1833// ============================================================//
1834// Native: get_user_xp
1835public native_get_user_xp(id)
1836{
1837 return PlayerXp[id];
1838}
1839
1840// Native: set_user_xp
1841public native_set_user_xp(id, amount)
1842{
1843 PlayerXp[id] = amount;
1844 check_level(id);
1845}
1846
1847// Native: get_user_prestige
1848public native_get_user_prestige(id)
1849{
1850 return PlayerPrestige[id];
1851}
1852
1853// Native: set_user_prestige
1854public native_set_user_prestige(id, amount)
1855{
1856 PlayerPrestige[id] = amount;
1857}
1858
1859// Native: get_user_level
1860public native_get_user_level(id)
1861{
1862 return PlayerLevel[id];
1863}
1864
1865// Native: set_user_level
1866public native_set_user_level(id, amount)
1867{
1868 PlayerLevel[id] = amount;
1869}
1870
1871// Native: Gets user level by Xp
1872public native_get_user_max_level(id)
1873{
1874 return LEVELS[PlayerLevel[id]];
1875}
1876
1877// Native: Gets user level by Xp
1878public native_get_save_type(id)
1879{
1880 return gPlayerSave[id];
1881}
1882
1883public native_gxm_save_level(id)
1884{
1885 SaveLevel(id);
1886}
1887
1888public native_gxm_level_loaded(id)
1889{
1890 return gStatsLoaded[id];
1891}
1892
1893// ============================================================//
1894// [~ Stocks ~] //
1895// ============================================================//
1896stock client_printcolor(const id, const input[], any:...)
1897{
1898 new count = 1, players[32];
1899 static msg[191];
1900 vformat(msg,190,input,3);
1901 replace_all(msg,190,"/g","^4");// green txt
1902 replace_all(msg,190,"/y","^1");// orange txt
1903 replace_all(msg,190,"/ctr","^3");// team txt
1904 replace_all(msg,190,"/w","^0");// team txt
1905 if (id) players[0] = id; else get_players(players,count,"ch");
1906 for (new i = 0; i < count; i++)
1907 if (is_user_connected(players[i]))
1908 {
1909 message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
1910 write_byte(players[i]);
1911 write_string(msg);
1912 message_end();
1913 }
1914}
1915
1916stock get_mapname_ex()
1917{
1918 new szMapName[33];
1919 get_mapname(szMapName, charsmax(szMapName))
1920
1921 return szMapName;
1922}
1923
1924stock get_user_name_ex(id)
1925{
1926 new szName[33];
1927 get_user_name(id, szName, charsmax(szName));
1928
1929 replace_all(szName, charsmax(szName), "'", "\'");
1930 replace_all(szName, charsmax(szName), "^"", "\^"");
1931 replace_all(szName, charsmax(szName), ".", "");
1932
1933 return szName;
1934}
1935
1936stock get_user_ip_ex(id)
1937{
1938 new szIP[33];
1939 get_user_ip(id, szIP, charsmax(szIP), 1);
1940
1941 return szIP;
1942}
1943
1944stock get_user_authid_ex(id)
1945{
1946 new szAuthid[33];
1947 get_user_authid(id, szAuthid, 32);
1948
1949 return szAuthid;
1950}
1951
1952stock get_time_ex()
1953{
1954 new date_time[21];
1955 get_time("%Y-%m-%d %H:%M:%S", date_time, charsmax(date_time));
1956
1957 return date_time;
1958}
1959
1960public StripPlayerWeapons(id)
1961{
1962 strip_user_weapons(id)
1963 set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
1964 give_item(id, "weapon_knife");
1965}
1966
1967stock print_colorchat(const id, const input[], any:...)
1968{
1969 new count = 1, players[32];
1970 static msg[191];
1971 vformat(msg,190,input,3);
1972 replace_all(msg,190,"!g","^4");// green txt
1973 replace_all(msg,190,"!y","^1");// orange txt
1974 replace_all(msg,190,"!t","^3");// team txt
1975 replace_all(msg,190,"!w","^0");// team txt
1976 if (id) players[0] = id; else get_players(players,count,"ch");
1977 for (new i=0;i<count;i++)
1978 if (is_user_connected(players[i]))
1979 {
1980 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
1981 write_byte(players[i]);
1982 write_string(msg);
1983 message_end();
1984 }
1985}
1986
1987stock set_player_id(id, pId) {
1988 gPlayerSave[id] = pId;
1989}
1990
1991stock get_player_id(id)
1992{
1993 new szReturn[256];
1994
1995 switch(gPlayerSave[id])
1996 {
1997 case 1: { formatex(szReturn, sizeof(szReturn), "%s", get_user_authid_ex(id)); }
1998 case 2: { formatex(szReturn, sizeof(szReturn), "%s", get_user_name_ex(id)); }
1999 case 3: { formatex(szReturn, sizeof(szReturn), "%s", get_user_ip_ex(id)); }
2000 }
2001 return szReturn;
2002}
2003stock ColorChat(const id, const input[], any:...) {
2004 new count = 1, players[32];
2005 static msg[191];
2006 vformat(msg, 190, input, 3);
2007
2008 replace_all(msg, 190, "!g", "^4");
2009 replace_all(msg, 190, "!y", "^1");
2010 replace_all(msg, 190, "!t", "^3");
2011
2012 if(id) players[0] = id;
2013 else get_players(players, count, "ch"); {
2014 for(new i = 0; i < count; i++) {
2015 if(is_user_connected(players[i])) {
2016 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
2017 write_byte(players[i]);
2018 write_string(msg);
2019 message_end();
2020 }
2021 }
2022 }
2023}