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