· 10 years ago · May 09, 2016, 12:24 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <cstrike>
4#include <colorchat>
5#include <engine>
6#include <fakemeta>
7#include <fun>
8#include <hamsandwich>
9#include <playermodel>
10
11#define USE_SQL
12
13#if defined USE_SQL
14#include <sqlx>
15#include <geoip>
16#endif
17//Timer icon
18new iconstatus
19
20#define KZ_LEVEL ADMIN_LEVEL_C
21#define MSG MSG_ONE_UNRELIABLE
22#define MAX_ENTITYS 900+15*32
23#define IsOnLadder(%1) (pev(%1, pev_movetype) == MOVETYPE_FLY)
24#define VERSION ""
25#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
26#define WARNING_TIME 10 // Start warning the user this many seconds before they are about to be kicked.
27#define CHECK_FREQ 5 // This is also the warning message frequency.
28
29
30#define SCOREATTRIB_NONE 0
31#define SCOREATTRIB_DEAD (1 << 0)
32#define SCOREATTRIB_BOMB (1 << 1)
33#define SCOREATTRIB_VIP (1 << 2)
34
35
36new const FL_ONGROUND2 = (FL_ONGROUND | FL_PARTIALGROUND | FL_INWATER | FL_CONVEYOR | FL_FLOAT)
37new const KZ_STARTFILE[] = "start.ini"
38new const KZ_STARTFILE_TEMP[] = "temp_start.ini"
39
40new g_roundtime
41new g_msgDeathMsg
42new g_oldangles[33][3]
43new g_afktime[33]
44
45new g_soundlist[] =
46{
47 "doors/doorstop1.wav", "doors/doorstop2.wav", "doors/doorstop3.wav",
48 "player/pl_pain2.wav", "player/pl_pain3.wav","player/pl_pain4.wav",
49 "player/pl_pain5.wav", "player/pl_pain6.wav", "player/pl_pain7.wav",
50 "player/bhit_kevlar-1.wav", "player/bhit_flesh-1.wav", "player/bhit_flesh-2.wav",
51 "player/bhit_flesh-3.wav","player/pl_swim1.wav", "player/pl_swim2.wav",
52 "player/pl_swim3.wav", "player/pl_swim4.wav", "player/waterrun.wav",
53 "weapons/knife_hit1.wav", "weapons/knife_hit2.wav", "weapons/knife_hit3.wav",
54 "weapons/knife_hit4.wav", "weapons/knife_stab.wav", "weapons/knife_deploy1.wav",
55 "items/gunpickup2.wav", "items/9mmclip1.wav", "common/bodysplat.wav", "items/nvg_on.wav",
56 "items/nvg_off.wav"
57}
58
59new const g_RemoveEntities[][] =
60{
61 "func_bomb_target", "info_bomb_target", "hostage_entity", /*"func_breakable",*/
62 "monster_scientist", "func_hostage_rescue", "info_hostage_rescue",
63 "info_vip_start", "func_vip_safetyzone", "func_escapezone",
64 "armoury_entity", "game_player_equip", "player_weaponstrip",
65 "info_deathmatch_start" // TT Spawn :D
66};
67
68//Used for Hook
69new bool:hook[33]
70new bool:usedhook[33]
71new hook_to[33][3]
72new hook_speed_cvar
73new bool:has_hook[33]
74
75#if defined USE_SQL
76new Handle:g_SqlTuple
77new Handle:SqlConnection
78new g_Error[512]
79new kz_sql_host
80new kz_sql_user
81new kz_sql_pass
82new kz_sql_db
83new kz_sql_name
84new kz_sql_files
85#else
86new Float:Pro_Times[24]
87new Pro_AuthIDS[24][32]
88new Pro_Names[24][32]
89new Pro_Date[24][32]
90new Float:Noob_Tiempos[24]
91new Noob_AuthIDS[24][32]
92new Noob_Names[24][32]
93new Noob_Date[24][32]
94new Noob_CheckPoints[24]
95new Noob_GoChecks[24]
96new Noob_Weapon[24][32]
97#endif
98
99new Float:g_flRoundStartGameTime
100new gmsgSendAudio, g_iMsgSendAudio
101new Trie:g_tStartRoundSounds
102
103new Float:angles[3]
104new Float:CPangles[33][2][3]
105new Float:Checkpoints[33][2][3]
106new Float:timer_time[33]
107new Float:g_pausetime[33]
108new Float:antihookcheat[33]
109new Float:SpecLoc[33][3]
110new Float:NoclipPos[33][3]
111new Float:PauseOrigin[33][3]
112new Float:SavedStart[33][3]
113new Float:DefaultStartPos[3]
114new Float:DefaultStartPosAng[3]
115new Float:CustomStartPos[33][2][3]
116
117
118new Float:SavedTime[33]
119new SavedChecks[33]
120new SavedGoChecks[33]
121new SavedScout[33]
122new SavedOrigins[33][3]
123
124new bool:g_spawned[33] = {true, ...}
125new bool:g_bCpAlternate[33]
126new bool:timer_started[33]
127new bool:IsPaused[33]
128new bool:WasPaused[33]
129new bool:firstspawn[33]
130new bool:user_has_scout[33]
131new bool:HealsOnMap
132new bool:KeysOn[33]
133new bool:gWaterEntity[MAX_ENTITYS]
134new bool:gWaterFound
135new bool:CustomStart[33]
136new bool:DefaultStart
137new bool:AutoStart[33]
138
139new Trie:g_tStarts
140new Trie:g_tStops;
141new checknumbers[33]
142new gochecknumbers[33]
143new chatorhud[33]
144new ShowTime[33]
145new MapName[64]
146new Kzdir[128]
147new SavePosDir[128]
148#if !defined USE_SQL
149new Topdir[128]
150#endif
151
152
153new tempid
154new kz_cheats
155new kz_godmode
156new kz_teleport_notification
157new kz_teleport_height
158new kz_cp_angles
159new kz_block_ct
160new kz_checkpoints
161new kz_cheatdetect
162new kz_spawn_mainmenu
163new kz_show_timer
164new kz_chatorhud
165new kz_hud_color
166new hud_message
167new kz_other_weapons
168new kz_maxspeedmsg
169new kz_drop_weapons
170new kz_remove_drops
171new kz_pick_weapons
172new kz_reload_weapons
173new kz_use_radio
174new kz_pause
175new kz_noclip_pause
176new kz_vip
177new kz_respawn_ct
178new kz_save_pos
179new kz_save_pos_gochecks
180new kz_spec_saves
181new kz_save_autostart
182new kz_top15_authid
183
184new const other_weapons[7] =
185{
186 CSW_P90, CSW_FAMAS, CSW_SG552,
187 CSW_M4A1, CSW_M249, CSW_AK47, CSW_AWP
188}
189
190new const other_weapons_name[7][] =
191{
192 "weapon_p90", "weapon_famas", "weapon_sg552",
193 "weapon_m4a1", "weapon_m249", "weapon_ak47", "weapon_awp"
194}
195
196new const g_weaponsnames[][] =
197{
198 "", // NULL
199 "p228", "shield", "scout", "hegrenade", "xm1014", "c4",
200 "mac10", "aug", "smokegrenade", "elite", "fiveseven",
201 "ump45", "sg550", "galil", "famas", "usp", "glock18",
202 "awp", "mp5navy", "m249", "m3", "m4a1", "tmp", "g3sg1",
203 "flashbang", "deagle", "sg552", "ak47", "knife", "p90",
204 "glock", "elites", "fn57", "mp5", "vest", "vesthelm",
205 "flash", "hegren", "sgren", "defuser", "nvgs", "primammo",
206 "secammo", "km45", "9x19mm", "nighthawk", "228compact",
207 "12gauge", "autoshotgun", "mp", "c90", "cv47", "defender",
208 "clarion", "krieg552", "bullpup", "magnum", "d3au1",
209 "krieg550"
210}
211
212new const g_block_commands[][]=
213{
214 "buy", "buyammo1", "buyammo2", "buyequip",
215 "cl_autobuy", "cl_rebuy", "cl_setautobuy", "cl_setrebuy"
216
217}
218
219enum
220{
221 TASK_ID_CHECKENT
222};
223
224
225#if defined USE_SQL
226enum
227{
228 TOP_NULL,
229 PRO_TOP,
230 NUB_TOP,
231 LAST_PRO10,
232 PRO_RECORDS,
233 PLAYERS_RANKING,
234 MAPS_STATISTIC
235}
236#endif
237
238// =================================================================================================
239
240public plugin_init()
241{
242 register_plugin("ProKreedz", VERSION, "")
243
244 //Timer icon
245 iconstatus = get_user_msgid("StatusIcon")
246
247 kz_cp_angles = register_cvar("kz_cp_angles","0")
248 kz_block_ct = register_cvar("kz_block_ct","0")
249 kz_checkpoints = register_cvar("kz_checkpoints","1")
250 kz_cheats = register_cvar("kz_cheats","1")
251 kz_godmode = register_cvar("kz_godmode","1")
252 kz_cheatdetect = register_cvar("kz_cheatdetect","1")
253 kz_spawn_mainmenu = register_cvar("kz_spawn_mainmenu", "0")
254 kz_show_timer = register_cvar("kz_show_timer", "1")
255 kz_chatorhud = register_cvar("kz_chatorhud", "2")
256 kz_hud_color = register_cvar("kz_hud_color", "255 255 255")
257 kz_other_weapons = register_cvar("kz_other_weapons","1")
258 kz_drop_weapons = register_cvar("kz_drop_weapons", "1")
259 kz_remove_drops = register_cvar("kz_remove_drops", "0")
260 kz_pick_weapons = register_cvar("kz_pick_weapons", "1")
261 kz_reload_weapons = register_cvar("kz_reload_weapons", "0")
262 kz_maxspeedmsg = register_cvar("kz_maxspeedmsg","1")
263 kz_use_radio = register_cvar("kz_use_radio", "0")
264 kz_pause = register_cvar("kz_pause", "1")
265 kz_noclip_pause = register_cvar("kz_noclip_pause", "1")
266 kz_vip = register_cvar("kz_vip","1")
267 kz_respawn_ct = register_cvar("kz_respawn_ct", "1")
268 kz_spec_saves = register_cvar("kz_spec_saves", "1")
269 kz_save_autostart = register_cvar("kz_save_autostart", "1")
270 kz_teleport_notification = register_cvar("kz_teleport_notification", "1")
271 kz_teleport_height = register_cvar("kz_teleport_height", "75")
272 kz_top15_authid = register_cvar("kz_top15_authid", "1")
273 kz_save_pos = register_cvar("kz_save_pos", "1")
274 kz_save_pos_gochecks = register_cvar("kz_save_pos_gochecks", "1")
275 register_cvar("mp_afktime", "0") // Kick people AFK longer than this time
276 register_cvar("mp_afkminplayers", "0") // Only kick AFKs when there is atleast this many players on the server
277
278 #if defined USE_SQL
279 kz_sql_host = register_cvar("kz_sql_host", "") // Host of DB
280 kz_sql_user = register_cvar("kz_sql_user", "") // Username of DB
281 kz_sql_pass = register_cvar("kz_sql_pass", "", FCVAR_PROTECTED) // Password for DB user
282 kz_sql_db = register_cvar("kz_sql_db", "") // DB Name for the top 15
283 kz_sql_name = register_cvar("kz_sql_server", "") // Name of server
284 kz_sql_files = register_cvar("kz_sql_files", "") // Path of the PHP files
285 #endif
286
287 register_touch("weaponbox", "player", "BlockPickup");
288 register_touch("armoury_entity", "player", "BlockPickup");
289 register_touch("weapon_shield", "player", "BlockPickup");
290
291 register_clcmd("say /tele", "kz_tele_menu")
292 register_clcmd("/cp","CheckPoint")
293 register_clcmd("/gc", "GoCheck")
294 register_clcmd("/tp","GoCheck")
295 register_clcmd("start", "goStart", 0)
296 register_clcmd("drop", "BlockDrop")
297 register_concmd("+hook","hook_on")
298 register_concmd("-hook","hook_off")
299 register_concmd("hook_toggle","hook_toggle",ADMIN_KICK,"Toggles your hook on and off")
300 hook_speed_cvar = register_cvar("hook_speed","5")
301 register_concmd("amx_give_hook","cmd_givetake",ADMIN_KICK,"Give a player the ability to hook <nick>")
302 register_concmd("amx_take_hook","cmd_givetake",ADMIN_KICK,"Take a player's ability to hook <nick>")
303 register_clcmd("chooseteam", "ct")
304 register_clcmd("radio1", "BlockRadio")
305 register_clcmd("radio2", "BlockRadio")
306 register_clcmd("radio3", "BlockRadio")
307
308
309 kz_register_saycmd("clap", "Clap", ADMIN_BAN)
310 kz_register_saycmd("chatorhud", "ChatHud", 0)
311 kz_register_saycmd("cp","CheckPoint",0)
312 kz_register_saycmd("gc", "GoCheck",0)
313 kz_register_saycmd("tp", "GoCheck",0)
314 kz_register_saycmd("teleport", "GoCheck", 0)
315 kz_register_saycmd("gocheck", "GoCheck",0)
316 kz_register_saycmd("stuck", "Stuck", 0)
317 kz_register_saycmd("reset", "reset_checkpoints", 0)
318 kz_register_saycmd("customstart", "Custom", 0)
319 kz_register_saycmd("cs", "Custom", 0)
320 //kz_register_saycmd("savepos", "SavePos", 0)
321 kz_register_saycmd("setstart", "setStart", ADMIN_BAN)
322 kz_register_saycmd("ss", "setStart", ADMIN_BAN)
323 kz_register_saycmd("start", "goStart", 0)
324 kz_register_saycmd("respawn", "goStart", 0)
325 kz_register_saycmd("pause", "Pause", 0)
326 //kz_register_saycmd("god", "GodMode",0)
327 //kz_register_saycmd("godmode", "GodMode", 0)
328 kz_register_saycmd("blockct", "BlockCT", ADMIN_BAN)
329 kz_register_saycmd("kz", "kz_menu", 0)
330 kz_register_saycmd("menu","kz_menu", 0)
331 kz_register_saycmd("training","kz_menu", 0)
332 kz_register_saycmd("model", "model_menu", 0)
333 kz_register_saycmd("models", "model_menu", 0)
334 kz_register_saycmd("nc", "noclip", KZ_LEVEL)
335 kz_register_saycmd("noclip", "noclip", KZ_LEVEL)
336 //kz_register_saycmd("noob10", "NoobTop_show", 0)
337 //kz_register_saycmd("noob15", "NoobTop_show", 0)
338 //kz_register_saycmd("nub10", "NoobTop_show", 0)
339 //kz_register_saycmd("nub15", "NoobTop_show", 0)
340 kz_register_saycmd("pro10", "ProTop_show", 0)
341 kz_register_saycmd("pro15", "ProTop_show", 0)
342 kz_register_saycmd("wr", "ProTop_show", 0)
343 kz_register_saycmd("rank", "Players_Ranking", 0)
344
345 kz_register_saycmd("top15", "top15menu",0)
346 kz_register_saycmd("top10", "top15menu",0)
347 //kz_register_saycmd("showtimer", "ShowTimer_Menu", 0)
348 //kz_register_saycmd("timer", "ShowTimer_Menu", 0)
349 kz_register_saycmd("uptime", "CmdUpTime", ADMIN_BAN);
350 kz_register_saycmd("up", "CmdUpTime", ADMIN_BAN);
351 kz_register_saycmd("ct","ct",0)
352 kz_register_saycmd("spec", "ct", 0)
353 //kz_register_saycmd("scout", "cmdScout", 0)
354 kz_register_saycmd("weapons", "weapons", 0)
355 kz_register_saycmd("guns", "weapons", 0)
356
357
358 #if defined USE_SQL
359 kz_register_saycmd("prorecords", "ProRecs_show", 0)
360 kz_register_saycmd("prorecs", "ProRecs_show", 0)
361 #endif
362
363 register_event("CurWeapon", "curweapon", "be", "1=1")
364 register_event("ResetHUD", "round_start", "be")
365
366 new iEnt
367 iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
368 set_pev(iEnt, pev_classname, "kz_time_think")
369 set_pev(iEnt, pev_nextthink, get_gametime() + 1.0)
370
371 register_forward(FM_Think,"fw_ThinkEntity")
372 register_forward(FM_EmitSound, "block_sound")
373
374
375 RegisterHam(Ham_Use, "func_button", "fwdUse", 0)
376 RegisterHam(Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1)
377 RegisterHam(Ham_Touch, "weaponbox", "FwdSpawnWeaponbox")
378 RegisterHam(Ham_Spawn, "player", "FwdHamPlayerSpawn", 1)
379 RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_P", true);
380 RegisterHam(Ham_Touch, "weaponbox", "GroundWeapon_Touch")
381 RegisterHam( Ham_TakeDamage, "player", "hamTakeDamage" );
382
383 register_message(get_user_msgid("StatusIcon"), "MessageStatusIcon")
384 register_message(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib")
385 register_dictionary("prokreedz.txt")
386
387 register_logevent("LogEvent_Round_Start", 2, "1=Round_Start")
388
389 gmsgSendAudio = get_user_msgid("SendAudio")
390
391 new szStartRoundSounds[][] = {
392 "%!MRAD_LOCKNLOAD",
393 "%!MRAD_MOVEOUT",
394 "%!MRAD_LETSGO",
395 "%!MRAD_GO",
396 "%!MRAD_ELIM",
397 "%!MRAD_GETOUT",
398 "%!MRAD_VIP"
399 }
400
401 g_tStartRoundSounds = TrieCreate()
402 for(new i; i<sizeof(szStartRoundSounds); i++)
403 {
404 TrieSetCell(g_tStartRoundSounds, szStartRoundSounds[i], 1)
405 }
406
407
408 get_mapname(MapName, 63)
409 g_roundtime = get_user_msgid("RoundTime")
410 g_msgDeathMsg = get_user_msgid("DeathMsg")
411 set_msg_block(g_msgDeathMsg,BLOCK_ONCE)
412 set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
413 #if defined USE_SQL
414 set_task(0.2, "plugin_sql")
415 #endif
416 set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
417
418 new kreedz_cfg[128], ConfigDir[64]
419 get_configsdir(ConfigDir, 64)
420 formatex(Kzdir,128, "%s/kz", ConfigDir)
421 if(!dir_exists(Kzdir))
422 mkdir(Kzdir)
423
424 #if !defined USE_SQL
425 formatex(Topdir,128, "%s/top15", Kzdir)
426 if(!dir_exists(Topdir))
427 mkdir(Topdir)
428 #endif
429
430 formatex(SavePosDir, 128, "%s/savepos", Kzdir)
431 if(!dir_exists(SavePosDir))
432 mkdir(SavePosDir)
433
434 formatex(kreedz_cfg,128,"%s/kreedz.cfg", Kzdir)
435
436 if(file_exists(kreedz_cfg))
437 {
438 server_exec()
439 server_cmd("exec %s",kreedz_cfg)
440 }
441
442 for(new i = 0; i < sizeof(g_block_commands) ; i++)
443 register_clcmd(g_block_commands[i], "BlockBuy")
444
445 g_tStarts = TrieCreate()
446 g_tStops = TrieCreate()
447
448 new const szStarts[ ][ ] =
449 {
450 "counter_start", "clockstartbutton", "firsttimerelay", "but_start", "counter_start_button",
451 "multi_start", "timer_startbutton", "start_timer_emi", "gogogo"
452 }
453
454 new const szStops[ ][ ] =
455 {
456 "counter_off", "clockstopbutton", "clockstop", "but_stop", "counter_stop_button",
457 "multi_stop", "stop_counter", "m_counter_end_emi"
458 }
459
460 for(new i = 0; i < sizeof szStarts; i++)
461 TrieSetCell(g_tStarts, szStarts[ i ], 1)
462
463 for(new i = 0; i < sizeof szStops; i++)
464 TrieSetCell(g_tStops, szStops[ i ], 1)
465}
466
467#if defined USE_SQL
468public plugin_sql()
469{
470 new host[64], user[64], pass[64], db[64]
471
472 get_pcvar_string(kz_sql_host, host, 63)
473 get_pcvar_string(kz_sql_user, user, 63)
474 get_pcvar_string(kz_sql_pass, pass, 63)
475 get_pcvar_string(kz_sql_db, db, 63)
476
477 g_SqlTuple = SQL_MakeDbTuple(host, user, pass, db)
478
479 new ErrorCode
480 SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
481
482 if(!SqlConnection)
483 {
484 server_print("[XJ] TOP15 SQL: Could not connect to SQL database.!")
485 log_amx("[XJ] TOP15 SQL: Could not connect to SQL database.")
486 return pause("a")
487 }
488
489 new createinto[1001]
490 formatex(createinto, 1000, "CREATE TABLE IF NOT EXISTS `kz_pro15` (`mapname` varchar(64) NOT NULL, `authid` varchar(64) NOT NULL, `country` varchar(6) NOT NULL, `name` varchar(64) NOT NULL, `time` decimal(65,2) NOT NULL, `date` datetime NOT NULL, `weapon` varchar(64) NOT NULL, `server` varchar(64) NOT NULL)")
491 SQL_ThreadQuery(g_SqlTuple,"QueryHandle", createinto)
492 formatex(createinto, 1000, "CREATE TABLE IF NOT EXISTS `kz_nub15` (`mapname` varchar(64) NOT NULL, `authid` varchar(64) NOT NULL, `country` varchar(6) NOT NULL, `name` varchar(64) NOT NULL, `time`decimal(65,2) NOT NULL, `date` datetime NOT NULL, `weapon` varchar(64) NOT NULL, `server` varchar(64) NOT NULL, `checkpoints` real NOT NULL, `gocheck` real NOT NULL)")
493 SQL_ThreadQuery(g_SqlTuple,"QueryHandle", createinto)
494
495 return PLUGIN_CONTINUE
496}
497
498public QueryHandle(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
499{
500 if(iFailState != TQUERY_SUCCESS)
501 {
502 log_amx("[XJ] TOP15 SQL: SQL Error #%d - %s", iErrnum, szError)
503 ColorChat(0, GREEN, "[XJ]^x01: Warning the SQL Tops can not be saved.")
504 }
505
506 server_print("[XJ] Server Sending Info to SQL Server")
507
508 return PLUGIN_CONTINUE
509}
510#endif
511
512public plugin_precache()
513{
514 hud_message = CreateHudSyncObj()
515 RegisterHam(Ham_Spawn, "func_door", "FwdHamDoorSpawn", 1)
516 precache_sound("weapons/xbow_hit2.wav")
517 //precache_sound("items/tr_kevlar.wav");
518 precache_model("models/player/clone/clone.mdl");
519 precache_model("models/player/droid/droid.mdl");
520 precache_sound("vox/woop.wav");
521 precache_sound("buttons/bell1.wav");
522 precache_sound("fun/clap.wav");
523 register_forward(FM_Spawn, "FwdSpawn", 0);
524}
525
526public plugin_cfg()
527{
528 #if !defined USE_SQL
529 for (new i = 0 ; i < 15; ++i)
530 {
531 Pro_Times[i] = 999999999.00000;
532 Noob_Tiempos[i] = 999999999.00000;
533 }
534
535 read_pro15()
536 read_Noob15()
537 #endif
538
539 new startcheck[100], data[256], map[64], x[13], y[13], z[13], alpha[13], beta[13], gamma[13];
540 formatex(startcheck, 99, "%s/%s", Kzdir, KZ_STARTFILE)
541 new f = fopen(startcheck, "rt")
542 while(!feof(f))
543 {
544 fgets(f, data, sizeof data - 1)
545 parse(data, map, 63, x, 12, y, 12, z, 12, alpha, 12, beta, 12, gamma, 12)
546
547 if(equali(map, MapName))
548 {
549 DefaultStartPos[0] = str_to_float(x)
550 DefaultStartPos[1] = str_to_float(y)
551 DefaultStartPos[2] = str_to_float(z)
552
553 DefaultStartPosAng[0] = str_to_float(alpha)
554 DefaultStartPosAng[1] = str_to_float(beta)
555 DefaultStartPosAng[2] = str_to_float(gamma)
556
557 DefaultStart = true
558 break;
559 }
560 }
561 fclose(f)
562
563 new ent = -1;
564 while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "func_water")) != 0)
565 {
566 if(!gWaterFound)
567 {
568 gWaterFound = true;
569 }
570
571 gWaterEntity[ent] = true;
572 }
573
574 ent = -1;
575 while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "func_illusionary")) != 0)
576 {
577 if(pev(ent, pev_skin) == CONTENTS_WATER)
578 {
579 if(!gWaterFound)
580 {
581 gWaterFound = true;
582 }
583
584 gWaterEntity[ent] = true;
585 }
586 }
587
588 ent = -1;
589 while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "func_conveyor")) != 0)
590 {
591 if(pev(ent, pev_spawnflags) == 3)
592 {
593 if(!gWaterFound)
594 {
595 gWaterFound = true;
596 }
597
598 gWaterEntity[ent] = true;
599 }
600 }
601}
602
603public checkPlayers() {
604 for (new i = 1; i <= get_maxplayers(); i++) {
605 if (is_user_alive(i) && !(cs_get_user_team(i) == CS_TEAM_SPECTATOR) && !(get_user_flags(i)&ADMIN_LEVEL_C) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
606 new newangle[3]
607 get_user_origin(i, newangle)
608
609 if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
610 g_afktime[i] += CHECK_FREQ
611 //check_afktime(i)
612 } else {
613 g_oldangles[i][0] = newangle[0]
614 g_oldangles[i][1] = newangle[1]
615 g_oldangles[i][2] = newangle[2]
616 g_afktime[i] = 0
617 }
618 }
619 }
620 return PLUGIN_HANDLED
621}
622
623//check_afktime(id) {
624// new numplayers = get_playersnum()
625// new minplayers = get_cvar_num("mp_afkminplayers")
626//
627// if (!IsPaused[id])
628// {
629// if (numplayers >= minplayers) {
630// new maxafktime = get_cvar_num("mp_afktime")
631// if (maxafktime < MIN_AFK_TIME) {
632// log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
633// maxafktime = MIN_AFK_TIME
634// set_cvar_num("mp_afktime", MIN_AFK_TIME)
635// }
636//
637// if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
638// new timeleft = maxafktime - g_afktime[id]
639// client_print(id, print_chat, "[AFK Kicker] You have %i seconds to move or you will be kicked for being AFK.", timeleft)
640// } else if (g_afktime[id] > maxafktime) {
641// //new name[32]
642// //get_user_name(id, name, 31)
643// //client_print(0, print_chat, "[AFK Kicker] %s was kicked for being AFK longer than %i seconds.", name, maxafktime)
644// //log_amx("%s was kicked for being AFK longer than %i seconds.", name, maxafktime)
645// server_cmd("kick #%d ^"You were kicked for being AFK longer than %i seconds.^"", get_user_userid(id), maxafktime)
646// }
647// }
648// }
649//}
650
651public round_start(id)
652{
653 g_spawned[id] = false
654 new sid[1]
655 sid[0] = id
656 set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
657
658 kz_reset_data(id)
659}
660
661public delayedSpawn(sid[]) {
662 get_user_origin(sid[0], g_oldangles[sid[0]])
663 g_spawned[sid[0]] = true
664 return PLUGIN_HANDLED
665}
666
667public LogEvent_Round_Start()
668{
669 g_flRoundStartGameTime = get_gametime()
670 if( !g_iMsgSendAudio )
671 {
672 g_iMsgSendAudio = register_message(gmsgSendAudio, "Message_SendAudio")
673 }
674}
675
676public Message_SendAudio()
677{
678 if(get_gametime() != g_flRoundStartGameTime)
679 {
680 unregister_message(gmsgSendAudio, g_iMsgSendAudio)
681 g_iMsgSendAudio = 0
682 return PLUGIN_CONTINUE
683 }
684
685 new szArg2[18]
686 get_msg_arg_string(2, szArg2, charsmax(szArg2))
687 if( TrieKeyExists(g_tStartRoundSounds, szArg2) )
688 {
689 if( get_msg_block(SVC_TEMPENTITY) == BLOCK_NOT )
690 {
691 set_msg_block(SVC_TEMPENTITY, BLOCK_ONCE)
692 }
693 return PLUGIN_HANDLED
694 }
695
696 return PLUGIN_CONTINUE
697}
698
699/*================================================================================================*/
700/************************************** [Remove Entitys] ******************************************/
701/*=============================================================================R=E=Y=M=O=N==A=R=G=*/
702
703public FwdSpawn(ent)
704{
705 if( pev_valid(ent) )
706 {
707 set_task(0.1, "TaskDelayedCheck", ent + TASK_ID_CHECKENT, "", 0, "", 0);
708
709 return FMRES_HANDLED;
710 }
711
712 return FMRES_IGNORED;
713}
714
715public TaskDelayedCheck(ent)
716{
717 ent -= TASK_ID_CHECKENT;
718
719 if( !pev_valid(ent) )
720 {
721 return PLUGIN_CONTINUE;
722 }
723
724 new class[32]
725 pev(ent, pev_classname, class, 32);
726
727 for( new i; i < sizeof(g_RemoveEntities); i++ )
728 {
729 if( equal(class, g_RemoveEntities[i], 0) )
730 {
731 engfunc(EngFunc_RemoveEntity, ent);
732 break;
733 }
734 }
735
736 return PLUGIN_CONTINUE;
737}
738
739/*================================================================================================*/
740
741public client_command(id)
742{
743
744 new sArg[13];
745 if(read_argv(0, sArg, 12) > 11)
746 {
747 return PLUGIN_CONTINUE;
748 }
749
750 for(new i = 0; i < sizeof(g_weaponsnames); i++)
751 {
752 if(equali(g_weaponsnames[i], sArg, 0))
753 {
754 return PLUGIN_HANDLED;
755 }
756 }
757 return PLUGIN_CONTINUE;
758}
759
760
761// =================================================================================================
762// Fun Sounds
763// =================================================================================================
764
765public Clap(id)
766{
767 if(!(get_user_flags(id) & ADMIN_BAN))
768 return PLUGIN_HANDLED
769
770 client_cmd(0, "spk fun/clap.wav")
771
772 return PLUGIN_HANDLED
773}
774
775
776
777// =================================================================================================
778// Global Functions
779// =================================================================================================
780
781public Pause(id)
782{
783
784 if (get_pcvar_num(kz_pause) == 0)
785 {
786 client_print(id, print_center, "Pause is currently disabled");
787
788 return PLUGIN_HANDLED
789 }
790
791 if(! is_user_alive(id))
792 {
793 client_print(id, print_center, "You must be alive to use this command");
794 return PLUGIN_HANDLED
795 }
796
797
798 if(!IsPaused[id])
799 {
800 if(! timer_started[id])
801 {
802 client_print(id, print_center, "Timer is not started");
803 return PLUGIN_HANDLED
804 }
805
806 g_pausetime[id] = get_gametime() - timer_time[id]
807 timer_time[id] = 0.0
808 IsPaused[id] = true
809 client_print(id, print_center, "Your timer has been paused");
810 set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
811 pev(id, pev_origin, PauseOrigin[id])
812 //set timer icon to red
813 showtime2(id)
814
815 }
816 else
817 {
818 if(timer_started[id])
819 {
820 client_print(id, print_center, "Your timer has been unpaused");
821 if(get_user_noclip(id))
822 noclip(id)
823 timer_time[id] = get_gametime() - g_pausetime[id]
824 }
825 IsPaused[id] = false
826 set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
827 showtime(id)
828 }
829
830 return PLUGIN_HANDLED
831}
832
833public fw_ThinkEntity(iEnt)
834{
835 if(pev_valid(iEnt))
836 {
837 static ClassName[32]
838 pev(iEnt, pev_classname, ClassName, 31)
839
840 if(equal(ClassName, "kz_time_think"))
841 {
842 fw_TimeThink()
843 set_pev(iEnt, pev_nextthink, get_gametime() + 0.02)
844 }
845 }
846}
847
848public fw_TimeThink()
849{
850 if (get_pcvar_num(kz_show_timer) > 0)
851 {
852 new Alive[32], Dead[32], alivePlayers, deadPlayers;
853 get_players(Alive, alivePlayers, "ach")
854 get_players(Dead, deadPlayers, "bch")
855 for(new i=0;i<alivePlayers;i++)
856 {
857 if(timer_started[Alive[i]])
858 {
859 new Float:kreedztime, imin, Float:isec
860 kreedztime = get_gametime() - (IsPaused[Alive[i]] ? get_gametime() - g_pausetime[Alive[i]] : timer_time[Alive[i]])
861
862 if(ShowTime[Alive[i]] == 1)
863 {
864 new colors[12], r[4], g[4], b[4];
865 imin = floatround(kreedztime , floatround_floor)/60
866 isec = kreedztime - (60*imin) + 0.02
867 get_pcvar_string(kz_hud_color, colors, 11)
868 parse(colors, r, 100, g, 100, b, 100)
869
870 set_hudmessage(str_to_num(r), str_to_num(g), str_to_num(b), 0.0265, 0.4764, 0, 0.0, 0.2, 0.0, 0.0, 2)
871
872 if( checknumbers[Alive[i]] > 0 )
873 {
874 show_hudmessage(Alive[i], "%02d:%s%.2f (%d|%d) %s",imin,isec < 10 ? "0" : "",isec,checknumbers[Alive[i]],gochecknumbers[Alive[i]], IsPaused[Alive[i]] ? "| *Paused*" : "")
875 }
876 else
877 {
878 show_hudmessage(Alive[i], "%02d:%s%.2f %s",imin,isec < 10 ? "0" : "",isec, IsPaused[Alive[i]] ? "| *Paused*" : "")
879 }
880
881 }
882 else
883 if(ShowTime[Alive[i]] == 2)
884 {
885 kz_showtime_roundtime(Alive[i], floatround(kreedztime))
886 }
887 }
888
889 }
890 for(new i=0;i<deadPlayers;i++)
891 {
892 new Float:kreedztime, imin, Float:isec
893 new specmode = pev(Dead[i], pev_iuser1)
894 if(specmode == 2 || specmode == 4)
895 {
896 new target = pev(Dead[i], pev_iuser2)
897 if(target != Dead[i])
898 if(is_user_alive(target) && timer_started[target])
899 {
900 new name[32], colors[12], r[4], g[4], b[4];
901 get_user_name (target, name, 31)
902
903 kreedztime = get_gametime() - (IsPaused[target] ? get_gametime() - g_pausetime[target] : timer_time[target])
904 imin = floatround(kreedztime , floatround_floor)/60
905 isec = kreedztime - (60*imin) + 0.02
906 if(checknumbers[target] > 0)
907 {
908 client_print(Dead[i], print_center,"[ %02d:%s%.2f ] (%d|%d) %s",imin,isec < 10 ? "0" : "",isec,checknumbers[target], gochecknumbers[target], IsPaused[target] ? "| *Paused*" : "")
909 }
910 else
911 {
912 client_print(Dead[i], print_center, "[ %02d:%s%.2f ] %s",imin,isec < 10 ? "0" : "",isec,IsPaused[target] ? "| *Paused*" : "")
913 }
914 }
915 else if(!timer_started[target])
916 client_print(Dead[i], print_center, "")
917 }
918 }
919 }
920}
921
922// ============================ Block Commands ================================
923
924public block_sound(entity, channel, const sound[]) {
925
926 new g_listsize = sizeof g_soundlist
927 for(new i; i<g_listsize; i++)
928 {
929 if( equali(sound, g_soundlist[i]) )
930 return FMRES_SUPERCEDE
931 }
932 return FMRES_IGNORED
933}
934
935public BlockRadio(id)
936{
937 if (get_pcvar_num(kz_use_radio) == 1)
938 return PLUGIN_CONTINUE
939 else
940 {
941 client_print(id, print_center, "You have no access to that command");
942 return PLUGIN_HANDLED
943 }
944 return PLUGIN_HANDLED
945}
946
947public BlockDrop(id)
948{
949 if (get_pcvar_num(kz_drop_weapons) == 1 && !timer_started[id])
950 return PLUGIN_CONTINUE
951 else
952 {
953 client_print(id, print_center, "You are not allowed to drop weapons during a run");
954 return PLUGIN_HANDLED
955 }
956 return PLUGIN_HANDLED
957}
958
959public BlockBuy(id)
960{
961 return PLUGIN_HANDLED
962}
963
964public Ham_PlayerKilled_P(id) {
965 set_task(1.0, "CmdRespawn", id)
966 return HAM_IGNORED;
967}
968
969public CmdRespawn(id)
970{
971 if (get_user_team(id) == 3)
972 return PLUGIN_HANDLED
973 else
974 ExecuteHamB(Ham_CS_RoundRespawn, id)
975
976 return PLUGIN_HANDLED
977}
978
979public ChatHud(id)
980{
981 if(get_pcvar_num(kz_chatorhud) == 0)
982 {
983 ColorChat(id, GREEN, "^x01 %L", id, "KZ_CHECKPOINT_OFF")
984 return PLUGIN_HANDLED
985 }
986 if(chatorhud[id] == -1)
987 ++chatorhud[id];
988
989 ++chatorhud[id];
990
991 if(chatorhud[id] == 3)
992 chatorhud[id] = 0;
993 else
994 kz_chat(id, "%L", id, "KZ_CHATORHUD", chatorhud[id] == 1 ? "Chat" : "HUD")
995
996 return PLUGIN_HANDLED
997}
998
999public ct(id) {
1000 if(get_pcvar_num(kz_block_ct)) {
1001 client_print(id, print_center, "This command is not available to you at this point");
1002 return PLUGIN_HANDLED
1003 }
1004 new CsTeams:team = cs_get_user_team(id)
1005 if (team == CS_TEAM_CT)
1006 {
1007 if(!(pev(id, pev_flags) & FL_ONGROUND2) && timer_started[id])
1008 return PLUGIN_HANDLED
1009
1010 if (get_pcvar_num(kz_spec_saves) == 1)
1011 {
1012 pev(id, pev_origin, SpecLoc[id])
1013
1014 if (timer_started[id])
1015 {
1016 if (IsPaused[id])
1017 {
1018 Pause(id)
1019 WasPaused[id]=true
1020 hidetime(id)
1021 }
1022
1023 g_pausetime[id] = get_gametime() - timer_time[id]
1024 timer_time[id] = 0.0
1025 client_print(id, print_center, "Your timer has been paused");
1026 }
1027 }
1028 hidetime(id)
1029 //client_cmd(id, "show_keys 1")
1030 cs_set_user_team(id,CS_TEAM_SPECTATOR)
1031 set_pev(id, pev_solid, SOLID_NOT)
1032 set_pev(id, pev_movetype, MOVETYPE_FLY)
1033 set_pev(id, pev_effects, EF_NODRAW)
1034 set_pev(id, pev_deadflag, DEAD_DEAD)
1035 client_cmd(id, "cup_remove");
1036 }
1037 else
1038 {
1039 //emit_sound(id, CHAN_BODY, "items/tr_kevlar.wav", 0.8, ATTN_NORM, 0, PITCH_NORM);
1040 //client_cmd(id, "show_keys 0")
1041 cs_set_user_team(id,CS_TEAM_CT)
1042 set_pev(id, pev_effects, 0)
1043 set_pev(id, pev_movetype, MOVETYPE_WALK)
1044 set_pev(id, pev_deadflag, DEAD_NO)
1045 set_pev(id, pev_takedamage, DAMAGE_AIM)
1046 CmdRespawn(id)
1047 give_item(id,"weapon_knife")
1048 if(user_has_scout[id])
1049 give_item(id,"weapon_scout")
1050 if(get_user_flags(id) & ADMIN_LEVEL_C)
1051 {
1052 cs_set_user_bpammo(id, CSW_USP, 36)
1053 }
1054
1055 if (get_pcvar_num(kz_spec_saves) == 1)
1056 {
1057 set_pev(id, pev_origin, SpecLoc[id])
1058 if (timer_started [id])
1059 timer_time[id] = get_gametime() - g_pausetime[id] + timer_time[id]
1060 if(WasPaused[id])
1061 {
1062 Pause(id)
1063 WasPaused[id]=false
1064 showtime2(id)
1065 }
1066 }
1067 }
1068 return PLUGIN_HANDLED
1069}
1070
1071//=================== Teleport to Player ==============
1072
1073
1074public kz_tele_menu(id)
1075{
1076 if(!(get_user_flags(id) & ADMIN_LEVEL_C))
1077 {
1078 ColorChat(id, RED, "^x04[XJ] ^x03You have to be VIP to use this command!");
1079 kz_menu(id)
1080 return PLUGIN_HANDLED
1081 }
1082
1083 new menu = menu_create("\rChoose a player:", "tele_menuhandler")
1084
1085 new players[32], pnum
1086 new szName[32], szTempid[10]
1087
1088 get_players(players, pnum)
1089 for(new i; i<pnum;i++)
1090 {
1091 tempid = players[i]
1092
1093 if(is_user_alive(tempid) && id != tempid)
1094 {
1095 get_user_name(tempid, szName, 31)
1096 num_to_str(tempid, szTempid, 9)
1097 menu_additem(menu, szName, szTempid, 0)
1098 }
1099
1100 if(!is_user_alive(id))
1101 ct(id)
1102
1103 }
1104 menu_display(id, menu, 0)
1105 return PLUGIN_HANDLED
1106}
1107
1108public tele_menuhandler(id, menu, item)
1109{
1110 if(item == MENU_EXIT)
1111 {
1112 menu_destroy(menu)
1113 return PLUGIN_HANDLED
1114 }
1115
1116 new data[6], iName[64]
1117 new access, callback
1118 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
1119
1120 tempid = str_to_num(data)
1121
1122 if(!get_pcvar_num(kz_cheats))
1123 {
1124 ColorChat(id, RED, "^4[XJ] ^3Cheats are currently disabled!")
1125 return PLUGIN_HANDLED;
1126 }
1127
1128 if(timer_started[id] == true)
1129 {
1130 ColorChat(id, RED, "^x04[XJ]^x03 You cannot teleport during a run!");
1131 kz_tele_menu(id)
1132 return PLUGIN_HANDLED;
1133 }
1134
1135 if(is_user_alive(id) && is_user_alive(tempid))
1136 {
1137 new name[32]
1138 get_user_name(id, name, 31)
1139
1140 new name1[32]
1141 get_user_name(tempid, name1, 31)
1142
1143 new origin[3]
1144 get_user_origin(tempid, origin)
1145
1146 origin[2] = origin[2] + get_pcvar_num(kz_teleport_height)
1147
1148 set_user_origin(id, origin)
1149
1150 if(get_pcvar_num(kz_teleport_notification))
1151 {
1152 ColorChat(id, BLUE, "^x04[XJ]^x03 You have been teleported to^x04 %s.", name1)
1153 ColorChat(tempid, BLUE, "^x04[XJ]^x03 ^x04%s^x03 has been teleported to you.", name)
1154 }
1155 }
1156 menu_destroy(menu)
1157 kz_tele_menu(id)
1158 return PLUGIN_HANDLED
1159}
1160
1161
1162
1163
1164
1165
1166//=================== Weapons ==============
1167
1168public BlockPickup( iEntity, iPlayer )
1169{
1170 if ( cs_get_user_team ( iPlayer ) == CS_TEAM_CT )
1171 return PLUGIN_HANDLED
1172
1173 return PLUGIN_CONTINUE
1174}
1175
1176
1177public curweapon(id)
1178{
1179 /*
1180 if(get_pcvar_num(kz_maxspeedmsg) == 1 && is_user_alive(id))
1181 {
1182 new clip, ammo, speed,
1183 switch(get_user_weapon(id,clip,ammo))
1184 {
1185 case CSW_SCOUT: speed = 260
1186 case CSW_C4, CSW_P228, CSW_MAC10, CSW_MP5NAVY, CSW_USP, CSW_TMP, CSW_FLASHBANG, CSW_DEAGLE, CSW_GLOCK18, CSW_SMOKEGRENADE, CSW_ELITE, CSW_FIVESEVEN, CSW_UMP45, CSW_HEGRENADE, CSW_KNIFE: speed = 250
1187 case CSW_P90: speed = 245
1188 case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS: speed = 240
1189 case CSW_SG552: speed = 235
1190 case CSW_M3, CSW_M4A1: speed= 230
1191 case CSW_AK47: speed = 221
1192 case CSW_M249: speed = 220
1193 case CSW_G3SG1, CSW_SG550, CSW_AWP: speed = 210
1194 }
1195 kz_hud_message(id,"%L",id, "KZ_WEAPONS_SPEED",speed)
1196 }
1197*/
1198 static last_weapon[33];
1199 static weapon_active, weapon_num
1200 weapon_active = read_data(1)
1201 weapon_num = read_data(2)
1202
1203 if((weapon_num != last_weapon[id]) && weapon_active && get_pcvar_num(kz_maxspeedmsg) == 1)
1204 {
1205 last_weapon[id] = weapon_num;
1206
1207 static Float:maxspeed;
1208 pev(id, pev_maxspeed, maxspeed);
1209
1210 if(maxspeed < 0.0)
1211 maxspeed = 250.0;
1212
1213 kz_hud_message(id,"%L",id, "KZ_WEAPONS_SPEED",floatround(maxspeed, floatround_floor));
1214 }
1215 return PLUGIN_HANDLED
1216}
1217
1218public weapons(id)
1219{
1220 if(!get_user_flags(id) & ADMIN_BAN)
1221 return PLUGIN_HANDLED
1222
1223 if(!is_user_alive(id))
1224 {
1225 client_print(id, print_center, "You must be alive to use this command");
1226 return PLUGIN_HANDLED
1227 }
1228
1229 if(get_pcvar_num(kz_other_weapons) == 0)
1230 {
1231 client_print(id, print_center, "Different weapons are disabled");
1232 return PLUGIN_HANDLED
1233 }
1234
1235 if(timer_started[id])
1236 {
1237 client_print(id, print_center, "You cannot get different weapons during a run");
1238 return PLUGIN_HANDLED
1239 }
1240
1241 for(new i = 0; i < 7; i++)
1242 if(!user_has_weapon(id, other_weapons[i]))
1243 {
1244 new item;
1245 item = give_item(id, other_weapons_name[i]);
1246 cs_set_weapon_ammo(item, 0);
1247 }
1248
1249
1250 return PLUGIN_HANDLED
1251}
1252
1253
1254// ========================= Scout =======================
1255public cmdScout(id)
1256{
1257 if(!get_user_flags(id) & ADMIN_BAN)
1258 return PLUGIN_HANDLED
1259
1260 if (timer_started[id])
1261 {
1262 client_cmd(id, "spk fvox/blip")
1263 showtime2(id)
1264 }
1265
1266 user_has_scout[id] = true
1267 strip_user_weapons(id)
1268 give_item(id,"weapon_knife")
1269 if(!user_has_weapon(id, CSW_SCOUT))
1270 give_item(id,"weapon_scout")
1271
1272 return PLUGIN_HANDLED
1273}
1274
1275
1276// ========================== Start location =================
1277
1278public Custom(id)
1279{
1280 if(!(pev(id, pev_flags) & FL_ONGROUND2) && !IsOnLadder(id))
1281 {
1282 client_print(id, print_center, "You can't set a Start Position in air");
1283 return PLUGIN_HANDLED
1284 }
1285
1286 entity_get_vector(id, EV_VEC_origin, CustomStartPos[id][0]);
1287 entity_get_vector(id, EV_VEC_v_angle, CustomStartPos[id][1]);
1288
1289 client_print(id, print_center, "Custom Start position set");
1290
1291 CustomStart[id] = true
1292
1293 return PLUGIN_HANDLED
1294}
1295
1296public goStart(id)
1297{
1298 if(!is_user_alive(id))
1299 {
1300 client_print(id, print_center, "You must be alive to use this command");
1301 return PLUGIN_HANDLED
1302 }
1303
1304 if(IsPaused[id])
1305 {
1306 client_print(id, print_center, "You cannot teleport while paused");
1307 return PLUGIN_HANDLED
1308 }
1309
1310 if(get_pcvar_num(kz_save_autostart) == 1 && AutoStart [id])
1311 {
1312 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
1313 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING)
1314 set_pev(id, pev_origin, SavedStart [id])
1315
1316 //kz_chat(id, "%L", id, "KZ_START")
1317 }
1318 else if(CustomStart[id])
1319 {
1320 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
1321 set_pev(id, pev_origin, DefaultStartPos)
1322 set_pev(id, pev_view_ofs, Float:{ 0.0, 0.0, 12.0 });
1323 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING);
1324 set_pev(id, pev_fuser2, 0.0);
1325 entity_set_vector(id, EV_VEC_origin, CustomStartPos[id][0]);
1326 entity_set_vector(id, EV_VEC_angles, CustomStartPos[id][1]);
1327 set_pev(id, pev_fixangle, 1);
1328 }
1329 else if(DefaultStart)
1330 {
1331 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
1332 set_pev(id, pev_origin, DefaultStartPos)
1333 set_pev(id, pev_view_ofs, Float:{ 0.0, 0.0, 12.0 });
1334 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING);
1335 set_pev(id, pev_fuser2, 0.0);
1336 engfunc(EngFunc_SetSize, id,{-16.0, -16.0, -18.0 }, { 16.0, 16.0, 32.0 });
1337 entity_set_vector(id, EV_VEC_angles, DefaultStartPosAng);
1338 set_pev(id, pev_fixangle , 1);
1339
1340 //kz_chat(id, "%L", id, "KZ_START")
1341 }
1342 else
1343 {
1344 client_print(id, print_center, "No start position is set for this map");
1345
1346 CmdRespawn(id)
1347 }
1348
1349 timer_started[id] = false
1350 hidetime(id)
1351
1352 return PLUGIN_HANDLED
1353}
1354
1355public setStart(id)
1356{
1357 if(!(pev(id, pev_flags) & FL_ONGROUND2) && !IsOnLadder(id))
1358 {
1359 client_print(id, print_center, "You can't set a Start Position in air");
1360 return PLUGIN_HANDLED
1361 }
1362
1363 if (!(get_user_flags(id) & ADMIN_BAN))
1364 {
1365 client_print(id, print_center, "You have no access to that command");
1366 ColorChat(id, GREEN, "^x04[XJ] ^x01Try /customstart or /cs to set your personal start position.");
1367
1368 return PLUGIN_HANDLED
1369 }
1370
1371 new Float:origin[3]
1372
1373 entity_get_vector(id, EV_VEC_origin , origin);
1374 entity_get_vector(id, EV_VEC_v_angle, angles);
1375
1376 kz_set_start(MapName, origin, angles)
1377
1378 AutoStart[id] = false;
1379 client_print(id, print_center, "Start position set");
1380
1381 return PLUGIN_HANDLED
1382}
1383
1384// ========= Respawn CT if dies ========
1385
1386public Ham_CBasePlayer_Killed_Post(id)
1387{
1388 if(get_pcvar_num(kz_respawn_ct) == 1)
1389 {
1390 if(cs_get_user_team(id) == CS_TEAM_CT)
1391 {
1392 set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
1393 cs_set_user_deaths(id, 0)
1394 set_user_frags(id, 0)
1395 }
1396 }
1397}
1398
1399
1400public cmd_givetake(id,level,cid)
1401{
1402 if(!cmd_access(id,level,cid,2))
1403 {
1404 return PLUGIN_HANDLED
1405 }
1406
1407 new arg1[32]
1408 read_argv(1,arg1,31)
1409
1410 new target = cmd_target(id,arg1,9)
1411 if(!target)
1412 {
1413 return PLUGIN_HANDLED
1414 }
1415
1416 new name[32]
1417 get_user_name(target,name,31)
1418 if(get_user_flags(target) & ADMIN_IMMUNITY)
1419 {
1420 console_print(id,"[AMXX] Cannot give/take hook from admin %s.",name)
1421 return PLUGIN_HANDLED
1422 }
1423
1424 new arg0[32]
1425 read_argv(0,arg0,31)
1426 if(containi(arg0,"give")!=-1)
1427 {
1428
1429 if(containi(arg0,"hook")!=-1)
1430 {
1431 if(has_hook[target])
1432 {
1433 console_print(id,"[AMXX] %s already has hook",name)
1434 }
1435 else
1436 {
1437 has_hook[target]=true
1438 console_print(id,"[AMXX] %s has been given hook",name)
1439 client_print(target,print_chat,"[AMXX] An admin has given you hook. Use: bind key +hook")
1440 }
1441 }
1442
1443 }
1444 if(containi(arg0,"take")!=-1)
1445 {
1446 if(containi(arg0,"hook")!=-1)
1447 {
1448 if(!has_hook[target])
1449 {
1450 console_print(id,"[AMXX] %s doesn't have hook",name)
1451 }
1452 else
1453 {
1454 has_hook[target]=false
1455 console_print(id,"[AMXX] %s's hook has been taken away.",name)
1456 client_print(target,print_chat,"[AMXX] An admin has taken your hook away.")
1457 }
1458 }
1459 }
1460 return PLUGIN_HANDLED
1461}
1462
1463
1464
1465
1466// ============================= Hook ================================================
1467
1468public hook_toggle(id)
1469{
1470 if(get_user_flags(id) & ADMIN_BAN || has_hook[id])
1471 {
1472 if(hook[id]) hook_off(id)
1473 else hook_on(id)
1474 }
1475 return PLUGIN_HANDLED
1476}
1477
1478public hook_on(id)
1479{
1480 if(!get_pcvar_num(kz_cheats))
1481 {
1482 ColorChat(id, RED, "^4[XJ] ^3Cheats are currently disabled!")
1483 return PLUGIN_HANDLED;
1484 }
1485
1486 if(get_user_flags(id) & ADMIN_BAN || has_hook[id])
1487 {
1488 if(hook[id])
1489 {
1490 return PLUGIN_HANDLED
1491 }
1492 set_user_gravity(id,0.0)
1493 set_task(0.1,"hook_prethink",id+10000,"",0,"b")
1494 hook[id]=true
1495 usedhook[id]=true
1496 hook_to[id][0]=999999
1497 hook_prethink(id+10000)
1498
1499 detect_cheat(id,"Hook")
1500 antihookcheat[id] = get_gametime()
1501 }
1502 return PLUGIN_HANDLED
1503}
1504
1505public hook_off(id)
1506{
1507 if(is_user_alive(id)) set_user_gravity(id)
1508 if(hook[id] == true)
1509
1510 timer_started[id] = false
1511
1512 hook[id]=false
1513 return PLUGIN_HANDLED
1514}
1515
1516public hook_prethink(id)
1517{
1518 id -= 10000
1519 if(!is_user_alive(id))
1520 {
1521 hook[id]=false
1522 }
1523 if(!hook[id])
1524 {
1525 remove_task(id+10000)
1526 return PLUGIN_HANDLED
1527 }
1528
1529 //Get Id's origin
1530 static origin1[3]
1531 get_user_origin(id,origin1)
1532
1533 if(hook_to[id][0]==999999)
1534 {
1535 static origin2[3]
1536 get_user_origin(id,origin2,3)
1537 hook_to[id][0]=origin2[0]
1538 hook_to[id][1]=origin2[1]
1539 hook_to[id][2]=origin2[2]
1540 }
1541
1542 //Calculate Velocity
1543 static Float:velocity[3]
1544 velocity[0] = (float(hook_to[id][0]) - float(origin1[0])) * 3.0
1545 velocity[1] = (float(hook_to[id][1]) - float(origin1[1])) * 3.0
1546 velocity[2] = (float(hook_to[id][2]) - float(origin1[2])) * 3.0
1547
1548 static Float:y
1549 y = velocity[0]*velocity[0] + velocity[1]*velocity[1] + velocity[2]*velocity[2]
1550
1551 static Float:x
1552 x = (get_pcvar_float(hook_speed_cvar) * 120.0) / floatsqroot(y)
1553
1554 velocity[0] *= x
1555 velocity[1] *= x
1556 velocity[2] *= x
1557
1558 set_velo(id,velocity)
1559
1560 return PLUGIN_CONTINUE
1561}
1562
1563
1564public get_origin(ent,Float:origin[3])
1565{
1566#if defined engine
1567 return entity_get_vector(id,EV_VEC_origin,origin)
1568#else
1569 return pev(ent,pev_origin,origin)
1570#endif
1571}
1572
1573public set_velo(id,Float:velocity[3])
1574{
1575#if defined engine
1576 return set_user_velocity(id,velocity)
1577#else
1578 return set_pev(id,pev_velocity,velocity)
1579#endif
1580}
1581
1582public get_velo(id,Float:velocity[3])
1583{
1584#if defined engine
1585 return get_user_velocity(id,velocity)
1586#else
1587 return pev(id,pev_velocity,velocity)
1588#endif
1589}
1590
1591public is_valid_ent2(ent)
1592{
1593#if defined engine
1594 return is_valid_ent(ent)
1595#else
1596 return pev_valid(ent)
1597#endif
1598}
1599
1600public get_solidity(ent)
1601{
1602#if defined engine
1603 return entity_get_int(ent,EV_INT_solid)
1604#else
1605 return pev(ent,pev_solid)
1606#endif
1607}
1608
1609stock set_rendering2(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
1610{
1611#if defined engine
1612 return set_rendering(index,fx,r,g,b,render,amount)
1613#else
1614 set_pev(index, pev_renderfx, fx);
1615 new Float:RenderColor[3];
1616 RenderColor[0] = float(r);
1617 RenderColor[1] = float(g);
1618 RenderColor[2] = float(b);
1619 set_pev(index, pev_rendercolor, RenderColor);
1620 set_pev(index, pev_rendermode, render);
1621 set_pev(index, pev_renderamt, float(amount));
1622 return 1;
1623#endif
1624}
1625
1626
1627//============================ VIP In ScoreBoard =================================================
1628
1629public MessageScoreAttrib(iMsgID, iDest, iReceiver)
1630{
1631 if(get_pcvar_num(kz_vip))
1632 {
1633 new iPlayer = get_msg_arg_int(1)
1634 if(is_user_alive(iPlayer) && (get_user_flags(iPlayer) & KZ_LEVEL))
1635 {
1636 set_msg_arg_int(2, ARG_BYTE, SCOREATTRIB_VIP);
1637 }
1638 }
1639}
1640
1641
1642public detect_cheat(id,reason[])
1643{
1644 if(timer_started[id] && get_pcvar_num(kz_cheatdetect) == 1)
1645 {
1646 hidetime(id)
1647 timer_started[id] = false
1648 client_cmd(id, "spk fvox/blip")
1649 if(IsPaused[id])
1650 {
1651 set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
1652 IsPaused[id] = false
1653 }
1654 if (get_pcvar_num(kz_show_timer) > 0)
1655 kz_showtime_roundtime(id, 0)
1656 client_print(id, print_center, "%s detected", reason)
1657 }
1658}
1659
1660// =================================================================================================
1661// Cmds
1662// =================================================================================================
1663
1664
1665public CheckPoint(id)
1666{
1667 if(!get_pcvar_num(kz_cheats))
1668 {
1669 ColorChat(id, RED, "^4[XJ] ^3Cheats are currently disabled!")
1670 return PLUGIN_HANDLED;
1671 }
1672
1673 if(! is_user_alive(id))
1674 {
1675 client_print(id, print_center, "You must be alive to use this command");
1676 return PLUGIN_HANDLED
1677 }
1678
1679 if(get_pcvar_num(kz_checkpoints) == 0)
1680 {
1681 client_print(id, print_center, "Checkpoints are currently disabled");
1682 return PLUGIN_HANDLED
1683 }
1684
1685 if(!(pev(id, pev_flags) & FL_ONGROUND2) && !IsOnLadder(id))
1686 {
1687 client_print(id, print_center, "You can't make a checkpoint in air");
1688 return PLUGIN_HANDLED
1689 }
1690
1691 if(IsPaused[id])
1692 {
1693 client_print(id, print_center, "You can't make a checkpoint in pause");
1694 return PLUGIN_HANDLED
1695 }
1696
1697 entity_get_vector(id, EV_VEC_origin, CPangles[id][0]);
1698 entity_get_vector(id, EV_VEC_v_angle, CPangles[id][1]);
1699
1700 pev(id, pev_origin, Checkpoints[id][g_bCpAlternate[id] ? 1 : 0])
1701 g_bCpAlternate[id] = !g_bCpAlternate[id]
1702 checknumbers[id]++
1703
1704 //kz_chat(id, "%L", id, "KZ_CHECKPOINT")
1705
1706 return PLUGIN_HANDLED
1707}
1708
1709public GoCheck(id)
1710{
1711 if(!is_user_alive(id))
1712 {
1713 client_print(id, print_center, "You must be alive to use this command");
1714 return PLUGIN_HANDLED
1715 }
1716
1717 if(checknumbers[id] == 0)
1718 {
1719 client_print(id, print_center, "You don't have enough checkpoints");
1720 return PLUGIN_HANDLED
1721 }
1722
1723 if(timer_started[id] && gochecknumbers[id] == 0)
1724 {
1725 showtime2(id)
1726 client_cmd(id, "spk fvox/blip")
1727 }
1728
1729 if(IsPaused[id])
1730 {
1731 client_print(id, print_center, "You cannot teleport while pause is on");
1732 return PLUGIN_HANDLED
1733 }
1734
1735 if(get_pcvar_num(kz_cp_angles) == 1)
1736 {
1737 entity_set_vector(id, EV_VEC_angles, CPangles[id][1]);
1738 set_pev(id, pev_fixangle, 1);
1739 }
1740
1741 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0});
1742 set_pev(id, pev_view_ofs, Float:{ 0.0, 0.0, 12.0 });
1743 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING);
1744 set_pev(id, pev_fuser2, 0.0);
1745 set_pev(id, pev_origin, Checkpoints[ id ][ !g_bCpAlternate[id] ])
1746
1747 gochecknumbers[id]++
1748
1749 kz_chat(id, "%L", id, "KZ_GOCHECK", gochecknumbers[id])
1750
1751 return PLUGIN_HANDLED
1752}
1753
1754public Stuck(id)
1755{
1756 if(!is_user_alive(id))
1757 {
1758 client_print(id, print_center, "You must be alive to use this command");
1759 return PLUGIN_HANDLED
1760 }
1761
1762 if(checknumbers[id] < 2)
1763 {
1764 client_print(id, print_center, "You don't have enough checkpoints");
1765 return PLUGIN_HANDLED
1766 }
1767
1768 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
1769 set_pev(id, pev_view_ofs, Float:{ 0.0, 0.0, 12.0 })
1770 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING)
1771 set_pev(id, pev_fuser2, 0.0)
1772 engfunc(EngFunc_SetSize, id, {-16.0, -16.0, -18.0 }, { 16.0, 16.0, 32.0 })
1773 set_pev(id, pev_origin, Checkpoints[id][g_bCpAlternate[id]])
1774 g_bCpAlternate[id] = !g_bCpAlternate[id];
1775 gochecknumbers[id]++
1776
1777 kz_chat(id, "%L", id, "KZ_GOCHECK", gochecknumbers[id])
1778
1779 return PLUGIN_HANDLED;
1780}
1781
1782// =================================================================================================
1783
1784public reset_checkpoints(id)
1785{
1786 checknumbers[id] = 0
1787 gochecknumbers[id] = 0
1788 timer_started[id] = false
1789 timer_time[id] = 0.0
1790 if (user_has_weapon(id, CSW_SCOUT))
1791 {
1792 user_has_scout[id] = true
1793 }
1794 else
1795 {
1796 user_has_scout[id] = false
1797 }
1798 if(IsPaused[id])
1799 {
1800 set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
1801 IsPaused[id] = false
1802 }
1803 if (get_pcvar_num(kz_show_timer) > 0)
1804 kz_showtime_roundtime(id, 0)
1805 //hide timer icon
1806 hidetime(id)
1807
1808 return PLUGIN_HANDLED
1809}
1810
1811public noclip(id)
1812{
1813 if(!get_pcvar_num(kz_cheats))
1814 {
1815 ColorChat(id, RED, "^4[XJ] ^3Cheats are currently disabled!")
1816 return PLUGIN_HANDLED;
1817 }
1818
1819 if(! is_user_alive(id))
1820 {
1821 client_print(id, print_center, "You must be alive to use this command");
1822 return PLUGIN_HANDLED
1823 }
1824 new noclip = !get_user_noclip(id)
1825 set_user_noclip(id, noclip)
1826 if(IsPaused[id] && (get_pcvar_num(kz_noclip_pause) == 1))
1827 {
1828 if(noclip)
1829 {
1830 pev(id, pev_origin, NoclipPos[id])
1831 set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
1832 }
1833 else
1834 {
1835 set_pev(id, pev_origin, NoclipPos[id])
1836 set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
1837 }
1838 }
1839 else if(noclip)
1840 detect_cheat(id,"Noclip")
1841
1842 return PLUGIN_HANDLED
1843}
1844
1845
1846
1847public GodMode(id)
1848{
1849 if(! is_user_alive(id))
1850 {
1851 client_print(id, print_center, "You must be alive to use this command");
1852 return PLUGIN_HANDLED
1853 }
1854
1855 new godmode = !get_user_godmode(id)
1856 set_user_godmode(id, godmode)
1857 if(godmode)
1858 detect_cheat(id,"God Mode")
1859 kz_chat(id, "%L", id, "KZ_GODMODE" , godmode ? "ON" : "OFF")
1860
1861 return PLUGIN_HANDLED
1862}
1863
1864// =================================================================================================
1865
1866stock kz_set_start(const map[], Float:origin[3], Float:ViewAngles[3])
1867{
1868 new realfile[128], tempfile[128], formatorigin[50]
1869 formatex(realfile, 127, "%s/%s", Kzdir, KZ_STARTFILE)
1870 formatex(tempfile, 127, "%s/%s", Kzdir, KZ_STARTFILE_TEMP)
1871
1872
1873 formatex(formatorigin, 99, "%f %f %f %f %f %f", origin[0], origin[1], origin[2], ViewAngles[0], ViewAngles[1], ViewAngles[2])
1874
1875
1876 DefaultStartPosAng = ViewAngles
1877 DefaultStartPos = origin
1878 DefaultStart = true
1879
1880 new file = fopen(tempfile, "wt")
1881 new vault = fopen(realfile, "rt")
1882
1883 new data[128], key[64]
1884 new bool:replaced = false
1885
1886 while(!feof(vault))
1887 {
1888 fgets(vault, data, 127)
1889 parse(data, key, 63)
1890
1891 if(equal(key, map) && !replaced)
1892 {
1893 fprintf(file, "%s %s^n", map, formatorigin)
1894
1895 replaced = true
1896 }
1897 else
1898 {
1899 fputs(file, data)
1900 }
1901 }
1902
1903 if(!replaced)
1904 {
1905 fprintf(file, "%s %s^n", map, formatorigin)
1906 }
1907
1908 fclose(file)
1909 fclose(vault)
1910
1911 delete_file(realfile)
1912 while(!rename_file(tempfile, realfile, 1)) {}
1913}
1914
1915stock kz_showtime_roundtime(id, time)
1916{
1917 if(is_user_connected(id))
1918 {
1919 message_begin(MSG, get_user_msgid("RoundTime"), _, id);
1920 write_short(time + 1);
1921 message_end();
1922 }
1923}
1924
1925stock kz_chat(id, const message[], {Float,Sql,Result,_}:...)
1926{
1927 new cvar = get_pcvar_num(kz_chatorhud)
1928 if(cvar == 0)
1929 return PLUGIN_HANDLED
1930
1931 new msg[180], final[192]
1932 if (cvar == 1 && chatorhud[id] == -1 || chatorhud[id] == 1)
1933 {
1934 vformat(msg, 179, message, 3)
1935 formatex(final, 191, "^x01 %s", msg)
1936 kz_remplace_colors(final, 191)
1937 ColorChat(id, GREEN, "%s", final)
1938 }
1939 else if(cvar == 2 && chatorhud[id] == -1 || chatorhud[id] == 2)
1940 {
1941 vformat(msg, 179, message, 3)
1942 replace_all(msg, 191, "^x01", "")
1943 replace_all(msg, 191, "^x03", "")
1944 replace_all(msg, 191, "^x04", "")
1945 replace_all(msg, 191, ".", "")
1946 kz_hud_message(id, "%s", msg)
1947 }
1948
1949 return 1
1950}
1951
1952stock kz_print_config(id, const msg[])
1953{
1954 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, id);
1955 write_byte(id);
1956 write_string(msg);
1957 message_end();
1958}
1959
1960stock kz_remplace_colors(message[], len)
1961{
1962 replace_all(message, len, "!g", "^x04")
1963 replace_all(message, len, "!t", "^x03")
1964 replace_all(message, len, "!y", "^x01")
1965}
1966
1967stock kz_hud_message(id, const message[], {Float,Sql,Result,_}:...)
1968{
1969 static msg[192], colors[12], r[4], g[4], b[4];
1970 vformat(msg, 191, message, 3);
1971
1972 get_pcvar_string(kz_hud_color, colors, 11)
1973 parse(colors, r, 3, g, 3, b, 4)
1974
1975 set_hudmessage(str_to_num(r), str_to_num(g), str_to_num(b), -1.0, 0.90, 0, 0.0, 2.0, 0.0, 1.0, -1);
1976 ShowSyncHudMsg(id, hud_message, msg);
1977}
1978
1979stock kz_register_saycmd(const saycommand[], const function[], flags)
1980{
1981 new temp[64]
1982 formatex(temp, 63, "say /%s", saycommand)
1983 register_clcmd(temp, function, flags)
1984 formatex(temp, 63, "say .%s", saycommand)
1985 register_clcmd(temp, function, flags)
1986 formatex(temp, 63, "say_team /%s", saycommand)
1987 register_clcmd(temp, function, flags)
1988 formatex(temp, 63, "say_team .%s", saycommand)
1989 register_clcmd(temp, function, flags)
1990}
1991
1992
1993#if defined USE_SQL
1994stock GetNewRank(id, type)
1995{
1996 new createinto[1001]
1997
1998 new cData[2]
1999 cData[0] = id
2000 cData[1] = type
2001
2002 formatex(createinto, 1000, "SELECT authid FROM `%s` WHERE mapname='%s' ORDER BY time LIMIT 15", type == PRO_TOP ? "kz_pro15" : "kz_nub15", MapName)
2003 SQL_ThreadQuery(g_SqlTuple, "GetNewRank_QueryHandler", createinto, cData, 2)
2004}
2005
2006stock kz_update_plrname(id)
2007{
2008 new createinto[1001], authid[32], name[32]
2009 get_user_authid(id, authid, 31)
2010 get_user_name(id, name, 31)
2011
2012 replace_all(name, 31, "\", "")
2013 replace_all(name, 31, "`", "")
2014 replace_all(name, 31, "'", "")
2015
2016 if(equal(authid, "VALVE_ID_LAN") || equal(authid, "STEAM_ID_LAN"))
2017 return 0;
2018 else
2019 {
2020 formatex(createinto, 1000, "UPDATE `kz_pro15` SET name='%s' WHERE authid='%s'", name, authid)
2021 SQL_ThreadQuery(g_SqlTuple, "QueryHandle", createinto)
2022 formatex(createinto, 1000, "UPDATE `kz_nub15` SET name='%s' WHERE authid='%s'", name, authid)
2023 SQL_ThreadQuery(g_SqlTuple, "QueryHandle", createinto)
2024 }
2025 return 1
2026}
2027#endif
2028
2029public FwdSpawnWeaponbox(iEntity)
2030{
2031 if(get_pcvar_num(kz_remove_drops) == 1)
2032 {
2033 set_pev(iEntity, pev_flags, FL_KILLME)
2034 dllfunc(DLLFunc_Think, iEntity)
2035 }
2036
2037 return HAM_IGNORED
2038}
2039
2040public FwdHamDoorSpawn(iEntity)
2041{
2042 static const szNull[ ] = "common/null.wav";
2043
2044 new Float:flDamage;
2045 pev(iEntity, pev_dmg, flDamage);
2046
2047 if(flDamage < -999.0) {
2048 set_pev(iEntity, pev_noise1, szNull);
2049 set_pev(iEntity, pev_noise2, szNull);
2050 set_pev(iEntity, pev_noise3, szNull);
2051
2052 if(!HealsOnMap)
2053 HealsOnMap = true
2054 }
2055}
2056
2057public TaskSpectator(id)
2058{
2059 cs_set_user_team(id, CS_TEAM_SPECTATOR)
2060}
2061
2062public model_menu(id) {
2063 new title[64];
2064 formatex(title, 63, "\r[PLAYER]\d Menu")
2065 new menu = menu_create(title, "model_menuhandler")
2066
2067 menu_additem(menu, "Terrorists", "1")
2068 menu_additem(menu, "Counter-Terrorists", "2")
2069 menu_additem(menu, "Custom \y[VIP]", "3")
2070
2071 menu_display(id, menu, 0)
2072
2073 return PLUGIN_HANDLED
2074}
2075
2076
2077public model_menuhandler(id, menu, item)
2078{
2079 if(item == MENU_EXIT)
2080 {
2081 menu_destroy(menu)
2082 return PLUGIN_HANDLED
2083 }
2084
2085 switch(item)
2086 {
2087 case 0: terror_menu(id)
2088 case 1: ct_menu(id)
2089 case 2: custom_menu(id)
2090 }
2091
2092 return PLUGIN_CONTINUE
2093}
2094
2095cmdURBAN(id)
2096{
2097 new name[32]
2098 get_user_name(id, name, 31)
2099
2100 if(cs_get_user_team(id) == CS_TEAM_T)
2101 {
2102 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2103 }
2104 else if(cs_get_user_team(id) == CS_TEAM_CT)
2105 {
2106 fm_set_user_model(id, "urban")
2107 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen URBAN model.", name)
2108 }
2109}
2110
2111cmdGSG9(id)
2112{
2113 new name[32]
2114 get_user_name(id, name, 31)
2115
2116 if(cs_get_user_team(id) == CS_TEAM_T)
2117 {
2118 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2119 }
2120 else if(cs_get_user_team(id) == CS_TEAM_CT)
2121 {
2122 fm_set_user_model(id, "gsg9")
2123 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen GSG9 model.", name)
2124 }
2125}
2126
2127cmdSAS(id)
2128{
2129 new name[32]
2130 get_user_name(id, name, 31)
2131
2132 if(cs_get_user_team(id) == CS_TEAM_T)
2133 {
2134 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2135 }
2136 else if(cs_get_user_team(id) == CS_TEAM_CT)
2137 {
2138 fm_set_user_model(id, "sas")
2139 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen SAS model.", name)
2140 }
2141}
2142
2143cmdGIGN(id)
2144{
2145 new name[32]
2146 get_user_name(id, name, 31)
2147
2148 if(cs_get_user_team(id) == CS_TEAM_T)
2149 {
2150 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2151 }
2152 else if(cs_get_user_team(id) == CS_TEAM_CT)
2153 {
2154 fm_set_user_model(id, "gign")
2155 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen GIGN model.", name)
2156 }
2157}
2158
2159cmdTERROR(id)
2160{
2161 new name[32]
2162 get_user_name(id, name, 31)
2163
2164 if(cs_get_user_team(id) == CS_TEAM_T)
2165 {
2166 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2167 }
2168 else if(cs_get_user_team(id) == CS_TEAM_CT)
2169 {
2170 fm_set_user_model(id, "terror")
2171 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen TERROR model.", name)
2172 }
2173}
2174
2175cmdLEET(id)
2176{
2177 new name[32]
2178 get_user_name(id, name, 31)
2179
2180 if(cs_get_user_team(id) == CS_TEAM_T)
2181 {
2182 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2183 }
2184 else if(cs_get_user_team(id) == CS_TEAM_CT)
2185 {
2186 fm_set_user_model(id, "leet")
2187 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen LEET model.", name)
2188 }
2189}
2190
2191cmdARCTIC(id)
2192{
2193 new name[32]
2194 get_user_name(id, name, 31)
2195
2196 if(cs_get_user_team(id) == CS_TEAM_T)
2197 {
2198 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2199 }
2200 else if(cs_get_user_team(id) == CS_TEAM_CT)
2201 {
2202 fm_set_user_model(id, "arctic")
2203 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen ARCTIC model.", name)
2204 }
2205}
2206
2207cmdGUERILLA(id)
2208{
2209 new name[32]
2210 get_user_name(id, name, 31)
2211
2212 if(cs_get_user_team(id) == CS_TEAM_T)
2213 {
2214 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2215 }
2216 else if(cs_get_user_team(id) == CS_TEAM_CT)
2217 {
2218 fm_set_user_model(id, "guerilla")
2219 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen GUERILLA model.", name)
2220 }
2221}
2222
2223cmdVIP(id)
2224{
2225 new name[32]
2226 get_user_name(id, name, 31)
2227
2228 if(cs_get_user_team(id) == CS_TEAM_T)
2229 {
2230 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2231 }
2232 else if(cs_get_user_team(id) == CS_TEAM_CT)
2233 {
2234 fm_set_user_model(id, "vip")
2235 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen VIP model.", name)
2236 }
2237}
2238
2239cmdCLONE(id)
2240{
2241 new name[32]
2242 get_user_name(id, name, 31)
2243
2244 if(cs_get_user_team(id) == CS_TEAM_T)
2245 {
2246 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2247 }
2248 else if(cs_get_user_team(id) == CS_TEAM_CT)
2249 {
2250 fm_set_user_model(id, "clone")
2251 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen CLONE model.", name)
2252 }
2253}
2254
2255cmdDROID(id)
2256{
2257 new name[32]
2258 get_user_name(id, name, 31)
2259
2260 if(cs_get_user_team(id) == CS_TEAM_T)
2261 {
2262 ColorChat(id, RED, "^x04[XJ] ^x03This model is only available for Counter-Terrorists.")
2263 }
2264 else if(cs_get_user_team(id) == CS_TEAM_CT)
2265 {
2266 fm_set_user_model(id, "droid")
2267 ColorChat(0, BLUE, "^x04[XJ] ^x03%s has chosen DROID model.", name)
2268 }
2269}
2270
2271public BlockCT(id) {
2272 if(!(get_user_flags(id) & ADMIN_BAN))
2273 {
2274 client_print(id, print_center, "You have no access to that command");
2275 return PLUGIN_HANDLED
2276 }
2277
2278 if(get_pcvar_num(kz_block_ct) == 1)
2279 {
2280 set_pcvar_num(kz_block_ct, 0);
2281 ColorChat(0, RED, "^x04[XJ]^x03 Block CT has been disabled!");
2282 }
2283 else
2284 {
2285 cmdForceSpec();
2286 set_pcvar_num(kz_block_ct, 1);
2287 ColorChat(0, BLUE, "^x04[XJ]^x03 Block CT has been enabled!");
2288 }
2289 return PLUGIN_HANDLED;
2290}
2291
2292
2293public cmdForceSpec()
2294{
2295 new aPlayers[32], iPlayersNum;
2296 get_players(aPlayers, iPlayersNum, "ae", "CT");
2297
2298 for(new i = 0; i < iPlayersNum; i++)
2299 {
2300 if(!is_user_admin(aPlayers[i]))
2301 {
2302 ct(aPlayers[i]);
2303 }
2304 }
2305}
2306
2307
2308public kz_reset_data(id)
2309{
2310 kz_roundtime(id, 0)
2311
2312 return 1
2313}
2314
2315public FwdHamPlayerSpawn(id)
2316{
2317
2318 if(firstspawn[id] && get_pcvar_num(kz_block_ct) == 0)
2319 {
2320 //emit_sound(id, CHAN_BODY, "items/tr_kevlar.wav", 0.8, ATTN_NORM, 0, PITCH_NORM);
2321 }
2322
2323 if(!is_user_alive(id))
2324 return;
2325
2326
2327 if(firstspawn[id])
2328 {
2329 if(get_pcvar_num(kz_block_ct))
2330 {
2331 set_pev(id, pev_solid, SOLID_NOT)
2332 set_pev(id, pev_movetype, MOVETYPE_FLY)
2333 set_pev(id, pev_effects, EF_NODRAW)
2334 set_pev(id, pev_deadflag, DEAD_DEAD)
2335 cs_set_user_team(id, CS_TEAM_SPECTATOR)
2336 }
2337 else
2338 {
2339 model_menu(id)
2340 }
2341
2342 if(!(get_user_flags(id) & ADMIN_LEVEL_C))
2343 strip_user_weapons(id)
2344
2345 if(get_pcvar_num(kz_checkpoints) == 0)
2346 ColorChat(id, GREEN, "^x01 %L", id, "KZ_CHECKPOINT_OFF")
2347
2348
2349 if(Verif(id,1) && get_pcvar_num(kz_save_pos) == 1)
2350 savepos_menu(id)
2351 else if(get_pcvar_num(kz_spawn_mainmenu) == 1)
2352 kz_menu(id)
2353 cs_set_user_nvg( id, 1 );
2354 }
2355 firstspawn[id] = false
2356 //client_cmd(id, "say /reset")
2357
2358 kz_reset_data(id)
2359 client_print(id, print_center, "")
2360
2361 if(!user_has_weapon(id,CSW_KNIFE))
2362 give_item(id,"weapon_knife")
2363
2364 if(get_user_flags(id) & ADMIN_BAN && !user_has_weapon(id,CSW_USP))
2365 give_item(id,"weapon_usp")
2366
2367
2368 if(HealsOnMap)
2369 set_user_health(id, 50175)
2370
2371 if(IsPaused[id])
2372 {
2373 set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
2374 set_pev(id, pev_origin, PauseOrigin[id])
2375 }
2376
2377 if(get_pcvar_num(kz_use_radio) == 0)
2378 {
2379 #define XO_PLAYER 5
2380 #define m_iRadiosLeft 192
2381 set_pdata_int(id, m_iRadiosLeft, 0, XO_PLAYER)
2382 }
2383}
2384
2385public GroundWeapon_Touch(iWeapon, id)
2386{
2387 if(is_user_alive(id) && timer_started[id] && get_pcvar_num(kz_pick_weapons) == 0)
2388 return HAM_SUPERCEDE
2389
2390 return HAM_IGNORED
2391}
2392
2393// ==================================Godmode=================================================
2394
2395public hamTakeDamage( )
2396{
2397 if(get_pcvar_num(kz_godmode))
2398 return HAM_SUPERCEDE;
2399
2400 return HAM_IGNORED
2401}
2402
2403
2404
2405// ==================================Save positions=================================================
2406
2407public SavePos(id)
2408{
2409 if(is_user_alive(id))
2410 return PLUGIN_HANDLED
2411
2412 new authid[33];
2413 get_user_authid(id, authid, 32)
2414 if(get_pcvar_num(kz_save_pos) == 0)
2415 {
2416 client_print(id, print_center, "Save Pos function is currently disabled");
2417 return PLUGIN_HANDLED
2418 }
2419
2420 if(equal(authid, "VALVE_ID_LAN") || equal(authid, "STEAM_ID_LAN"))
2421 {
2422 client_print(id, print_center, "You require Steam to use this function");
2423 return PLUGIN_HANDLED
2424 }
2425
2426 if(!(pev(id, pev_flags) & FL_ONGROUND2 ))
2427 {
2428 client_print(id, print_center, "You must be on ground to use this command");
2429
2430 return PLUGIN_HANDLED
2431 }
2432
2433 if(!timer_started[id])
2434 {
2435 client_print(id, print_center, "Timer is currently disbaled");
2436 return PLUGIN_HANDLED
2437 }
2438
2439 if(Verif(id,1))
2440 {
2441 ColorChat(id, GREEN, "^x01 %L", id, "KZ_SAVEPOS_ALREADY")
2442 savepos_menu(id)
2443 return PLUGIN_HANDLED
2444 }
2445
2446 if(get_user_noclip(id))
2447 {
2448 ColorChat(id, GREEN, "^x01 %L", id, "KZ_SAVEPOS_NOCLIP")
2449 return PLUGIN_HANDLED
2450 }
2451
2452 new Float:origin[3], scout
2453 pev(id, pev_origin, origin)
2454 new Float:Time,check,gocheck
2455 if(IsPaused[id])
2456 {
2457 Time = g_pausetime[id]
2458 Pause(id)
2459 }
2460 else
2461 Time=get_gametime() - timer_time[id]
2462 check=checknumbers[id]
2463 gocheck=gochecknumbers[id]
2464 ColorChat(id, GREEN, "^x01 %L", id, "KZ_SAVEPOS")
2465 if (user_has_scout[id])
2466 scout=1
2467 else
2468 scout=0
2469 kz_savepos(id, Time, check, gocheck, origin, scout)
2470 //reset_checkpoints(id)
2471
2472 return PLUGIN_HANDLED
2473}
2474
2475public GoPos(id)
2476{
2477 set_user_godmode(id, 0)
2478 set_user_noclip(id, 0)
2479 if(Verif(id,0))
2480 {
2481 set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
2482 set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING)
2483 set_pev(id, pev_origin, SavedOrigins[id])
2484 }
2485
2486 //checknumbers[id]=SavedChecks[id]
2487 //gochecknumbers[id]=SavedGoChecks[id]+((get_pcvar_num(kz_save_pos_gochecks)>0) ? 1 : 0)
2488 strip_user_weapons(id)
2489 give_item(id,"weapon_knife")
2490 if(SavedScout[id])
2491 {
2492 give_item(id, "weapon_scout")
2493 user_has_scout[id] = true
2494 }
2495 timer_time[id]=get_gametime()-SavedTime[id]
2496 timer_started[id]=true
2497 Pause(id)
2498
2499}
2500
2501public Verif(id, action)
2502{
2503 new realfile[128], tempfile[128], authid[32], map[64]
2504 new bool:exist = false
2505 get_mapname(map, 63)
2506 get_user_authid(id, authid, 31)
2507 formatex(realfile, 127, "%s/%s.ini", SavePosDir, map)
2508 formatex(tempfile, 127, "%s/temp.ini", SavePosDir)
2509
2510 if(!file_exists(realfile))
2511 return 0
2512
2513 new file = fopen(tempfile, "wt")
2514 new vault = fopen(realfile, "rt")
2515 new data[150], sid[32], time[25], checks[5], gochecks[5], x[25], y[25], z[25], scout[5]
2516 while(!feof(vault))
2517 {
2518 fgets(vault, data, 149)
2519 parse(data, sid, 31, time, 24, checks, 4, gochecks, 4, x, 24, y, 24, z, 24, scout, 4)
2520
2521 if(equal(sid, authid) && !exist) // ma aflu in fisier?
2522 {
2523 if(action == 1)
2524 fputs(file, data)
2525 exist= true
2526 SavedChecks[id] = str_to_num(checks)
2527 SavedGoChecks[id] = str_to_num(gochecks)
2528 SavedTime[id] = str_to_float(time)
2529 SavedOrigins[id][0]=str_to_num(x)
2530 SavedOrigins[id][1]=str_to_num(y)
2531 SavedOrigins[id][2]=str_to_num(z)
2532 SavedScout[id] = str_to_num(scout)
2533 }
2534 else
2535 {
2536 fputs(file, data)
2537 }
2538 }
2539
2540 fclose(file)
2541 fclose(vault)
2542
2543 delete_file(realfile)
2544 if(file_size(tempfile) == 0)
2545 delete_file(tempfile)
2546 else
2547 while(!rename_file(tempfile, realfile, 1)) {}
2548
2549
2550 if(!exist)
2551 return 0
2552
2553 return 1
2554}
2555public kz_savepos (id, Float:time, checkpoints, gochecks, Float:origin[3], scout)
2556{
2557 new realfile[128], formatorigin[128], map[64], authid[32]
2558 get_mapname(map, 63)
2559 get_user_authid(id, authid, 31)
2560 formatex(realfile, 127, "%s/%s.ini", SavePosDir, map)
2561 formatex(formatorigin, 127, "%s %f %d %d %d %d %d %d", authid, time, checkpoints, gochecks, origin[0], origin[1], origin[2], scout)
2562
2563 new vault = fopen(realfile, "rt+")
2564 write_file(realfile, formatorigin) // La sfarsit adaug datele mele
2565
2566 fclose(vault)
2567
2568}
2569
2570// =================================================================================================
2571// Events / Forwards
2572// =================================================================================================
2573
2574//=================================================================================================
2575
2576public client_disconnect(id)
2577{
2578 checknumbers[id] = 0
2579 gochecknumbers[id] = 0
2580 antihookcheat[id] = 0.0
2581 chatorhud[id] = -1
2582 timer_started[id] = false
2583 ShowTime[id] = get_pcvar_num(kz_show_timer)
2584 firstspawn[id] = true
2585 IsPaused[id] = false
2586 WasPaused[id] = false
2587 user_has_scout[id] = false
2588 CustomStart[id] = false
2589}
2590
2591public client_putinserver(id)
2592{
2593 g_afktime[id] = 0
2594 checknumbers[id] = 0
2595 gochecknumbers[id] = 0
2596 antihookcheat[id] = 0.0
2597 chatorhud[id] = -1
2598 timer_started[id] = false
2599 has_hook[id]= false
2600 ShowTime[id] = get_pcvar_num(kz_show_timer)
2601 firstspawn[id] = true
2602 IsPaused[id] = false
2603 WasPaused[id] = false
2604 user_has_scout[id] = false
2605 CustomStart[id] = false
2606}
2607
2608// =================================================================================================
2609// Menu
2610// =================================================================================================
2611
2612//new const FILE[] = "help.txt"
2613
2614public kz_menu(id)
2615{
2616 new mapname[32];
2617 get_mapname(mapname,31);
2618 new title[64];
2619 formatex(title, 63, "\r[KREEDZ] \dMain Menu^n\dCurrent Map: \y%s\d", mapname)
2620 new menu = menu_create(title, "kz_menuhandler")
2621
2622 new msgcheck[64], msggocheck[64], msgpause[64]
2623 formatex(msgcheck, 63, "Checkpoint")
2624 formatex(msggocheck, 63, "Gocheck")
2625 formatex(msgpause, 63, "Pause - %s^n", IsPaused[id] ? "\yON" : "\rOFF")
2626
2627 menu_additem(menu, msgcheck, "1")
2628 menu_additem(menu, msggocheck, "2")
2629 menu_additem(menu, "Start", "3")
2630 menu_additem(menu, msgpause, "4")
2631 menu_additem(menu, "Show Keys", "5")
2632 menu_additem(menu, "Spectator/CT", "6")
2633 menu_additem(menu, "KZ-Tops", "7")
2634 menu_additem(menu, "LJ-Tops", "8")
2635 menu_additem(menu, "Teleport Menu", "9")
2636 menu_additem(menu, "Timing Menu", "10")
2637 menu_additem(menu, "FPS Viewer", "11")
2638
2639 menu_setprop( menu, MPROP_PERPAGE, 7 );
2640
2641 menu_display( id, menu, 0 );
2642
2643 return PLUGIN_HANDLED
2644}
2645
2646
2647public kz_menuhandler(id, menu, item)
2648{
2649 if(item == MENU_EXIT) {
2650 menu_destroy(menu)
2651 return PLUGIN_HANDLED
2652 }
2653
2654 switch(item) {
2655 case 0:
2656 {
2657 CheckPoint(id)
2658 kz_menu(id)
2659 }
2660 case 1:
2661 {
2662 GoCheck(id)
2663 kz_menu(id)
2664 }
2665 case 2:
2666 {
2667 goStart(id)
2668 kz_menu(id)
2669 }
2670 case 3:
2671 {
2672 Pause(id)
2673 kz_menu(id)
2674 }
2675 case 4:
2676 {
2677 cmdGetKeys(id)
2678 kz_menu(id)
2679 }
2680 case 5:
2681 {
2682 ct(id)
2683 kz_menu(id)
2684 }
2685 case 6: top15menu(id)
2686 case 7: ljtop(id)
2687 case 8: kz_tele_menu(id)
2688 case 9: timing(id)
2689 case 10: fpsview(id)
2690 }
2691
2692 return PLUGIN_HANDLED
2693}
2694
2695public fpsview(id)
2696{
2697 client_cmd(id, "say /fps")
2698}
2699
2700public ljtop(id)
2701{
2702 client_cmd(id, "say /ljtop")
2703}
2704
2705public timing(id)
2706{
2707 client_cmd(id, "say /timing")
2708}
2709
2710public cmdGetKeys(id)
2711{
2712 if (KeysOn[id])
2713 {
2714 client_cmd(id, "show_keys 0")
2715 KeysOn[id] = false
2716 return PLUGIN_HANDLED
2717 }
2718 else
2719 {
2720 client_cmd(id, "show_keys 1")
2721 KeysOn[id] = true
2722 return PLUGIN_HANDLED
2723 }
2724 return PLUGIN_HANDLED;
2725}
2726
2727public ct_menu(id)
2728{
2729 new title[64];
2730 formatex(title, 63, "\r[PLAYER]\d Menu")
2731 new menu = menu_create(title, "ct_menuhandler")
2732
2733 menu_additem(menu, "URBAN", "1")
2734 menu_additem(menu, "GSG9", "2")
2735 menu_additem(menu, "SAS", "3")
2736 menu_additem(menu, "GIGN^n", "4")
2737
2738 menu_setprop(menu, MPROP_PERPAGE, 7)
2739 menu_display(id, menu, 0)
2740
2741 return PLUGIN_HANDLED
2742}
2743
2744public ct_menuhandler(id, menu, item)
2745{
2746 if(item == MENU_EXIT)
2747 {
2748 model_menu(id)
2749 return PLUGIN_HANDLED
2750 }
2751
2752 switch(item)
2753 {
2754 case 0: cmdURBAN(id)
2755 case 1: cmdGSG9(id)
2756 case 2: cmdSAS(id)
2757 case 3: cmdGIGN(id)
2758 }
2759 return PLUGIN_HANDLED
2760}
2761
2762public terror_menu(id)
2763{
2764 new title[64];
2765 formatex(title, 63, "\r[PLAYER]\d Menu")
2766 new menu = menu_create(title, "terror_menuhandler")
2767
2768 menu_additem(menu, "TERROR", "1")
2769 menu_additem(menu, "LEET", "2")
2770 menu_additem(menu, "ARCTIC", "3")
2771 menu_additem(menu, "GUERILLA", "4")
2772
2773 menu_setprop(menu, MPROP_PERPAGE, 7)
2774 menu_display(id, menu, 0)
2775
2776 return PLUGIN_HANDLED
2777}
2778
2779public terror_menuhandler(id, menu, item)
2780{
2781 if(item == MENU_EXIT)
2782 {
2783 model_menu(id)
2784 return PLUGIN_HANDLED
2785 }
2786
2787 switch(item)
2788 {
2789 case 0: cmdTERROR(id)
2790 case 1: cmdLEET(id)
2791 case 2: cmdARCTIC(id)
2792 case 3: cmdGUERILLA(id)
2793 }
2794 return PLUGIN_HANDLED
2795}
2796
2797public custom_menu(id)
2798{
2799 if(!(get_user_flags(id) & ADMIN_LEVEL_C))
2800 {
2801 ColorChat(id, RED, "^x04[XJ] ^x03You have to be VIP to choose a custom model!");
2802 model_menu(id)
2803 return PLUGIN_HANDLED
2804 }
2805 new title[64];
2806 formatex(title, 63, "\r[PLAYER]\d Menu")
2807 new menu = menu_create(title, "custom_menuhandler")
2808
2809 menu_additem(menu, "VIP", "1")
2810 menu_additem(menu, "CLONE", "2")
2811 menu_additem(menu, "DROID", "3")
2812
2813 menu_setprop(menu, MPROP_PERPAGE, 7)
2814 menu_display(id, menu, 0)
2815
2816 return PLUGIN_HANDLED
2817}
2818
2819public custom_menuhandler(id, menu, item)
2820{
2821 if(item == MENU_EXIT)
2822 {
2823 model_menu(id)
2824 return PLUGIN_HANDLED
2825 }
2826
2827 switch(item)
2828 {
2829 case 0: cmdVIP(id)
2830 case 1: cmdCLONE(id)
2831 case 2: cmdDROID(id)
2832 }
2833 return PLUGIN_HANDLED
2834}
2835
2836
2837public ShowTimer_Menu(id)
2838{
2839 if (get_pcvar_num(kz_show_timer) == 0)
2840 {
2841 kz_chat(id, "%L", id, "KZ_TIMER_DISABLED")
2842 return PLUGIN_HANDLED
2843 }
2844 else
2845 {
2846 new menu = menu_create("\yTimer Menu\w", "TimerHandler")
2847
2848 new hudtimer[64], notimer[64];
2849
2850 formatex(hudtimer, 63, "HUD Timer %s", ShowTime[id] == 1 ? "\y x" : "")
2851 formatex(notimer, 63, "No Timer %s^n", ShowTime[id] == 0 ? "\y x" : "")
2852
2853 menu_additem(menu, hudtimer, "1")
2854 menu_additem(menu, notimer, "2")
2855 menu_additem(menu, "Main Menu", "3")
2856
2857 menu_display(id, menu, 0)
2858 return PLUGIN_HANDLED
2859 }
2860
2861 return PLUGIN_HANDLED
2862}
2863
2864public TimerHandler(id, menu, item)
2865{
2866 if(item == MENU_EXIT)
2867 {
2868 menu_destroy(menu)
2869 return PLUGIN_HANDLED
2870 }
2871
2872 switch(item)
2873 {
2874
2875 case 0:
2876 {
2877 ShowTime[id]= 1
2878 ShowTimer_Menu(id)
2879 if (timer_started[id])
2880 kz_showtime_roundtime(id, 0)
2881 }
2882 case 1:
2883 {
2884 ShowTime[id]= 0
2885 ShowTimer_Menu(id)
2886 if (timer_started[id])
2887 kz_showtime_roundtime(id, 0)
2888 }
2889 case 2:
2890 {
2891 kz_menu(id)
2892 }
2893 }
2894 return PLUGIN_HANDLED
2895}
2896
2897public savepos_menu(id)
2898{
2899 new menu = menu_create("SavePos Menu", "SavePosHandler")
2900
2901 menu_additem(menu, "Reload previous run", "1")
2902 menu_additem(menu, "Start a new run", "2")
2903
2904 menu_display(id, menu, 0)
2905 return PLUGIN_HANDLED
2906}
2907
2908public SavePosHandler(id, menu, item)
2909{
2910
2911 switch(item)
2912 {
2913 case 0:
2914 {
2915 GoPos(id)
2916 }
2917 case 1:
2918 {
2919 Verif(id,0)
2920 }
2921 }
2922 return PLUGIN_HANDLED
2923}
2924
2925public top15menu(id)
2926{
2927 new menu = menu_create("\yTop15 \w", "top15handler")
2928 menu_additem(menu, "\wPro/Nub 15", "1", 0)
2929 menu_additem(menu, "\wSearch Function^n", "2", 0)
2930 #if defined USE_SQL
2931 menu_additem(menu, "Pro Records","3")
2932 menu_additem(menu, "Last Pro Entries", "4")
2933 menu_additem(menu, "Maps Statistic^n","5")
2934 menu_additem(menu, "Main Menu", "6")
2935 #else
2936 menu_additem(menu, "\wMain Menu", "3", 0)
2937 #endif
2938
2939 menu_display(id, menu, 0);
2940
2941 return PLUGIN_HANDLED;
2942}
2943
2944public top15handler(id, menu, item)
2945{
2946 if(item == MENU_EXIT)
2947 {
2948 menu_destroy(menu)
2949 return PLUGIN_HANDLED
2950 }
2951 #if defined USE_SQL
2952 switch(item)
2953 {
2954 case 0:
2955 {
2956 ProTop_show(id)
2957 top15menu(id)
2958 }
2959 case 1:
2960 {
2961 NoobTop_show(id)
2962 top15menu(id)
2963 }
2964 case 2:
2965 {
2966 kz_showhtml_motd(id, PRO_RECORDS, "")
2967 top15menu(id)
2968 }
2969 case 3:
2970 {
2971 kz_showhtml_motd(id, LAST_PRO10, "")
2972 top15menu(id)
2973 }
2974 case 4:
2975 {
2976 kz_showhtml_motd(id, MAPS_STATISTIC, "")
2977 top15menu(id)
2978 }
2979 case 5:
2980 {
2981 kz_menu(id)
2982 }
2983 }
2984 #else
2985 switch(item)
2986 {
2987 case 0:
2988 {
2989 ProTop_show(id)
2990 top15menu(id)
2991 }
2992 case 1:
2993 {
2994 NoobTop_show(id)
2995 top15menu(id)
2996 }
2997 case 2:
2998 {
2999 kz_menu(id)
3000 }
3001 }
3002 #endif
3003
3004 return PLUGIN_HANDLED;
3005}
3006
3007// =================================================================================================
3008
3009//
3010// Timersystem
3011// =================================================================================================
3012public fwdUse(ent, id)
3013{
3014 if(!ent || id > 32)
3015 {
3016 return HAM_IGNORED;
3017 }
3018
3019 if(!is_user_alive(id))
3020 {
3021 return HAM_IGNORED;
3022 }
3023
3024 if(is_user_bot(id))
3025 {
3026 return HAM_IGNORED;
3027 }
3028
3029
3030 new name[32]
3031 get_user_name(id, name, 31)
3032
3033 new szTarget[ 32 ];
3034 pev(ent, pev_target, szTarget, 31);
3035
3036 if(TrieKeyExists(g_tStarts, szTarget))
3037 {
3038 if (get_gametime() - antihookcheat[id] < 3.0)
3039 {
3040 client_print(id, print_center, "Wait 3 seconds after using Hook")
3041 return PLUGIN_HANDLED
3042 }
3043
3044 if(Verif(id,1))
3045 {
3046 ColorChat(id, GREEN, "^x01 %L", id, "KZ_SAVEPOS_SAVED")
3047 savepos_menu(id)
3048 return HAM_IGNORED
3049 }
3050
3051 new entclassname[33];
3052 pev(pev(id, pev_groundentity), pev_classname, entclassname, 32);
3053 if(equal(entclassname, "func_door"))
3054 {
3055 return PLUGIN_HANDLED
3056 }
3057
3058 if (reset_checkpoints(id) && !timer_started[id] )
3059 {
3060 start_climb(id)
3061 if(IsOnGround(id))
3062 {
3063 usedhook[id] = false
3064 }
3065 for(new i = 0; i < 8; i++)
3066 if(get_user_health(id) < 100)
3067 set_user_health(id, 100)
3068
3069 pev(id, pev_origin, SavedStart[id])
3070 if(get_pcvar_num(kz_save_autostart) == 1)
3071 AutoStart[id] = true;
3072
3073 if(!DefaultStart)
3074 {
3075 entity_get_vector(id, EV_VEC_v_angle, angles);
3076 kz_set_start(MapName, SavedStart[id], angles);
3077 client_print(id, print_center, "Start position set");
3078 }
3079
3080 }
3081
3082 }
3083
3084 if(TrieKeyExists(g_tStops, szTarget))
3085 {
3086 if(timer_started[id])
3087 {
3088 if(get_user_noclip(id))
3089 return PLUGIN_HANDLED
3090
3091 if(hook[id] == false)
3092 finish_climb(id)
3093 has_hook[id] = true
3094
3095 }
3096 else
3097 client_print(id, print_center, "Timer is not started")
3098
3099 }
3100 return HAM_IGNORED
3101}
3102
3103public start_climb(id)
3104{
3105 if(usedhook[id])
3106 return PLUGIN_HANDLED
3107 if(hook[id] == true)
3108 return PLUGIN_HANDLED
3109
3110 //kz_chat(id, "%L", id, "KZ_START_CLIMB")
3111
3112 if(get_user_noclip(id))
3113 {
3114 client_cmd(id, "say /start")
3115 }
3116
3117 if (get_pcvar_num(kz_reload_weapons) == 1)
3118 {
3119 strip_user_weapons(id)
3120 give_item(id,"weapon_knife")
3121 }
3122
3123 if (ShowTime[id] == 2)
3124 kz_showtime_roundtime(id, 0)
3125 set_pev(id, pev_gravity, 1.0);
3126 set_pev(id, pev_movetype, MOVETYPE_WALK)
3127 set_user_godmode(id, 0)
3128 reset_checkpoints(id)
3129 IsPaused[id] = false
3130 timer_started[id] = true
3131 timer_time[id] = get_gametime()
3132 //show timer icon
3133 showtime(id)
3134
3135 if (user_has_weapon(id, CSW_SCOUT))
3136 {
3137 client_cmd(id, "spk fvox/blip")
3138 }
3139
3140 return PLUGIN_CONTINUE
3141}
3142
3143public finish_climb(id)
3144{
3145 if (!is_user_alive(id) || is_user_bot(id))
3146 {
3147 timer_started[id] = false
3148 return;
3149 }
3150
3151 if ((get_pcvar_num(kz_top15_authid) > 1) || (get_pcvar_num(kz_top15_authid) < 0))
3152 {
3153 ColorChat(id, GREEN, "^x01 %L.", id, "KZ_TOP15_DISABLED")
3154 return;
3155 }
3156
3157 #if defined USE_SQL
3158 new Float: time, wpn
3159 time = get_gametime() - timer_time[id]
3160 show_finish_message(id, time)
3161 timer_started[id] = false
3162 if (get_pcvar_num(kz_show_timer) > 0)
3163 kz_showtime_roundtime(id, 0)
3164 new checkpoints=checknumbers[id]
3165 new gocheck=gochecknumbers[id]
3166 if(user_has_weapon(id, CSW_SCOUT))
3167 wpn=CSW_SCOUT
3168 else
3169 wpn=get_user_weapon(id)
3170
3171 new steam[32], name[32]
3172 get_user_name(id, name, 31)
3173 get_user_authid(id, steam, 31)
3174 new createinto[1001]
3175
3176 new cData[192]
3177 cData[0] = id
3178 formatex(cData[2], charsmax(cData)-2, "^"%f^" ^"%d^" ^"%d^" ^"%d^"", time, wpn, checkpoints ,gocheck)
3179
3180
3181 if(equal(steam, "VALVE_ID_LAN") || equal(steam, "STEAM_ID_LAN"))
3182 {
3183 if(gochecknumbers[id] == 0 && !user_has_weapon(id, CSW_SCOUT))
3184 {
3185 cData[1] = PRO_TOP
3186 formatex(createinto, sizeof createinto - 1, "SELECT time FROM `kz_pro15` WHERE mapname='%s' AND name='%s'", MapName, name)
3187 SQL_ThreadQuery(g_SqlTuple, "Set_QueryHandler", createinto, cData, strlen(cData[2])+1)
3188 }
3189 else if(gochecknumbers[id] > 0 || user_has_weapon(id, CSW_SCOUT))
3190 {
3191 cData[1] = NUB_TOP
3192 formatex(createinto, sizeof createinto - 1, "SELECT time FROM `kz_nub15` WHERE mapname='%s' AND name='%s'", MapName, name)
3193 SQL_ThreadQuery(g_SqlTuple, "Set_QueryHandler", createinto, cData, strlen(cData[2])+1)
3194 }
3195 } else
3196 {
3197
3198 if(gochecknumbers[id] == 0 && !user_has_weapon(id, CSW_SCOUT))
3199 {
3200 cData[1] = PRO_TOP
3201 formatex(createinto, sizeof createinto - 1, "SELECT time FROM `kz_pro15` WHERE mapname='%s' AND authid='%s'", MapName, steam)
3202 SQL_ThreadQuery(g_SqlTuple, "Set_QueryHandler", createinto, cData, strlen(cData[2])+1)
3203 }
3204 else if(gochecknumbers[id] > 0 || user_has_weapon(id, CSW_SCOUT))
3205 {
3206 cData[1] = NUB_TOP
3207 formatex(createinto, sizeof createinto - 1, "SELECT time FROM `kz_nub15` WHERE mapname='%s' AND authid='%s'", MapName, steam)
3208 SQL_ThreadQuery(g_SqlTuple, "Set_QueryHandler", createinto, cData, strlen(cData[2])+1)
3209 }
3210 }
3211 #else
3212 new Float: time, authid[32]
3213 time = get_gametime() - timer_time[id]
3214 get_user_authid(id, authid, 31)
3215 show_finish_message(id, time)
3216 timer_started[id] = false
3217 if (get_pcvar_num(kz_show_timer) > 0)
3218 kz_showtime_roundtime(id, 0)
3219
3220 if (gochecknumbers[id] == 0 && !user_has_scout[id])
3221 ProTop_update(id, time)
3222 if (gochecknumbers[id] > 0 || user_has_scout[id])
3223 NoobTop_update(id, time, checknumbers[id], gochecknumbers[id])
3224 #endif
3225 user_has_scout[id] = false
3226 //hide timer icon
3227 hidetime(id)
3228}
3229
3230public show_finish_message(id, Float:kreedztime)
3231{
3232 new name[32]
3233 new imin,isec,ims, wpn
3234 if(user_has_weapon(id, CSW_SCOUT))
3235 wpn=CSW_SCOUT
3236 else
3237 wpn=get_user_weapon(id)
3238 get_user_name(id, name, 31)
3239 imin = floatround(kreedztime / 60.0, floatround_floor)
3240 isec = floatround(kreedztime - imin * 60.0,floatround_floor)
3241 ims = floatround((kreedztime - (imin * 60.0 + isec)) * 100.0, floatround_floor)
3242
3243 if (gochecknumbers[id] == 0 && !user_has_scout[id])
3244 {
3245 ColorChat(0, BLUE, "^x03 %s^x01 %L^x03 %02i:%02i.%02i^x01 ! ^x04[%s]", name, LANG_PLAYER, "KZ_FINISH_MSG", imin, isec, ims, g_weaponsnames[wpn])
3246 }
3247 else if (gochecknumbers[id] > 0 || user_has_scout[id])
3248 {
3249 ColorChat(0, RED, "^x03 %s^x01 %L^x03 %02i:%02i.%02i^x01 ! (^x01using ^x03%d^x01 cps & ^x03%d^x01 gcs) ^x04[%s] ^x01", name, LANG_PLAYER, "KZ_FINISH_MSG", imin, isec, ims, checknumbers[id], gochecknumbers[id], g_weaponsnames[wpn])
3250 }
3251}
3252
3253//==========================================================
3254#if defined USE_SQL
3255public Set_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
3256{
3257 new id = cData[0]
3258 new style = cData[1]
3259 if(iFailState != TQUERY_SUCCESS)
3260 {
3261 log_amx("[XJ] TOP15 SQL: SQL Error #%d - %s", iErrnum, szError)
3262 ColorChat(0, GREEN, "^x01 %F", LANG_PLAYER, "KZ_TOP15_SQL_ERROR")
3263 }
3264
3265 server_print("[XJ] Server Geting Info of SQL Server")
3266
3267 new createinto[1001]
3268 new x1[16], x2[4], x3[5], x4[5]
3269 parse(cData[2], x1, 15, x2, 3, x3, 4, x4, 4)
3270
3271 new dia[64], steam[32], name[32], ip[15], country[3], checkpoints[32], gochecks[32]
3272 new Float:newtime = str_to_float(x1)
3273 new iMin, iSec, iMs, server[64]
3274 get_pcvar_string(kz_sql_name, server, 63)
3275 get_time("%Y%m%d%H%M%S", dia, sizeof dia - 1)
3276 get_user_authid(id, steam, 31)
3277 get_user_name(id, name, sizeof name - 1)
3278 get_user_ip (id, ip, sizeof ip - 1, 1)
3279 geoip_code2_ex(ip, country)
3280
3281 replace_all(name, 31, "\", "")
3282 replace_all(name, 31, "`", "")
3283 replace_all(name, 31, "'", "")
3284
3285
3286 if(SQL_NumResults(hQuery) == 0)
3287 {
3288 formatex(checkpoints, 31, ", '%d'", str_to_num(x3))
3289 formatex(gochecks, 31, ", '%d'", str_to_num(x4))
3290 formatex(createinto, sizeof createinto - 1, "INSERT INTO `%s` VALUES('%s', '%s','%s','%s','%f','%s','%s','%s'%s%s)", style == PRO_TOP ? "kz_pro15" : "kz_nub15", MapName, steam, country, name, newtime, dia, g_weaponsnames[str_to_num(x2)], server, style == PRO_TOP ? "" : checkpoints, style == PRO_TOP ? "" : gochecks)
3291 SQL_ThreadQuery(g_SqlTuple, "QueryHandle", createinto)
3292 GetNewRank(id, style)
3293 }
3294 else
3295 {
3296 new Float:oldtime, Float:thetime
3297 SQL_ReadResult(hQuery, 0, oldtime)
3298
3299 if(newtime < oldtime)
3300 {
3301 thetime = oldtime - newtime
3302 iMin = floatround(thetime / 60.0, floatround_floor)
3303 iSec = floatround(thetime - iMin * 60.0,floatround_floor)
3304 iMs = floatround((thetime - (iMin * 60.0 + iSec)) * 100.0, floatround_floor)
3305 //ColorChat(id, GREEN, "[XJ]^x01 %L^x03 %02i:%02i.%02i^x01 in ^x03%s", id, "KZ_IMPROVE", iMin, iSec, iMs, style == PRO_TOP ? "Pro 15" : "Noob 15")
3306 formatex(checkpoints, 31, ", checkpoints='%d'", str_to_num(x3))
3307 formatex(gochecks, 31, ", gocheck='%d'", str_to_num(x4))
3308 if(equal(steam, "VALVE_ID_LAN") || equal(steam, "STEAM_ID_LAN"))
3309 formatex(createinto, sizeof createinto - 1, "UPDATE `%s` SET time='%f', weapon='%s', date='%s', server='%s'%s%s WHERE name='%s' AND mapname='%s'", style == PRO_TOP ? "kz_pro15" : "kz_nub15", newtime, g_weaponsnames[str_to_num(x2)], dia, server, style == PRO_TOP ? "" : gochecks, style == PRO_TOP ? "" : checkpoints, name, MapName)
3310 else
3311 formatex(createinto, sizeof createinto - 1, "UPDATE `%s` SET time='%f', weapon='%s', date='%s', server='%s'%s%s WHERE authid='%s' AND mapname='%s'", style == PRO_TOP ? "kz_pro15" : "kz_nub15", newtime, g_weaponsnames[str_to_num(x2)], dia, server, style == PRO_TOP ? "" : gochecks, style == PRO_TOP ? "" : checkpoints, steam, MapName)
3312
3313 SQL_ThreadQuery(g_SqlTuple, "QueryHandle", createinto)
3314 GetNewRank(id, style)
3315 }
3316 else
3317 {
3318 thetime = newtime - oldtime
3319 iMin = floatround(thetime / 60.0, floatround_floor)
3320 iSec = floatround(thetime - iMin * 60.0,floatround_floor)
3321 iMs = floatround((thetime - (iMin * 60.0 + iSec)) * 100.0, floatround_floor)
3322 //ColorChat(id, GREEN, "[XJ]^x01 %L^x03 %02i:%02i.%02i ^x01in ^x03%s", id, "KZ_SLOWER", iMin, iSec, iMs, style == PRO_TOP ? "Pro 15" : "Noob 15")
3323 }
3324 }
3325
3326 return PLUGIN_CONTINUE
3327
3328}
3329
3330public GetNewRank_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
3331{
3332 new id = cData[0]
3333 if(iFailState != TQUERY_SUCCESS)
3334 {
3335 return log_amx("TOP15 SQL: SQL Error #%d - %s", iErrnum, szError)
3336 }
3337
3338 new steam[32], authid[32], namez[32], name[32], i = 0
3339 get_user_authid(id, steam, 31)
3340 get_user_name(id, namez, 31)
3341
3342 while(SQL_MoreResults(hQuery))
3343 {
3344 i++
3345 if(equal(steam, "VALVE_ID_LAN") || equal(steam, "STEAM_ID_LAN"))
3346 {
3347 SQL_ReadResult(hQuery, 0, name, 31)
3348 if(equal(name, namez))
3349 {
3350 if(cData[1] != NUB_TOP)
3351 ColorChat(0, BLUE, "^x03 %s^x01 is now^x03 #%d^x01 on^x03 Pro-15^x01 !",namez, i);
3352 else
3353 ColorChat(0, RED, "^x03 %s^x01 is now^x03 #%d^x01 on^x03 Noob-15^x01 !",namez, i);
3354
3355 if((i < 2) && cData[1] != NUB_TOP)
3356 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3357 else if(cData[1] != NUB_TOP)
3358 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3359 break;
3360 }
3361 }
3362 else
3363 {
3364 SQL_ReadResult(hQuery, 0, authid, 31)
3365 if(equal(authid, steam))
3366 {
3367 if(cData[1] != NUB_TOP)
3368 ColorChat(0, BLUE, "^x03 %s^x01 is now^x03 #%d^x01 on^x03 Pro-15^x01 !",namez, i);
3369 else
3370 ColorChat(0, RED, "^x03 %s^x01 is now^x03 #%d^x01 on^x03 Noob-15^x01 !",namez, i);
3371
3372 if((i < 2) && cData[1] != NUB_TOP)
3373 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3374 else if(cData[1] != NUB_TOP)
3375 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3376 break;
3377 }
3378 }
3379 SQL_NextRow(hQuery)
3380 }
3381
3382 return PLUGIN_CONTINUE
3383}
3384
3385public Players_Ranking(id)
3386{
3387 kz_showhtml_motd(id, PRO_RECORDS, "")
3388
3389 return PLUGIN_HANDLED
3390}
3391
3392
3393public ProTop_show(id)
3394{
3395 kz_showhtml_motd(id, PRO_TOP, MapName)
3396
3397 return PLUGIN_HANDLED
3398}
3399
3400public NoobTop_show(id)
3401{
3402
3403 kz_showhtml_motd(id, NUB_TOP, MapName)
3404
3405 return PLUGIN_HANDLED
3406}
3407
3408public ProRecs_show(id)
3409{
3410 new authid[32]
3411 get_user_authid(id, authid, 31)
3412
3413 if(equal(authid, "VALVE_ID_LAN") || equal(authid, "STEAM_ID_LAN"))
3414 {
3415 ColorChat (id, GREEN, "^x01 %L", id, "KZ_NO_STEAM")
3416 return PLUGIN_HANDLED
3417 }
3418
3419 kz_showhtml_motd(id, PRO_RECORDS, MapName)
3420
3421 return PLUGIN_HANDLED
3422}
3423
3424stock kz_showhtml_motd(id, type, const map[])
3425{
3426 new buffer[1001], namebuffer[64], filepath[96]
3427 get_pcvar_string(kz_sql_files, filepath, 95)
3428 new authid[32]
3429 get_user_authid(id, authid, 31)
3430
3431 switch(type)
3432 {
3433 case PRO_TOP:
3434 {
3435 formatex(namebuffer, 63, "Pro 15 of %s", equal(map, "") ? "All Maps" : map)
3436 formatex(buffer, 1000, "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=http://%s/stats15.php?map=%s^"></head><body><p>LOADING...</p></body></html>", filepath, map)
3437 }
3438 case NUB_TOP:
3439 {
3440 formatex(namebuffer, 63, "Noob 15 of %s", equal(map, "") ? "All Maps" : map)
3441 formatex(buffer, 1000, "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=http://%s/search.php?map=%s^"></head><body><p>LOADING...</p></body></html>", filepath, map)
3442 }
3443 case PRO_RECORDS:
3444 {
3445 formatex(namebuffer, 63, "ProRecords and Rank")
3446 formatex(buffer, 1000, "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=http://%s/top15.php?authid=%s^"></head><body><p>LOADING...</p></body></html>", filepath, authid)
3447 }
3448 case LAST_PRO10:
3449 {
3450 formatex(namebuffer, 63, "Last 10 Pro Entries")
3451 formatex(buffer, 1000, "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=http://%s/lastpro.php^"></head><body><p>LOADING...</p></body></html>", filepath)
3452 }
3453 case MAPS_STATISTIC:
3454 {
3455 formatex(namebuffer, 63, "Maps Statistic")
3456 formatex(buffer, 1000, "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=http://%s/maps.php^"></head><body><p>LOADING...</p></body></html>", filepath)
3457 }
3458 }
3459
3460 show_motd(id, buffer, namebuffer)
3461}
3462#else
3463public ProTop_update(id, Float:time)
3464{
3465 new authid[32], name[32], thetime[32], Float: slower, Float: faster, Float:protiempo
3466 get_user_name(id, name, 31);
3467 get_user_authid(id, authid, 31);
3468 get_time(" %d/%m/%Y ", thetime, 31);
3469 new bool:Is_in_pro15
3470 Is_in_pro15 = false
3471
3472 for(new i = 0; i < 15; i++)
3473 {
3474 if((equali(Pro_Names[i], name) && (get_pcvar_num(kz_top15_authid) == 0)) || (equali(Pro_AuthIDS[i], authid) && (get_pcvar_num(kz_top15_authid) == 1)))
3475 {
3476 Is_in_pro15 = true
3477 slower = time - Pro_Times[i]
3478 faster = Pro_Times[i] - time
3479 protiempo = Pro_Times[i]
3480 }
3481 }
3482
3483 for (new i = 0; i < 15; i++)
3484 {
3485 if(time < Pro_Times[i])
3486 {
3487 new pos = i
3488 if (get_pcvar_num(kz_top15_authid) == 0)
3489 while(!equal(Pro_Names[pos], name) && pos < 15)
3490 {
3491 pos++;
3492 }
3493 else if (get_pcvar_num(kz_top15_authid) == 1)
3494 while(!equal(Pro_AuthIDS[pos], authid) && pos < 15)
3495 {
3496 pos++;
3497 }
3498
3499 for (new j = pos; j > i; j--)
3500 {
3501 formatex(Pro_AuthIDS[j], 31, Pro_AuthIDS[j-1]);
3502 formatex(Pro_Names[j], 31, Pro_Names[j-1]);
3503 formatex(Pro_Date[j], 31, Pro_Date[j-1])
3504 Pro_Times[j] = Pro_Times[j-1];
3505 }
3506
3507 formatex(Pro_AuthIDS[i], 31, authid);
3508 formatex(Pro_Names[i], 31, name);
3509 formatex(Pro_Date[i], 31, thetime)
3510 Pro_Times[i] = time
3511
3512 save_pro15()
3513
3514 if(Is_in_pro15)
3515 {
3516
3517 if(time < protiempo)
3518 {
3519 new min, Float:sec;
3520 min = floatround(faster, floatround_floor)/60;
3521 sec = faster - (60*min);
3522 //ColorChat(id, GREEN, "^x01 %L ^x03%02d:%s%.2f^x01", id, "KZ_IMPROVE", min, sec < 10 ? "0" : "", sec);
3523
3524 if((i + 1) == 1)
3525 {
3526 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3527 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #1^x01 on ^x03Pro-15^x01", name);
3528 }
3529 else
3530 {
3531 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3532 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #%d^x01 on ^x03Pro-15^x01", name, (i+1));
3533 }
3534 }
3535 }
3536 else
3537 {
3538 if((i + 1) == 1)
3539 {
3540 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3541 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #1^x01 on ^x03Pro-15^x01", name);
3542 }
3543 else
3544 {
3545 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3546 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #%d^x01 on ^x03Pro-15^x01", name, (i+1));
3547 }
3548 }
3549
3550 return;
3551 }
3552
3553 if((equali(Pro_Names[i], name) && (get_pcvar_num(kz_top15_authid) == 0)) || (equali(Pro_AuthIDS[i], authid) && (get_pcvar_num(kz_top15_authid) == 1)))
3554 {
3555 if(time > protiempo)
3556 {
3557 new min, Float:sec;
3558 min = floatround(slower, floatround_floor)/60;
3559 sec = slower - (60*min);
3560 //ColorChat(id, GREEN, "^x01 %L ^x03%02d:%s%.2f^x01", id, "KZ_SLOWER", min, sec < 10 ? "0" : "", sec);
3561 return;
3562 }
3563 }
3564
3565 }
3566}
3567
3568public save_pro15()
3569{
3570 new profile[128]
3571 formatex(profile, 127, "%s/pro_%s.cfg", Topdir, MapName)
3572
3573 if(file_exists(profile))
3574 {
3575 delete_file(profile)
3576 }
3577
3578 new Data[256];
3579 new f = fopen(profile, "at")
3580
3581 for(new i = 0; i < 15; i++)
3582 {
3583 formatex(Data, 255, "^"%.2f^" ^"%s^" ^"%s^" ^"%s^"^n", Pro_Times[i], Pro_AuthIDS[i], Pro_Names[i], Pro_Date[i])
3584 fputs(f, Data)
3585 }
3586 fclose(f);
3587}
3588
3589public read_pro15()
3590{
3591 new profile[128], prodata[256]
3592 formatex(profile, 127, "%s/pro_%s.cfg", Topdir, MapName)
3593
3594 new f = fopen(profile, "rt")
3595 new i = 0
3596 while(!feof(f) && i < 16)
3597 {
3598 fgets(f, prodata, 255)
3599 new totime[25]
3600 parse(prodata, totime, 24, Pro_AuthIDS[i], 31, Pro_Names[i], 31, Pro_Date[i], 31)
3601 Pro_Times[i] = str_to_float(totime)
3602 i++;
3603 }
3604 fclose(f)
3605}
3606
3607//==================================================================================================
3608
3609public NoobTop_update(id, Float:time, checkpoints, gochecks)
3610{
3611 new authid[32], name[32], thetime[32], wpn, Float: slower, Float: faster, Float:noobtiempo
3612 get_user_name(id, name, 31);
3613 get_user_authid(id, authid, 31);
3614 get_time(" %d/%m/%Y ", thetime, 31);
3615 new bool:Is_in_noob15
3616 Is_in_noob15 = false
3617 if(user_has_weapon(id, CSW_SCOUT))
3618 wpn=CSW_SCOUT
3619 else
3620 wpn=get_user_weapon(id)
3621
3622 for(new i = 0; i < 15; i++)
3623 {
3624 if((equali(Noob_Names[i], name) && (get_pcvar_num(kz_top15_authid) == 0)) || (equali(Noob_AuthIDS[i], authid) && (get_pcvar_num(kz_top15_authid) == 1)))
3625 {
3626 Is_in_noob15 = true
3627 slower = time - Noob_Tiempos[i];
3628 faster = Noob_Tiempos[i] - time;
3629 noobtiempo = Noob_Tiempos[i]
3630 }
3631 }
3632
3633 for (new i = 0; i < 15; i++)
3634 {
3635 if(time < Noob_Tiempos[i])
3636 {
3637 new pos = i
3638
3639 if (get_pcvar_num(kz_top15_authid) == 0)
3640 while(!equal(Noob_Names[pos], name) && pos < 15)
3641 {
3642 pos++;
3643 }
3644 else if (get_pcvar_num(kz_top15_authid) == 1)
3645 while(!equal(Noob_AuthIDS[pos], authid) && pos < 15)
3646 {
3647 pos++;
3648 }
3649
3650 for (new j = pos; j > i; j--)
3651 {
3652 formatex(Noob_AuthIDS[j], 31, Noob_AuthIDS[j-1])
3653 formatex(Noob_Names[j], 31, Noob_Names[j-1])
3654 formatex(Noob_Date[j], 31, Noob_Date[j-1])
3655 formatex(Noob_Weapon[j], 31, Noob_Weapon[j-1])
3656 Noob_Tiempos[j] = Noob_Tiempos[j-1]
3657 Noob_CheckPoints[j] = Noob_CheckPoints[j-1]
3658 Noob_GoChecks[j] = Noob_GoChecks[j-1]
3659 }
3660
3661 formatex(Noob_AuthIDS[i], 31, authid);
3662 formatex(Noob_Names[i], 31, name);
3663 formatex(Noob_Date[i], 31, thetime)
3664 formatex(Noob_Weapon[i], 31, g_weaponsnames[wpn])
3665 Noob_Tiempos[i] = time
3666 Noob_CheckPoints[i] = checkpoints
3667 Noob_GoChecks[i] = gochecks
3668
3669 save_Noob15()
3670
3671 if(Is_in_noob15)
3672 {
3673
3674 if(time < noobtiempo)
3675 {
3676 new min, Float:sec;
3677 min = floatround(faster, floatround_floor)/60;
3678 sec = faster - (60*min);
3679 //ColorChat(id, GREEN, "^x01 %L ^x03%02d:%s%.2f^x01", id, "KZ_IMPROVE", min, sec < 10 ? "0" : "", sec);
3680
3681 if((i + 1) == 1)
3682 {
3683 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3684 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #1^x01 on ^x03Noob-15^x01", name);
3685 }
3686 else
3687 {
3688 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3689 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #%d^x01 on ^x03Noob-15^x01", name, (i+1));
3690 }
3691 }
3692 }
3693 else
3694 {
3695 if((i + 1) == 1)
3696 {
3697 emit_sound(0, CHAN_ITEM, "vox/woop.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3698 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #1^x01 on ^x03Noob-15^x01", name);
3699 }
3700 else
3701 {
3702 emit_sound(0, CHAN_ITEM, "buttons/bell1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
3703 ColorChat(0, GREEN, "^x01^x03 %s^x01 is now^x03 #%d^x01 on ^x03Noob-15^x01", name, (i+1));
3704 }
3705 }
3706 return;
3707 }
3708
3709 if((equali(Noob_Names[i], name) && (get_pcvar_num(kz_top15_authid) == 0)) || (equali(Noob_AuthIDS[i], authid) && (get_pcvar_num(kz_top15_authid) == 1)))
3710 {
3711 if(time > noobtiempo)
3712 {
3713
3714 new min, Float:sec;
3715 min = floatround(slower, floatround_floor)/60;
3716 sec = slower - (60*min);
3717 //ColorChat(id, GREEN, "^x01 %L ^x03%02d:%s%.2f^x01", id, "KZ_SLOWER", min, sec < 10 ? "0" : "", sec);
3718 return;
3719 }
3720 }
3721
3722 }
3723}
3724
3725public save_Noob15()
3726{
3727 new profile[128]
3728 formatex(profile, 127, "%s/Noob_%s.cfg", Topdir, MapName)
3729
3730 if(file_exists(profile))
3731 {
3732 delete_file(profile)
3733 }
3734
3735 new Data[256];
3736 new f = fopen(profile, "at")
3737
3738 for(new i = 0; i < 15; i++)
3739 {
3740 formatex(Data, 255, "^"%.2f^" ^"%s^" ^"%s^" ^"%i^" ^"%i^" ^"%s^" ^"%s^" ^n", Noob_Tiempos[i], Noob_AuthIDS[i], Noob_Names[i], Noob_CheckPoints[i], Noob_GoChecks[i],Noob_Date[i],Noob_Weapon[i])
3741 fputs(f, Data)
3742 }
3743 fclose(f);
3744}
3745
3746public read_Noob15()
3747{
3748 new profile[128], prodata[256]
3749 formatex(profile, 127, "%s/Noob_%s.cfg", Topdir, MapName)
3750
3751 new f = fopen(profile, "rt")
3752 new i = 0
3753 while(!feof(f) && i < 16)
3754 {
3755 fgets(f, prodata, 255)
3756 new totime[25], checks[5], gochecks[5]
3757 parse(prodata, totime, 24, Noob_AuthIDS[i], 31, Noob_Names[i], 31, checks, 4, gochecks, 4, Noob_Date[i], 31, Noob_Weapon[i], 31)
3758 Noob_Tiempos[i] = str_to_float(totime)
3759 Noob_CheckPoints[i] = str_to_num(checks)
3760 Noob_GoChecks[i] = str_to_num(gochecks)
3761 i++;
3762 }
3763 fclose(f)
3764}
3765
3766public ProTop_show(id)
3767{
3768 new buffer[2048], len, name[32]
3769
3770 len = formatex(buffer, 2047, "<body bgcolor=#000000><table width=100%% cellpadding=2 cellspacing=0 border=0>")
3771 len += formatex(buffer[len], 2047-len, "<tr align=center bgcolor=#000000><th width=5%%> # <th width=45%% align=center> Player <th width=30%%> Time <th width=20%%> Date ")
3772
3773 for (new i = 0; i < 10; i++)
3774 {
3775 name = Pro_Names[i]
3776
3777 if(Pro_Times[i] > 9999999.0)
3778 {
3779 len += formatex(buffer[len], 2047-len, "<tr align=center%s><td> %d <td align=center> %s <td> %s <td> %s", ((i%2)==0) ? " bgcolor=#003366" : " bgcolor=#336699", (i+1), "", "", "")
3780 }
3781
3782 else
3783 {
3784 new minutos, Float:segundos
3785 minutos = floatround(Pro_Times[i], floatround_floor)/60
3786 segundos = Pro_Times[i] - (60*minutos)
3787
3788 len += formatex(buffer[len], 2047-len, "<tr align=center%s><td> %d <td align=center> %s <td> <b>%02d:%s%.2f <td> %s", ((i%2)==0) ? " bgcolor=#003366" : " bgcolor=#336699", (i+1), Pro_Names[i], minutos, segundos < 10 ? "0" : "", segundos, Pro_Date[i])
3789
3790 }
3791 }
3792
3793 len += formatex(buffer[len], 2047-len, "</table></body>")
3794 len += formatex(buffer[len], 2047-len, "")
3795
3796 show_motd(id, buffer, "Pro10 Climbers")
3797
3798 return PLUGIN_HANDLED
3799}
3800
3801public NoobTop_show(id)
3802{
3803 new buffer[2048], name[32], len
3804
3805 len = formatex(buffer, 2047, "<body bgcolor=#000000><table width=100%% cellpadding=2 cellspacing=0 border=0>")
3806 len += formatex(buffer[len], 2047-len, "<tr align=center bgcolor=#000000><th width=5%%> # <th width=35%% align=center> Player <th width=20%%> Time <th width=10%%> CPs <th width=10%%> TPs <th width=10%%> Date")
3807
3808 for (new i = 0; i < 10; i++)
3809 {
3810 if(Noob_Tiempos[i] > 9999999.0)
3811 {
3812 len += formatex(buffer[len], 2047-len, "<tr align=center%s><td> %d <td align=center> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? " bgcolor=#003366" : " bgcolor=#336699", (i+1), "", "", "", "", "")
3813 }
3814
3815 else
3816 {
3817 name = Noob_Names[i]
3818 new minutos, Float:segundos
3819 minutos = floatround(Noob_Tiempos[i], floatround_floor)/60
3820 segundos = Noob_Tiempos[i] - (60*minutos)
3821
3822 len += formatex(buffer[len], 2047-len, "<tr align=center%s><td> %d <td align=center> %s%s <td> <b>%02d:%s%.2f <td> %d <td> %d <td> %s", ((i%2)==0) ? " bgcolor=#003366" : " bgcolor=#336699", (i+1), Noob_Names[i], equal(Noob_Weapon[i],"scout") ? "(scout)" : "", minutos, segundos < 10 ? "0" : "", segundos, Noob_CheckPoints[i], Noob_GoChecks[i], Noob_Date[i], Noob_Weapon[i])
3823 }
3824 }
3825
3826 len += formatex(buffer[len], 2047-len, "</table></body>")
3827 len += formatex(buffer[len], 2047-len, "")
3828
3829 show_motd(id, buffer, "Noob10 Climbers")
3830
3831 return PLUGIN_HANDLED
3832}
3833#endif
3834
3835public CmdUpTime(id) {
3836 if (! (get_user_flags(id) & ADMIN_BAN))
3837 {
3838 client_print(id, print_center, "You have no access to that command");
3839 return PLUGIN_HANDLED
3840 }
3841 new gameTime = floatround(get_gametime());
3842 new mins = gameTime / 60;
3843 new secs = gameTime % 60;
3844
3845 GreenPrint(0, "The server has been online for%s %02i:%02i^1.", mins >= 50 ? "^3" : "^4", mins, secs);
3846
3847 return PLUGIN_CONTINUE;
3848}
3849
3850
3851stock GreenPrint(id, const message[ ], any:...)
3852{
3853 static szMessage[ 192 ], iLen, iSayText;
3854
3855 if(!iLen)
3856 iLen = formatex(szMessage, 191, "^4[XJ]^1 ");
3857
3858 if(!iSayText)
3859 iSayText = get_user_msgid("SayText");
3860
3861 vformat(szMessage[ iLen ], 191 - iLen, message, 3);
3862
3863 message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, _, id);
3864 write_byte(id ? id : 1);
3865 write_string(szMessage);
3866 message_end();
3867
3868 return 1;
3869}
3870
3871public MessageStatusIcon(msg_id, msg_dest, msg_entity)
3872{
3873 new icon[9]
3874 get_msg_arg_string(2, icon, charsmax(icon));
3875
3876 if(equal(icon, "buyzone"))
3877 {
3878
3879 return PLUGIN_HANDLED;
3880 }
3881
3882 return PLUGIN_CONTINUE;
3883}
3884
3885/*================================================================================================*/
3886/*************************************** [Timer Icon] *********************************************/
3887/*================================================================================================*/
3888//timer icon code by sunny#32<kz.tw> please keep this credit text :D
3889public showtime(id)
3890{
3891 message_begin(MSG_ONE,iconstatus,{0,0,0},id)
3892 write_byte(1)
3893 write_string("stopwatch")
3894 write_byte(0)
3895 write_byte(90)
3896 write_byte(255)
3897 message_end()
3898 return PLUGIN_HANDLED
3899}
3900public showtime2(id)
3901{
3902 message_begin(MSG_ONE,iconstatus,{0,0,0},id)
3903 write_byte(1)
3904 write_string("stopwatch")
3905 write_byte(145)
3906 write_byte(0)
3907 write_byte(0)
3908 message_end()
3909 return PLUGIN_HANDLED
3910}
3911public hidetime(id)
3912{
3913 message_begin(MSG_ONE,iconstatus,{0,0,0},id)
3914 write_byte(0)
3915 write_string("stopwatch")
3916 write_byte(0)
3917 write_byte(90)
3918 write_byte(255)
3919 message_end()
3920 return PLUGIN_HANDLED
3921}
3922
3923public showtime22(id)
3924{
3925 if(timer_started[id])
3926 {
3927 set_task(0.5,"showtime",id);
3928 }
3929}
3930
3931stock IsOnGround(id)
3932{
3933 new flags = pev(id, pev_flags);
3934 if((flags & FL_ONGROUND) || (flags & FL_PARTIALGROUND) ||( flags & FL_INWATER ) ||( flags & FL_CONVEYOR ) ||( flags & FL_FLOAT))
3935 {
3936 return true;
3937 }
3938 return false;
3939}
3940
3941stock kz_roundtime(id, tiempo)
3942{
3943 if( is_user_connected(id) )
3944 {
3945 message_begin(MSG_ONE_UNRELIABLE, g_roundtime, _, id);
3946 write_short(tiempo + 1); // +1 :D
3947 message_end();
3948 }
3949}