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