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