· 5 years ago · Feb 28, 2020, 03:00 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
113 // Forwards //
114 RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
115
116 register_forward(FM_Touch, "fwd_Touch");
117
118 // Messages //
119 #if defined NORMAL_MOD || defined ZOMBIE_SWARM
120 register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
121 #endif
122
123 // Other //
124 register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
125
126 register_dictionary("gunxpmod.txt");
127 MySQLx_Init()
128
129 SayTxT = get_user_msgid("SayText");
130
131 g_msgHudSync1 = CreateHudSyncObj()
132 g_maxplayers = get_maxplayers();
133}
134public plugin_natives()
135{
136 // Player natives //
137 register_native("get_user_xp", "native_get_user_xp", 1);
138 register_native("set_user_xp", "native_set_user_xp", 1);
139 register_native("get_user_level", "native_get_user_level", 1);
140 register_native("set_user_level", "native_set_user_level", 1);
141 register_native("get_user_max_level", "native_get_user_max_level", 1);
142}
143public plugin_precache()
144{
145 levelspr = engfunc(EngFunc_PrecacheModel, "sprites/xfire.spr");
146 levelspr2 = engfunc(EngFunc_PrecacheModel, "sprites/xfire2.spr");
147
148 engfunc(EngFunc_PrecacheSound, LevelUp);
149}
150public plugin_cfg()
151{
152 new ConfDir[32], File[192];
153
154 get_configsdir( ConfDir, charsmax( ConfDir ) );
155 formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
156
157 if( !file_exists( File ) )
158 {
159 server_print( "File %s doesn't exist!", File );
160 write_file( File, " ", -1 );
161 }
162 else
163 {
164 server_print( "%s successfully loaded.", File );
165 server_cmd( "exec %s", File );
166 }
167
168 //Open our vault and have g_Vault store the handle.
169 g_Vault = nvault_open( "gunxpmod" );
170
171 //Make the plugin error if vault did not successfully open
172 if ( g_Vault == INVALID_HANDLE )
173 set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
174}
175public plugin_end()
176{
177 //Close the vault when the plugin ends (map change\server shutdown\restart)
178 nvault_close( g_Vault );
179}
180public client_connect(id)
181{
182 g_remember_selection[id] = MAX_PISTOLS_MENU;
183 g_remember_selection_pistol[id] = 0;
184
185 get_user_authid( id , g_szAuthID[id] , 34 );
186 get_user_ip(id, g_szAuthIP[id] , 34, 1);
187
188 LoadLevel(id)
189}
190public client_disconnect(id)
191{
192 SaveLevel(id)
193}
194public Message_StatusIcon(iMsgId, MSG_DEST, id)
195{
196 if( !get_pcvar_num(p_Enabled) )
197 return PLUGIN_HANDLED;
198
199 static szIcon[5]
200 get_msg_arg_string(2, szIcon, 4)
201 if( szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z' )
202 {
203 if( get_msg_arg_int(1))
204 {
205 fm_cs_set_user_nobuy(id)
206 return PLUGIN_HANDLED;
207 }
208 }
209
210 return PLUGIN_CONTINUE;
211}
212public fwd_Touch(ent, id)
213{
214 if (!is_user_alive(id) || !pev_valid( ent ) )
215 return FMRES_IGNORED;
216
217 static szEntModel[32];
218 pev( ent , pev_model , szEntModel , 31 );
219
220 for (new level_equip_id = PlayerLevel[id] + 1; level_equip_id < MAXLEVEL; level_equip_id++)
221 {
222 if ( equali( szEntModel , WEAPONMDL[level_equip_id] ) )
223 {
224 return FMRES_SUPERCEDE;
225 }
226 }
227
228 return FMRES_IGNORED;
229}
230public fwd_PlayerSpawn(id)
231{
232 if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
233 return;
234
235 g_kills[id] = 0
236 UnaVez[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 task_show_level(task)
440{
441 new id = task - TASK_SHOW_LEVEL
442
443 if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
444 return;
445
446 set_hudmessage(255, 0, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
447 ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
448
449 set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
450}
451public showlevel(id)
452{
453 if ( !get_pcvar_num(p_Enabled) || get_pcvar_num(show_level_text) )
454 return PLUGIN_HANDLED;
455
456 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
457 client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
458
459 return PLUGIN_HANDLED;
460}
461public descriptionx(id)
462{
463 new szMotd[2048], szTitle[64], iPos = 0
464 format(szTitle, 63, "Info")
465 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>")
466 iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
467 iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
468
469 iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
470
471 show_motd(id, szMotd, szTitle)
472 return PLUGIN_HANDLED;
473}
474public check_level(id)
475{
476 if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
477 {
478 while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
479 {
480 PlayerLevel[id]++;
481
482 if(is_user_alive(id))
483 {
484 if ( get_pcvar_num(level_style) )
485 {
486 give_weapon(id);
487 }
488
489 new p_origin[3];
490 get_user_origin(id, p_origin, 0);
491
492 set_sprite(p_origin, levelspr, 30)
493 set_sprite(p_origin, levelspr2, 30)
494 }
495 emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
496
497 static name[32] ; get_user_name(id, name, charsmax(name));
498 client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", name, PlayerLevel[id]);
499 }
500 }
501}
502// Main Menu Info
503public show_main_menu_info(id)
504{
505 if ( !get_pcvar_num(p_Enabled) )
506 return;
507
508 static menu[510], len;
509 len = 0;
510
511 new xKeys3 = MENU_KEY_0|MENU_KEY_1;
512
513 // Title
514 len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
515
516 len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
517 if ( get_pcvar_num(show_rank) )
518 {
519 xKeys3 |= (MENU_KEY_2)
520
521 len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
522 }
523 else
524 {
525 len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
526 }
527
528 if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
529 {
530 xKeys3 |= (MENU_KEY_3)
531
532 len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "ITEM_LIST")
533 if ( is_user_alive(id) )
534 {
535 xKeys3 |= (MENU_KEY_4)
536
537 len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "UNLOCKS_SHOP_TEXT")
538 }
539 }
540
541 len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
542
543 show_menu(id, xKeys3, menu, -1, "Main Menu")
544}
545public main_menu_info(id, key)
546{
547 switch (key)
548 {
549 case 0:
550 {
551 show_main_menu_info(id)
552
553 descriptionx(id)
554 }
555 case 1:
556 {
557 showtop20(id)
558
559 show_main_menu_info(id)
560 }
561 case 2:
562 {
563 show_main_menu_info(id)
564
565 if(callfunc_begin( "display_items","gunxpmod_shop.amxx") == 1)
566 {
567 callfunc_push_int( id );
568 callfunc_end();
569 }
570 }
571 case 3:
572 {
573 if(callfunc_begin("item_upgrades","gunxpmod_shop.amxx") == 1)
574 {
575 callfunc_push_int( id );
576 callfunc_end();
577 }
578 }
579 case 9:
580 {
581 return PLUGIN_HANDLED;
582 }
583 }
584
585 return PLUGIN_HANDLED;
586}
587// Main Menu Level Style
588public show_main_menu_level(id)
589{
590 if ( !is_user_alive(id) ) return;
591 if(UnaVez[id] >= 1) {
592 client_printcolor(id, "/g[Zombie Hell] /ySolo puedes volver a escoger tus /ctrArmas Nuevamente /yuna vez por ronda.");
593 return;
594 }
595 new szInfo[60], szChooseT[40], szLastG[40];
596 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
597
598 new menu = menu_create(szInfo , "main_menu_level");
599
600 formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
601 menu_additem(menu, szChooseT, "1", 0);
602
603 formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
604 menu_additem(menu, szLastG, "2", 0);
605
606 new szExit[15];
607 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
608
609 menu_setprop(menu, MPROP_EXITNAME, szExit);
610
611 menu_display(id , menu , 0);
612}
613public main_menu_level(id , menu , item)
614{
615 if ( !is_user_alive(id) )
616 {
617 return PLUGIN_HANDLED;
618 }
619
620 #if defined ZOMBIE_PLAGUE
621 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
622 return PLUGIN_HANDLED;
623 #endif
624
625 if(item == MENU_EXIT)
626 {
627 menu_destroy(menu);
628 return PLUGIN_HANDLED;
629 }
630 new data[6], iName[64];
631 new access, callback;
632 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
633
634 new item_id = str_to_num(data);
635
636 switch (item_id)
637 {
638 case 1: // show pistols
639 {
640 show_menu_level_pistol(id);
641 UnaVez[id]++
642 }
643 case 2: // last weapons
644 {
645 if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
646 {
647 give_weapon_menu(id, g_remember_selection[id], 1, 1);
648 give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
649 }
650 else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
651 {
652 give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
653 }
654 UnaVez[id]++
655 }
656 }
657
658 menu_destroy(menu);
659 return PLUGIN_HANDLED;
660}
661// Menu Level Style Pistols
662public show_menu_level_pistol(id)
663{
664 if ( !is_user_alive(id) )
665 return;
666
667 new szInfo[60];
668 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
669
670 new menu = menu_create(szInfo , "pistol_menu");
671
672 for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
673 {
674 new szItems[60], szTempid[32];
675
676 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
677 {
678 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
679
680 num_to_str(item_id, szTempid, charsmax(szTempid) );
681
682 menu_additem(menu, szItems, szTempid, 0);
683 }
684
685 else
686 {
687 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
688 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
689 }
690 }
691
692 new szNext[15], szBack[15], szExit[15];
693 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
694 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
695 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
696
697 menu_setprop(menu, MPROP_BACKNAME, szBack)
698 menu_setprop(menu, MPROP_NEXTNAME, szNext)
699 menu_setprop(menu, MPROP_EXITNAME, szExit)
700
701 menu_display(id , menu , 0);
702}
703public pistol_menu(id , menu , item)
704{
705 if ( !is_user_alive(id) )
706 {
707 return PLUGIN_HANDLED;
708 }
709
710 #if defined ZOMBIE_PLAGUE
711 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
712 return PLUGIN_HANDLED;
713 #endif
714
715 if(item == MENU_EXIT)
716 {
717 menu_destroy(menu);
718 return PLUGIN_HANDLED;
719 }
720 new data[6], iName[64];
721 new access, callback;
722 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
723
724 new item_id = str_to_num(data);
725
726 g_remember_selection_pistol[id] = item_id;
727
728 give_weapon_menu(id, item_id, 1, 1);
729
730 if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
731 {
732 show_menu_level(id);
733 }
734
735 menu_destroy(menu);
736 return PLUGIN_HANDLED;
737}
738// Menu Level Style Primary
739public show_menu_level(id)
740{
741 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
742 return;
743
744 new szInfo[100];
745 formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
746
747 new menu = menu_create(szInfo , "level_menu");
748
749 for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
750 {
751 new szItems[512], szTempid[32];
752
753 if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
754 {
755 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
756
757 num_to_str(item_id, szTempid, charsmax(szTempid) );
758
759 menu_additem(menu, szItems, szTempid, 0);
760 }
761 else
762 {
763 formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
764 menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
765 }
766 }
767
768 new szNext[15], szBack[15], szExit[15];
769 formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
770 formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
771 formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
772
773 menu_setprop(menu, MPROP_BACKNAME, szBack)
774 menu_setprop(menu, MPROP_NEXTNAME, szNext)
775 menu_setprop(menu, MPROP_EXITNAME, szExit)
776
777 menu_display(id , menu , 0);
778}
779public level_menu(id , menu , item)
780{
781 if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
782 {
783 return PLUGIN_HANDLED;
784 }
785
786 #if defined ZOMBIE_PLAGUE
787 if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
788 return PLUGIN_HANDLED;
789 #endif
790
791 if(item == MENU_EXIT)
792 {
793 menu_destroy(menu);
794 return PLUGIN_HANDLED;
795 }
796 new data[6], iName[64];
797 new access, callback;
798 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
799
800 new item_id = str_to_num(data);
801
802 g_remember_selection[id] = item_id;
803
804 give_weapon_menu(id, item_id, 0, 0);
805
806 menu_destroy(menu);
807 return PLUGIN_HANDLED;
808}
809public CallbackMenu(id, menu, item)
810{
811 return ITEM_DISABLED;
812}
813
814// Selected by menu or remember selection and give item
815public give_weapon_menu(id, selection, strip, givegren)
816{
817 #if defined ZOMBIE_SWARM
818 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
819 {
820 if ( strip )
821 {
822 StripPlayerWeapons(id);
823 }
824
825 if ( get_pcvar_num(enable_grenades) && givegren )
826 {
827 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
828 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
829 }
830
831 give_item(id, WEAPONCONST[selection]);
832
833 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
834 }
835 #endif
836
837 #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
838 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
839 {
840 if ( strip )
841 {
842 StripPlayerWeapons(id);
843 }
844
845 if ( get_pcvar_num(enable_grenades) && givegren )
846 {
847 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
848 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
849 }
850
851 give_item(id, WEAPONCONST[selection]);
852
853 cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
854 }
855 #endif
856}
857public give_weapon(id)
858{
859 #if defined ZOMBIE_SWARM
860 if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
861 {
862 StripPlayerWeapons(id);
863
864 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
865 {
866 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
867 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
868 }
869
870 give_item(id, WEAPONCONST[PlayerLevel[id]]);
871
872 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
873 }
874 #endif
875
876 #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
877 if(is_user_alive(id) && get_pcvar_num(p_Enabled))
878 {
879 StripPlayerWeapons(id);
880
881 if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
882 {
883 give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
884 give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
885 }
886
887 give_item(id, WEAPONCONST[PlayerLevel[id]]);
888
889 cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
890 }
891 #endif
892}
893public set_sprite(p_origin[3], sprite, radius)
894{
895 // Explosion
896 message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
897 write_byte(TE_EXPLOSION)
898 write_coord(p_origin[0])
899 write_coord(p_origin[1])
900 write_coord(p_origin[2])
901 write_short(sprite)
902 write_byte(radius)
903 write_byte(15)
904 write_byte(4)
905 message_end()
906}
907//Shows Top 20
908public showtop20(id)
909{
910 if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
911 return;
912
913 static Sort[33][2];
914 new players[32],num,count,index;
915 get_players(players,num);
916
917 for(new i = 0; i < num; i++)
918 {
919 index = players[i];
920 Sort[count][0] = index;
921 Sort[count][1] = PlayerXp[index];
922 count++;
923 }
924
925 SortCustom2D(Sort,count,"CompareXp");
926 new motd[1501],iLen;
927 iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
928 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
929
930 new y = clamp(count,0,20);
931 new name[32],kindex;
932
933 for(new x = 0; x < y; x++)
934 {
935 kindex = Sort[x][0];
936 get_user_name(kindex,name,sizeof name - 1);
937 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, name, Sort[x][1]);
938 }
939 iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
940 show_motd(id,motd, "GunXpMod Top 20");
941}
942public CompareXp(elem1[], elem2[])
943{
944 if(elem1[1] > elem2[1])
945 return -1;
946 else if(elem1[1] < elem2[1])
947 return 1;
948
949 return 0;
950}
951// Command to set player Level
952public cmd_give_level(id, level, cid)
953{
954 if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
955 {
956 return PLUGIN_HANDLED;
957 }
958
959 new Arg1[64], Target
960 read_argv(1, Arg1, 63)
961 Target = cmd_target(id, Arg1, 0)
962
963 new iLevel[32], Value
964 read_argv(2, iLevel, 31)
965 Value = str_to_num(iLevel)
966
967 if(iLevel[0] == '-')
968 {
969 console_print(id, "You can't have a '-' in the value!")
970 return PLUGIN_HANDLED;
971 }
972
973 if(!Target)
974 {
975 console_print(id, "Target not found!")
976 return PLUGIN_HANDLED;
977 }
978
979 if(Value > MAXLEVEL-1)
980 {
981 console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
982 return PLUGIN_HANDLED;
983 }
984
985 if(Value < 1)
986 {
987 console_print(id, "You can't set less than 1!")
988 return PLUGIN_HANDLED;
989 }
990
991 new AdminName[32]
992 get_user_name(id, AdminName, 31)
993
994 new TargetName[32]
995 get_user_name(Target, TargetName, 31)
996
997 PlayerLevel[Target] = Value - 1
998 PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
999 check_level(Target)
1000
1001 client_printcolor(Target, "/gADMIN: /ctr%s /yha establecido tu nivel a /g%d", AdminName, Value)
1002
1003 return PLUGIN_HANDLED;
1004}
1005
1006// ============================================================//
1007// [~ Saving datas ~] //
1008// ============================================================//
1009public MySQLx_Init()
1010{
1011 if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) )
1012 return;
1013
1014 new szHost[64], szUser[32], szPass[32], szDB[128];
1015
1016 get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
1017 get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
1018 get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
1019 get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
1020
1021 g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
1022
1023 for ( new i = 0; i < sizeof szTables; i++ )
1024 {
1025 SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
1026 }
1027}
1028public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1029{
1030 if( iFailState == TQUERY_CONNECT_FAILED
1031 || iFailState == TQUERY_QUERY_FAILED )
1032 {
1033 log_amx( "%s", szError );
1034
1035 return;
1036 }
1037}
1038
1039SaveLevel(id)
1040{
1041 if ( get_pcvar_num(savexp) )
1042 {
1043 if ( !get_pcvar_num(save_type) )
1044 {
1045 new szData[256];
1046 new szKey[64];
1047
1048 formatex( szKey , 63 , "%s-ID" , g_szAuthID[id]);
1049 formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
1050
1051 nvault_set( g_Vault , szKey , szData );
1052 }
1053 else
1054 {
1055 static szQuery[ 128 ];
1056
1057 formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthID[id] , PlayerLevel[id], PlayerXp[id] );
1058
1059 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
1060 }
1061 }
1062 else
1063 {
1064 if ( !get_pcvar_num(save_type) )
1065 {
1066 new szData[256];
1067 new szKey[64];
1068
1069 formatex( szKey , 63 , "%s-IP" , g_szAuthIP[id] );
1070 formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
1071
1072 nvault_set( g_Vault , szKey , szData );
1073 }
1074 else
1075 {
1076 static szQuery[ 128 ];
1077
1078 formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthIP[id] , PlayerLevel[id], PlayerXp[id] );
1079
1080 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
1081 }
1082 }
1083}
1084
1085LoadLevel(id)
1086{
1087 if ( get_pcvar_num(savexp) )
1088 {
1089 if ( !get_pcvar_num(save_type) )
1090 {
1091 new szData[256];
1092 new szKey[40];
1093
1094 formatex( szKey , 39 , "%s-ID" , g_szAuthID[id] );
1095
1096 formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
1097
1098 nvault_get(g_Vault, szKey, szData, 255)
1099
1100 replace_all(szData , 255, "#", " ")
1101 new xp[32], level[32]
1102 parse(szData, level, 31, xp, 31)
1103 PlayerLevel[id] = str_to_num(level)
1104 PlayerXp[id] = str_to_num(xp)
1105 }
1106 else
1107 {
1108 static szQuery[ 128 ], iData[ 1 ];
1109 formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthID[id] );
1110
1111 iData[ 0 ] = id;
1112 SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
1113 }
1114 }
1115 else
1116 {
1117 if ( !get_pcvar_num(save_type) )
1118 {
1119 new szData[256];
1120 new szKey[40];
1121
1122 formatex( szKey , 39 , "%s-IP" , g_szAuthIP[id] );
1123
1124 formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
1125
1126 nvault_get(g_Vault, szKey, szData, 255)
1127
1128 replace_all(szData , 255, "#", " ")
1129 new xp[32], level[32]
1130 parse(szData, level, 31, xp, 31)
1131 PlayerLevel[id] = str_to_num(level)
1132 PlayerXp[id] = str_to_num(xp)
1133 }
1134 else
1135 {
1136 static szQuery[ 128 ], iData[ 1 ];
1137 formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthIP[id] );
1138
1139 iData[ 0 ] = id;
1140 SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
1141 }
1142 }
1143}
1144public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1145{
1146 if( iFailState == TQUERY_CONNECT_FAILED
1147 || iFailState == TQUERY_QUERY_FAILED )
1148 {
1149 log_amx( "%s", szError );
1150
1151 return;
1152 }
1153 else
1154 {
1155 new id = iData[ 0 ];
1156
1157 new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
1158 new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
1159
1160 while (SQL_MoreResults(hQuery))
1161 {
1162 PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
1163 PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
1164
1165 SQL_NextRow(hQuery)
1166 }
1167 }
1168}
1169public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
1170{
1171 if( iFailState == TQUERY_CONNECT_FAILED
1172 || iFailState == TQUERY_QUERY_FAILED )
1173 {
1174 log_amx( "%s", szError );
1175
1176 return;
1177 }
1178}
1179// ============================================================//
1180// [~ Natives ~] //
1181// ============================================================//
1182// Native: get_user_xp
1183public native_get_user_xp(id)
1184{
1185 return PlayerXp[id];
1186}
1187// Native: set_user_xp
1188public native_set_user_xp(id, amount)
1189{
1190 PlayerXp[id] = amount;
1191}
1192// Native: get_user_level
1193public native_get_user_level(id)
1194{
1195 return PlayerLevel[id];
1196}
1197// Native: set_user_xp
1198public native_set_user_level(id, amount)
1199{
1200 PlayerLevel[id] = amount;
1201}
1202// Native: Gets user level by Xp
1203public native_get_user_max_level(id)
1204{
1205 return LEVELS[PlayerLevel[id]];
1206}
1207// ============================================================//
1208// [~ Stocks ~] //
1209// ============================================================//
1210stock client_printcolor(const id, const input[], any:...)
1211{
1212 new count = 1, players[32];
1213 static msg[191];
1214 vformat(msg,190,input,3);
1215 replace_all(msg,190,"/g","^4");// green txt
1216 replace_all(msg,190,"/y","^1");// orange txt
1217 replace_all(msg,190,"/ctr","^3");// team txt
1218 replace_all(msg,190,"/w","^0");// team txt
1219 if (id) players[0] = id; else get_players(players,count,"ch");
1220 for (new i = 0; i < count; i++)
1221 if (is_user_connected(players[i]))
1222 {
1223 message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
1224 write_byte(players[i]);
1225 write_string(msg);
1226 message_end();
1227 }
1228}
1229public StripPlayerWeapons(id)
1230{
1231 strip_user_weapons(id)
1232 set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
1233 give_item(id, "weapon_knife");
1234}