Guest User

Untitled

a guest
Mar 8th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 57.71 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <fakemeta>
  5. #include <fakemeta_util>
  6. #include <fun>
  7. #include <hamsandwich>
  8.  
  9. #define PLUGIN "Deathrun Duel"
  10. #define VERSION "4.0"
  11. #define AUTHOR "[Vicious Vixen]"
  12. #define PREFIX "[DeathRun]"
  13.  
  14. #define is_valid_player(%1) (1 <= %1 <= 32)
  15.  
  16. #define GODTID 100500
  17. #define TIMERTID 100501
  18. #define TIMER2TID 100502
  19. #define INFORMERTID 100503
  20. #define WAITTIMERTID 100504
  21. #define MCOUNT 9
  22. #define SCOUNT 20
  23. #define DCOUNT 13
  24. #define DAMMO 1
  25. #define KWPN "world"
  26. #define KHS 1
  27. #define MENUBODY 1024
  28. #define MAXORIGINS 2
  29. #define MAXWORDS 100
  30.  
  31. #define MAX_BUTTONS 100
  32. #define KeysButtonsMenu (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 137890
  33. #define KeysOptionsMenu (1<<0)|(1<<1)|(1<<8) //129
  34. #define KeysDelayMenu (1<<0)|(1<<1)|(1<<2)|(1<<8) //1239
  35.  
  36. #define ANNOUNCE_TASK 10000
  37.  
  38. #define m_flWait 44
  39.  
  40. //Main
  41.  
  42. new gEnt[MAX_BUTTONS];
  43. new gUsed[MAX_BUTTONS];
  44. new giPointer=0;
  45. new gOnStart[MAX_BUTTONS];
  46. new Float:gDefaultDelay[MAX_BUTTONS];
  47. new Float:gDelay[MAX_BUTTONS];
  48.  
  49. new gInMenu[33];
  50.  
  51. new gszFile[128];
  52.  
  53. new giSprite;
  54.  
  55. new gcvarDefault, gcvarTeam, gcvarFreeRun;
  56. new gcvarLimit, gcvarLimitMode, gcvarPrivilege;
  57. new gcvarMessage, gcvarRestore;
  58.  
  59. //VOTE
  60.  
  61. #define TASK_SHOWMENU 432
  62. #define TASK_RES 123
  63.  
  64. #define MAX_ROUNDS 999
  65.  
  66. #define KeysFFVote (1<<0)|(1<<1) // Keys: 12
  67.  
  68. new gcvarFRVoteTime;
  69.  
  70. new giVoteStart, giVoteTime;
  71.  
  72. new bool:gbFreeRun=false;
  73. new bool:gbVote=false;
  74.  
  75. #define VOTE_ON 0
  76. #define VOTE_OFF 1
  77.  
  78. new giVotes[33][2];
  79.  
  80. new giRounds=MAX_ROUNDS, giTime=0;
  81.  
  82. new MaxPlayers
  83. new ChoosedDuel
  84. new DuelNum
  85. new SayText
  86. new BeaconSprite
  87. new CounterID
  88. new TerroristID
  89. new MathAnswer
  90. new RussianRouletteID
  91. new RussianRouletteBullet
  92. new Index
  93. new Timer
  94. new OriginsNum
  95. new WordsNum
  96.  
  97. new g_MsgHud1
  98. new g_MsgHud2
  99. new g_MsgHud3
  100.  
  101. new PcvarDuels
  102. new PcvarMusic
  103. new PcvarTimer
  104. new PcvarTimeLimit
  105. new PcvarSpawnGod
  106. new PcvarEffects
  107. new PcvarInformer
  108. new PcvarLastMenu
  109. new PcvarWait
  110. new PcvarMode
  111. new PcvarTele
  112.  
  113. new MenuPosition[33]
  114. new MenuTs[33]
  115. new RussianRouletteName[64]
  116. new MathTask[64]
  117. new ConfigsDir[64]
  118. new WordsFile[64]
  119. new OriginsFile[128]
  120. new WordAnswer[128]
  121.  
  122. new MenuBody[MENUBODY + 1]
  123.  
  124. new bool:Last
  125. new bool:Duel
  126. new bool:FPage
  127. new bool:TouchWeapons[33]
  128. new bool:Once[33]
  129. new bool:InDuel[33]
  130. new bool:Knife[33]
  131. new bool:Deagle[33]
  132. new bool:M4a1[33]
  133. new bool:Ak47[33]
  134. new bool:Mp5navy[33]
  135. new bool:Grenade[33]
  136. new bool:Scout[33]
  137. new bool:Drob[33]
  138. new bool:Awp[33]
  139. new bool:Math[33]
  140. new bool:Word[33]
  141. new bool:RussianRoulette[33]
  142. new bool:Used[33]
  143. new bool:Boom[33]
  144. new bool:NotYou[33]
  145. new bool:DoIt[33]
  146. new bool:Start[33]
  147. new bool:Famas[33]
  148.  
  149. new Origins[MAXORIGINS][128]
  150. new Words[MAXWORDS][192]
  151.  
  152. new Music[MCOUNT][] =
  153. {
  154. "media/Half-Life01.mp3",
  155. "media/Half-Life02.mp3",
  156. "media/Half-Life03.mp3",
  157. "media/Half-Life08.mp3",
  158. "media/Half-Life11.mp3",
  159. "media/Half-Life12.mp3",
  160. "media/Half-Life13.mp3",
  161. "media/Half-Life16.mp3",
  162. "media/Half-Life17.mp3"
  163. }
  164.  
  165. new Sound[SCOUNT][] =
  166. {
  167. "fvox/one",
  168. "fvox/two",
  169. "fvox/three",
  170. "fvox/four",
  171. "fvox/five",
  172. "fvox/six",
  173. "fvox/seven",
  174. "fvox/eight",
  175. "fvox/nine",
  176. "fvox/ten",
  177. "fvox/eleven",
  178. "fvox/twelve",
  179. "fvox/thirteen",
  180. "fvox/fourteen",
  181. "fvox/fifteen",
  182. "fvox/sixteen",
  183. "fvox/seventeen",
  184. "fvox/eighteen",
  185. "fvox/nineteen",
  186. "fvox/twenty"
  187. }
  188.  
  189. new Duels[DCOUNT][] =
  190. {
  191. "DUEL_1",
  192. "DUEL_2",
  193. "DUEL_3",
  194. "DUEL_4",
  195. "DUEL_5",
  196. "DUEL_6",
  197. "DUEL_7",
  198. "DUEL_8",
  199. "DUEL_9",
  200. "DUEL_10",
  201. "DUEL_11",
  202. "DUEL_12",
  203. "DUEL_13"
  204. }
  205. public plugin_init()
  206. {
  207. register_plugin(PLUGIN, VERSION, AUTHOR)
  208. register_event("HLTV", "RoundStart", "a", "1=0", "2=0")
  209. register_logevent("RoundEnd", 2, "1=Round_End")
  210. RegisterHam(Ham_Touch, "weaponbox", "TouchWeapon")
  211. RegisterHam(Ham_Touch, "armoury_entity", "TouchWeapon")
  212. RegisterHam(Ham_Touch, "weapon_shield", "TouchWeapon")
  213. RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1)
  214. RegisterHam(Ham_Killed, "player", "PlayerKilled")
  215. register_forward(FM_CmdStart,"CmdStart",1)
  216. register_forward(FM_UpdateClientData, "UpdateClientData", 1)
  217. register_clcmd("say /duel", "CmdDuelsMenu")
  218. register_clcmd("say /dd", "CmdDuelsMenu")
  219. register_clcmd("say_team /duel", "CmdDuelsMenu")
  220. register_clcmd("say_team /dd", "CmdDuelsMenu")
  221. register_clcmd("deathrun_duels", "CmdDuelsMenu")
  222. register_clcmd("say", "hooksay")
  223. register_clcmd("say_team", "hooksay_team")
  224. register_concmd("dd_origin_menu", "CmdOriginsMenu", ADMIN_RCON)
  225. PcvarDuels = register_cvar("dd_duels", "abcdefghijklm")
  226. PcvarMusic = register_cvar("dd_music", "0")
  227. PcvarTimer = register_cvar("dd_timer", "0")
  228. PcvarTimeLimit = register_cvar("dd_timelimit", "60")
  229. PcvarSpawnGod = register_cvar("dd_spawngod", "1")
  230. PcvarEffects = register_cvar("dd_effects", "3")
  231. PcvarWait = register_cvar("dd_wait", "5")
  232. PcvarInformer = register_cvar("dd_informer", "1")
  233. PcvarLastMenu = register_cvar("dd_lastmenu", "1")
  234. PcvarTele = register_cvar("dd_teleport", "1")
  235. PcvarMode = register_cvar("deathrun_mode", "BUTTONS", FCVAR_SERVER)
  236. register_cvar("Deathrun Duels", "v2.5 by [I.G.]", FCVAR_SERVER|FCVAR_SPONLY)
  237. register_menucmd(register_menuid("Duels Menu"), MENUBODY - 1, "ActionDuelsMenu")
  238. register_menucmd(register_menuid("Enemy Menu"), MENUBODY - 1, "ActionEnemyMenu")
  239. register_menucmd(register_menuid("Roulette Menu"), MENUBODY - 1, "ActionRussianRouletteMenu")
  240. register_menucmd(register_menuid("Last Menu"), MENUBODY - 1, "ActionLastMenu")
  241. register_menucmd(register_menuid("Origins Menu"), MENUBODY - 1, "ActionOriginsMenu")
  242. SayText = get_user_msgid("SayText")
  243. MaxPlayers = get_maxplayers()
  244. g_MsgHud1 = CreateHudSyncObj()
  245. g_MsgHud2 = CreateHudSyncObj()
  246. g_MsgHud3 = CreateHudSyncObj()
  247. register_dictionary("deathrun_duel.txt")
  248. set_task(1.0, "Informer", INFORMERTID, "", 0, "b")
  249. register_dictionary("common.txt");
  250. register_dictionary("adminvote.txt");
  251.  
  252. register_menucmd(register_menuid("FRVote"), KeysFFVote, "PressedFRVote");
  253. register_menucmd(register_menuid("ButtonsMenu"), KeysButtonsMenu, "PressedButtonsMenu");
  254. register_menucmd(register_menuid("OptionsMenu"), KeysOptionsMenu, "PressedOptionsMenu");
  255. register_menucmd(register_menuid("DelayMenu"), KeysDelayMenu, "PressedDelayMenu");
  256.  
  257. register_clcmd("amx_buttons","cmd_amx_buttons",ADMIN_CFG,": Buttons Menu");
  258.  
  259. //Default count of uses
  260. gcvarDefault=register_cvar("amx_buttons_default","1");
  261. //Who plugin analyze
  262. //0 - anyone(plugin disabled?)
  263. //1 - Te
  264. //2 - Ct
  265. //3 - Te+Ct
  266. gcvarTeam=register_cvar("amx_buttons_team","1");
  267. //Enabled FreeRun mode?
  268. gcvarFreeRun=register_cvar("amx_buttons_freerun","1");
  269. //Vote time
  270. gcvarFRVoteTime=register_cvar("amx_freerun_votetime","10");
  271.  
  272. //Type of limit
  273. //0 - enabled after 'amx_freerun_limit' rounds
  274. //1 - enabled after 'amx_freerun_limit' minutes
  275. gcvarLimitMode=register_cvar("amx_freerun_limit_mode","0");
  276. //Size of Limit
  277. gcvarLimit=register_cvar("amx_freerun_limit","5");
  278.  
  279. //Interval of message
  280. gcvarMessage=register_cvar("amx_freerun_info","120.0",0,120.0);
  281.  
  282. //Terrorist`s privilege
  283. //if he use /free FreeRun will start without vote, can he?
  284. gcvarPrivilege=register_cvar("amx_freerun_tt_privilege","1");
  285.  
  286. //restore buttons on new round
  287. gcvarRestore=register_cvar("amx_restore_buttons","1");
  288.  
  289. register_clcmd("say /free","cmdVoteFreeRun");
  290. register_clcmd("say_team /free","cmdVoteFreeRun");
  291. register_clcmd("say free","cmdVoteFreeRun");
  292. register_clcmd("say_team free","cmdVoteFreeRun");
  293.  
  294. register_clcmd("say /freerun","cmdVoteFreeRun");
  295. register_clcmd("say_team /freerun","cmdVoteFreeRun");
  296. register_clcmd("say freerun","cmdVoteFreeRun");
  297. register_clcmd("say_team freerun","cmdVoteFreeRun");
  298.  
  299. register_clcmd("say /fr","cmdVoteFreeRun");
  300. register_clcmd("say_team /fr","cmdVoteFreeRun");
  301. register_clcmd("say fr","cmdVoteFreeRun");
  302. register_clcmd("say_team fr","cmdVoteFreeRun");
  303.  
  304. if( engfunc(EngFunc_FindEntityByString,-1 ,"classname", "func_button"))
  305. RegisterHam(Ham_Use, "func_button", "fwButtonUsed");
  306.  
  307. if(engfunc(EngFunc_FindEntityByString,-1 ,"classname","func_rot_button"))
  308. RegisterHam(Ham_Use, "func_rot_button", "fwButtonUsed");
  309.  
  310. if(engfunc(EngFunc_FindEntityByString,-1 ,"classname", "button_target"))
  311. RegisterHam(Ham_Use, "button_target", "fwButtonUsed");
  312.  
  313. register_logevent( "ResetButtons", 2, "0=World triggered", "1=Round_Start");
  314.  
  315. fillButtons("func_button");
  316. fillButtons("func_rot_button");
  317. fillButtons("button_target");
  318. return PLUGIN_CONTINUE
  319. }
  320. public plugin_cfg(){
  321. setButtons();
  322.  
  323. new iLen=0, iMax=charsmax(gszFile);
  324. iLen=get_configsdir(gszFile, iMax );
  325. iLen+=copy(gszFile[iLen], iMax-iLen, "/dr_buttons/");
  326.  
  327. if(!dir_exists(gszFile)){
  328. set_fail_state("Not found dir: configs/dr_buttons");
  329. return;
  330. }
  331. new szMap[32];
  332. get_mapname(szMap, 31);
  333. formatex(gszFile[iLen], charsmax(gszFile)-iLen, "%s.ini", szMap);
  334. if(!file_exists(gszFile)){
  335. return;
  336. }
  337. new szLine[51];
  338. new szButton[4], szTimes[3], szDelay[5];
  339. new Float:fDelay;
  340. for(new i=0;read_file(gszFile, i, szLine, 50, iLen);i++){
  341. if(iLen==0) continue;
  342. trim(szLine);
  343. if(szLine[0]==';') continue;
  344. parse(szLine, szButton, 3, szTimes, 2, szDelay, 4);
  345. fDelay=szDelay[0]?str_to_float(szDelay):-1.0;
  346. set_start_value(str_to_num(szButton), str_to_num(szTimes), fDelay);
  347. }
  348. new Float:fInterval=get_pcvar_float(gcvarMessage);
  349. if(fInterval > 0.0)
  350. set_task(120.0, "announceVote",ANNOUNCE_TASK,_,_,"b");
  351. }
  352. public plugin_precache()
  353. {
  354. giSprite=precache_model("sprites/flare1.spr");
  355. BeaconSprite = precache_model("sprites/shockwave.spr")
  356. get_configsdir(ConfigsDir, charsmax(ConfigsDir))
  357. format(WordsFile, charsmax(WordsFile), "%s/deathrun_duels.ini", ConfigsDir)
  358. new cmap[32], Len, dddir[128]
  359. format(dddir, 127, "%s/deathrun_duels", ConfigsDir)
  360. if(!dir_exists(dddir))
  361. {
  362. mkdir(dddir)
  363. }
  364. get_mapname(cmap, 31)
  365. format(OriginsFile, charsmax(OriginsFile), "%s/deathrun_duels/%s.ini", ConfigsDir, cmap)
  366. new i = 0
  367. if(file_exists(WordsFile))
  368. {
  369. while(i < MAXWORDS && read_file(WordsFile, i , Words[WordsNum], 191, Len))
  370. {
  371. i++
  372. if(Words[WordsNum][0] == ';' || Len == 0)
  373. {
  374. continue
  375. }
  376. WordsNum++
  377. }
  378. }
  379. i = 0
  380. if(file_exists(OriginsFile))
  381. {
  382. while(i < MAXORIGINS && read_file(OriginsFile, i ,Origins[OriginsNum], 127, Len))
  383. {
  384. i++
  385. if(Origins[OriginsNum][0] == ';' || Len == 0)
  386. {
  387. continue
  388. }
  389. OriginsNum++
  390. }
  391. }
  392. return PLUGIN_CONTINUE
  393. }
  394. public RoundStart()
  395. {
  396. Duel = false
  397. Last = false
  398. if(get_pcvar_num(PcvarTimer))
  399. {
  400. remove_task(TIMERTID)
  401. }
  402. remove_task(TIMER2TID)
  403. remove_task(WAITTIMERTID)
  404. set_pcvar_string(PcvarMode, "BUTTONS")
  405. return PLUGIN_CONTINUE
  406. }
  407. public RoundEnd()
  408. {
  409. if(get_pcvar_num(PcvarMusic))
  410. {
  411. client_cmd(0, "cd fadeout")
  412. }
  413. if(get_pcvar_num(PcvarTimer))
  414. {
  415. remove_task(TIMERTID)
  416. }
  417. remove_task(TIMER2TID)
  418. remove_task(WAITTIMERTID)
  419. return PLUGIN_CONTINUE
  420. }
  421.  
  422. public PlayerSpawn(id)
  423. {
  424. if(!is_user_alive(id) || !cs_get_user_team(id) || is_user_bot(id))
  425. {
  426. return PLUGIN_CONTINUE
  427. }
  428. if(get_pcvar_num(PcvarSpawnGod))
  429. {
  430. set_pev(id, pev_takedamage, 0)
  431. set_task(3.0, "GodOff", id + GODTID)
  432. }
  433. set_user_rendering(id)
  434. remove_task(id)
  435. TouchWeapons[id] = false
  436. Once[id] = false
  437. Knife[id] = false
  438. Deagle[id] = false
  439. M4a1[id] = false
  440. Ak47[id] = false
  441. Mp5navy[id] = false
  442. Grenade[id] = false
  443. Scout[id] = false
  444. Drob[id] = false
  445. Awp[id] = false
  446. Math[id] = false
  447. Word[id] = false
  448. RussianRoulette[id] = false
  449. Used[id] = false
  450. NotYou[id] = false
  451. DoIt[id] = false
  452. Start[id] = false
  453. InDuel[id] = false
  454. Famas[id] = false
  455.  
  456. return PLUGIN_CONTINUE
  457. }
  458. public TouchWeapon(weapon, id)
  459. {
  460. if(!is_user_connected(id))
  461. {
  462. return HAM_IGNORED
  463. }
  464. if(TouchWeapons[id] || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
  465. {
  466. return HAM_SUPERCEDE
  467. }
  468. return HAM_IGNORED
  469. }
  470. public CmdStart(player, uc_handle, random_seed)
  471. {
  472. if(!is_user_alive(player) || player < 1 || player > 32)
  473. {
  474. return FMRES_IGNORED
  475. }
  476. new Buttons = get_uc(uc_handle, UC_Buttons)
  477. if(Buttons & IN_ATTACK && Used[player])
  478. {
  479. if(Famas[player] && get_user_weapon(player, _, _) == CSW_FAMAS)
  480. {
  481. new wEnt = fm_find_ent_by_owner(-1, "weapon_famas", player);
  482. cs_set_weapon_burst(wEnt, 1)
  483. }
  484. if(!NotYou[player])
  485. {
  486. if(player == RussianRouletteID && DoIt[player])
  487. {
  488. new id = player
  489. get_user_name(id, RussianRouletteName, 63)
  490. set_hudmessage(255, 255, 0, -1.0, 0.3, 0, 1.0, 2.0, 0.5, 0.5, 2)
  491. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "RRDOING", RussianRouletteName)
  492. set_task(3.0, "RussianRouletteStop", id)
  493. DoIt[id] = false
  494. Start[id] = true
  495. }
  496. else if(player == RussianRouletteID && Start[player])
  497. {
  498. client_print(player, print_center, "%L", LANG_PLAYER, "RRWAIT")
  499. }
  500. else
  501. {
  502. client_print(player, print_center, "%L", LANG_PLAYER, "RRNOTYOU")
  503. }
  504. }
  505. else if(Boom[player])
  506. {
  507. get_user_name(player, RussianRouletteName, 63)
  508. set_hudmessage(255, 0, 0, -1.0, 0.2, 1, 1.0, 5.0, 1.0, 1.0, 4)
  509. ShowSyncHudMsg(0, g_MsgHud3, "%L", LANG_PLAYER, "RRBOOM", RussianRouletteName)
  510. client_cmd(0, "spk weapons/deagle-1")
  511. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE)
  512. DeathMsg(player, player, KHS, KWPN)
  513. Kill(player)
  514. Used[CounterID] = false
  515. Used[TerroristID] = false
  516. }
  517. else if(!Boom[player])
  518. {
  519. if(player == CounterID)
  520. {
  521. get_user_name(TerroristID, RussianRouletteName, 63)
  522. RussianRouletteMenu(TerroristID)
  523. NotYou[player] = false
  524. DoIt[TerroristID] = true
  525. RussianRouletteID = TerroristID
  526. }
  527. else if(player == TerroristID)
  528. {
  529. get_user_name(CounterID, RussianRouletteName, 63)
  530. RussianRouletteMenu(CounterID)
  531. NotYou[player] = false
  532. DoIt[CounterID] = true
  533. RussianRouletteID = CounterID
  534. }
  535. set_hudmessage(0, 255, 0, -1.0, 0.2, 0, 1.0, 3.0, 0.5, 0.5, 4)
  536. ShowSyncHudMsg(0, g_MsgHud3, "%L", LANG_PLAYER, "RRNOTBOOM", RussianRouletteName)
  537. client_cmd(0, "spk weapons/dryfire_pistol")
  538. }
  539. Buttons &= ~IN_ATTACK
  540. set_uc(uc_handle, UC_Buttons, Buttons)
  541. }
  542. if(Deagle[player])
  543. {
  544. cs_set_user_bpammo(player, CSW_DEAGLE, 1)
  545. }
  546. if(M4a1[player])
  547. {
  548. cs_set_user_bpammo(player, CSW_M4A1, 3)
  549. }
  550. if(Ak47[player])
  551. {
  552. cs_set_user_bpammo(player, CSW_AK47, 3)
  553. }
  554. if(Mp5navy[player])
  555. {
  556. cs_set_user_bpammo(player, CSW_MP5NAVY, 3)
  557. }
  558. if(Scout[player])
  559. {
  560. cs_set_user_bpammo(player, CSW_SCOUT, 1)
  561. }
  562. if(Drob[player])
  563. {
  564. cs_set_user_bpammo(player, CSW_M3, 1)
  565. }
  566. if(Awp[player])
  567. {
  568. cs_set_user_bpammo(player, CSW_AWP, 1)
  569. }
  570. if(Famas[player] && get_user_weapon(player, _, _) == CSW_FAMAS)
  571. {
  572. new wEnt = fm_find_ent_by_owner(-1, "weapon_famas", player)
  573. if(wEnt)
  574. {
  575. cs_set_weapon_burst(wEnt, 1)
  576. cs_set_user_bpammo(player, CSW_FAMAS, 3)
  577. }
  578. }
  579. return FMRES_HANDLED
  580. }
  581. public UpdateClientData(id, sendweapons, cd_handle)
  582. {
  583. if(!is_user_alive(id))
  584. {
  585. return FMRES_IGNORED
  586. }
  587. if(Used[id] && InDuel[id])
  588. {
  589. set_cd(cd_handle, CD_ID, 0)
  590. }
  591. return FMRES_HANDLED
  592. }
  593. public PlayerKilled(victim, attacker, shouldgib)
  594. {
  595. if(victim <= 0 || attacker <= 0 || victim >= 33 || attacker >= 33)
  596. {
  597. return PLUGIN_HANDLED
  598. }
  599. if(Duel)
  600. {
  601. if(cs_get_user_team(victim) == CS_TEAM_CT && InDuel[victim])
  602. {
  603. if(RussianRoulette[victim] || Math[victim] || Word[victim])
  604. {
  605. if(victim == CounterID)
  606. {
  607. attacker = TerroristID
  608. }
  609. else if(victim == TerroristID)
  610. {
  611. attacker = CounterID
  612. }
  613. TouchWeapons[attacker] = false
  614. Once[attacker] = false
  615. Knife[attacker] = false
  616. Deagle[attacker] = false
  617. M4a1[attacker] = false
  618. Ak47[attacker] = false
  619. Mp5navy[attacker] = false
  620. Grenade[attacker] = false
  621. Scout[attacker] = false
  622. Drob[attacker] = false
  623. Awp[attacker] = false
  624. Math[attacker] = false
  625. Word[attacker] = false
  626. RussianRoulette[attacker] = false
  627. Used[attacker] = false
  628. NotYou[attacker] = false
  629. DoIt[attacker] = false
  630. Start[attacker] = false
  631. InDuel[attacker] = false
  632. Famas[attacker] = false
  633. Duel = false
  634. }
  635. }
  636. }
  637. remove_task(attacker)
  638. remove_task(victim)
  639. return PLUGIN_CONTINUE
  640. }
  641. public CmdDuelsMenu(id)
  642. {
  643. if(!is_user_alive(id))
  644. {
  645. return PLUGIN_HANDLED
  646. }
  647. if (!Once[id])
  648. {
  649. if(cs_get_user_team(id) == CS_TEAM_CT)
  650. {
  651. new CTsNum = GetCTsNum(1)
  652. new TsNum = GetTsNum(1)
  653. if(CTsNum == 1 && TsNum >= 1)
  654. {
  655. DuelsMenu(id, MenuPosition[id] = 0)
  656. }
  657. else if(TsNum < 1)
  658. {
  659. ColorChat(id, "^4%s %L^3", PREFIX, LANG_PLAYER,"NOT_TS")
  660. }
  661. else if(CTsNum > 1)
  662. {
  663. ColorChat(id, "^4%s %L^3", PREFIX, LANG_PLAYER,"ONLY_LAST")
  664. }
  665. }
  666. else
  667. {
  668. ColorChat(id, "^4%s %L^3", PREFIX, LANG_PLAYER, "ONLY_CTS")
  669. }
  670. }
  671. return PLUGIN_HANDLED
  672. }
  673.  
  674. public DuelsMenu(id, position)
  675. {
  676. if(position < 0)
  677. {
  678. return
  679. }
  680. FPage = false
  681. new DuelsNum = GetFlagsNum(PcvarDuels)
  682. new Flags = GetFlags(PcvarDuels)
  683. new MenuStart = position * 8
  684. if(MenuStart >= DuelsNum)
  685. {
  686. MenuStart = position = MenuPosition[id]
  687. }
  688. new MenuEnd = position * 8 + 8
  689. if(MenuEnd >= DuelsNum && position != 0)
  690. {
  691. MenuEnd = DuelsNum
  692. }
  693. else if(MenuEnd >= DuelsNum && position == 0)
  694. {
  695. MenuEnd = DCOUNT
  696. FPage = true
  697. }
  698. new Keys = MENU_KEY_0
  699. new Len
  700. new b
  701. Len = format(MenuBody, MENUBODY - 1, "%L^n^n", LANG_PLAYER, "CHOOSE_DUEL")
  702. for(new a = MenuStart; a < MenuEnd; a++)
  703. {
  704. if(Flags & (1 << a))
  705. {
  706. Keys |= (1 << b)
  707. Len += format(MenuBody[Len], MENUBODY - Len, "%d. %L^n", ++b, LANG_PLAYER, Duels[a])
  708. }
  709. else
  710. {
  711. continue
  712. }
  713. }
  714. if(MenuEnd != DuelsNum && !FPage)
  715. {
  716. Keys |= MENU_KEY_9
  717. Len += format(MenuBody[Len], MENUBODY - Len, "^n9. %L^n0. %L^n^n %s", LANG_PLAYER, "DD_MENU_MORE", LANG_PLAYER, position ? "DD_MENU_BACK" : "DD_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
  718. }
  719. else
  720. {
  721. Len += format(MenuBody[Len], MENUBODY - Len, "^n0. %L^n^n %s", LANG_PLAYER, position ? "DD_MENU_BACK" : "DD_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
  722. }
  723. show_menu(id, Keys, MenuBody, -1, "Duels Menu")
  724. }
  725. public ActionDuelsMenu(id, key)
  726. {
  727. switch(key)
  728. {
  729. case 8:
  730. {
  731. DuelsMenu(id, ++MenuPosition[id])
  732. }
  733. case 9:
  734. {
  735. DuelsMenu(id, --MenuPosition[id])
  736. }
  737. default:
  738. {
  739. if(GetTsNum(1) || GetCTsNum(1) == 1|| is_user_alive(id))
  740. {
  741. ChoosedDuel = MenuPosition[id] * 8 + key
  742. EnemyMenu(id, MenuPosition[id] = 0)
  743. }
  744. }
  745. }
  746. }
  747. public EnemyMenu(id, position)
  748. {
  749. if(position < 0)
  750. {
  751. return
  752. }
  753. new TsNum = 0
  754. for(new aid = 1; aid <= MaxPlayers; aid++)
  755. {
  756. if(is_user_connected(aid) && is_user_alive(aid) && cs_get_user_team(aid) == CS_TEAM_T && !is_user_bot(aid))
  757. {
  758. MenuTs[TsNum++] = aid
  759. }
  760. }
  761. new MenuStart = position * 8
  762. if(MenuStart >= TsNum)
  763. {
  764. MenuStart = position = MenuPosition[id]
  765. }
  766. new MenuEnd = position + 8
  767. if(MenuEnd > TsNum)
  768. {
  769. MenuEnd = TsNum
  770. }
  771. new Keys = MENU_KEY_0
  772. new Len
  773. new b = 0
  774. new Names[32]
  775. Len = format(MenuBody, MENUBODY - 1, "%L^n^n", LANG_PLAYER, "CHOOSE_ENEMY")
  776. for(new a = MenuStart; a < MenuEnd; a++)
  777. {
  778. get_user_name(MenuTs[a], Names, 31)
  779. Keys |= (1 << b)
  780. Len += format(MenuBody[Len], MENUBODY - Len, "%d. %s^n", ++b, Names)
  781. }
  782. if(MenuEnd != TsNum)
  783. {
  784. Keys |= MENU_KEY_9
  785. Len += format(MenuBody[Len], MENUBODY - Len, "^n9. %L^n0. %L^n^n %s", LANG_PLAYER, "DD_MENU_MORE", LANG_PLAYER, position ? "DD_MENU_BACK" : "DD_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
  786. }
  787. else
  788. {
  789. Len += format(MenuBody[Len], MENUBODY - Len, "^n0. %L^n^n %s", LANG_PLAYER, position ? "DD_MENU_BACK" : "DD_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
  790. }
  791. show_menu(id, Keys, MenuBody, -1, "Enemy Menu")
  792. }
  793. public ActionEnemyMenu(id, key)
  794. {
  795. switch(key)
  796. {
  797. case 8:
  798. {
  799. EnemyMenu(id, ++MenuPosition[id])
  800. }
  801. case 9:
  802. {
  803. EnemyMenu(id, --MenuPosition[id])
  804. }
  805. default:
  806. {
  807. if(GetTsNum(1) || GetCTsNum(1) == 1 || is_user_alive(id))
  808. {
  809. new Choosed = MenuPosition[id] * 8 + key
  810. new Enemy = MenuTs[Choosed]
  811. StartDuel(id, Enemy)
  812. }
  813. }
  814. }
  815. }
  816.  
  817. public CmdOriginsMenu(id, level, cid)
  818. {
  819. if(!cmd_access(id, level, cid, 1))
  820. {
  821. return PLUGIN_HANDLED
  822. }
  823. else
  824. {
  825. ShowOriginsMenu(id)
  826. }
  827. return PLUGIN_CONTINUE
  828. }
  829.  
  830. public ShowOriginsMenu(id)
  831. {
  832. new Keys = MENU_KEY_0
  833. new Len
  834. Len = format(MenuBody, MENUBODY, "%L^n^n", id, "ORIGINS_TITLE")
  835. Keys |= (1 << 0)
  836. Len += format(MenuBody[Len], MENUBODY - Len, "1. %L^n", id, "SAVE_POSITION")
  837. Keys |= (1 << 1)
  838. Len += format(MenuBody[Len], MENUBODY - Len, "2. %L^n", id, "DELETE_POSITIONS")
  839. Len += format(MenuBody[Len], MENUBODY - Len, "^n0. %L^n^n %s", id, "DD_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
  840. show_menu(id, Keys, MenuBody, -1, "Origins Menu")
  841. return PLUGIN_CONTINUE
  842. }
  843.  
  844. public ActionOriginsMenu(id, key)
  845. {
  846. switch(key)
  847. {
  848. case 0:
  849. {
  850. new vec[3]
  851. get_user_origin(id, vec)
  852. add_spawn(vec)
  853. client_print(id, print_center, "*** Saved ***")
  854. ShowOriginsMenu(id)
  855. }
  856. case 1:
  857. {
  858. if(file_exists(OriginsFile))
  859. {
  860. delete_file(OriginsFile)
  861. client_print(id, print_center, "*** Deleted ***")
  862. ShowOriginsMenu(id)
  863. }
  864. }
  865. }
  866. return PLUGIN_CONTINUE
  867. }
  868.  
  869. public add_spawn(vecs[3])
  870. {
  871. new Line[128]
  872. format(Line, 127, "%d %d %d",vecs[0], vecs[1], vecs[2])
  873. write_file(OriginsFile, Line)
  874. return PLUGIN_CONTINUE
  875. }
  876.  
  877. public SetOrigins(ctid, terid)
  878. {
  879. if(!file_exists(OriginsFile) || !get_pcvar_num(PcvarTele))
  880. {
  881. return PLUGIN_CONTINUE
  882. }
  883. new pos[4][8]
  884. parse(Origins[0], pos[1], 7, pos[2], 7, pos[3], 7)
  885. new Vec[3]
  886. Vec[0] = str_to_num(pos[1])
  887. Vec[1] = str_to_num(pos[2])
  888. Vec[2] = str_to_num(pos[3])
  889. set_user_origin(ctid, Vec)
  890. parse(Origins[1], pos[1], 7, pos[2], 7, pos[3], 7)
  891. Vec[0] = str_to_num(pos[1])
  892. Vec[1] = str_to_num(pos[2])
  893. Vec[2] = str_to_num(pos[3])
  894. set_user_origin(terid, Vec)
  895. return PLUGIN_CONTINUE
  896. }
  897. public StartDuel(id, tempid)
  898. {
  899. if(!GetTsNum(1) || GetCTsNum(1) > 1|| !is_user_alive(tempid) || !is_user_alive(id) || cs_get_user_team(tempid) != CS_TEAM_T || cs_get_user_team(id) != CS_TEAM_CT || !is_user_connected(tempid) || !is_user_connected(id) || is_user_bot(id) || is_user_bot(tempid))
  900. {
  901. return PLUGIN_HANDLED
  902. }
  903. new challenger[32], challenged[32]
  904. get_user_name(id, challenger, 31)
  905. get_user_name(tempid, challenged, 31)
  906. strip_user_weapons(id)
  907. strip_user_weapons(tempid)
  908. set_user_health(id, 175)
  909. set_user_health(tempid, 175)
  910. switch(get_pcvar_num(PcvarEffects))
  911. {
  912. case 1:
  913. {
  914. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 150, kRenderNormal, 20)
  915. set_user_rendering(tempid, kRenderFxGlowShell, 150, 0, 0, kRenderNormal, 20)
  916. }
  917. case 2:
  918. {
  919. set_task(1.0, "Beacon", id)
  920. set_task(1.0, "Beacon", tempid)
  921. }
  922. case 3:
  923. {
  924. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 150, kRenderNormal, 20)
  925. set_task(1.0, "Beacon", id)
  926. set_user_rendering(tempid, kRenderFxGlowShell, 150, 0, 0, kRenderNormal, 20)
  927. set_task(1.0, "Beacon", tempid)
  928. }
  929. }
  930. InDuel[tempid] = true
  931. InDuel[id] = true
  932. Once[id] = true
  933. TouchWeapons[id] = true
  934. TouchWeapons[tempid] = true
  935. CounterID = id
  936. TerroristID = tempid
  937. Timer = get_pcvar_num(PcvarWait)
  938. Index = get_pcvar_num(PcvarTimeLimit) + 1
  939. set_pcvar_string(PcvarMode, "DUEL")
  940. new Flags = GetFlags(PcvarDuels)
  941. DuelNum = 0
  942. new DuelIndex
  943. while(DuelIndex <= ChoosedDuel)
  944. {
  945. if(Flags & (1 << DuelNum))
  946. {
  947. DuelIndex++
  948. }
  949. DuelNum ++
  950. }
  951. SetOrigins(id, tempid)
  952. switch(DuelNum)
  953. {
  954. case 1:
  955. {
  956. Knife[id] = true
  957. Knife[tempid] = true
  958. Duel = true
  959. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"KNIFE1", challenger, challenged)
  960. set_task(0.0, "StartWait", WAITTIMERTID)
  961. return PLUGIN_HANDLED
  962. }
  963. case 2:
  964. {
  965. Deagle[id] = true
  966. Deagle[tempid] = true
  967. Duel = true
  968. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"DEAGLE1", challenger, challenged)
  969. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"DEAGLE2")
  970. set_task(0.0, "StartWait", WAITTIMERTID)
  971. return PLUGIN_HANDLED
  972. }
  973. case 3:
  974. {
  975. M4a1[id] = true
  976. M4a1[tempid] = true
  977. Duel = true
  978. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"M4A11", challenger, challenged)
  979. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"M4A12")
  980. set_task(0.0, "StartWait", WAITTIMERTID)
  981. return PLUGIN_HANDLED
  982. }
  983. case 4:
  984. {
  985. Ak47[id] = true
  986. Ak47[tempid] = true
  987. Duel = true
  988. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"AK471", challenger, challenged)
  989. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"AK472")
  990. set_task(0.0, "StartWait", WAITTIMERTID)
  991. return PLUGIN_HANDLED
  992. }
  993. case 5:
  994. {
  995. Mp5navy[id] = true
  996. Mp5navy[tempid] = true
  997. Duel = true
  998. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"MP5NAVY1", challenger, challenged)
  999. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"MP5NAVY2")
  1000. set_task(0.0, "StartWait", WAITTIMERTID)
  1001. return PLUGIN_HANDLED
  1002. }
  1003. case 6:
  1004. {
  1005. Grenade[id] = true
  1006. Grenade[tempid] = true
  1007. Duel = true
  1008. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"GRENADE1", challenger, challenged)
  1009. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"GRENADE2")
  1010. set_task(0.0, "StartWait", WAITTIMERTID)
  1011. return PLUGIN_HANDLED
  1012. }
  1013. case 7:
  1014. {
  1015. Scout[id] = true
  1016. Scout[tempid] = true
  1017. Duel = true
  1018. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"SCOUT1", challenger, challenged)
  1019. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"SCOUT2")
  1020. set_task(0.0, "StartWait", WAITTIMERTID)
  1021. return PLUGIN_HANDLED
  1022. }
  1023. case 8:
  1024. {
  1025. Drob[id] = true
  1026. Drob[tempid] = true
  1027. Duel = true
  1028. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"DROB1", challenger, challenged)
  1029. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"DROB2")
  1030. set_task(0.0, "StartWait", WAITTIMERTID)
  1031. return PLUGIN_HANDLED
  1032. }
  1033. case 9:
  1034. {
  1035. Awp[id] = true
  1036. Awp[tempid] = true
  1037. Duel = true
  1038. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"AWP1", challenger, challenged)
  1039. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER,"AWP2")
  1040. set_task(0.0, "StartWait", WAITTIMERTID)
  1041. return PLUGIN_HANDLED
  1042. }
  1043. case 10:
  1044. {
  1045. Famas[id] = true
  1046. Famas[tempid] = true
  1047. Duel = true
  1048. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "FAMAS1", challenger, challenged)
  1049. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "FAMAS2")
  1050. set_task(0.0, "StartWait", WAITTIMERTID)
  1051. return PLUGIN_HANDLED
  1052. }
  1053. case 11:
  1054. {
  1055. RussianRoulette[id] = true
  1056. RussianRoulette[tempid] = true
  1057. Duel = true
  1058. RussianRouletteBullet = random_num(1, 3)
  1059. cs_set_weapon_ammo(give_item(id, "weapon_deagle"), RussianRouletteBullet)
  1060. cs_set_weapon_ammo(give_item(tempid, "weapon_deagle"), RussianRouletteBullet)
  1061. StartRussianRoulette(id, tempid)
  1062. if(get_pcvar_num(PcvarMusic))
  1063. {
  1064. new musicnum = random_num(0, MCOUNT-1)
  1065. client_cmd(0, "mp3volume 0.9")
  1066. client_cmd(0, "mp3 play %s", Music[musicnum])
  1067. }
  1068. return PLUGIN_HANDLED
  1069. }
  1070. case 12:
  1071. {
  1072. Math[id] = true
  1073. Math[tempid] = true
  1074. Duel = true
  1075. StartMathDuel(id, tempid)
  1076. return PLUGIN_HANDLED
  1077. }
  1078. case 13:
  1079. {
  1080. Word[id] = true
  1081. Word[tempid] = true
  1082. Duel = true
  1083. StartWordDuel(id, tempid)
  1084. return PLUGIN_HANDLED
  1085. }
  1086. }
  1087. if(get_pcvar_num(PcvarMusic))
  1088. {
  1089. new musicnum = random_num(0, MCOUNT-1)
  1090. client_cmd(0, "mp3volume 0.9")
  1091. client_cmd(0, "mp3 play %s", Music[musicnum])
  1092. }
  1093. if(get_pcvar_num(PcvarTimer))
  1094. {
  1095. set_task(0.0, "DuelTimer", TIMERTID)
  1096. }
  1097. Duel = true
  1098. return PLUGIN_HANDLED
  1099. }
  1100. public DuelTimer()
  1101. {
  1102. Index--
  1103. if(Index > 60)
  1104. {
  1105. set_hudmessage(255, 255, 255, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1106. if(Math[CounterID])
  1107. {
  1108. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, MathTask)
  1109. }
  1110. else if(Word[CounterID])
  1111. {
  1112. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, WordAnswer)
  1113. }
  1114. else
  1115. {
  1116. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER", Index)
  1117. }
  1118. set_task(1.0, "DuelTimer", TIMERTID)
  1119. }
  1120. else if(60 >= Index >= 46)
  1121. {
  1122. set_hudmessage(0, 255, 0, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1123. if(Math[CounterID])
  1124. {
  1125. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, MathTask)
  1126. }
  1127. else if(Word[CounterID])
  1128. {
  1129. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, WordAnswer)
  1130. }
  1131. else
  1132. {
  1133. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER", Index)
  1134. }
  1135. set_task(1.0, "DuelTimer", TIMERTID)
  1136. }
  1137. else if(45 >= Index >= 31)
  1138. {
  1139. set_hudmessage(255, 255, 0, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1140. if(Math[CounterID])
  1141. {
  1142. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, MathTask)
  1143. }
  1144. else if(Word[CounterID])
  1145. {
  1146. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, WordAnswer)
  1147. }
  1148. else
  1149. {
  1150. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER", Index)
  1151. }
  1152. set_task(1.0, "DuelTimer", TIMERTID)
  1153. }
  1154. else if(30 >= Index >= 16)
  1155. {
  1156. set_hudmessage(255, 0, 0, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1157. if(Math[CounterID])
  1158. {
  1159. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, MathTask)
  1160. }
  1161. else if(Word[CounterID])
  1162. {
  1163. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, WordAnswer)
  1164. }
  1165. else
  1166. {
  1167. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER", Index)
  1168. }
  1169. set_task(1.0, "DuelTimer", TIMERTID)
  1170. }
  1171. else if(Index <= 15)
  1172. {
  1173. set_hudmessage(255, 0, 0, -1.0, 0.25, 1, 1.0, 1.0, _, _, 2)
  1174. if(Index > 0)
  1175. {
  1176. if(Math[CounterID])
  1177. {
  1178. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, MathTask)
  1179. }
  1180. else if(Word[CounterID])
  1181. {
  1182. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER2", Index, WordAnswer)
  1183. }
  1184. else
  1185. {
  1186. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUEL_TIMER", Index)
  1187. }
  1188. }
  1189. else if(Index < 0)
  1190. {
  1191. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "NO_WINNER")
  1192. Kill(CounterID)
  1193. Kill(TerroristID)
  1194. remove_task(TIMERTID)
  1195. if(get_pcvar_num(PcvarMusic))
  1196. {
  1197. client_cmd(0, "cd fadeout")
  1198. }
  1199. }
  1200. set_task(1.0, "DuelTimer", TIMERTID)
  1201. }
  1202. if(!is_user_alive(CounterID) || !is_user_alive(TerroristID))
  1203. {
  1204. remove_task(TIMERTID)
  1205. if(get_pcvar_num(PcvarMusic))
  1206. {
  1207. client_cmd(0, "cd fadeout")
  1208. }
  1209. }
  1210. return PLUGIN_CONTINUE
  1211. }
  1212.  
  1213. public DuelTimer2()
  1214. {
  1215. set_hudmessage(255, 255, 255, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1216. if(Math[CounterID])
  1217. {
  1218. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUELTASK", MathTask)
  1219. }
  1220. if(Word[TerroristID])
  1221. {
  1222. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "DUELTASK", WordAnswer)
  1223. }
  1224. set_task(1.0, "DuelTimer2", TIMER2TID)
  1225. if(!is_user_alive(CounterID) || !is_user_alive(TerroristID))
  1226. {
  1227. remove_task(TIMER2TID)
  1228. if(get_pcvar_num(PcvarMusic))
  1229. {
  1230. client_cmd(0, "cd fadeout")
  1231. }
  1232. }
  1233. }
  1234. public StartMathDuel(ct, ter)
  1235. {
  1236. new num1,num2,num3,num4,mode, ctname[64], tername[64]
  1237. mode = random_num(0, 6)
  1238. num1 = random_num(1, 100)
  1239. num2 = random_num(1, 10)
  1240. num3 = random_num(1, 100)
  1241. num4 = random_num(1, 10)
  1242. get_user_name(ct, ctname, 63)
  1243. get_user_name(ter, tername, 63)
  1244. switch(mode)
  1245. {
  1246. case 0:
  1247. {
  1248. format(MathTask, 63, "%d + %d + %d + %d = ?", num1, num2, num3, num4)
  1249. MathAnswer = num1 + num2 + num3 + num4
  1250. }
  1251. case 1:
  1252. {
  1253. format(MathTask, 63, "%d + %d + %d - %d = ?", num1,num2,num3,num4)
  1254. MathAnswer = num1 + num2 + num3 - num4
  1255. }
  1256. case 2:
  1257. {
  1258. format(MathTask, 63, "%d + %d - %d + %d = ?", num1, num2, num3, num4)
  1259. MathAnswer = num1 + num2 - num3 + num4
  1260. }
  1261. case 3:
  1262. {
  1263. format(MathTask, 63, "%d - %d + %d + %d = ?", num1, num2, num3, num4)
  1264. MathAnswer = num1 - num2 + num3 + num4
  1265. }
  1266. case 4:
  1267. {
  1268. format(MathTask, 63, "%d + %d - %d - %d = ?", num1, num2, num3, num4)
  1269. MathAnswer = num1 + num2 - num3 - num4
  1270. }
  1271. case 5:
  1272. {
  1273. format(MathTask, 63, "%d - %d + %d - %d = ?", num1, num2, num3, num4)
  1274. MathAnswer = num1 - num2 + num3 - num4
  1275. }
  1276. case 6:
  1277. {
  1278. format(MathTask, 63, "%d - %d - %d + %d = ?", num1, num2, num3, num4)
  1279. MathAnswer = num1 - num2 - num3 + num4
  1280. }
  1281. }
  1282. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "MATH1", ctname, tername)
  1283. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "MATH2")
  1284. set_task(0.0, "StartWait", WAITTIMERTID)
  1285. return PLUGIN_CONTINUE
  1286. }
  1287. public StartWordDuel(ct, ter)
  1288. {
  1289. new ctname[64], tername[64]
  1290. format(WordAnswer, charsmax(WordAnswer), "%s", Words[random_num(0, WordsNum)])
  1291. get_user_name(ct, ctname, 63)
  1292. get_user_name(ter, tername, 63)
  1293. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "WORD1", ctname, tername)
  1294. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "WORD2")
  1295. set_task(0.0, "StartWait", WAITTIMERTID)
  1296. return PLUGIN_CONTINUE
  1297. }
  1298. public StartWait()
  1299. {
  1300. set_hudmessage(255, 255, 255, -1.0, 0.25, 0, 1.0, 1.0, _, _, 2)
  1301. switch(DuelNum)
  1302. {
  1303. case 1:
  1304. {
  1305. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "KNIFE_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1306. }
  1307. case 2:
  1308. {
  1309. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "DEAGLE_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1310. }
  1311. case 3:
  1312. {
  1313. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "M4A1_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1314. }
  1315. case 4:
  1316. {
  1317. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "AK47_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1318. }
  1319. case 5:
  1320. {
  1321. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "MP5NAVY_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1322. }
  1323. case 6:
  1324. {
  1325. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "GRENADE_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1326. }
  1327. case 7:
  1328. {
  1329. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "SCOUT_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1330. }
  1331. case 8:
  1332. {
  1333. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "DROB_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1334. }
  1335. case 9:
  1336. {
  1337. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "AWP_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1338. }
  1339. case 10:
  1340. {
  1341. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "FAMAS_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1342. }
  1343. case 11:
  1344. {
  1345. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "MATH_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1346. }
  1347. case 12:
  1348. {
  1349. ShowSyncHudMsg(0, g_MsgHud2, "%L^n%L", LANG_PLAYER, "WORD_WAIT", LANG_PLAYER, "STARTAFTER", Timer)
  1350. }
  1351. }
  1352. Timer--
  1353. client_cmd(0, "spk %s", Sound[Timer])
  1354. if(Timer <= 0)
  1355. {
  1356. set_task(1.0, "StartGo")
  1357. }
  1358. else
  1359. {
  1360.  
  1361. set_task(1.0, "StartWait", WAITTIMERTID)
  1362. }
  1363. return PLUGIN_CONTINUE
  1364. }
  1365. public StartGo()
  1366. {
  1367. if(!is_user_alive(TerroristID) || !is_user_alive(CounterID) || !is_user_connected(TerroristID) || !is_user_connected(CounterID) || !is_valid_player(CounterID) || !is_valid_player(TerroristID))
  1368. {
  1369. return PLUGIN_HANDLED
  1370. }
  1371. switch(DuelNum)
  1372. {
  1373. case 1:
  1374. {
  1375. give_item(CounterID, "weapon_knife")
  1376. give_item(TerroristID, "weapon_knife")
  1377. }
  1378. case 2:
  1379. {
  1380. cs_set_weapon_ammo(give_item(CounterID, "weapon_deagle"), DAMMO)
  1381. cs_set_weapon_ammo(give_item(TerroristID, "weapon_deagle"), DAMMO)
  1382. }
  1383. case 3:
  1384. {
  1385. cs_set_weapon_ammo(give_item(CounterID, "weapon_m4a1"), DAMMO)
  1386. cs_set_weapon_ammo(give_item(TerroristID, "weapon_m4a1"), DAMMO)
  1387. cs_set_user_bpammo(CounterID, CSW_M4A1, 200)
  1388. cs_set_user_bpammo(TerroristID, CSW_M4A1, 200)
  1389. }
  1390. case 4:
  1391. {
  1392. cs_set_weapon_ammo(give_item(CounterID, "weapon_ak47"), DAMMO)
  1393. cs_set_weapon_ammo(give_item(TerroristID, "weapon_ak47"), DAMMO)
  1394. cs_set_user_bpammo(CounterID, CSW_AK47, 200)
  1395. cs_set_user_bpammo(TerroristID, CSW_AK47, 200)
  1396. }
  1397. case 5:
  1398. {
  1399. cs_set_weapon_ammo(give_item(CounterID, "weapon_mp5navy"), DAMMO)
  1400. cs_set_weapon_ammo(give_item(TerroristID, "weapon_mp5navy"), DAMMO)
  1401. cs_set_user_bpammo(CounterID, CSW_MP5NAVY, 200)
  1402. cs_set_user_bpammo(TerroristID, CSW_MP5NAVY, 200)
  1403. }
  1404. case 6:
  1405. {
  1406. give_item(CounterID, "weapon_hegrenade")
  1407. give_item(TerroristID, "weapon_hegrenade")
  1408. cs_set_user_bpammo(CounterID, CSW_HEGRENADE, 100)
  1409. cs_set_user_bpammo(TerroristID, CSW_HEGRENADE, 100)
  1410. }
  1411. case 7:
  1412. {
  1413. cs_set_weapon_ammo(give_item(CounterID, "weapon_scout"), DAMMO)
  1414. cs_set_weapon_ammo(give_item(TerroristID, "weapon_scout"), DAMMO)
  1415. }
  1416. case 8:
  1417. {
  1418. cs_set_weapon_ammo(give_item(CounterID, "weapon_m3"), 8)
  1419. cs_set_weapon_ammo(give_item(TerroristID, "weapon_m3"), 8)
  1420. }
  1421. case 9:
  1422. {
  1423. cs_set_weapon_ammo(give_item(CounterID, "weapon_awp"), DAMMO)
  1424. cs_set_weapon_ammo(give_item(TerroristID, "weapon_awp"), DAMMO)
  1425. }
  1426. case 10:
  1427. {
  1428. cs_set_weapon_ammo(give_item(CounterID, "weapon_famas"), 3)
  1429. new wEnt = fm_find_ent_by_owner(-1, "weapon_famas", CounterID)
  1430. if(wEnt)
  1431. {
  1432. cs_set_weapon_burst(wEnt, 1)
  1433. }
  1434. cs_set_weapon_ammo(give_item(TerroristID, "weapon_famas"), 3)
  1435. wEnt = fm_find_ent_by_owner(-1, "weapon_famas", TerroristID)
  1436. if(wEnt)
  1437. {
  1438. cs_set_weapon_burst(wEnt, 1)
  1439. }
  1440. }
  1441. }
  1442. if(get_pcvar_num(PcvarMusic))
  1443. {
  1444. new musicnum = random_num(0, MCOUNT-1)
  1445. client_cmd(0, "mp3volume 0.9")
  1446. client_cmd(0, "mp3 play %s", Music[musicnum])
  1447. }
  1448. if(get_pcvar_num(PcvarTimer))
  1449. {
  1450. set_task(0.0, "DuelTimer", TIMERTID)
  1451. }
  1452. else if(Math[CounterID] || Word[CounterID])
  1453. {
  1454. set_task(0.0, "DuelTimer2", TIMER2TID)
  1455. }
  1456. return PLUGIN_CONTINUE
  1457. }
  1458. public StartRussianRoulette(ct, ter)
  1459. {
  1460. new ctname[64], tername[64]
  1461. get_user_name(ct, ctname, 63)
  1462. get_user_name(ter, tername, 63)
  1463. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "RR1", ctname, tername)
  1464. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "RR2")
  1465. ColorChat(0, "^4%s %L^3", PREFIX, LANG_PLAYER, "RR3", ctname)
  1466. set_hudmessage(0, 255, 0, -1.0, 0.2, 0, 1.0, 2.0, 0.5, 0.5, 4)
  1467. ShowSyncHudMsg(0, g_MsgHud3, "%L", LANG_PLAYER, "RRSTART", ctname, RussianRouletteBullet)
  1468. RussianRouletteMenu(ct)
  1469. Used[ct] = true
  1470. Used[ter] = true
  1471. NotYou[ct] = false
  1472. NotYou[ter] = false
  1473. RussianRouletteID = ct
  1474. return PLUGIN_CONTINUE
  1475. }
  1476. public RussianRouletteMenu(id)
  1477. {
  1478. new Len
  1479. new Keys = MENU_KEY_0
  1480. Len = format(MenuBody, MENUBODY - 1, "%L^n^n", LANG_PLAYER, "RRTITLE")
  1481. Keys |= (1 << 0)
  1482. Len += format(MenuBody[Len], MENUBODY - Len, "1. %L^n^n %s", LANG_PLAYER, "RRDO", PLUGIN, VERSION, AUTHOR)
  1483. DoIt[id] = true
  1484. show_menu(id, Keys, MenuBody, -1, "Roulette Menu")
  1485. return PLUGIN_CONTINUE
  1486. }
  1487. public ActionRussianRouletteMenu(id, Key)
  1488. {
  1489. if(!DoIt[id])
  1490. {
  1491. return PLUGIN_HANDLED
  1492. }
  1493. get_user_name(id, RussianRouletteName, 63)
  1494. set_hudmessage(255, 255, 0, -1.0, 0.3, 0, 1.0, 2.0, 0.5, 0.5, 2)
  1495. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "RRDOING", RussianRouletteName)
  1496. set_task(3.0, "RussianRouletteStop", id)
  1497. DoIt[id] = false
  1498. Start[id] = true
  1499. return PLUGIN_HANDLED
  1500. }
  1501. public RussianRouletteStop(id)
  1502. {
  1503. new RuletteRandom
  1504. RuletteRandom = random_num(1, 7)
  1505. get_user_name(id, RussianRouletteName, 63)
  1506. if(RussianRouletteBullet == 1 && RuletteRandom == 1)
  1507. {
  1508. Boom[id] = true
  1509. }
  1510. else if(RussianRouletteBullet == 2 && RuletteRandom == 2)
  1511. {
  1512. Boom[id] = true
  1513. }
  1514. else if(RussianRouletteBullet == 3 && RuletteRandom == 3)
  1515. {
  1516. Boom[id] = true
  1517. }
  1518. else
  1519. {
  1520. Boom[id] = false
  1521. }
  1522. NotYou[id] = true
  1523. Start[id] = false
  1524. set_hudmessage(255, 255, 0, -1.0, 0.3, 0, 1.0, 2.0, 0.5, 0.5, 2)
  1525. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "RRPRESS", RussianRouletteName)
  1526. return PLUGIN_CONTINUE
  1527. }
  1528. public hooksay(id)
  1529. {
  1530. if(!Math[id] && !Word[id])
  1531. {
  1532. return PLUGIN_CONTINUE
  1533. }
  1534. new Msg[256], smanswer[32], wname[32]
  1535. read_args(Msg, 255)
  1536. remove_quotes(Msg)
  1537. num_to_str(MathAnswer, smanswer, 31)
  1538. if((Math[id] && equal(Msg, smanswer)) || (Word[id] && equal(Msg, WordAnswer)))
  1539. {
  1540. if(get_pcvar_num(PcvarTimer))
  1541. {
  1542. remove_task(TIMERTID)
  1543. }
  1544. if(get_pcvar_num(PcvarMusic))
  1545. {
  1546. client_cmd(0, "cd fadeout")
  1547. }
  1548. get_user_name(id, wname, 31)
  1549. //set_user_lifes(id, 1)
  1550. set_hudmessage(0, 255, 0, -1.0, 0.2, 0, 1.0, 10.0, 1.0, 1.0, 2)
  1551. if(Math[id])
  1552. {
  1553. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "MATH_WINNER", wname, smanswer)
  1554. }
  1555. else if(Word[id])
  1556. {
  1557. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "WORD_WINNER", wname)
  1558. }
  1559. if(id == CounterID)
  1560. {
  1561. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE)
  1562. DeathMsg(CounterID, TerroristID, 1, KWPN)
  1563. Kill(TerroristID)
  1564. }
  1565. else if(id == TerroristID)
  1566. {
  1567. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE)
  1568. DeathMsg(CounterID, TerroristID, 1, KWPN)
  1569. Kill(CounterID)
  1570. }
  1571. Math[CounterID] = false
  1572. Math[TerroristID] = false
  1573. Word[CounterID] = false
  1574. Word[TerroristID] = false
  1575. }
  1576. return PLUGIN_CONTINUE
  1577. }
  1578. public hooksay_team(id)
  1579. {
  1580. if(!Math[id] && !Word[id])
  1581. {
  1582. return PLUGIN_CONTINUE
  1583. }
  1584. new Msg[256], smanswer[32], wname[32]
  1585. read_args(Msg, 255)
  1586. remove_quotes(Msg)
  1587. num_to_str(MathAnswer, smanswer, 31)
  1588. if((Math[id] && equal(Msg, smanswer)) || (Word[id] && equal(Msg, WordAnswer)))
  1589. {
  1590. if(get_pcvar_num(PcvarTimer))
  1591. {
  1592. remove_task(TIMERTID)
  1593. }
  1594. if(get_pcvar_num(PcvarMusic))
  1595. {
  1596. client_cmd(0, "cd fadeout")
  1597. }
  1598. get_user_name(id, wname, 31)
  1599. //set_user_lifes(id, 1)
  1600. set_hudmessage(0, 255, 0, -1.0, 0.2, 0, 1.0, 10.0, 1.0, 1.0, 2)
  1601. if(Math[id])
  1602. {
  1603. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "MATH_WINNER", wname, smanswer)
  1604. }
  1605. else if(Word[id])
  1606. {
  1607. ShowSyncHudMsg(0, g_MsgHud2, "%L", LANG_PLAYER, "WORD_WINNER", wname)
  1608. }
  1609. if(id == CounterID)
  1610. {
  1611. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE)
  1612. DeathMsg(CounterID, TerroristID, 1, KWPN)
  1613. Kill(TerroristID)
  1614. }
  1615. else if(id == TerroristID)
  1616. {
  1617. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_ONCE)
  1618. DeathMsg(CounterID, TerroristID, 1, KWPN)
  1619. Kill(CounterID)
  1620. }
  1621. Math[CounterID] = false
  1622. Math[TerroristID] = false
  1623. Word[CounterID] = false
  1624. Word[TerroristID] = false
  1625. }
  1626. return PLUGIN_CONTINUE
  1627. }
  1628. public client_disconnect(id)
  1629. {
  1630. remove_task(id)
  1631. TouchWeapons[id] = false
  1632. Once[id] = false
  1633. Knife[id] = false
  1634. Deagle[id] = false
  1635. M4a1[id] = false
  1636. Ak47[id] = false
  1637. Mp5navy[id] = false
  1638. Grenade[id] = false
  1639. Scout[id] = false
  1640. Drob[id] = false
  1641. Awp[id] = false
  1642. Math[id] = false
  1643. Word[id] = false
  1644. RussianRoulette[id] = false
  1645. Used[id] = false
  1646. NotYou[id] = false
  1647. DoIt[id] = false
  1648. Start[id] = false
  1649. InDuel[id] = false
  1650. Famas[id] = false
  1651. return PLUGIN_CONTINUE
  1652. }
  1653. public GodOff(tskid)
  1654. {
  1655. new id = tskid - GODTID
  1656. set_pev(id, pev_takedamage, 1)
  1657. return PLUGIN_CONTINUE
  1658. }
  1659. public Informer()
  1660. {
  1661. if(!get_pcvar_num(PcvarInformer))
  1662. {
  1663. remove_task(INFORMERTID)
  1664. return PLUGIN_HANDLED
  1665. }
  1666. new id, LastID, acts, cts, all, NextMap[32], CurrentTime[32], Terrorist[32], names[33][32], Message[512]
  1667. for(id = 1; id <= MaxPlayers; id++)
  1668. {
  1669. if(!is_user_connected(id))
  1670. {
  1671. continue
  1672. }
  1673. else if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT)
  1674. {
  1675. acts++
  1676. cts++
  1677. all ++
  1678. LastID = id
  1679. get_user_name(id, names[acts], 31)
  1680. }
  1681. else if(!is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT)
  1682. {
  1683. cts++
  1684. all++
  1685. }
  1686. else if(cs_get_user_team(id) == CS_TEAM_T && !is_user_bot(id))
  1687. {
  1688. get_user_name(id, Terrorist, 63)
  1689. all++
  1690. }
  1691. else
  1692. {
  1693. all++
  1694. }
  1695. }
  1696. if(acts == 1 && !Last && get_pcvar_num(PcvarLastMenu))
  1697. {
  1698. LastMenu(LastID)
  1699. Last = true
  1700. }
  1701. for(id = 1; id <= MaxPlayers; id++)
  1702. {
  1703. new Len, Mode[32]
  1704. get_pcvar_string(PcvarMode, Mode, 31)
  1705. Len = format(Message, 511, "%L: %L", LANG_PLAYER, "CURRENTMODE", LANG_PLAYER, Mode)
  1706. get_time("%H:%M:%S", CurrentTime, 31)
  1707. Len += format(Message[Len], 511 - Len, "^n%L: %s", LANG_PLAYER, "CURRENTTIME", CurrentTime)
  1708. if(get_cvar_float("mp_timelimit"))
  1709. {
  1710. new a = get_timeleft()
  1711. Len += format(Message[Len], 511 - Len, "^n%L: %d:%02d", LANG_PLAYER, "TLEFT", (a / 60), (a % 60))
  1712. }
  1713. else
  1714. {
  1715. Len += format(Message[Len], 511 - Len, "^n%L: %L", LANG_PLAYER, "TLEFT", LANG_PLAYER, "LASTR")
  1716. }
  1717. get_cvar_string("amx_nextmap", NextMap, 31)
  1718. Len += format(Message[Len], 511 - Len, "^n%L: %s", LANG_PLAYER, "NMAP", NextMap)
  1719. if(GetTsNum(0))
  1720. {
  1721. Len += format(Message[Len], 511 - Len, "^n%L: %s", LANG_PLAYER, "CTER", Terrorist)
  1722. }
  1723. else
  1724. {
  1725. Len += format(Message[Len], 511 - Len, "^n%L: %L", LANG_PLAYER, "CTER", LANG_PLAYER, "TNONE")
  1726. }
  1727. Len += format(Message[Len], 511 - Len, "^n%L: %d/%d", LANG_PLAYER, "ALIVECTS", acts,cts)
  1728. Len += format(Message[Len], 511 - Len, "^n%L: %d/%d", LANG_PLAYER, "APLAYERS", all, MaxPlayers)
  1729. if(acts > 3)
  1730. {
  1731. set_hudmessage(100, 100, 100, 0.01, 0.18, 0, 1.0, 1.0)
  1732. }
  1733. else if(acts == 3)
  1734. {
  1735. set_hudmessage(0, 255, 0, 0.01, 0.18, 0, 1.0, 1.0)
  1736. Len += format(Message[Len], 511 - Len, "^n^n1. %s^n2. %s^n3. %s", names[1], names[2], names[3])
  1737. }
  1738. else if(acts == 2)
  1739. {
  1740. set_hudmessage(255, 255, 0, 0.01, 0.18, 0, 1.0, 1.0)
  1741. Len += format(Message[Len], 511 - Len, "^n^n1. %s^n2. %s", names[1], names[2])
  1742. }
  1743. else
  1744. {
  1745. set_hudmessage(255, 0, 0, 0.01, 0.18, 1, 1.0, 1.0, _, _, 1)
  1746. Len += format(Message[Len], 511 - Len, "^n^n1. %s", names[1])
  1747. }
  1748. ShowSyncHudMsg(id, g_MsgHud1, "%s", Message)
  1749. }
  1750. return PLUGIN_CONTINUE
  1751. }
  1752. public LastMenu(id)
  1753. {
  1754. new Len
  1755. new Keys = MENU_KEY_0
  1756. Len = format(MenuBody, MENUBODY - 1, "%L ^n^n", LANG_PLAYER, "YOULAST")
  1757. Keys |= (1 << 0)
  1758. Len += format(MenuBody[Len], MENUBODY - Len, "1. %L^n", LANG_PLAYER, "LASTYES")
  1759. Keys |= (1 << 1)
  1760. Len += format(MenuBody[Len], MENUBODY - Len, "2. %L^n^n %s", LANG_PLAYER, "LASTNO", PLUGIN, VERSION, AUTHOR)
  1761. show_menu(id, Keys, MenuBody, -1, "Last Menu")
  1762. return PLUGIN_CONTINUE
  1763. }
  1764. public ActionLastMenu(id, key)
  1765. {
  1766. switch(key)
  1767. {
  1768. case 0:
  1769. {
  1770. client_cmd(id, "deathrun_duels")
  1771. }
  1772. case 1:
  1773. {
  1774. client_print(id, print_center, "%L", LANG_PLAYER, "FDUEL")
  1775. }
  1776. }
  1777. return PLUGIN_CONTINUE
  1778. }
  1779. public Beacon(id)
  1780. {
  1781. if(cs_get_user_team(id) == CS_TEAM_CT)
  1782. {
  1783. static origin[3]
  1784. get_user_origin(id, origin)
  1785. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1786. write_byte(TE_BEAMCYLINDER)
  1787. write_coord(origin[0])
  1788. write_coord(origin[1])
  1789. write_coord(origin[2]-20)
  1790. write_coord(origin[0])
  1791. write_coord(origin[1])
  1792. write_coord(origin[2]+200)
  1793. write_short(BeaconSprite)
  1794. write_byte(0)
  1795. write_byte(1)
  1796. write_byte(6)
  1797. write_byte(2)
  1798. write_byte(1)
  1799. write_byte(0)
  1800. write_byte(0)
  1801. write_byte(255)
  1802. write_byte(255)
  1803. write_byte(0)
  1804. message_end()
  1805. }
  1806. else
  1807. {
  1808. static origin[3]
  1809. get_user_origin(id, origin)
  1810. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1811. write_byte(TE_BEAMCYLINDER)
  1812. write_coord(origin[0])
  1813. write_coord(origin[1])
  1814. write_coord(origin[2]-20)
  1815. write_coord(origin[0])
  1816. write_coord(origin[1])
  1817. write_coord(origin[2]+200)
  1818. write_short(BeaconSprite)
  1819. write_byte(0)
  1820. write_byte(1)
  1821. write_byte(6)
  1822. write_byte(2)
  1823. write_byte(1)
  1824. write_byte(255)
  1825. write_byte(0)
  1826. write_byte(0)
  1827. write_byte(255)
  1828. write_byte(0)
  1829. message_end()
  1830. }
  1831. set_task(1.0, "Beacon", id)
  1832. return PLUGIN_CONTINUE
  1833. }
  1834. stock ColorChat(const id, const input[], any:...)
  1835. {
  1836. new count = 1, players[32]
  1837. static msg[190]
  1838. vformat(msg, 190, input, 3)
  1839. replace_all(msg, 190, "!g", "^4")
  1840. replace_all(msg, 190, "!y", "^1")
  1841. replace_all(msg, 190, "!team", "^3")
  1842. if (id) players[0] = id
  1843. else get_players(players, count, "ch")
  1844. for (new i = 0; i < count; i++)
  1845. {
  1846. if (is_user_connected(players[i]))
  1847. {
  1848. message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i])
  1849. write_byte(players[i])
  1850. write_string(msg)
  1851. message_end()
  1852. }
  1853. }
  1854. return PLUGIN_CONTINUE
  1855. }
  1856. stock DeathMsg(killer_id, victim_id, headshot, weaponname[])
  1857. {
  1858. message_begin(MSG_ALL, get_user_msgid("DeathMsg"))
  1859. write_byte(killer_id)
  1860. write_byte(victim_id)
  1861. write_byte(headshot)
  1862. write_string(weaponname)
  1863. message_end()
  1864. return PLUGIN_CONTINUE
  1865. }
  1866. stock GetFlagsNum(pcvar)
  1867. {
  1868. new Duels = GetFlags(pcvar)
  1869. new DuelsNum = 0
  1870. for(new a = 0; a < DCOUNT; a++)
  1871. {
  1872. if(Duels & (1 << a))
  1873. {
  1874. DuelsNum++
  1875. }
  1876. }
  1877. return DuelsNum
  1878. }
  1879. stock GetFlags(pcvar)
  1880. {
  1881. new Flags[32]
  1882. get_pcvar_string(pcvar, Flags, 31)
  1883. return read_flags(Flags)
  1884. }
  1885. stock GetCTsNum(alive)
  1886. {
  1887. new CTsNum = 0
  1888. for (new id = 1; id <= MaxPlayers; id++)
  1889. {
  1890. if(!is_user_connected(id))
  1891. {
  1892. continue
  1893. }
  1894. if(alive)
  1895. {
  1896. if(cs_get_user_team(id) == CS_TEAM_CT && is_user_alive(id))
  1897. {
  1898. CTsNum++
  1899. }
  1900. }
  1901. else
  1902. {
  1903. if(cs_get_user_team(id) == CS_TEAM_CT)
  1904. {
  1905. CTsNum++
  1906. }
  1907. }
  1908. }
  1909. return CTsNum
  1910. }
  1911. stock GetTsNum(alive)
  1912. {
  1913. new TsNum = 0
  1914. for (new id = 1; id <= MaxPlayers; id++)
  1915. {
  1916. if(!is_user_connected(id) || is_user_bot(id))
  1917. {
  1918. continue
  1919. }
  1920. if(alive)
  1921. {
  1922. if(cs_get_user_team(id) == CS_TEAM_T && is_user_alive(id))
  1923. {
  1924. TsNum++
  1925. }
  1926. }
  1927. else
  1928. {
  1929. if(cs_get_user_team(id) == CS_TEAM_T)
  1930. {
  1931. TsNum++
  1932. }
  1933. }
  1934. }
  1935. return TsNum
  1936. }
  1937.  
  1938. public client_putinserver(id){
  1939. if(!is_user_bot(id))
  1940. eventInGame(id);
  1941. }
  1942. public client_connect(id){
  1943. giVotes[id][VOTE_ON]=0;
  1944. giVotes[id][VOTE_OFF]=0;
  1945.  
  1946. return 1
  1947. }
  1948. public announceVote(){
  1949. if(get_pcvar_num(gcvarFreeRun))
  1950. ColorChat(0, "!g[!teamFreeRun!g]!team %L",LANG_SERVER, "ANNOUNCE");
  1951. }
  1952. setButtons(){
  1953. new iDef=get_pcvar_num(gcvarDefault);
  1954. for(new i=0;i<giPointer;i++){
  1955. gUsed[i]=iDef;
  1956. gOnStart[i]=iDef;
  1957. gDelay[i]=get_pdata_float(gEnt[i],m_flWait);
  1958. gDefaultDelay[i]=gDelay[i];
  1959. }
  1960. }
  1961. fillButtons(const szClass[]){
  1962. new ent = -1;
  1963. while((ent = engfunc(EngFunc_FindEntityByString,ent ,"classname", szClass)) != 0){
  1964. gEnt[giPointer++]=ent;
  1965. set_pev(ent, pev_iuser4, giPointer);
  1966. }
  1967. }
  1968. set_start_value(ent, times, Float:delay){
  1969. new index=get_ent_index(ent);
  1970. if(index!=-1){
  1971. gOnStart[index]=times;
  1972. if(delay>=0.0)
  1973. gDelay[index]=delay;
  1974. }
  1975. }
  1976. get_ent_index(ent){
  1977. /*
  1978. for(new i=0;i<giPointer;i++)
  1979. if(gEnt[i]==ent) return i;
  1980. return -1;
  1981. */
  1982. return pev(ent, pev_iuser4)-1;
  1983. }
  1984. restoreButton(ent){
  1985. if(pev(ent, pev_frame) > 0.0){
  1986. new Float:Life;
  1987. pev(ent, pev_nextthink, Life);
  1988. set_pev(ent, pev_ltime, Life-0.01);
  1989. }
  1990. }
  1991. public ResetButtons(){
  1992. gbFreeRun=false;
  1993. gbVote=false;
  1994. new bool:bRestore=get_pcvar_num(gcvarRestore)!=0;
  1995. for(new i=0;i<MAX_BUTTONS;i++){
  1996. gUsed[i]=gOnStart[i];
  1997. if(bRestore){
  1998. restoreButton(gEnt[i]);
  1999. }
  2000. }
  2001. giRounds++;
  2002. }
  2003. public fwButtonUsed(this, idcaller, idactivator, use_type, Float:value){
  2004. if(idcaller!=idactivator) return HAM_IGNORED;
  2005.  
  2006. if(pev(this, pev_frame) > 0.0)
  2007. return HAM_IGNORED;
  2008. new index=get_ent_index(this);
  2009. if(index==-1)
  2010. return HAM_IGNORED;
  2011. if(get_user_team(idcaller)&get_pcvar_num(gcvarTeam)){
  2012.  
  2013. if(gbFreeRun){
  2014. ColorChat(idcaller, "!y[!gFreeRun!y]!team %L",idcaller, "BUTTON_FREERUN");
  2015. return HAM_SUPERCEDE;
  2016. }
  2017. else if(gUsed[index]<=0 && gOnStart[index]!=-1){
  2018. ColorChat(idcaller, "!y[!gInfo!y]!team %L",idcaller,"BUTTON_NOMORE");
  2019. return HAM_SUPERCEDE;
  2020. }
  2021. else{
  2022. if(gUsed[index]>0)
  2023. if(--gUsed[index]){
  2024. ColorChat(idcaller, "!y[!gInfo!y]!team %L", idcaller, "BUTTON_LEFT", gUsed[index]);
  2025. }else
  2026. ColorChat(idcaller, "!y[!gInfo!y]!team %L", idcaller, "BUTTON_ENDOFLIMIT");
  2027. }
  2028. }
  2029.  
  2030. set_task(0.1,"setDelay",this);
  2031.  
  2032. return HAM_IGNORED;
  2033. }
  2034. public setDelay(this){
  2035. new index=get_ent_index(this);
  2036. set_pev(this, pev_nextthink, pev(this, pev_ltime)+gDelay[index]+0.01);
  2037. }
  2038.  
  2039. //MENU--------------
  2040. public cmd_amx_buttons(id, level, cid){
  2041. if(!cmd_access(id, level, cid, 1))
  2042. return PLUGIN_HANDLED;
  2043. if(giPointer==0)
  2044. client_print(id, print_chat, "%L", id,"NO_BUTTONS");
  2045. else
  2046. ShowButtonsMenu(id);
  2047. return PLUGIN_HANDLED;
  2048. }
  2049. ShowButtonsMenu(id, trace=1){
  2050. if(!is_user_alive(id)){
  2051. client_print(id, print_center, "%L",id, "MUST_B_ALIVE");
  2052. return;
  2053. }
  2054. new iNow=gInMenu[id];
  2055. new iKeys=(1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);
  2056. new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;
  2057. new szNoLimit[32];
  2058. formatex(szNoLimit,31,"(%L)",id,"NOLIMIT");
  2059. iLen=copy(szMenu, iMax,"Buttons Menu^n");
  2060. iLen+=formatex(szMenu[iLen], iMax-iLen,"Ent #%d^n^n",gEnt[iNow]);
  2061. iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %d %s^n 1. %L ",id, "USAGE",gOnStart[iNow],(gOnStart[iNow]==-1)?szNoLimit:"", id, "MORE");
  2062.  
  2063. if(gOnStart[iNow]>=0){
  2064. iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L",id, "WORD_LESS");
  2065. iKeys|=(1<<1);
  2066. }else
  2067. iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L",id,"WORD_LESS");
  2068. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n3. %L^n^n4. %L^n^n",id, "DELAY_EDITOR",id,"OPTIONS");
  2069.  
  2070. iLen+=formatex(szMenu[iLen], iMax-iLen,"5. %sNo Clip^n",isNoClip(id)?"r":"");
  2071. iLen+=formatex(szMenu[iLen], iMax-iLen,"6. %sGodMode^n",isGodMode(id)?"r":"");
  2072.  
  2073. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n7. %L^nw",id, "WORD_SAVE");
  2074.  
  2075. if(iNow>0){
  2076. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n8. %L",id, "BACK");
  2077. iKeys|=(1<<7);
  2078. }
  2079. if(iNow<giPointer-1){
  2080. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n9. %L",id, "WORD_NEXT");
  2081. iKeys|=(1<<8);
  2082. }
  2083. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n0. %L", id, "EXIT");
  2084. show_menu(id, iKeys, szMenu, -1, "ButtonsMenu");
  2085. if(trace){
  2086. new Float:fOrigin[3], Float:fOrigin2[3];
  2087. fm_get_brush_entity_origin(gEnt[gInMenu[id]], fOrigin);
  2088. pev(id, pev_origin, fOrigin2);
  2089. Create_TE_BEAMPOINTS(fOrigin, fOrigin2, giSprite, 0, 10, 20, 5, 1, 255, 0, 0, 100, 50);
  2090. }
  2091. }
  2092. bool:isNoClip(id)
  2093. return pev(id, pev_movetype)==MOVETYPE_NOCLIP;
  2094.  
  2095. bool:isGodMode(id)
  2096. return pev(id, pev_takedamage)==0.0;
  2097.  
  2098. public PressedButtonsMenu(id, key) {
  2099. if(!is_user_alive(id)){
  2100. client_print(id, print_center, "%L",id,"MUST_B_ALIVE");
  2101. return;
  2102. }
  2103. /* Menu:
  2104. * Buttons Menu
  2105. * Ent#<ent>
  2106. *
  2107. * Uzyc: <ile>
  2108. * 1. Wiecej 2. Mniej
  2109. *
  2110. * 3. Editor
  2111. *
  2112. * 4. Options
  2113. *
  2114. * 5. NoClip
  2115. * 6. GodMode
  2116. *
  2117. * 7. Zapisz
  2118. *
  2119. * 8. Poprzedni
  2120. * 9. Nastepny
  2121. * 0. Wyjdz
  2122. */
  2123. new trace=0;
  2124. switch (key) {
  2125. case 0: { // 1
  2126. gOnStart[gInMenu[id]]++;
  2127. }
  2128. case 1: { // 2
  2129. gOnStart[gInMenu[id]]--;
  2130. }
  2131. case 2: { // 3
  2132. ShowDelayMenu(id);
  2133. return;
  2134. }
  2135. case 3:{ //4
  2136. ShowOptionsMenu(id);
  2137. return;
  2138. }
  2139. case 4:{ //5
  2140. set_pev(id, pev_movetype, isNoClip(id)?MOVETYPE_WALK:MOVETYPE_NOCLIP);
  2141. }
  2142. case 5:{ //6
  2143. set_pev(id, pev_takedamage, isGodMode(id)?1.0:0.0);
  2144. }
  2145. case 6: { // 7
  2146. save2File(id);
  2147. }
  2148. case 7: { // 8
  2149. gInMenu[id]--;
  2150. trace=1;
  2151. }
  2152. case 8: { // 9
  2153. gInMenu[id]++;
  2154. trace=1;
  2155. }
  2156. case 9: { // 0
  2157. return;
  2158. }
  2159. }
  2160. ShowButtonsMenu(id, trace);
  2161. }
  2162. //--------------
  2163. ShowOptionsMenu(id){
  2164. if(!is_user_alive(id)){
  2165. client_print(id, print_center, "%L",id,"MUST_B_ALIVE");
  2166. return;
  2167. }
  2168. new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;
  2169. iLen+=formatex(szMenu[iLen], iMax-iLen,"yOptions^n^n");
  2170. iLen+=formatex(szMenu[iLen], iMax-iLen,"w1. %L^n",id, "GOTO");
  2171. iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L^n^n",id, "NEAREST");
  2172. iLen+=formatex(szMenu[iLen], iMax-iLen,"9. %L",id, "BACK");
  2173. show_menu(id, KeysOptionsMenu, szMenu, -1, "OptionsMenu");
  2174. }
  2175. public PressedOptionsMenu(id, key){
  2176. if(!is_user_alive(id)){
  2177. client_print(id, print_center, "%L",id,"MUST_B_ALIVE");
  2178. return;
  2179. }
  2180. new trace=0;
  2181. switch (key) {
  2182. case 0: { // 1
  2183. go2Button(id);
  2184. }
  2185. case 1: { // 2
  2186. gInMenu[id]=findTheClosest(id);
  2187. trace=1;
  2188. }
  2189. }
  2190. ShowButtonsMenu(id, trace);
  2191. }
  2192. //-------------
  2193. ShowDelayMenu(id){
  2194. if(!is_user_alive(id)){
  2195. client_print(id, print_center, "%L",id,"MUST_B_ALIVE");
  2196. return;
  2197. }
  2198. new iNow=gInMenu[id];
  2199. new iKeys=(1<<0)|(1<<2)|(1<<8);
  2200. new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;
  2201. iLen=copy(szMenu, iMax,"yDelay Menu^n");
  2202. iLen+=formatex(szMenu[iLen], iMax-iLen,"Ent#%d^n^n",gEnt[iNow]);
  2203. iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %.1f^n",id, "CURRENT_DELAY", gDelay[iNow]);
  2204. iLen+=formatex(szMenu[iLen], iMax-iLen,"1. %L ",id, "MORE");
  2205. if(gDelay[iNow]>0.0){
  2206. iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L",id, "WORD_LESS");
  2207. iKeys|=(1<<1);
  2208. }else
  2209. iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %Lw",id,"WORD_LESS");
  2210. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n3. %L",id, "DEFAULT");
  2211. iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n9. %L",id, "BACK");
  2212. show_menu(id, iKeys, szMenu, -1, "DelayMenu");
  2213. }
  2214. public PressedDelayMenu(id, key){
  2215. new iNow=gInMenu[id];
  2216. switch(key){
  2217. case 0:{
  2218. gDelay[iNow]+=1.0;
  2219. }
  2220. case 1:{
  2221. gDelay[iNow]-=1.0;
  2222. if(gDelay[iNow] < 0.0)
  2223. gDelay[iNow]=0.0;
  2224. }
  2225. case 2:{
  2226. gDelay[iNow]=gDefaultDelay[iNow];
  2227. }
  2228. case 8:{
  2229. ShowButtonsMenu(id, 0);
  2230. return;
  2231. }
  2232. }
  2233. ShowDelayMenu(id);
  2234. }
  2235. //-------------
  2236. save2File(id){
  2237. if(file_exists(gszFile))
  2238. delete_file(gszFile);
  2239. write_file(gszFile, ";<ent> <count> <delay>");
  2240. new szLine[35];
  2241. for(new i=0;i<giPointer;i++){
  2242. formatex(szLine, 34, "%d %d %.1f",gEnt[i], gOnStart[i], gDelay[i]);
  2243. write_file(gszFile, szLine);
  2244. }
  2245. client_print(id, print_center, "%L!",id,"WORD_SAVED");
  2246. }
  2247. findTheClosest(id){
  2248. new Float:fPlayerOrig[3];
  2249. pev(id, pev_origin, fPlayerOrig);
  2250. new Float:fOrigin[3];
  2251. fm_get_brush_entity_origin(gEnt[0], fOrigin);
  2252.  
  2253. new Float:fRange=get_distance_f(fOrigin, fPlayerOrig), index=0;
  2254. new Float:fNewRange;
  2255. for(new i=1;i<giPointer;i++){
  2256. fm_get_brush_entity_origin(gEnt[i], fOrigin);
  2257. fNewRange=get_distance_f( fOrigin, fPlayerOrig);
  2258. if(fNewRange < fRange){
  2259. fRange=fNewRange;
  2260. index=i;
  2261. }
  2262. }
  2263. return index;
  2264. }
  2265. go2Button(id, ent=-1){
  2266. if(ent==-1)
  2267. ent=gInMenu[id];
  2268. ent=gEnt[ent];
  2269. if(!pev_valid(ent)){
  2270. client_print(id, print_center, "%L",id,"NOTARGET");
  2271. return;
  2272. }
  2273. new Float:fOrigin[3];
  2274. fm_get_brush_entity_origin(ent, fOrigin);
  2275. set_pev(id, pev_origin, fOrigin);
  2276. client_print(id, print_chat, "PS. No Clip :)");
  2277. }
  2278. //FreeRun
  2279. public cmdVoteFreeRun(id){
  2280. if(get_pcvar_num(gcvarFreeRun)==0){
  2281. ColorChat(id, "!y[!gFreeRun!y]!team %L",id,"FREERUN_DISABLED");
  2282. return PLUGIN_HANDLED;
  2283. }
  2284. if(gbVote){
  2285. ColorChat(id, "!y[!gFreeRun!y]!team %L",id,"FREERUN_VOTE_IS_NOW");
  2286. return PLUGIN_HANDLED;
  2287. }
  2288. if(!is_user_alive(id)){
  2289. client_print(id, print_center, "%L",id, "MUST_B_ALIVE");
  2290. return PLUGIN_HANDLED;
  2291. }
  2292. if(get_pcvar_num(gcvarPrivilege)!=0 && !gbFreeRun && get_user_team(id)==1){
  2293. ColorChat(id, "!y[!gFreeRun!y]!team %L",id,"FREERUN_TT_DECIDED");
  2294. makeFreeRun(true);
  2295. return PLUGIN_HANDLED;
  2296. }
  2297. new iLimit=get_pcvar_num(gcvarLimit);
  2298. new iOffset=0;
  2299. if(get_pcvar_num(gcvarLimitMode)){
  2300. iOffset = ( giTime + iLimit * 60 ) - get_systime();
  2301. if( iOffset > 0 ){
  2302. ColorChat(id, "!y[!gFreeRun!y]!team %L",id,"FREERUN_NEXT_VOTE_TIME", iOffset/60, iOffset%60);
  2303. return PLUGIN_HANDLED;
  2304. }
  2305. }
  2306. else{
  2307. iOffset = min(MAX_ROUNDS, iLimit) - giRounds;
  2308. if( iOffset > 0 ){
  2309. ColorChat(id, "!y[!gFreeRun!y]!team %L",id,"FREERUN_NEXT_VOTE_ROUNDS", iOffset);
  2310. return PLUGIN_HANDLED;
  2311. }
  2312. }
  2313.  
  2314. makeVote();
  2315. return PLUGIN_CONTINUE;
  2316. }
  2317. //FREERUN
  2318. public makeVote(){
  2319. giVoteTime=get_pcvar_num(gcvarFRVoteTime);
  2320. gbVote=true;
  2321. giVoteStart=get_systime();
  2322. set_task(float(giVoteTime), "resultsOfVote", TASK_RES);
  2323. new Players[32], playerCount;
  2324. new id;
  2325. get_players(Players, playerCount);
  2326. for (new i=0; i<playerCount; i++){
  2327. id = Players[i];
  2328. eventInGame(id);
  2329. }
  2330.  
  2331. }
  2332. public resultsOfVote(tid){
  2333. gbVote=false;
  2334.  
  2335. new giVotesOn=count(VOTE_ON);
  2336. new giVotesOff=count(VOTE_OFF);
  2337.  
  2338. ColorChat(0, "!y[!gFreeRun!y]!team %L %L(%d) vs %L(%d)",LANG_SERVER,"FREERUN_RESULTS",LANG_SERVER,"YES",giVotesOn,LANG_SERVER,"NO", giVotesOff);
  2339.  
  2340. if( giVotesOn == giVotesOff ){
  2341. ColorChat(0,"!y[!gFreeRun!y]!team %L",LANG_SERVER,"FREERUN_TIE");
  2342. return;
  2343. }
  2344. makeFreeRun((giVotesOn > giVotesOff));
  2345. ColorChat(0,"!y[!gFreeRun!y]!team %L ^x03%L",LANG_SERVER,"FREERUN_WINOPTION",LANG_SERVER, gbFreeRun?"YES":"NO");
  2346. }
  2347. makeFreeRun(bool:bFR=true){
  2348. gbFreeRun=bFR;
  2349. reset();
  2350. giRounds=0;
  2351. giTime=get_systime();
  2352.  
  2353. if(gbFreeRun){
  2354. set_pcvar_string(PcvarMode, "FreeRun")
  2355. set_hudmessage(0, 255, 255, 0.02, -1.0);
  2356. show_hudmessage(0, "FreeRun!");
  2357. }
  2358.  
  2359. }
  2360. count(VOTE_STATE){
  2361. new iCounter=0;
  2362. for(new i=1;i<33;i++)
  2363. if(giVotes[i][VOTE_STATE])
  2364. iCounter++;
  2365. return iCounter;
  2366. }
  2367. reset(){
  2368. for(new i=1;i<33;i++){
  2369. giVotes[i][VOTE_ON]=0;
  2370. giVotes[i][VOTE_OFF]=0;
  2371. }
  2372. }
  2373. public show_menu_(tid){
  2374. new id=tid-TASK_SHOWMENU;
  2375. new iTeam=get_user_team(id);
  2376. new menu_id, keys;
  2377. new menuUp = player_menu_info( id, menu_id, keys );
  2378. // Only display menu if another isn't shown
  2379. if ( iTeam && (menuUp <= 0 || menu_id < 0) ){
  2380. new iTime=get_pcvar_num(gcvarFRVoteTime);
  2381. new iOffset=get_systime()-giVoteStart;
  2382. iTime-=iOffset;
  2383. new szMenu[128];
  2384. formatex(szMenu, 127, "%L^n^n1. %L^n2. %L",id,"FREERUN_VOTEMENU",id,"YES",id,"NO");
  2385. show_menu(id, KeysFFVote, szMenu, iTime, "FRVote");
  2386. }else
  2387. set_task(1.0, "show_menu_", tid);
  2388. }
  2389. public eventInGame(id){
  2390. if(giVotes[id][VOTE_ON] || giVotes[id][VOTE_OFF])
  2391. return;
  2392. if(gbVote)
  2393. set_task(1.0, "show_menu_", id+TASK_SHOWMENU);
  2394. }
  2395. public PressedFRVote(id, key) {
  2396. if(gbVote==false) return;
  2397. switch (key) {
  2398. case VOTE_ON: { // 1
  2399. giVotes[id][VOTE_ON]=1;
  2400. }
  2401. case VOTE_OFF: { // 2
  2402. giVotes[id][VOTE_OFF]=1;
  2403. }
  2404. default:{
  2405. return;
  2406. }
  2407. }
  2408. new szName[32];
  2409. get_user_name(id, szName, 31);
  2410. client_print(0, print_chat, "* %L",LANG_PLAYER,(key==VOTE_ON)?"VOTED_FOR":"VOTED_AGAINST", szName);
  2411. }
  2412.  
  2413. stock Create_TE_BEAMPOINTS(Float:start[3], Float:end[3], iSprite, startFrame, frameRate, life, width, noise, red, green, blue, alpha, speed){
  2414. message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
  2415. write_byte( TE_BEAMPOINTS )
  2416. write_coord( floatround(start[0]) )
  2417. write_coord( floatround(start[1]) )
  2418. write_coord( floatround(start[2]) )
  2419. write_coord( floatround(end[0]) )
  2420. write_coord( floatround(end[1]) )
  2421. write_coord( floatround(end[2]) )
  2422. write_short( iSprite ) // model
  2423. write_byte( startFrame ) // start frame
  2424. write_byte( frameRate ) // framerate
  2425. write_byte( life ) // life
  2426. write_byte( width ) // width
  2427. write_byte( noise ) // noise
  2428. write_byte( red) // red
  2429. write_byte( green ) // green
  2430. write_byte( blue ) // blue
  2431. write_byte( alpha ) // brightness
  2432. write_byte( speed ) // speed
  2433. message_end()
  2434. }
  2435.  
  2436. stock Kill(id)
  2437. {
  2438. user_kill(id, 1)
  2439. return PLUGIN_CONTINUE
  2440. }
Add Comment
Please, Sign In to add comment