· 5 years ago · Feb 28, 2020, 01:38 AM
1#include "gunxpmod.cfg"
2
3#if defined ZOMBIE_BIOHAZARD
4 #include <biohazard>
5#endif
6#if defined ZOMBIE_PLAGUE
7 #include <zombieplague>
8#endif
9
10#include <amxmodx>
11#include <amxmisc>
12#include <fakemeta>
13#include <fun>
14#include <cstrike>
15#include <nvault>
16#include <sqlx>
17#include <hamsandwich>
18
19#define PLUGIN "Gun Xp Mod"
20#define AUTHOR "xbatista"
21#define VERSION "2.0"
22
23
24#define OFFSET_PRIMARYWEAPON 116
25#define TASK_SHOW_LEVEL 10113
26#define fm_cs_set_user_nobuy(%1) set_pdata_int(%1, 235, get_pdata_int(%1, 235) & ~(1<<0) ) //no weapon buy
27
28new PlayerXp[33];
29new PlayerLevel[33];
30new UnaVez[33];
31
32new g_Vault;
33new g_remember_selection[33], g_kills[33], g_remember_selection_pistol[33];
34new g_maxplayers, g_msgHudSync1, SayTxT, enable_grenades;
35new levelspr, levelspr2, show_level_text, show_rank;
36new savexp, save_type, xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, p_Enabled, level_style;
37new enable_admin_xp, admin_xp;
38
39/*================================================================================
40 [MySQLx Vars, other]
41=================================================================================*/
42new Handle:g_hTuple;
43new g_szAuthID[33][35];
44new g_szAuthIP[33][35];
45new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass;
46
47new const szTables[][] =
48{
49 "CREATE TABLE IF NOT EXISTS `mytable` ( `player_id` varchar(32) NOT NULL,`player_level` int(8) default NULL,`player_xp` int(16) default NULL,PRIMARY KEY (`player_id`) ) TYPE=MyISAM;"
50}
51
52new const WEAPONCONST[MAXLEVEL][] = { "weapon_glock18", "weapon_usp", "weapon_p228", "weapon_fiveseven", "weapon_deagle", "weapon_elite", "weapon_tmp",
53"weapon_mac10", "weapon_ump45", "weapon_mp5navy", "weapon_p90", "weapon_scout", "weapon_awp", "weapon_famas", "weapon_galil", "weapon_m3", "weapon_xm1014",
54"weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_sg552", "weapon_sg550", "weapon_g3sg1", "weapon_m249"
55}; // Give Weapons
56
57new 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",
58"models/w_mac10.mdl", "models/w_ump45.mdl", "models/w_mp5.mdl", "models/w_p90.mdl", "models/w_scout.mdl", "models/w_awp.mdl", "models/w_famas.mdl", "models/w_galil.mdl", "models/w_m3.mdl", "models/w_xm1014.mdl",
59"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_m249.mdl"
60}; // Blocks pick up weapon, don't change!
61
62new const AMMOCONST[MAXLEVEL] = { 17, 16, 1, 11, 26, 10, 23, 7, 12, 19, 30, 3, 18,
6315, 14, 21, 5, 28, 22, 8, 27, 13, 24, 20
64}; // Weapons ID(CSW) don't change!
65
66/*================================================================================
67 [Plugin natives,precache,init]
68=================================================================================*/
69public plugin_init()
70{
71 register_plugin(PLUGIN, VERSION, AUTHOR);
72 register_cvar("gxm_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
73 set_cvar_string("gxm_version", VERSION)
74
75 register_concmd("set_level", "cmd_give_level", ADMIN_RCON, "set_level <name> <amount>" );
76 register_clcmd("say level", "showlevel");
77 register_clcmd("say /level", "showlevel");
78 register_clcmd("say /top20","showtop20");
79 register_clcmd("say /menu","show_main_menu_info");
80 register_clcmd("say menu","show_main_menu_info");
81 register_clcmd("say /guns","show_main_menu_level");
82
83
84 p_Enabled = register_cvar( "gxm_enable", "1" ); // Plugin enabled? 1 = Yes, 0 = No.
85 save_type = register_cvar("gxm_savetype","1"); // Save Xp to : 1 = MySQL, 0 = NVault.
86 savexp = register_cvar("gxm_save","0"); // Save Xp by : 1 = SteamID, 0 = IP.
87 xp_kill = register_cvar("gxm_xp","10"); // How much xp gain if you killed someone?
88 show_level_text = register_cvar("gxm_level_text","0"); // Show your level by : 1 = HUD message, 0 = Simple colored text message.
89 show_rank = register_cvar("gxm_show_rank","1"); // Show rank in /top20? 1 = Yes, 0 = No.
90 level_style = register_cvar("gxm_level_style","0"); // You will gain each level new gun : 1 = Yes, 0 = No,select your gun by menu.
91 enable_grenades = register_cvar("gxm_grenades","1"); // Give to player grenades? 1 = Yes, 0 = No.
92
93 enable_triple = register_cvar("gxm_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
94 xp_triple = register_cvar("gxm_triple_xp","3"); // How much bonus xp give for Triple Kill?
95 triple_kills = register_cvar("gxm_triple_kills","3"); // How much kills needed to give bonus xp?
96 enable_ultra = register_cvar("gxm_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
97 xp_ultra = register_cvar("gxm_ultra_xp","5"); // How much bonus xp give for Ultra Kill?
98 ultra_kills = register_cvar("gxm_ultra_kills","6"); // How much kills needed to give bonus xp?
99
100 enable_admin_xp = register_cvar("gxm_admin_xp","1"); // Enable Extra xp for killing? 1 = Yes, 0 = No.
101 admin_xp = register_cvar("gxm_extra_xp","10"); // How much extra xp give to admins?
102
103 // SQLx cvars
104 mysqlx_host = register_cvar ("gxm_host", ""); // The host from the db
105 mysqlx_user = register_cvar ("gxm_user", ""); // The username from the db login
106 mysqlx_pass = register_cvar ("gxm_pass", ""); // The password from the db login
107 mysqlx_db = register_cvar ("gxm_dbname", ""); // The database name
108
109 // Events //
110 register_event("DeathMsg", "event_deathmsg", "a");
111 register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
112 register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
113
114 // Forwards //
115 RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
116
117 register_forward(FM_Touch, "fwd_Touch");
118
119 // Messages //
120 #if defined NORMAL_MOD || defined ZOMBIE_SWARM
121 register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
122 #endif
123
124 // Other //
125 register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
126
127 register_dictionary("gunxpmod.txt");
128 MySQLx_Init()
129
130 SayTxT = get_user_msgid("SayText");
131
132 g_msgHudSync1 = CreateHudSyncObj()
133 g_maxplayers = get_maxplayers();
134}
135public plugin_natives()
136{
137 // Player natives //
138 register_native("get_user_xp", "native_get_user_xp", 1);
139 register_native("set_user_xp", "native_set_user_xp", 1);
140 register_native("get_user_level", "native_get_user_level", 1);
141 register_native("set_user_level", "native_set_user_level", 1);
142 register_native("get_user_max_level", "native_get_user_max_level", 1);
143}
144public plugin_precache()
145{
146 levelspr = engfunc(EngFunc_PrecacheModel, "sprites/xfire.spr");
147 levelspr2 = engfunc(EngFunc_PrecacheModel, "sprites/xfire2.spr");
148
149 engfunc(EngFunc_PrecacheSound, LevelUp);
150}
151public plugin_cfg()
152{
153 new ConfDir[32], File[192];
154
155 get_configsdir( ConfDir, charsmax( ConfDir ) );
156 formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
157
158 if( !file_exists( File ) )
159 {
160 server_print( "File %s doesn't exist!", File );
161 write_file( File, " ", -1 );
162 }
163 else
164 {
165 server_print( "%s successfully loaded.", File );
166 server_cmd( "exec %s", File );
167 }
168
169 //Open our vault and have g_Vault store the handle.
170 g_Vault = nvault_open( "gunxpmod" );
171
172 //Make the plugin error if vault did not successfully open
173 if ( g_Vault == INVALID_HANDLE )
174 set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
175}
176public plugin_end()
177{
178 //Close the vault when the plugin ends (map change\server shutdown\restart)
179 nvault_close( g_Vault );
180}
181public client_connect(id)
182{
183 g_remember_selection[id] = MAX_PISTOLS_MENU;
184 g_remember_selection_pistol[id] = 0;
185
186 get_user_authid( id , g_szAuthID[id] , 34 );
187 get_user_ip(id, g_szAuthIP[id] , 34, 1);
188
189 LoadLevel(id)
190}
191public client_disconnect(id)
192{
193 SaveLevel(id)
194}
195public Message_StatusIcon(iMsgId, MSG_DEST, id)
196{
197 if( !get_pcvar_num(p_Enabled) )
198 return PLUGIN_HANDLED;
199
200 static szIcon[5]
201 get_msg_arg_string(2, szIcon, 4)
202 if( szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z' )
203 {
204 if( get_msg_arg_int(1))
205 {
206 fm_cs_set_user_nobuy(id)
207 return PLUGIN_HANDLED;
208 }
209 }
210
211 return PLUGIN_CONTINUE;
212}
213public fwd_Touch(ent, id)
214{
215 if (!is_user_alive(id) || !pev_valid( ent ) )
216 return FMRES_IGNORED;
217
218 static szEntModel[32];
219 pev( ent , pev_model , szEntModel , 31 );
220
221 for (new level_equip_id = PlayerLevel[id] + 1; level_equip_id < MAXLEVEL; level_equip_id++)
222 {
223 if ( equali( szEntModel , WEAPONMDL[level_equip_id] ) )
224 {
225 return FMRES_SUPERCEDE;
226 }
227 }
228
229 return FMRES_IGNORED;
230}
231public fwd_PlayerSpawn(id)
232{
233 if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
234 return;
235
236 g_kills[id] = 0
237
238 #if defined ZOMBIE_SWARM
239 if ( !get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
240 {
241 StripPlayerWeapons(id);
242
243 set_task(0.1, "show_main_menu_level", id)
244 }
245 #endif
246
247 #if defined NORMAL_MOD || defined ZOMBIE_INFECTION
248 if ( !get_pcvar_num(level_style))
249 {
250 StripPlayerWeapons(id);
251
252 set_task(0.1, "show_main_menu_level", id)
253 }
254 #endif
255
256 if(!task_exists(TASK_SHOW_LEVEL + id) && get_pcvar_num(show_level_text))
257 {
258 set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
259 }
260
261 #if defined ZOMBIE_SWARM
262 if ( get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
263 {
264 set_task(0.3, "give_weapon", id);
265 }
266 #endif
267
268 #if defined NORMAL_MOD || defined ZOMBIE_INFECTION
269 if ( get_pcvar_num(level_style) )
270 {
271 set_task(0.3, "give_weapon", id);
272 }
273 #endif
274
275}
276
277#if defined ZOMBIE_BIOHAZARD
278public event_infect(g_victim, g_attacker)
279{
280 if( !get_pcvar_num(p_Enabled) )
281 return;
282
283 new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
284 new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
285
286 if((1 <= g_attacker <= g_maxplayers))
287 {
288 if(g_victim != g_attacker)
289 {
290 g_kills[g_attacker]++;
291 if(PlayerLevel[g_attacker] < MAXLEVEL-1)
292 {
293 if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
294 {
295 PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
296 }
297
298 if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
299 {
300 PlayerXp[g_attacker] += counted_triple
301
302 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
303 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))
304 }
305 else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
306 {
307 PlayerXp[g_attacker] += counted_ultra
308
309 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
310 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))
311 }
312 else
313 {
314 PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
315
316 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
317 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) )
318 }
319
320 check_level(g_attacker)
321 }
322 }
323 }
324}
325#endif
326
327#if defined ZOMBIE_PLAGUE
328public zp_user_infected_post(g_victim, g_attacker)
329{
330 if( !get_pcvar_num(p_Enabled) )
331 return;
332
333 new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
334 new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
335
336 if((1 <= g_attacker <= g_maxplayers))
337 {
338 if(g_victim != g_attacker)
339 {
340 g_kills[g_attacker]++;
341 if(PlayerLevel[g_attacker] < MAXLEVEL-1)
342 {
343 if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
344 {
345 PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
346 }
347
348 if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
349 {
350 PlayerXp[g_attacker] += counted_triple
351
352 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
353 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))
354 }
355 else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
356 {
357 PlayerXp[g_attacker] += counted_ultra
358
359 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
360 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))
361 }
362 else
363 {
364 PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
365
366 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
367 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) )
368 }
369
370 check_level(g_attacker)
371 }
372 }
373 }
374}
375#endif
376
377public event_deathmsg()
378{
379 if( !get_pcvar_num(p_Enabled) )
380 return;
381
382 new g_attacker = read_data(1);
383 new g_victim = read_data(2);
384
385 new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
386 new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
387
388 if((1 <= g_attacker <= g_maxplayers))
389 {
390 if(g_victim != g_attacker)
391 {
392 g_kills[g_attacker]++;
393 if(PlayerLevel[g_attacker] < MAXLEVEL-1)
394 {
395 if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
396 {
397 PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
398 }
399
400 if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
401 {
402 PlayerXp[g_attacker] += counted_triple
403
404 set_hudmessage(0, 40, 255, 0.50, 0.33, 1, 2.0, 2.0)
405 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))
406 }
407 else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
408 {
409 PlayerXp[g_attacker] += counted_ultra
410
411 set_hudmessage(255, 30, 0, 0.50, 0.33, 1, 2.0, 2.0)
412 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))
413 }
414 else
415 {
416 PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
417
418 set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
419 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) )
420 }
421
422 check_level(g_attacker)
423 }
424 }
425 }
426}
427public Event_StatusValue(id)
428{
429 new target = read_data(2)
430 if(target != id && target != 0 && get_pcvar_num(p_Enabled))
431 {
432 static sName[32];
433 get_user_name(target, sName, 31)
434
435 set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2)
436 ShowSyncHudMsg(id, g_msgHudSync1, "%L", LANG_SERVER, "LEVEL_TEXT", sName, PlayerLevel[target], RANKLEVELS[PlayerLevel[target]])
437 }
438}
439public event_round_start()
440{
441 for(new i = 1; i <= g_maxplayers; i++) {
442 UnaVez[i] = 0;
443 }
444}
445public task_show_level(task)
446{
447 new id = task - TASK_SHOW_LEVEL
448
449 if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
450 return;
451
452 set_hudmessage(255, 0, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
453 ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
454
455 set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
456}
457public showlevel(id)
458{
459 if ( !get_pcvar_num(p_Enabled) || get_pcvar_num(show_level_text) )
460 return PLUGIN_HANDLED;
461
462 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
463 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
464
465 return PLUGIN_HANDLED;
466}
467public descriptionx(id)
468{
469 new szMotd[2048], szTitle[64], iPos = 0
470 format(szTitle, 63, "Info")
471 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>")
472 iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
473 iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
474
475 iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
476
477 show_motd(id, szMotd, szTitle)
478 return PLUGIN_HANDLED;
479}
480public check_level(id)
481{
482 if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
483 {
484 while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
485 {
486 PlayerLevel[id]++;
487
488 if(is_user_alive(id))
489 {
490 if ( get_pcvar_num(level_style) )
491 {
492 give_weapon(id);
493 }
494
495 new p_origin[3];
496 get_user_origin(id, p_origin, 0);
497
498 set_sprite(p_origin, levelspr, 30)
499 set_sprite(p_origin, levelspr2, 30)
500 }
501 emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
502
503 static name[32] ; get_user_name(id, name, charsmax(name));
504 client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", name, PlayerLevel[id]);
505 }
506 }
507}
508// Main Menu Info
509public show_main_menu_info(id)
510{
511 if ( !get_pcvar_num(p_Enabled) )
512 return;
513
514 static menu[510], len;
515 len = 0;
516
517 new xKeys3 = MENU_KEY_0|MENU_KEY_1;
518
519 // Title
520 len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
521
522 len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
523 if ( get_pcvar_num(show_rank) )
524 {
525 xKeys3 |= (MENU_KEY_2)
526
527 len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
528 }
529 else
530 {
531 len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
532 }
533
534 if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
535 {
536 xKeys3 |= (MENU_KEY_3)
537
538 len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "ITEM_LIST")
539 if ( is_user_alive(id) )
540 {
541 xKeys3 |= (MENU_KEY_4)
542
543 len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "UNLOCKS_SHOP_TEXT")
544 }
545 }
546
547 len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
548
549 show_menu(id, xKeys3, menu, -1, "Main Menu")
550}
551public main_menu_info(id, key)
552{
553 switch (key)
554 {
555 case 0:
556 {
557 show_main_menu_info(id)
558
559 descriptionx(id)
560 }
561 case 1:
562 {
563 showtop20(id)
564
565 show_main_menu_info(id)
566 }
567 case 2:
568 {
569 show_main_menu_info(id)
570
571 if(callfunc_begin( "display_items","gunxpmod_shop.amxx") == 1)
572 {
573 callfunc_push_int( id );
574 callfunc_end();
575 }
576 }
577 case 3:
578 {
579 if(callfunc_begin("item_upgrades","gunxpmod_shop.amxx") == 1)
580 {
581 callfunc_push_int( id );
582 callfunc_end();
583 }
584 }
585 case 9:
586 {
587 return PLUGIN_HANDLED;
588 }
589 }
590
591 return PLUGIN_HANDLED;
592}
593// Main Menu Level Style
594public show_main_menu_level(id)
595{
596 if ( !is_user_alive(id) ) return;
597 if(UnaVez[id] >= 2) {
598 client_print(id, print_chat, "Ya escogiste arma esta ronda.");
599 return;
600 }
601 new szInfo[60], szChooseT[40], szLastG[40];
602 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
603
604 new menu = menu_create(szInfo , "main_menu_level");
605
606 formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
607 menu_additem(menu, szChooseT, "1", 0);
608
609 formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
610 menu_additem(menu, szLastG, "2", 0);
611
612 new szExit[15];
613 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
614
615 menu_setprop(menu, MPROP_EXITNAME, szExit);
616
617 menu_display(id , menu , 0);
618}
619public main_menu_level(id , menu , item)
620{
621 if ( !is_user_alive(id) )
622 {
623 return PLUGIN_HANDLED;
624 }
625
626 #if defined ZOMBIE_PLAGUE
627 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
628 return PLUGIN_HANDLED;
629 #endif
630
631 if(item == MENU_EXIT)
632 {
633 menu_destroy(menu);
634 return PLUGIN_HANDLED;
635 }
636 new data[6], iName[64];
637 new access, callback;
638 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
639
640 new item_id = str_to_num(data);
641
642 switch (item_id)
643 {
644 case 1: // show pistols
645 {
646 show_menu_level_pistol(id);
647 UnaVez[id]++
648 }
649 case 2: // last weapons
650 {
651 if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
652 {
653 give_weapon_menu(id, g_remember_selection[id], 1, 1);
654 give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
655 }
656 else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
657 {
658 give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
659 }
660 UnaVez[id]++
661 }
662 }
663
664 menu_destroy(menu);
665 return PLUGIN_HANDLED;
666}
667// Menu Level Style Pistols
668public show_menu_level_pistol(id)
669{
670 if ( !is_user_alive(id) )
671 return;
672
673 new szInfo[60];
674 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
675
676 new menu = menu_create(szInfo , "pistol_menu");
677
678 for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
679 {
680 new szItems[60], szTempid[32];
681
682 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
683 {
684 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
685
686 num_to_str(item_id, szTempid, charsmax(szTempid) );
687
688 menu_additem(menu, szItems, szTempid, 0);
689 }
690
691 else
692 {
693 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
694 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
695 }
696 }
697
698 new szNext[15], szBack[15], szExit[15];
699 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
700 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
701 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
702
703 menu_setprop(menu, MPROP_BACKNAME, szBack)
704 menu_setprop(menu, MPROP_NEXTNAME, szNext)
705 menu_setprop(menu, MPROP_EXITNAME, szExit)
706
707 menu_display(id , menu , 0);
708}
709public pistol_menu(id , menu , item)
710{
711 if ( !is_user_alive(id) )
712 {
713 return PLUGIN_HANDLED;
714 }
715
716 #if defined ZOMBIE_PLAGUE
717 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
718 return PLUGIN_HANDLED;
719 #endif
720
721 if(item == MENU_EXIT)
722 {
723 menu_destroy(menu);
724 return PLUGIN_HANDLED;
725 }
726 new data[6], iName[64];
727 new access, callback;
728 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
729
730 new item_id = str_to_num(data);
731
732 g_remember_selection_pistol[id] = item_id;
733
734 give_weapon_menu(id, item_id, 1, 1);
735
736 if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
737 {
738 show_menu_level(id);
739 }
740
741 menu_destroy(menu);
742 return PLUGIN_HANDLED;
743}
744// Menu Level Style Primary
745public show_menu_level(id)
746{
747 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
748 return;
749
750 new szInfo[100];
751 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
752
753 new menu = menu_create(szInfo , "level_menu");
754
755 for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
756 {
757 new szItems[512], szTempid[32];
758
759 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
760 {
761 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
762
763 num_to_str(item_id, szTempid, charsmax(szTempid) );
764
765 menu_additem(menu, szItems, szTempid, 0);
766 }
767 else
768 {
769 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
770 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
771 }
772 }
773
774 new szNext[15], szBack[15], szExit[15];
775 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
776 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
777 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
778
779 menu_setprop(menu, MPROP_BACKNAME, szBack)
780 menu_setprop(menu, MPROP_NEXTNAME, szNext)
781 menu_setprop(menu, MPROP_EXITNAME, szExit)
782
783 menu_display(id , menu , 0);
784}
785public level_menu(id , menu , item)
786{
787 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
788 {
789 return PLUGIN_HANDLED;
790 }
791
792 #if defined ZOMBIE_PLAGUE
793 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
794 return PLUGIN_HANDLED;
795 #endif
796
797 if(item == MENU_EXIT)
798 {
799 menu_destroy(menu);
800 return PLUGIN_HANDLED;
801 }
802 new data[6], iName[64];
803 new access, callback;
804 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
805
806 new item_id = str_to_num(data);
807
808 g_remember_selection[id] = item_id;
809
810 give_weapon_menu(id, item_id, 0, 0);
811
812 menu_destroy(menu);
813 return PLUGIN_HANDLED;
814}
815public CallbackMenu(id, menu, item)
816{
817 return ITEM_DISABLED;
818}
819
820// Selected by menu or remember selection and give item
821public give_weapon_menu(id, selection, strip, givegren)
822{
823 #if defined ZOMBIE_SWARM
824 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
825 {
826 if ( strip )
827 {
828 StripPlayerWeapons(id);
829 }
830
831 if ( get_pcvar_num(enable_grenades) && givegren )
832 {
833 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
834 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
835 }
836
837 give_item(id, WEAPONCONST[selection]);
838
839 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
840 }
841 #endif
842
843 #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
844 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
845 {
846 if ( strip )
847 {
848 StripPlayerWeapons(id);
849 }
850
851 if ( get_pcvar_num(enable_grenades) && givegren )
852 {
853 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
854 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
855 }
856
857 give_item(id, WEAPONCONST[selection]);
858
859 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
860 }
861 #endif
862}
863public give_weapon(id)
864{
865 #if defined ZOMBIE_SWARM
866 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
867 {
868 StripPlayerWeapons(id);
869
870 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
871 {
872 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
873 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
874 }
875
876 give_item(id, WEAPONCONST[PlayerLevel[id]]);
877
878 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
879 }
880 #endif
881
882 #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
883 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
884 {
885 StripPlayerWeapons(id);
886
887 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
888 {
889 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
890 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
891 }
892
893 give_item(id, WEAPONCONST[PlayerLevel[id]]);
894
895 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
896 }
897 #endif
898}
899public set_sprite(p_origin[3], sprite, radius)
900{
901 // Explosion
902 message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
903 write_byte(TE_EXPLOSION)
904 write_coord(p_origin[0])
905 write_coord(p_origin[1])
906 write_coord(p_origin[2])
907 write_short(sprite)
908 write_byte(radius)
909 write_byte(15)
910 write_byte(4)
911 message_end()
912}
913//Shows Top 20
914public showtop20(id)
915{
916 if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
917 return;
918
919 static Sort[33][2];
920 new players[32],num,count,index;
921 get_players(players,num);
922
923 for(new i = 0; i < num; i++)
924 {
925 index = players[i];
926 Sort[count][0] = index;
927 Sort[count][1] = PlayerXp[index];
928 count++;
929 }
930
931 SortCustom2D(Sort,count,"CompareXp");
932 new motd[1501],iLen;
933 iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
934 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
935
936 new y = clamp(count,0,20);
937 new name[32],kindex;
938
939 for(new x = 0; x < y; x++)
940 {
941 kindex = Sort[x][0];
942 get_user_name(kindex,name,sizeof name - 1);
943 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, name, Sort[x][1]);
944 }
945 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
946 show_motd(id,motd, "GunXpMod Top 20");
947}
948public CompareXp(elem1[], elem2[])
949{
950 if(elem1[1] > elem2[1])
951 return -1;
952 else if(elem1[1] < elem2[1])
953 return 1;
954
955 return 0;
956}
957// Command to set player Level
958public cmd_give_level(id, level, cid)
959{
960 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
961 {
962 return PLUGIN_HANDLED;
963 }
964
965 new Arg1[64], Target
966 read_argv(1, Arg1, 63)
967 Target = cmd_target(id, Arg1, 0)
968
969 new iLevel[32], Value
970 read_argv(2, iLevel, 31)
971 Value = str_to_num(iLevel)
972
973 if(iLevel[0] == '-')
974 {
975 console_print(id, "You can't have a '-' in the value!")
976 return PLUGIN_HANDLED;
977 }
978
979 if(!Target)
980 {
981 console_print(id, "Target not found!")
982 return PLUGIN_HANDLED;
983 }
984
985 if(Value > MAXLEVEL-1)
986 {
987 console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
988 return PLUGIN_HANDLED;
989 }
990
991 if(Value < 1)
992 {
993 console_print(id, "You can't set less than 1!")
994 return PLUGIN_HANDLED;
995 }
996
997 new AdminName[32]
998 get_user_name(id, AdminName, 31)
999
1000 new TargetName[32]
1001 get_user_name(Target, TargetName, 31)
1002
1003 PlayerLevel[Target] = Value - 1
1004 PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
1005 check_level(Target)
1006
1007 client_printcolor(Target, "/gADMIN: /ctr%s /yha establecido tu nivel a /g%d", AdminName, Value)
1008
1009 return PLUGIN_HANDLED;
1010}
1011
1012// ============================================================//
1013// [~ Saving datas ~] //
1014// ============================================================//
1015public MySQLx_Init()
1016{
1017 if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) )
1018 return;
1019
1020 new szHost[64], szUser[32], szPass[32], szDB[128];
1021
1022 get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
1023 get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
1024 get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
1025 get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
1026
1027 g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
1028
1029 for ( new i = 0; i < sizeof szTables; i++ )
1030 {
1031 SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
1032 }
1033}
1034public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1035{
1036 if( iFailState == TQUERY_CONNECT_FAILED
1037 || iFailState == TQUERY_QUERY_FAILED )
1038 {
1039 log_amx( "%s", szError );
1040
1041 return;
1042 }
1043}
1044
1045SaveLevel(id)
1046{
1047 if ( get_pcvar_num(savexp) )
1048 {
1049 if ( !get_pcvar_num(save_type) )
1050 {
1051 new szData[256];
1052 new szKey[64];
1053
1054 formatex( szKey , 63 , "%s-ID" , g_szAuthID[id]);
1055 formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
1056
1057 nvault_set( g_Vault , szKey , szData );
1058 }
1059 else
1060 {
1061 static szQuery[ 128 ];
1062
1063 formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthID[id] , PlayerLevel[id], PlayerXp[id] );
1064
1065 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
1066 }
1067 }
1068 else
1069 {
1070 if ( !get_pcvar_num(save_type) )
1071 {
1072 new szData[256];
1073 new szKey[64];
1074
1075 formatex( szKey , 63 , "%s-IP" , g_szAuthIP[id] );
1076 formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
1077
1078 nvault_set( g_Vault , szKey , szData );
1079 }
1080 else
1081 {
1082 static szQuery[ 128 ];
1083
1084 formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthIP[id] , PlayerLevel[id], PlayerXp[id] );
1085
1086 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
1087 }
1088 }
1089}
1090
1091LoadLevel(id)
1092{
1093 if ( get_pcvar_num(savexp) )
1094 {
1095 if ( !get_pcvar_num(save_type) )
1096 {
1097 new szData[256];
1098 new szKey[40];
1099
1100 formatex( szKey , 39 , "%s-ID" , g_szAuthID[id] );
1101
1102 formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
1103
1104 nvault_get(g_Vault, szKey, szData, 255)
1105
1106 replace_all(szData , 255, "#", " ")
1107 new xp[32], level[32]
1108 parse(szData, level, 31, xp, 31)
1109 PlayerLevel[id] = str_to_num(level)
1110 PlayerXp[id] = str_to_num(xp)
1111 }
1112 else
1113 {
1114 static szQuery[ 128 ], iData[ 1 ];
1115 formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthID[id] );
1116
1117 iData[ 0 ] = id;
1118 SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
1119 }
1120 }
1121 else
1122 {
1123 if ( !get_pcvar_num(save_type) )
1124 {
1125 new szData[256];
1126 new szKey[40];
1127
1128 formatex( szKey , 39 , "%s-IP" , g_szAuthIP[id] );
1129
1130 formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
1131
1132 nvault_get(g_Vault, szKey, szData, 255)
1133
1134 replace_all(szData , 255, "#", " ")
1135 new xp[32], level[32]
1136 parse(szData, level, 31, xp, 31)
1137 PlayerLevel[id] = str_to_num(level)
1138 PlayerXp[id] = str_to_num(xp)
1139 }
1140 else
1141 {
1142 static szQuery[ 128 ], iData[ 1 ];
1143 formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthIP[id] );
1144
1145 iData[ 0 ] = id;
1146 SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
1147 }
1148 }
1149}
1150public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1151{
1152 if( iFailState == TQUERY_CONNECT_FAILED
1153 || iFailState == TQUERY_QUERY_FAILED )
1154 {
1155 log_amx( "%s", szError );
1156
1157 return;
1158 }
1159 else
1160 {
1161 new id = iData[ 0 ];
1162
1163 new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
1164 new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
1165
1166 while (SQL_MoreResults(hQuery))
1167 {
1168 PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
1169 PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
1170
1171 SQL_NextRow(hQuery)
1172 }
1173 }
1174}
1175public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1176{
1177 if( iFailState == TQUERY_CONNECT_FAILED
1178 || iFailState == TQUERY_QUERY_FAILED )
1179 {
1180 log_amx( "%s", szError );
1181
1182 return;
1183 }
1184}
1185// ============================================================//
1186// [~ Natives ~] //
1187// ============================================================//
1188// Native: get_user_xp
1189public native_get_user_xp(id)
1190{
1191 return PlayerXp[id];
1192}
1193// Native: set_user_xp
1194public native_set_user_xp(id, amount)
1195{
1196 PlayerXp[id] = amount;
1197}
1198// Native: get_user_level
1199public native_get_user_level(id)
1200{
1201 return PlayerLevel[id];
1202}
1203// Native: set_user_xp
1204public native_set_user_level(id, amount)
1205{
1206 PlayerLevel[id] = amount;
1207}
1208// Native: Gets user level by Xp
1209public native_get_user_max_level(id)
1210{
1211 return LEVELS[PlayerLevel[id]];
1212}
1213// ============================================================//
1214// [~ Stocks ~] //
1215// ============================================================//
1216stock client_printcolor(const id, const input[], any:...)
1217{
1218 new count = 1, players[32];
1219 static msg[191];
1220 vformat(msg,190,input,3);
1221 replace_all(msg,190,"/g","^4");// green txt
1222 replace_all(msg,190,"/y","^1");// orange txt
1223 replace_all(msg,190,"/ctr","^3");// team txt
1224 replace_all(msg,190,"/w","^0");// team txt
1225 if (id) players[0] = id; else get_players(players,count,"ch");
1226 for (new i = 0; i < count; i++)
1227 if (is_user_connected(players[i]))
1228 {
1229 message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
1230 write_byte(players[i]);
1231 write_string(msg);
1232 message_end();
1233 }
1234}
1235public StripPlayerWeapons(id)
1236{
1237 strip_user_weapons(id)
1238 set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
1239 give_item(id, "weapon_knife");
1240}