Advertisement
Guest User

Untitled

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