hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.29. 16:55



Jelenlévő felhasználók

Jelenleg 355 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 355 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: GHW_Custom_Nextmap
HozzászólásElküldve: 2015.05.16. 11:47 
Offline
Nagyúr
Avatar

Csatlakozott: 2013.09.14. 08:21
Hozzászólások: 547
Megköszönt másnak: 95 alkalommal
Megköszönték neki: 71 alkalommal
üdv.

SMA Forráskód: [ Mindet kijelol ]
  1. /*
  2. * _______ _ _ __ __
  3. * | _____/ | | | | \ \ __ / /
  4. * | | | | | | | | / \ | |
  5. * | | | |____| | | |/ __ \| |
  6. * | | ___ | ______ | | / \ |
  7. * | | |_ | | | | | | / \ |
  8. * | | | | | | | | | | | |
  9. * | |____| | | | | | | | | |
  10. * |_______/ |_| |_| \_/ \_/
  11. *
  12. *
  13. *
  14. * Last Edited: 05-16-08
  15. *
  16. * ============
  17. * Changelog:
  18. * ============
  19. *
  20. * v1.4e
  21. * -is_map_valid() broken, hardcoded a bug fix.
  22. *
  23. * v1.4d
  24. * -Bug Fixes
  25. *
  26. * v1.4c
  27. * -nominate command changed
  28. *
  29. * v1.4b
  30. * -GG Compadability Beta
  31. *
  32. * v1.4
  33. * -Added Nominating
  34. *
  35. * v1.1 - 1.3
  36. * -Bug Fixes
  37. * -Added RTV
  38. *
  39. * v1.0
  40. * -Initial Release
  41. *
  42. */
  43.  
  44. #define VERSION "1.4d"
  45.  
  46. #include <amxmodx>
  47. #include <amxmisc>
  48.  
  49. #define MAX_NOMINATED 20
  50. #define MAX_TRIES 50
  51.  
  52. new configfile[200]
  53.  
  54. new menu[2000]
  55. new keys
  56.  
  57. new g_teamScore[2]
  58.  
  59. new bool:voting
  60. new votes[10]
  61. new maps[9][32]
  62.  
  63. new num_nominated = 0
  64. new nominated[MAX_NOMINATED][32]
  65. new bool:has_nominated[33]
  66.  
  67. new mp_winlimit
  68. new mp_maxrounds
  69. new mp_timelimit
  70.  
  71. new extended_pcvar
  72. new extendtime_pcvar
  73. new lastmap_pcvar
  74. new lastmap_was_pcvar
  75. new lastlastmap_pcvar
  76. new lastlastmap_was_pcvar
  77. new showvotes_pcvar
  78. new rtv_percent_pcvar
  79. new rtv_wait_pcvar
  80. new delay_time_pcvar
  81. new delay_tally_time_pcvar
  82.  
  83. new extended
  84.  
  85. new cur_nextmap[32]
  86.  
  87. new cstrike
  88. new bool:rtv[33]
  89. new rtvtotal
  90.  
  91. new Float:voterocked
  92. new bool:voterocked2
  93.  
  94. new num
  95.  
  96. new say_commands[][32] =
  97. {
  98. "rockthevote",
  99. "rock the vote",
  100. "rtv",
  101. "/rockthevote",
  102. "/rock the vote",
  103. "/rtv"
  104. }
  105.  
  106. new say_commands2[][32] =
  107. {
  108. "nominate",
  109. "/nominate"
  110. }
  111.  
  112. new lastmap[32]
  113. new lastlastmap[32]
  114. new currentmap[32]
  115.  
  116. public plugin_init()
  117. {
  118. register_plugin("Custom NextMap Chooser",VERSION,"GHW_Chronic")
  119.  
  120. get_configsdir(configfile,199)
  121. format(configfile,199,"%s/custom_nextmaps.ini",configfile)
  122.  
  123. register_cvar("map_enabled","1")
  124.  
  125. if(file_exists(configfile) && get_cvar_num("map_enabled"))
  126. {
  127. register_concmd("amx_nextmap_vote","cmd_nextmap",ADMIN_MAP,"Starts a vote for nextmap [1=allow extend(Default) | 0=Don't allow extend] [1=Change Now(Default) | 0=Change at End")
  128.  
  129. register_clcmd("say nextmap","saynextmap")
  130. register_clcmd("say_team nextmap","saynextmap")
  131.  
  132. register_clcmd("say","say_hook")
  133. register_clcmd("say_team","say_hook")
  134.  
  135. cstrike = cstrike_running()
  136. if(cstrike) register_event("TeamScore", "team_score", "a")
  137.  
  138. register_menucmd(register_menuid("CustomNextMap"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"VoteCount")
  139.  
  140. set_task(15.0,"Check_Endround",1337,"",0,"b")
  141.  
  142. if(cstrike)
  143. {
  144. mp_winlimit = get_cvar_pointer("mp_winlimit")
  145. mp_maxrounds = get_cvar_pointer("mp_maxrounds")
  146. }
  147. mp_timelimit = get_cvar_pointer("mp_timelimit")
  148.  
  149. extended_pcvar = register_cvar("map_extend_max","3")
  150. extendtime_pcvar = register_cvar("map_extend_time","5")
  151. lastmap_pcvar = register_cvar("map_lastmap_show","1")
  152. lastlastmap_pcvar = register_cvar("map_lastlastmap_show","1")
  153. showvotes_pcvar = register_cvar("map_show_votes","1")
  154. rtv_percent_pcvar = register_cvar("map_rtv_percent","50")
  155. rtv_wait_pcvar = register_cvar("map_rtv_wait","180")
  156. lastmap_was_pcvar = register_cvar("qq_lastmap","")
  157. lastlastmap_was_pcvar = register_cvar("qq_lastlastmap","")
  158. delay_time_pcvar = register_cvar("map_delay_time","6")
  159. delay_tally_time_pcvar = register_cvar("map_tally_delay_time","15")
  160.  
  161. if(is_plugin_loaded("Nextmap Chooser")!=-1) pause("acd","mapchooser.amxx")
  162. if(!cvar_exists("amx_nextmap")) register_cvar("amx_nextmap","")
  163.  
  164. get_pcvar_string(lastmap_was_pcvar,lastmap,31)
  165. get_pcvar_string(lastlastmap_was_pcvar,lastlastmap,31)
  166. get_mapname(currentmap,31)
  167. }
  168. }
  169.  
  170. public client_disconnect(id)
  171. {
  172. if(rtv[id])
  173. {
  174. rtv[id]=false
  175. has_nominated[id]=false
  176. rtvtotal--
  177. }
  178. }
  179.  
  180. public cmd_nextmap(id,level,cid)
  181. {
  182. if(!cmd_access(id,level,cid,1))
  183. {
  184. return PLUGIN_HANDLED
  185. }
  186.  
  187. if(!voting)
  188. {
  189. num = get_pcvar_num(delay_time_pcvar)
  190. if(num<1) num=1
  191.  
  192. new arg1[8] = "1"
  193. new arg2[8] = "1"
  194. if(read_argc()>=2)
  195. {
  196. read_argv(1,arg1,7)
  197. if(read_argc()>=3)
  198. {
  199. read_argv(2,arg2,7)
  200. }
  201. }
  202.  
  203. client_print(0,print_chat,"[AMXX] An admin has started a nextmap vote! Vote starting in %d seconds.",num)
  204.  
  205. if(str_to_num(arg2)) voterocked2=true
  206. else voterocked2=false
  207. make_menu(str_to_num(arg1))
  208.  
  209. }
  210. else
  211. {
  212. client_print(id,print_chat,"[AMXX] There is already a nextmap vote in progress.")
  213. }
  214. return PLUGIN_HANDLED
  215. }
  216.  
  217. public make_menu(add_extend)
  218. {
  219. num = get_pcvar_num(delay_time_pcvar)
  220. if(num<1) num=1
  221.  
  222. for(new i=0;i<10;i++) votes[i]=0
  223. for(new i=0;i<9;i++) format(maps[i],31,"")
  224.  
  225. format(menu,1999,"^n")
  226.  
  227. new Fsize = file_size(configfile,1)
  228. new read[32], trash, string[8]
  229. new numbers[17]
  230.  
  231. for(new i=1;i<9;i++)
  232. {
  233. numbers[i]=0
  234. numbers[17-i]=0
  235. for(new i2=0;i2<Fsize;i2++)
  236. {
  237. read_file(configfile,i2,read,31,trash)
  238. format(string,7,"[%d]",i)
  239. if(equali(read,string)) numbers[i]=i2+1
  240.  
  241. format(string,7,"[/%d]",i)
  242. if(equali(read,string)) numbers[17-i]=i2-1
  243. }
  244. }
  245.  
  246. new tries
  247. keys = (1<<9)
  248. new j
  249. for(new i=1;i<9;i++)
  250. {
  251. format(maps[i],31,"")
  252. if(numbers[i] && numbers[17-i] && numbers[17-i]-numbers[i]>=0)
  253. {
  254. tries=0
  255. while(tries<MAX_TRIES)
  256. {
  257. read_file(configfile,random_num(numbers[i],numbers[17-i]),read,31,trash)
  258. if(containi(read,"%nominated%")==0 && num_nominated>0) format(read,31,"%s",nominated[random_num(0,num_nominated - 1)])
  259. if(is_map_valid(read) && !equali(read,currentmap) && (get_pcvar_num(lastmap_pcvar) || !equali(read,lastmap)) && (get_pcvar_num(lastlastmap_pcvar) || !equali(read,lastlastmap)))
  260. {
  261. for(j=1;j<i;j++)
  262. {
  263. if(equali(read,maps[j]))
  264. {
  265. j = 0
  266. break;
  267. }
  268. }
  269. if(!j) break;
  270. format(maps[i],31,"%s",read)
  271. format(menu,1999,"%s^n%d. %s",menu,i,read)
  272. switch(i)
  273. {
  274. case 1: keys |= (1<<0)
  275. case 2: keys |= (1<<1)
  276. case 3: keys |= (1<<2)
  277. case 4: keys |= (1<<3)
  278. case 5: keys |= (1<<4)
  279. case 6: keys |= (1<<5)
  280. case 7: keys |= (1<<6)
  281. case 8: keys |= (1<<7)
  282. }
  283. break;
  284. }
  285. tries++
  286. }
  287. }
  288. }
  289.  
  290. if(add_extend)
  291. {
  292. new mapname[32]
  293. get_mapname(mapname,31)
  294. if(extended<get_pcvar_num(extended_pcvar))
  295. {
  296. format(menu,1999,"%s^n^n9. Extend %s",menu,mapname)
  297. keys |= (1<<8)
  298. }
  299. }
  300. format(menu,1999,"%s^n0. I don't care",menu)
  301.  
  302. set_hudmessage(255,0,0,0.03,0.40,0,6.0,1.0,0.0,0.0,3)
  303. show_hudmessage(0,"Vote for Next Map in %d seconds:",num)
  304.  
  305. set_hudmessage(255,255,255,0.03,0.40,0,6.0,1.0,0.0,0.0,4)
  306. show_hudmessage(0,menu)
  307.  
  308. set_task(1.0,"Send_Menu",0,"",0,"a",num)
  309. set_task(get_pcvar_float(delay_tally_time_pcvar) + float(num),"VoteTally",0)
  310.  
  311. voting=true
  312. voterocked=-1.0
  313. }
  314.  
  315. public Send_Menu()
  316. {
  317. if(num!=1)
  318. {
  319. set_hudmessage(255,0,0,0.03,0.40,0,6.0,1.0,0.0,0.0,3)
  320. show_hudmessage(0,"Vote for Next Map in %d seconds:",num-1)
  321.  
  322. set_hudmessage(255,255,255,0.03,0.40,0,6.0,1.0,0.0,0.0,4)
  323. show_hudmessage(0,menu)
  324. num--
  325. }
  326. else
  327. {
  328. client_cmd(0,"spk Gman/Gman_Choose2")
  329. format(menu,1999,"Vote for Next Map:%s",menu)
  330. show_menu(0,keys,menu,get_pcvar_num(delay_tally_time_pcvar),"CustomNextMap")
  331. }
  332. }
  333.  
  334. public saynextmap(id)
  335. {
  336. if(strlen(cur_nextmap)) client_print(0,print_chat,"[AMXX] --Nextmap: %s",cur_nextmap)
  337. else client_print(0,print_chat,"[AMXX] --Nextmap not chosen yet.")
  338. }
  339.  
  340. public say_hook(id)
  341. {
  342. new text[64]
  343. read_args(text,63)
  344. remove_quotes(text)
  345.  
  346. new string[32]
  347. for(new i=0;i<sizeof(say_commands);i++)
  348. {
  349. format(string,31,"%s",say_commands[i])
  350. if(containi(text,string)==0) return sayrockthevote(id);
  351. }
  352.  
  353. for(new i=0;i<sizeof(say_commands2);i++)
  354. {
  355. format(string,31,"%s ",say_commands2[i])
  356. if(containi(text,string)==0)
  357. {
  358. replace(text,63,string,"")
  359. return saynominate(id,text);
  360. }
  361. }
  362.  
  363. if(is_map_valid2(text)) return saynominate(id,text);
  364.  
  365. return PLUGIN_CONTINUE
  366. }
  367.  
  368. public sayrockthevote(id)
  369. {
  370. if(voterocked==-1.0)
  371. {
  372. client_print(id,print_chat,"[AMXX] Voting Currently in Process.")
  373. }
  374. else if((!voterocked && get_gametime()>get_pcvar_num(rtv_wait_pcvar)) || (get_gametime() - voterocked) > get_pcvar_num(rtv_wait_pcvar))
  375. {
  376. if(get_pcvar_num(rtv_percent_pcvar)>0 && get_pcvar_num(rtv_percent_pcvar)<=100)
  377. {
  378. if(rtv[id])
  379. {
  380. client_print(id,print_chat,"[AMXX] You have already voted to Rock the Vote.")
  381. }
  382. else
  383. {
  384. rtv[id]=true
  385. rtvtotal++
  386.  
  387. new num2, players[32]
  388. get_players(players,num2,"ch")
  389.  
  390. new name[32]
  391. get_user_name(id,name,31)
  392.  
  393. new num3 = floatround((num2 * get_pcvar_float(rtv_percent_pcvar) / 100.0) - rtvtotal,floatround_ceil)
  394.  
  395. if(num3<=0)
  396. {
  397. client_print(0,print_chat,"[AMXX] %s has voted to Rock the Vote.",name)
  398. client_print(0,print_chat,"[AMXX] The Vote has been Rocked!")
  399.  
  400. make_menu(1)
  401.  
  402. voterocked2=true
  403. }
  404. else
  405. {
  406. if(num3!=1) client_print(0,print_chat,"[AMXX] %s has voted to Rock the Vote. Need %d more players.",name,num3)
  407. else client_print(0,print_chat,"[AMXX] %s has voted to Rock the Vote. Need 1 more player.",name)
  408. }
  409. }
  410. }
  411. else
  412. {
  413. client_print(id,print_chat,"[AMXX] Rock the Vote is disabled.")
  414. }
  415. }
  416. else if(voterocked>0.0)
  417. {
  418. client_print(id,print_chat,"[AMXX] Cannot Rock the Vote again for another %d seconds.",get_pcvar_num(rtv_wait_pcvar) - (floatround(get_gametime()) - floatround(voterocked)))
  419. }
  420. else
  421. {
  422. client_print(id,print_chat,"[AMXX] Cannot Rock the Vote till %d seconds after map start. (%d more seconds)",get_pcvar_num(rtv_wait_pcvar),get_pcvar_num(rtv_wait_pcvar) - floatround(get_gametime()))
  423. }
  424.  
  425. return PLUGIN_CONTINUE
  426. }
  427.  
  428. public saynominate(id,nom_map[64])
  429. {
  430. if(has_nominated[id])
  431. {
  432. client_print(id,print_chat,"[AMXX] You have already nominated a map.")
  433. }
  434. else if(is_map_valid2(nom_map))
  435. {
  436. if(equali(nom_map,currentmap))
  437. {
  438. client_print(0,print_chat,"[AMXX] Cannot nominated the current map.")
  439. return PLUGIN_CONTINUE
  440. }
  441. else if(!get_pcvar_num(lastmap_pcvar) && equali(nom_map,lastmap))
  442. {
  443. client_print(0,print_chat,"[AMXX] Cannot nominated the previous map.")
  444. return PLUGIN_CONTINUE
  445. }
  446. else if(!get_pcvar_num(lastlastmap_pcvar) && equali(nom_map,lastlastmap))
  447. {
  448. client_print(0,print_chat,"[AMXX] Cannot nominated the previous to previous map.")
  449. return PLUGIN_CONTINUE
  450. }
  451.  
  452. for(new i=0;i<num_nominated;i++)
  453. {
  454. if(equali(nominated[i],nom_map))
  455. {
  456. client_print(0,print_chat,"[AMXX] That map has already been nominated.")
  457. return PLUGIN_CONTINUE
  458. }
  459. }
  460.  
  461. format(nominated[num_nominated],31,"%s",nom_map)
  462. num_nominated++
  463.  
  464. new name[32]
  465. get_user_name(id,name,31)
  466. client_print(0,print_chat,"[AMXX] %s nominated %s.",name,nom_map)
  467. has_nominated[id] = true
  468. }
  469. else
  470. {
  471. client_print(0,print_chat,"[AMXX] That map does not exist on this server.")
  472. }
  473.  
  474. return PLUGIN_CONTINUE
  475. }
  476.  
  477. public is_map_valid2(map[])
  478. {
  479. if(is_map_valid(map) &&
  480. containi(map,"<")==-1 &&
  481. containi(map,"\")==-1 &&
  482. containi(map,"/")==-1 &&
  483. containi(map,">")==-1 &&
  484. containi(map,"?")==-1 &&
  485. containi(map,"|")==-1 &&
  486. containi(map,"*")==-1 &&
  487. containi(map,":")==-1 &&
  488. containi(map,"^"")==-1
  489. )
  490. return 1;
  491.  
  492. return 0;
  493. }
  494.  
  495. public Check_Endround()
  496. {
  497. if(voterocked==-1.0)
  498. return ;
  499.  
  500. new bool:continuea=false
  501.  
  502. if(cstrike)
  503. {
  504. new winlimit = get_pcvar_num(mp_winlimit)
  505. if(winlimit)
  506. {
  507. new c = winlimit - 2
  508. if(!((c> g_teamScore[0]) && (c>g_teamScore[1]) ))
  509. {
  510. continuea=true
  511. }
  512. }
  513.  
  514. new maxrounds = get_pcvar_num(mp_maxrounds)
  515.  
  516. if(maxrounds)
  517. {
  518. if(!((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1])))
  519. {
  520. continuea=true
  521. }
  522. }
  523. }
  524.  
  525. new timeleft = get_timeleft()
  526. if(!(timeleft < 1 || timeleft > 129))
  527. {
  528. continuea=true
  529. }
  530.  
  531. if(!continuea)
  532. return ;
  533.  
  534. remove_task(1337)
  535.  
  536. make_menu(1)
  537.  
  538. return ;
  539. }
  540.  
  541. public VoteCount(id,key)
  542. {
  543. if(voting)
  544. {
  545. new name[32]
  546. get_user_name(id,name,31)
  547. if(key==8)
  548. {
  549. if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s voted for map extension.",name)
  550. votes[9]++
  551. }
  552. else if(key==9)
  553. {
  554. if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s didn't vote.",name)
  555. }
  556. else if(strlen(maps[key+1]))
  557. {
  558. if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s voted for %s.",name,maps[key+1])
  559. votes[key+1]++
  560. }
  561. else
  562. {
  563. show_menu(id,keys,menu,-1,"CustomNextMap")
  564. }
  565. }
  566. return PLUGIN_HANDLED
  567. }
  568.  
  569. public VoteTally(num)
  570. {
  571. voting=false
  572. new winner[2]
  573. for(new i=1;i<10;i++)
  574. {
  575. if(votes[i]>winner[1])
  576. {
  577. winner[0]=i
  578. winner[1]=votes[i]
  579. }
  580. votes[i]=0
  581. }
  582. if(!winner[1])
  583. {
  584. if(!voterocked2)
  585. {
  586. new mapname[32]
  587. get_cvar_string("qq_lastmap",mapname,31)
  588. set_cvar_string("qq_lastlastmap",mapname)
  589. get_mapname(mapname,31)
  590. set_cvar_string("qq_lastmap",mapname)
  591. client_print(0,print_chat,"[AMXX] No one voted. Random Map coming.")
  592. }
  593. else
  594. {
  595. client_print(0,print_chat,"[AMXX] No one voted.")
  596. voterocked=get_gametime()
  597. }
  598. }
  599. else if(winner[0]==9)
  600. {
  601. if(!voterocked2)
  602. {
  603. client_print(0,print_chat,"[AMXX] Map extending won. Extending map for %d minutes.",get_pcvar_num(extendtime_pcvar))
  604. set_pcvar_float(mp_timelimit,get_pcvar_float(mp_timelimit) + get_pcvar_num(extendtime_pcvar))
  605. set_task(15.0,"Check_Endround",1337,"",0,"b")
  606. extended++
  607. }
  608. else
  609. {
  610. client_print(0,print_chat,"[AMXX] Map extending won. No new map.")
  611. }
  612. voterocked=get_gametime()
  613. }
  614. else
  615. {
  616. new mapname[32]
  617. get_cvar_string("qq_lastmap",mapname,31)
  618. set_cvar_string("qq_lastlastmap",mapname)
  619. get_mapname(mapname,31)
  620. set_cvar_string("qq_lastmap",mapname)
  621. client_print(0,print_chat,"[AMXX] Voting Over. Nextmap will be %s!",maps[winner[0]])
  622. if(!voterocked2)
  623. {
  624. set_cvar_string("amx_nextmap",maps[winner[0]])
  625. set_task(1.0,"change_level",winner[0],"",0,"d")
  626. }
  627. else
  628. {
  629. set_task(5.0,"change_level",winner[0])
  630. }
  631. format(cur_nextmap,31,"%s",maps[winner[0]])
  632. }
  633. for(new i=0;i<=32;i++) rtv[i]=false
  634.  
  635. voterocked2=false
  636. }
  637.  
  638. public change_level(map)
  639. {
  640. server_cmd("amx_map %s",maps[map])
  641. }
  642.  
  643. //From the AMXX nextmap base file
  644. public team_score()
  645. {
  646. new team[2]
  647. read_data(1,team,1)
  648. g_teamScore[(team[0]=='C') ? 0 : 1] = read_data(2)
  649. }

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: GHW_Custom_Nextmap
HozzászólásElküldve: 2015.12.27. 16:21 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Az ékezetek hibátlanul működnek ha pl. Notepad++ -ban "UTF8 BOM nélkül"-i módban mented el az SMA fájlt.
  1. /*
  2. *   _______     _      _  __          __
  3. *  | _____/    | |    | | \ \   __   / /
  4. *  | |         | |    | |  | | /  \ | |
  5. *  | |         | |____| |  | |/ __ \| |
  6. *  | |   ___   | ______ |  |   /  \   |
  7. *  | |  |_  |  | |    | |  |  /    \  |
  8. *  | |    | |  | |    | |  | |      | |
  9. *  | |____| |  | |    | |  | |      | |
  10. *  |_______/   |_|    |_|  \_/      \_/
  11. *
  12. *
  13. *
  14. *  Last Edited: 05-16-08
  15. *
  16. *  ============
  17. *   Changelog:
  18. *  ============
  19. *
  20. *  v1.4e
  21. *    -is_map_valid() broken, hardcoded a bug fix.
  22. *
  23. *  v1.4d
  24. *    -Bug Fixes
  25. *
  26. *  v1.4c
  27. *    -nominate command changed
  28. *
  29. *  v1.4b
  30. *    -GG Compadability Beta
  31. *
  32. *  v1.4
  33. *    -Added Nominating
  34. *
  35. *  v1.1 - 1.3
  36. *    -Bug Fixes
  37. *    -Added RTV
  38. *
  39. *  v1.0
  40. *    -Initial Release
  41. *
  42. */
  43.  
  44. #define VERSION "1.4d"
  45.  
  46. #include <amxmodx>
  47. #include <amxmisc>
  48.  
  49. #define MAX_NOMINATED   20
  50. #define MAX_TRIES   50
  51.  
  52. new configfile[200]
  53.  
  54. new menu[2000]
  55. new keys
  56.  
  57. new g_teamScore[2]
  58.  
  59. new bool:voting
  60. new votes[10]
  61. new maps[9][32]
  62.  
  63. new num_nominated = 0
  64. new nominated[MAX_NOMINATED][32]
  65. new bool:has_nominated[33]
  66.  
  67. new mp_winlimit
  68. new mp_maxrounds
  69. new mp_timelimit
  70.  
  71. new extended_pcvar
  72. new extendtime_pcvar
  73. new lastmap_pcvar
  74. new lastmap_was_pcvar
  75. new lastlastmap_pcvar
  76. new lastlastmap_was_pcvar
  77. new showvotes_pcvar
  78. new rtv_percent_pcvar
  79. new rtv_wait_pcvar
  80. new delay_time_pcvar
  81. new delay_tally_time_pcvar
  82.  
  83. new extended
  84.  
  85. new cur_nextmap[32]
  86.  
  87. new cstrike
  88. new bool:rtv[33]
  89. new rtvtotal
  90.  
  91. new Float:voterocked
  92. new bool:voterocked2
  93.  
  94. new num
  95.  
  96. new say_commands[][32] =
  97. {
  98.     "rockthevote",
  99.     "rock the vote",
  100.     "rtv",
  101.     "/rockthevote",
  102.     "/rock the vote",
  103.     "/rtv"
  104. }
  105.  
  106. new say_commands2[][32] =
  107. {
  108.     "nominate",
  109.     "/nominate"
  110. }
  111.  
  112. new lastmap[32]
  113. new lastlastmap[32]
  114. new currentmap[32]
  115.  
  116. public plugin_init()
  117. {
  118.     register_plugin("Custom NextMap Chooser",VERSION,"GHW_Chronic")
  119.  
  120.     get_configsdir(configfile,199)
  121.     format(configfile,199,"%s/custom_nextmaps.ini",configfile)
  122.  
  123.     register_cvar("map_enabled","1")
  124.  
  125.     if(file_exists(configfile) && get_cvar_num("map_enabled"))
  126.     {
  127.         register_concmd("amx_nextmap_vote","cmd_nextmap",ADMIN_MAP,"Szavazást indít a következő pályáról [1=hoszabbítás engedélyezése(Default) | 0=Hosszabbítás tiltása] [1=Váltson most(Default) | 0=Váltson a pálya végén")
  128.  
  129.         register_clcmd("say nextmap","saynextmap")
  130.         register_clcmd("say_team nextmap","saynextmap")
  131.  
  132.         register_clcmd("say","say_hook")
  133.         register_clcmd("say_team","say_hook")
  134.  
  135.         cstrike = cstrike_running()
  136.         if(cstrike) register_event("TeamScore", "team_score", "a")
  137.  
  138.         register_menucmd(register_menuid("CustomNextMap"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"VoteCount")
  139.  
  140.         set_task(15.0,"Check_Endround",1337,"",0,"b")
  141.  
  142.         if(cstrike)
  143.         {
  144.             mp_winlimit = get_cvar_pointer("mp_winlimit")
  145.             mp_maxrounds = get_cvar_pointer("mp_maxrounds")
  146.         }
  147.         mp_timelimit = get_cvar_pointer("mp_timelimit")
  148.  
  149.         extended_pcvar = register_cvar("map_extend_max","3")
  150.         extendtime_pcvar = register_cvar("map_extend_time","5")
  151.         lastmap_pcvar = register_cvar("map_lastmap_show","1")
  152.         lastlastmap_pcvar = register_cvar("map_lastlastmap_show","1")
  153.         showvotes_pcvar = register_cvar("map_show_votes","1")
  154.         rtv_percent_pcvar = register_cvar("map_rtv_percent","50")
  155.         rtv_wait_pcvar = register_cvar("map_rtv_wait","180")
  156.         lastmap_was_pcvar = register_cvar("qq_lastmap","")
  157.         lastlastmap_was_pcvar = register_cvar("qq_lastlastmap","")
  158.         delay_time_pcvar = register_cvar("map_delay_time","6")
  159.         delay_tally_time_pcvar = register_cvar("map_tally_delay_time","15")
  160.  
  161.         if(is_plugin_loaded("Nextmap Chooser")!=-1) pause("acd","mapchooser.amxx")
  162.         if(!cvar_exists("amx_nextmap")) register_cvar("amx_nextmap","")
  163.  
  164.         get_pcvar_string(lastmap_was_pcvar,lastmap,31)
  165.         get_pcvar_string(lastlastmap_was_pcvar,lastlastmap,31)
  166.         get_mapname(currentmap,31)
  167.     }
  168. }
  169.  
  170. public client_disconnect(id)
  171. {
  172.     if(rtv[id])
  173.     {
  174.         rtv[id]=false
  175.         has_nominated[id]=false
  176.         rtvtotal--
  177.     }
  178. }
  179.  
  180. public cmd_nextmap(id,level,cid)
  181. {
  182.     if(!cmd_access(id,level,cid,1))
  183.     {
  184.         return PLUGIN_HANDLED
  185.     }
  186.  
  187.     if(!voting)
  188.     {
  189.         num = get_pcvar_num(delay_time_pcvar)
  190.         if(num<1) num=1
  191.  
  192.         new arg1[8] = "1"
  193.         new arg2[8] = "1"
  194.         if(read_argc()>=2)
  195.         {
  196.             read_argv(1,arg1,7)
  197.             if(read_argc()>=3)
  198.             {
  199.                 read_argv(2,arg2,7)
  200.             }
  201.         }
  202.  
  203.         client_print(0,print_chat,"[AMXX] Egy admin elindította a pályaszavazást! Kezdődik %d másodpercen belül.",num)
  204.  
  205.         if(str_to_num(arg2)) voterocked2=true
  206.         else voterocked2=false
  207.         make_menu(str_to_num(arg1))
  208.  
  209.     }
  210.     else
  211.     {
  212.         client_print(id,print_chat,"[AMXX] Már folyamatban van egy pályaszavazás.")
  213.     }
  214.     return PLUGIN_HANDLED
  215. }
  216.  
  217. public make_menu(add_extend)
  218. {
  219.     num = get_pcvar_num(delay_time_pcvar)
  220.     if(num<1) num=1
  221.  
  222.     for(new i=0;i<10;i++) votes[i]=0
  223.     for(new i=0;i<9;i++) format(maps[i],31,"")
  224.  
  225.     format(menu,1999,"^n")
  226.  
  227.     new Fsize = file_size(configfile,1)
  228.     new read[32], trash, string[8]
  229.     new numbers[17]
  230.  
  231.     for(new i=1;i<9;i++)
  232.     {
  233.         numbers[i]=0
  234.         numbers[17-i]=0
  235.         for(new i2=0;i2<Fsize;i2++)
  236.         {
  237.             read_file(configfile,i2,read,31,trash)
  238.             format(string,7,"[%d]",i)
  239.             if(equali(read,string)) numbers[i]=i2+1
  240.  
  241.             format(string,7,"[/%d]",i)
  242.             if(equali(read,string)) numbers[17-i]=i2-1
  243.         }
  244.     }
  245.  
  246.     new tries
  247.     keys = (1<<9)
  248.     new j
  249.     for(new i=1;i<9;i++)
  250.     {
  251.         format(maps[i],31,"")
  252.         if(numbers[i] && numbers[17-i] && numbers[17-i]-numbers[i]>=0)
  253.         {
  254.             tries=0
  255.             while(tries<MAX_TRIES)
  256.             {
  257.                 read_file(configfile,random_num(numbers[i],numbers[17-i]),read,31,trash)
  258.                 if(containi(read,"%nominated%")==0 && num_nominated>0) format(read,31,"%s",nominated[random_num(0,num_nominated - 1)])
  259.                 if(is_map_valid(read) && !equali(read,currentmap) && (get_pcvar_num(lastmap_pcvar) || !equali(read,lastmap)) && (get_pcvar_num(lastlastmap_pcvar) || !equali(read,lastlastmap)))
  260.                 {
  261.                     for(j=1;j<i;j++)
  262.                     {
  263.                         if(equali(read,maps[j]))
  264.                         {
  265.                             j = 0
  266.                             break;
  267.                         }
  268.                     }
  269.                     if(!j) break;
  270.                     format(maps[i],31,"%s",read)
  271.                     format(menu,1999,"%s^n%d. %s",menu,i,read)
  272.                     switch(i)
  273.                     {
  274.                         case 1: keys |= (1<<0)
  275.                         case 2: keys |= (1<<1)
  276.                         case 3: keys |= (1<<2)
  277.                         case 4: keys |= (1<<3)
  278.                         case 5: keys |= (1<<4)
  279.                         case 6: keys |= (1<<5)
  280.                         case 7: keys |= (1<<6)
  281.                         case 8: keys |= (1<<7)
  282.                     }
  283.                     break;
  284.                 }
  285.                 tries++
  286.             }
  287.         }
  288.     }
  289.  
  290.     if(add_extend)
  291.     {
  292.         new mapname[32]
  293.         get_mapname(mapname,31)
  294.         if(extended<get_pcvar_num(extended_pcvar))
  295.         {
  296.             format(menu,1999,"%s^n^n9. Extend %s",menu,mapname)
  297.             keys |= (1<<8)
  298.         }
  299.     }
  300.     format(menu,1999,"%s^n0. I don't care",menu)
  301.  
  302.     set_hudmessage(255,0,0,0.03,0.40,0,6.0,1.0,0.0,0.0,3)
  303.     show_hudmessage(0,"Szavazz a következő pályára %d másodpercen belül:",num)
  304.  
  305.     set_hudmessage(255,255,255,0.03,0.40,0,6.0,1.0,0.0,0.0,4)
  306.     show_hudmessage(0,menu)
  307.  
  308.     set_task(1.0,"Send_Menu",0,"",0,"a",num)
  309.     set_task(get_pcvar_float(delay_tally_time_pcvar) + float(num),"VoteTally",0)
  310.  
  311.     voting=true
  312.     voterocked=-1.0
  313. }
  314.  
  315. public Send_Menu()
  316. {
  317.     if(num!=1)
  318.     {
  319.         set_hudmessage(255,0,0,0.03,0.40,0,6.0,1.0,0.0,0.0,3)
  320.         show_hudmessage(0,"Szavazz a következő pályára %d másodpercen belül:",num-1)
  321.  
  322.         set_hudmessage(255,255,255,0.03,0.40,0,6.0,1.0,0.0,0.0,4)
  323.         show_hudmessage(0,menu)
  324.         num--
  325.     }
  326.     else
  327.     {
  328.         client_cmd(0,"spk Gman/Gman_Choose2")
  329.         format(menu,1999,"Szavazz a következő pályára:%s",menu)
  330.         show_menu(0,keys,menu,get_pcvar_num(delay_tally_time_pcvar),"CustomNextMap")
  331.     }
  332. }
  333.  
  334. public saynextmap(id)
  335. {
  336.     if(strlen(cur_nextmap)) client_print(0,print_chat,"[AMXX] --Következő pálya: %s",cur_nextmap)
  337.     else client_print(0,print_chat,"[AMXX] --Még nincs megszavazva a következő pálya.")
  338. }
  339.  
  340. public say_hook(id)
  341. {
  342.     new text[64]
  343.     read_args(text,63)
  344.     remove_quotes(text)
  345.  
  346.     new string[32]
  347.     for(new i=0;i<sizeof(say_commands);i++)
  348.     {
  349.         format(string,31,"%s",say_commands[i])
  350.         if(containi(text,string)==0) return sayrockthevote(id);
  351.     }
  352.  
  353.     for(new i=0;i<sizeof(say_commands2);i++)
  354.     {
  355.         format(string,31,"%s ",say_commands2[i])
  356.         if(containi(text,string)==0)
  357.         {
  358.             replace(text,63,string,"")
  359.             return saynominate(id,text);
  360.         }
  361.     }
  362.  
  363.     if(is_map_valid2(text)) return saynominate(id,text);
  364.  
  365.     return PLUGIN_CONTINUE
  366. }
  367.  
  368. public sayrockthevote(id)
  369. {
  370.     if(voterocked==-1.0)
  371.     {
  372.         client_print(id,print_chat,"[AMXX] Szavazás folyamatban.")
  373.     }
  374.     else if((!voterocked && get_gametime()>get_pcvar_num(rtv_wait_pcvar)) || (get_gametime() - voterocked) > get_pcvar_num(rtv_wait_pcvar))
  375.     {
  376.         if(get_pcvar_num(rtv_percent_pcvar)>0 && get_pcvar_num(rtv_percent_pcvar)<=100)
  377.         {
  378.             if(rtv[id])
  379.             {
  380.                 client_print(id,print_chat,"[AMXX] Már RTV-ztél egyszer.")
  381.             }
  382.             else
  383.             {
  384.                 rtv[id]=true
  385.                 rtvtotal++
  386.  
  387.                 new num2, players[32]
  388.                 get_players(players,num2,"ch")
  389.  
  390.                 new name[32]
  391.                 get_user_name(id,name,31)
  392.  
  393.                 new num3 = floatround((num2 * get_pcvar_float(rtv_percent_pcvar) / 100.0) - rtvtotal,floatround_ceil)
  394.  
  395.                 if(num3<=0)
  396.                 {
  397.                     client_print(0,print_chat,"[AMXX] %s játékos RTV-zett.",name)
  398.                     client_print(0,print_chat,"[AMXX] Szavazás indul az RTV miatt!")
  399.  
  400.                     make_menu(1)
  401.  
  402.                     voterocked2=true
  403.                 }
  404.                 else
  405.                 {
  406.                     if(num3!=1) client_print(0,print_chat,"[AMXX] %s játékos RTV-zett. Még %d további szükséges.",name,num3)
  407.                     else client_print(0,print_chat,"[AMXX] %s játékos már RTV-zett. Még 1 további szükséges.",name)
  408.                 }
  409.             }
  410.         }
  411.         else
  412.         {
  413.             client_print(id,print_chat,"[AMXX] RTV kikapcsolva.")
  414.         }
  415.     }
  416.     else if(voterocked>0.0)
  417.     {
  418.         client_print(id,print_chat,"[AMXX] Nem RTV-zhetsz még %d másodpercig.",get_pcvar_num(rtv_wait_pcvar) - (floatround(get_gametime()) - floatround(voterocked)))
  419.     }
  420.     else
  421.     {
  422.         client_print(id,print_chat,"[AMXX] Nem RTV-zhetsz a pálya kezdete után %d másodpercig. (Még %d másodperc)",get_pcvar_num(rtv_wait_pcvar),get_pcvar_num(rtv_wait_pcvar) - floatround(get_gametime()))
  423.     }
  424.  
  425.     return PLUGIN_CONTINUE
  426. }
  427.  
  428. public saynominate(id,nom_map[64])
  429. {
  430.     if(has_nominated[id])
  431.     {
  432.         client_print(id,print_chat,"[AMXX] Már ajánlottál egy pályát.")
  433.     }
  434.     else if(is_map_valid2(nom_map))
  435.     {
  436.         if(equali(nom_map,currentmap))
  437.         {
  438.             client_print(0,print_chat,"[AMXX] A jelenlegi pályát nem ajánlhatod.")
  439.             return PLUGIN_CONTINUE
  440.         }
  441.         else if(!get_pcvar_num(lastmap_pcvar) && equali(nom_map,lastmap))
  442.         {
  443.             client_print(0,print_chat,"[AMXX] Az előző pályát nem ajánlhatod.")
  444.             return PLUGIN_CONTINUE
  445.         }
  446.         else if(!get_pcvar_num(lastlastmap_pcvar) && equali(nom_map,lastlastmap))
  447.         {
  448.             client_print(0,print_chat,"[AMXX] Nem ajánlhatod a kettővel ezelőtti pályát.")
  449.             return PLUGIN_CONTINUE
  450.         }
  451.  
  452.         for(new i=0;i<num_nominated;i++)
  453.         {
  454.             if(equali(nominated[i],nom_map))
  455.             {
  456.                 client_print(0,print_chat,"[AMXX] Ez a pálya már ajánlva lett.")
  457.                 return PLUGIN_CONTINUE
  458.             }
  459.         }
  460.  
  461.         format(nominated[num_nominated],31,"%s",nom_map)
  462.         num_nominated++
  463.  
  464.         new name[32]
  465.         get_user_name(id,name,31)
  466.         client_print(0,print_chat,"[AMXX] %s ajánlotta a(z) %s pályát.",name,nom_map)
  467.         has_nominated[id] = true
  468.     }
  469.     else
  470.     {
  471.         client_print(0,print_chat,"[AMXX] Nincs ilyen pálya a szerveren.")
  472.     }
  473.  
  474.     return PLUGIN_CONTINUE
  475. }
  476.  
  477. public is_map_valid2(map[])
  478. {
  479.     if(is_map_valid(map) &&
  480.     containi(map,"<")==-1 &&
  481.     containi(map,"\")==-1 &&
  482.     containi(map,"/")==-1 &&
  483.     containi(map,">")==-1 &&
  484.     containi(map,"?")==-1 &&
  485.     containi(map,"|")==-1 &&
  486.     containi(map,"*")==-1 &&
  487.     containi(map,":")==-1 &&
  488.     containi(map,"^"")==-1
  489.     )
  490.         return 1;
  491.  
  492.     return 0;
  493. }
  494.  
  495. public Check_Endround()
  496. {
  497.     if(voterocked==-1.0)
  498.         return ;
  499.  
  500.     new bool:continuea=false
  501.  
  502.     if(cstrike)
  503.     {
  504.         new winlimit = get_pcvar_num(mp_winlimit)
  505.         if(winlimit)
  506.         {
  507.             new c = winlimit - 2
  508.             if(!((c> g_teamScore[0]) && (c>g_teamScore[1]) ))
  509.             {
  510.                 continuea=true
  511.             }
  512.         }
  513.  
  514.         new maxrounds = get_pcvar_num(mp_maxrounds)
  515.  
  516.         if(maxrounds)
  517.         {
  518.             if(!((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1])))
  519.             {
  520.                 continuea=true
  521.             }
  522.         }
  523.     }
  524.  
  525.     new timeleft = get_timeleft()
  526.     if(!(timeleft < 1 || timeleft > 129))
  527.     {
  528.         continuea=true
  529.     }
  530.  
  531.     if(!continuea)
  532.         return ;
  533.  
  534.     remove_task(1337)
  535.  
  536.     make_menu(1)
  537.  
  538.     return ;
  539. }
  540.  
  541. public VoteCount(id,key)
  542. {
  543.     if(voting)
  544.     {
  545.         new name[32]
  546.         get_user_name(id,name,31)
  547.         if(key==8)
  548.         {
  549.             if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s a pálya hosszabbítására szavazott.",name)
  550.             votes[9]++
  551.         }
  552.         else if(key==9)
  553.         {
  554.             if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s nem szavazott.",name)
  555.         }
  556.         else if(strlen(maps[key+1]))
  557.         {
  558.             if(get_pcvar_num(showvotes_pcvar)) client_print(0,print_chat,"[AMXX] %s szavazott a(z) %s pályára.",name,maps[key+1])
  559.             votes[key+1]++
  560.         }
  561.         else
  562.         {
  563.             show_menu(id,keys,menu,-1,"CustomNextMap")
  564.         }
  565.     }
  566.     return PLUGIN_HANDLED
  567. }
  568.  
  569. public VoteTally(num)
  570. {
  571.     voting=false
  572.     new winner[2]
  573.     for(new i=1;i<10;i++)
  574.     {
  575.         if(votes[i]>winner[1])
  576.         {
  577.             winner[0]=i
  578.             winner[1]=votes[i]
  579.         }
  580.         votes[i]=0
  581.     }
  582.     if(!winner[1])
  583.     {
  584.         if(!voterocked2)
  585.         {
  586.             new mapname[32]
  587.             get_cvar_string("qq_lastmap",mapname,31)
  588.             set_cvar_string("qq_lastlastmap",mapname)
  589.             get_mapname(mapname,31)
  590.             set_cvar_string("qq_lastmap",mapname)
  591.             client_print(0,print_chat,"[AMXX] Senki sem szavazott. Véletlenszerűen jön a következő pálya.")
  592.         }
  593.         else
  594.         {
  595.             client_print(0,print_chat,"[AMXX] Senki sem szavazott.")
  596.             voterocked=get_gametime()
  597.         }
  598.     }
  599.     else if(winner[0]==9)
  600.     {
  601.         if(!voterocked2)
  602.         {
  603.             client_print(0,print_chat,"[AMXX] A pálya hosszabbítása megszavazva. Időlimit kitolva további %d perccel.",get_pcvar_num(extendtime_pcvar))
  604.             set_pcvar_float(mp_timelimit,get_pcvar_float(mp_timelimit) + get_pcvar_num(extendtime_pcvar))
  605.             set_task(15.0,"Check_Endround",1337,"",0,"b")
  606.             extended++
  607.         }
  608.         else
  609.         {
  610.             client_print(0,print_chat,"[AMXX]  A pálya hosszabbítása megszavazva. Nem lesz új pálya.")
  611.         }
  612.         voterocked=get_gametime()
  613.     }
  614.     else
  615.     {
  616.         new mapname[32]
  617.         get_cvar_string("qq_lastmap",mapname,31)
  618.         set_cvar_string("qq_lastlastmap",mapname)
  619.         get_mapname(mapname,31)
  620.         set_cvar_string("qq_lastmap",mapname)
  621.         client_print(0,print_chat,"[AMXX] A szavazás véget ért. A következő pálya a(z) %s lesz!",maps[winner[0]])
  622.         if(!voterocked2)
  623.         {
  624.             set_cvar_string("amx_nextmap",maps[winner[0]])
  625.             set_task(1.0,"change_level",winner[0],"",0,"d")
  626.         }
  627.         else
  628.         {
  629.             set_task(5.0,"change_level",winner[0])
  630.         }
  631.         format(cur_nextmap,31,"%s",maps[winner[0]])
  632.     }
  633.     for(new i=0;i<=32;i++) rtv[i]=false
  634.  
  635.     voterocked2=false
  636. }
  637.  
  638. public change_level(map)
  639. {
  640.     server_cmd("amx_map %s",maps[map])
  641. }
  642.  
  643. //From the AMXX nextmap base file
  644. public team_score()
  645. {
  646.     new team[2]
  647.     read_data(1,team,1)
  648.     g_teamScore[(team[0]=='C') ? 0 : 1] = read_data(2)
  649. }

Ők köszönték meg regener nek ezt a hozzászólást: elit (2015.12.27. 16:33)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole