Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Wklejka mw5no6sslw0c dodana przez speedkill, 04.12.2012 20:13
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715.
/* Manager of Buttons for DeathRun Licence: GPL Description: Allow admin to define how many times every button could be used by Menu. Add to game (cvar controlled) FreeRun mode - during round with FR traps can`t be used by defined teams (default Te). */ #include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <fakemeta> #include <colorchat> #define PLUGIN "Use button once" #define VERSION "1.32" #define AUTHOR "R3X" #define MAX_BUTTONS 100 #define KeysButtonsMenu (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 137890 #define KeysOptionsMenu (1<<0)|(1<<1)|(1<<8) //129 #define KeysDelayMenu (1<<0)|(1<<1)|(1<<2)|(1<<8) //1239 #define ANNOUNCE_TASK 10000 #define m_flWait 44 //Main new gEnt[MAX_BUTTONS]; new gUsed[MAX_BUTTONS]; new giPointer=0; new gOnStart[MAX_BUTTONS]; new Float:gDefaultDelay[MAX_BUTTONS]; new Float:gDelay[MAX_BUTTONS]; new gInMenu[33]; new gszFile[128]; new giSprite; new gcvarDefault, gcvarTeam, gcvarFreeRun; new gcvarLimit, gcvarLimitMode, gcvarPrivilege; new gcvarMessage, gcvarRestore; new gcvarDelayOverwrite; new gcvarAllowCtVote; //VOTE #define TASK_SHOWMENU 432 #define TASK_RES 123 #define MAX_ROUNDS 999 #define KeysFFVote (1<<0)|(1<<1) // Keys: 12 new gcvarFRVoteTime; new giVoteStart, giVoteTime; new bool:gbFreeRun=false; new bool:gbVote=false; #define VOTE_ON 0 #define VOTE_OFF 1 new giVotes[33][2]; new giRounds=MAX_ROUNDS, giTime=0; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_dictionary("common.txt"); register_dictionary("adminvote.txt"); register_dictionary("use_button_once.txt"); register_menucmd(register_menuid("FRVote"), KeysFFVote, "PressedFRVote"); register_menucmd(register_menuid("ButtonsMenu"), KeysButtonsMenu, "PressedButtonsMenu"); register_menucmd(register_menuid("OptionsMenu"), KeysOptionsMenu, "PressedOptionsMenu"); register_menucmd(register_menuid("DelayMenu"), KeysDelayMenu, "PressedDelayMenu"); register_clcmd("amx_buttons","cmd_amx_buttons",ADMIN_CFG,": Buttons Menu"); //Default count of uses gcvarDefault=register_cvar("amx_buttons_default","1"); //Who plugin analyze //0 - anyone(plugin disabled?) //1 - Te //2 - Ct //3 - Te+Ct gcvarTeam=register_cvar("amx_buttons_team","1"); //Enabled FreeRun mode? gcvarFreeRun=register_cvar("amx_buttons_freerun","1"); //Vote time gcvarFRVoteTime=register_cvar("amx_freerun_votetime","10"); //Type of limit //0 - enabled after 'amx_freerun_limit' rounds //1 - enabled after 'amx_freerun_limit' minutes gcvarLimitMode=register_cvar("amx_freerun_limit_mode","0"); //Size of Limit gcvarLimit=register_cvar("amx_freerun_limit","5"); //Interval of message gcvarMessage=register_cvar("amx_freerun_info","120.0",0,120.0); //Terrorist`s privilege //if he use /free FreeRun will start without vote, can he? gcvarPrivilege=register_cvar("amx_freerun_tt_privilege","1"); //restore buttons on new round gcvarRestore=register_cvar("amx_restore_buttons","1"); //overwrite each button delay gcvarDelayOverwrite=register_cvar("amx_override_delay","-1.0",0,-1.0); gcvarAllowCtVote=register_cvar("amx_allow_ct_vote","1"); register_clcmd("say /free","cmdVoteFreeRun"); register_clcmd("say_team /free","cmdVoteFreeRun"); register_clcmd("say free","cmdVoteFreeRun"); register_clcmd("say_team free","cmdVoteFreeRun"); register_clcmd("say /freerun","cmdVoteFreeRun"); register_clcmd("say_team /freerun","cmdVoteFreeRun"); register_clcmd("say freerun","cmdVoteFreeRun"); register_clcmd("say_team freerun","cmdVoteFreeRun"); register_clcmd("say /fr","cmdVoteFreeRun"); register_clcmd("say_team /fr","cmdVoteFreeRun"); register_clcmd("say fr","cmdVoteFreeRun"); register_clcmd("say_team fr","cmdVoteFreeRun"); if( engfunc(EngFunc_FindEntityByString,-1 ,"classname", "func_button")) RegisterHam(Ham_Use, "func_button", "fwButtonUsed"); if(engfunc(EngFunc_FindEntityByString,-1 ,"classname","func_rot_button")) RegisterHam(Ham_Use, "func_rot_button", "fwButtonUsed"); if(engfunc(EngFunc_FindEntityByString,-1 ,"classname", "button_target")) RegisterHam(Ham_Use, "button_target", "fwButtonUsed"); register_logevent( "ResetButtons", 2, "0=World triggered", "1=Round_Start"); fillButtons("func_button"); fillButtons("func_rot_button"); fillButtons("button_target"); } public plugin_cfg(){ setButtons(); new iLen=0, iMax=charsmax(gszFile); iLen=get_configsdir(gszFile, iMax ); iLen+=copy(gszFile[iLen], iMax-iLen, "/dr_buttons/"); if(!dir_exists(gszFile)){ set_fail_state("Not found dir: configs/dr_buttons"); return; } new szMap[32]; get_mapname(szMap, 31); formatex(gszFile[iLen], charsmax(gszFile)-iLen, "%s.ini", szMap); if(!file_exists(gszFile)){ return; } new szLine[51]; new szButton[4], szTimes[3], szDelay[5]; new Float:fDelay; for(new i=0;read_file(gszFile, i, szLine, 50, iLen);i++){ if(iLen==0) continue; trim(szLine); if(szLine[0]==';') continue; szButton[0]='^0'; szTimes[0]='^0'; szDelay[0]='^0'; parse(szLine, szButton, 3, szTimes, 2, szDelay, 4); fDelay=szDelay[0]?str_to_float(szDelay):get_pcvar_float(gcvarDelayOverwrite); set_start_value(str_to_num(szButton), str_to_num(szTimes), fDelay); log_amx("%d %d %.1f",str_to_num(szButton), str_to_num(szTimes), fDelay); } new Float:fInterval=get_pcvar_float(gcvarMessage); if(fInterval > 0.0) set_task(120.0, "announceVote",ANNOUNCE_TASK,_,_,"b"); } public plugin_precache(){ giSprite=precache_model("sprites/flare1.spr"); } public client_putinserver(id){ if(!is_user_bot(id)) eventInGame(id); } public client_connect(id){ giVotes[id][VOTE_ON]=0; giVotes[id][VOTE_OFF]=0; } public announceVote(){ if(get_pcvar_num(gcvarFreeRun)) ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER, "ANNOUNCE"); } setButtons(){ new iDef=get_pcvar_num(gcvarDefault); for(new i=0;i<giPointer;i++){ gUsed[i]=iDef; gOnStart[i]=iDef; gDelay[i]=get_pcvar_float(gcvarDelayOverwrite); if(gDelay[i] == -1) gDelay[i]=get_pdata_float(gEnt[i],m_flWait); gDefaultDelay[i]=gDelay[i]; } } fillButtons(const szClass[]){ new ent = -1; while((ent = engfunc(EngFunc_FindEntityByString,ent ,"classname", szClass)) != 0){ gEnt[giPointer++]=ent; set_pev(ent, pev_iuser4, giPointer); } } set_start_value(ent, times, Float:delay){ new index=get_ent_index(ent); if(index!=-1){ gOnStart[index]=times; if(delay>=0.0) gDelay[index]=delay; } } get_ent_index(ent){ /* for(new i=0;i<giPointer;i++) if(gEnt[i]==ent) return i; return -1; */ return pev(ent, pev_iuser4)-1; } restoreButton(ent){ if(pev(ent, pev_frame) > 0.0){ new Float:Life; pev(ent, pev_nextthink, Life); set_pev(ent, pev_ltime, Life-0.01); } } public ResetButtons(){ gbFreeRun=false; gbVote=false; new bool:bRestore=get_pcvar_num(gcvarRestore)!=0; for(new i=0;i<MAX_BUTTONS;i++){ gUsed[i]=gOnStart[i]; if(bRestore){ restoreButton(gEnt[i]); } } giRounds++; } public fwButtonUsed(this, idcaller, idactivator, use_type, Float:value){ if(idcaller!=idactivator) return HAM_IGNORED; if(pev(this, pev_frame) > 0.0) return HAM_IGNORED; new index=get_ent_index(this); if(index==-1) return HAM_IGNORED; if(get_user_team(idcaller)&get_pcvar_num(gcvarTeam)){ if(gbFreeRun){ ColorChat(idcaller,GREEN, "[FreeRun]^x01 %L",idcaller, "BUTTON_FREERUN"); return HAM_SUPERCEDE; } else if(gUsed[index]<=0 && gOnStart[index]!=-1){ ColorChat(idcaller,GREEN, "[Info]^x01 %L",idcaller,"BUTTON_NOMORE"); return HAM_SUPERCEDE; } else{ if(gUsed[index]>0) if(--gUsed[index]){ ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_LEFT", gUsed[index]); }else ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_ENDOFLIMIT"); } } set_task(0.1,"setDelay",this); return HAM_IGNORED; } public setDelay(this){ new index=get_ent_index(this); if(gDelay[index] < 0.0) return; new Float:fLTime; pev(this, pev_ltime, fLTime); set_pev(this, pev_nextthink, fLTime+gDelay[index]+0.01); } //MENU-------------- public cmd_amx_buttons(id, level, cid){ if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED; if(giPointer==0) client_print(id, print_chat, "%L", id,"NO_BUTTONS"); else ShowButtonsMenu(id); return PLUGIN_HANDLED; } ShowButtonsMenu(id, trace=1){ if(!is_user_alive(id)){ client_print(id, print_center, "%L",id, "MUST_B_ALIVE"); return; } new iNow=gInMenu[id]; new iKeys=(1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9); new szMenu[196], iLen, iMax=(sizeof szMenu) - 1; new szNoLimit[32]; formatex(szNoLimit,31,"(%L)",id,"NOLIMIT"); iLen=copy(szMenu, iMax,"yButtons Menu^n"); iLen+=formatex(szMenu[iLen], iMax-iLen,"wEnt#%d^n^n",gEnt[iNow]); iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %d %s^ny1w. %L ",id, "USAGE",gOnStart[iNow],(gOnStart[iNow]==-1)?szNoLimit:"", id, "MORE"); if(gOnStart[iNow]>=0){ iLen+=formatex(szMenu[iLen], iMax-iLen,"y2w. %L",id, "WORD_LESS"); iKeys|=(1<<1); }else iLen+=formatex(szMenu[iLen], iMax-iLen,"d2. %Lw",id,"WORD_LESS"); iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n3. %L^n^n4. %L^n^n",id, "DELAY_EDITOR",id,"OPTIONS"); iLen+=formatex(szMenu[iLen], iMax-iLen,"5. %sNo Clipw^n",isNoClip(id)?"r":""); iLen+=formatex(szMenu[iLen], iMax-iLen,"6. %sGodModew^n",isGodMode(id)?"r":""); iLen+=formatex(szMenu[iLen], iMax-iLen,"^n7. r%L^nw",id, "WORD_SAVE"); if(iNow>0){ iLen+=formatex(szMenu[iLen], iMax-iLen,"^n8. %L",id, "BACK"); iKeys|=(1<<7); } if(iNow<giPointer-1){ iLen+=formatex(szMenu[iLen], iMax-iLen,"^n9. %L",id, "WORD_NEXT"); iKeys|=(1<<8); } iLen+=formatex(szMenu[iLen], iMax-iLen,"^n0. %L", id, "EXIT"); show_menu(id, iKeys, szMenu, -1, "ButtonsMenu"); if(trace){ new Float:fOrigin[3], Float:fOrigin2[3]; fm_get_brush_entity_origin(gEnt[gInMenu[id]], fOrigin); pev(id, pev_origin, fOrigin2); Create_TE_BEAMPOINTS(fOrigin, fOrigin2, giSprite, 0, 10, 20, 5, 1, 255, 0, 0, 100, 50); } } bool:isNoClip(id) return pev(id, pev_movetype)==MOVETYPE_NOCLIP; bool:isGodMode(id) return pev(id, pev_takedamage)==0.0; public PressedButtonsMenu(id, key) { if(!is_user_alive(id)){ client_print(id, print_center, "%L",id,"MUST_B_ALIVE"); return; } /* Menu: * Buttons Menu * Ent#<ent> * * Uzyc: <ile> * 1. Wiecej 2. Mniej * * 3. Editor * * 4. Options * * 5. NoClip * 6. GodMode * * 7. Zapisz * * 8. Poprzedni * 9. Nastepny * 0. Wyjdz */ new trace=0; switch (key) { case 0: { // 1 gOnStart[gInMenu[id]]++; } case 1: { // 2 gOnStart[gInMenu[id]]--; } case 2: { // 3 ShowDelayMenu(id); return; } case 3:{ //4 ShowOptionsMenu(id); return; } case 4:{ //5 set_pev(id, pev_movetype, isNoClip(id)?MOVETYPE_WALK:MOVETYPE_NOCLIP); } case 5:{ //6 set_pev(id, pev_takedamage, isGodMode(id)?1.0:0.0); } case 6: { // 7 save2File(id); } case 7: { // 8 gInMenu[id]--; trace=1; } case 8: { // 9 gInMenu[id]++; trace=1; } case 9: { // 0 return; } } ShowButtonsMenu(id, trace); } //-------------- ShowOptionsMenu(id){ if(!is_user_alive(id)){ client_print(id, print_center, "%L",id,"MUST_B_ALIVE"); return; } new szMenu[196], iLen, iMax=(sizeof szMenu) - 1; iLen+=formatex(szMenu[iLen], iMax-iLen,"yOptions^n^n"); iLen+=formatex(szMenu[iLen], iMax-iLen,"w1. %L^n",id, "GOTO"); iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L^n^n",id, "NEAREST"); iLen+=formatex(szMenu[iLen], iMax-iLen,"9. %L",id, "BACK"); show_menu(id, KeysOptionsMenu, szMenu, -1, "OptionsMenu"); } public PressedOptionsMenu(id, key){ if(!is_user_alive(id)){ client_print(id, print_center, "%L",id,"MUST_B_ALIVE"); return; } new trace=0; switch (key) { case 0: { // 1 go2Button(id); } case 1: { // 2 gInMenu[id]=findTheClosest(id); trace=1; } } ShowButtonsMenu(id, trace); } //------------- ShowDelayMenu(id){ if(!is_user_alive(id)){ client_print(id, print_center, "%L",id,"MUST_B_ALIVE"); return; } new iNow=gInMenu[id]; new iKeys=(1<<0)|(1<<2)|(1<<8); new szMenu[196], iLen, iMax=(sizeof szMenu) - 1; iLen=copy(szMenu, iMax,"yDelay Menu^n"); iLen+=formatex(szMenu[iLen], iMax-iLen,"wEnt#%d^n^n",gEnt[iNow]); iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %.1f^n",id, "CURRENT_DELAY", gDelay[iNow]); iLen+=formatex(szMenu[iLen], iMax-iLen,"y1w. %L ",id, "MORE"); if(gDelay[iNow]>0.0){ iLen+=formatex(szMenu[iLen], iMax-iLen,"y2w. %L",id, "WORD_LESS"); iKeys|=(1<<1); }else iLen+=formatex(szMenu[iLen], iMax-iLen,"d2. %Lw",id,"WORD_LESS"); iLen+=formatex(szMenu[iLen], iMax-iLen,"^n3. %L",id, "DEFAULT"); iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n9. %L",id, "BACK"); show_menu(id, iKeys, szMenu, -1, "DelayMenu"); } public PressedDelayMenu(id, key){ new iNow=gInMenu[id]; switch(key){ case 0:{ gDelay[iNow]+=1.0; } case 1:{ gDelay[iNow]-=1.0; if(gDelay[iNow] < 0.0) gDelay[iNow]=0.0; } case 2:{ gDelay[iNow]=gDefaultDelay[iNow]; } case 8:{ ShowButtonsMenu(id, 0); return; } } ShowDelayMenu(id); } //------------- save2File(id){ if(file_exists(gszFile)) delete_file(gszFile); write_file(gszFile, ";<ent> <count> <delay>"); new szLine[35]; for(new i=0;i<giPointer;i++){ formatex(szLine, 34, "%d %d %.1f",gEnt[i], gOnStart[i], gDelay[i]); write_file(gszFile, szLine); } client_print(id, print_center, "%L!",id,"WORD_SAVED"); } findTheClosest(id){ new Float:fPlayerOrig[3]; pev(id, pev_origin, fPlayerOrig); new Float:fOrigin[3]; fm_get_brush_entity_origin(gEnt[0], fOrigin); new Float:fRange=get_distance_f(fOrigin, fPlayerOrig), index=0; new Float:fNewRange; for(new i=1;i<giPointer;i++){ fm_get_brush_entity_origin(gEnt[i], fOrigin); fNewRange=get_distance_f( fOrigin, fPlayerOrig); if(fNewRange < fRange){ fRange=fNewRange; index=i; } } return index; } go2Button(id, ent=-1){ if(ent==-1) ent=gInMenu[id]; ent=gEnt[ent]; if(!pev_valid(ent)){ client_print(id, print_center, "%L",id,"NOTARGET"); return; } new Float:fOrigin[3]; fm_get_brush_entity_origin(ent, fOrigin); set_pev(id, pev_origin, fOrigin); client_print(id, print_chat, "PS. No Clip :)"); } //FreeRun public cmdVoteFreeRun(id){ if(get_pcvar_num(gcvarFreeRun)==0){ ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_DISABLED"); return PLUGIN_HANDLED; } if(gbVote){ ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_VOTE_IS_NOW"); return PLUGIN_HANDLED; } if(!is_user_alive(id)){ client_print(id, print_center, "%L",id, "MUST_B_ALIVE"); return PLUGIN_HANDLED; } if(get_pcvar_num(gcvarPrivilege)!=0 && !gbFreeRun && get_user_team(id)==1){ ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_TT_DECIDED"); makeFreeRun(true); return PLUGIN_HANDLED; } if(get_pcvar_num(gcvarAllowCtVote)==0) return PLUGIN_CONTINUE; new iLimit=get_pcvar_num(gcvarLimit); new iOffset=0; if(get_pcvar_num(gcvarLimitMode)){ iOffset = ( giTime + iLimit * 60 ) - get_systime(); if( iOffset > 0 ){ ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_TIME", iOffset/60, iOffset%60); return PLUGIN_HANDLED; } } else{ iOffset = min(MAX_ROUNDS, iLimit) - giRounds; if( iOffset > 0 ){ ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_ROUNDS", iOffset); return PLUGIN_HANDLED; } } makeVote(); return PLUGIN_CONTINUE; } //FREERUN public makeVote(){ giVoteTime=get_pcvar_num(gcvarFRVoteTime); gbVote=true; giVoteStart=get_systime(); set_task(float(giVoteTime), "resultsOfVote", TASK_RES); new Players[32], playerCount; new id; get_players(Players, playerCount); for (new i=0; i<playerCount; i++){ id = Players[i]; eventInGame(id); } } public resultsOfVote(tid){ gbVote=false; new giVotesOn=count(VOTE_ON); new giVotesOff=count(VOTE_OFF); ColorChat(0,GREEN, "[FreeRun]^x01 %L %L(%d) vs %L(%d)",LANG_SERVER,"FREERUN_RESULTS",LANG_SERVER,"YES",giVotesOn,LANG_SERVER,"NO", giVotesOff); if( giVotesOn == giVotesOff ){ ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER,"FREERUN_TIE"); return; } makeFreeRun((giVotesOn > giVotesOff)); ColorChat(0,GREEN, "[FreeRun]^x01 %L ^x03%L",LANG_SERVER,"FREERUN_WINOPTION",LANG_SERVER, gbFreeRun?"YES":"NO"); } makeFreeRun(bool:bFR=true){ gbFreeRun=bFR; reset(); giRounds=0; giTime=get_systime(); if(gbFreeRun){ set_task(1.0, "ShowFree",.flags="b"); } } public ShowFree(){ if(gbFreeRun){ set_hudmessage(0, 255, 255, 0.02, -1.0, 0, 6.0, 1.0); show_hudmessage(0, "FreeRun!"); } } count(VOTE_STATE){ new iCounter=0; for(new i=1;i<33;i++) if(giVotes[i][VOTE_STATE]) iCounter++; return iCounter; } reset(){ for(new i=1;i<33;i++){ giVotes[i][VOTE_ON]=0; giVotes[i][VOTE_OFF]=0; } } public show_menu_(tid){ new id=tid-TASK_SHOWMENU; new iTeam=get_user_team(id); new menu_id, keys; new menuUp = player_menu_info( id, menu_id, keys ); // Only display menu if another isn't shown if ( iTeam && (menuUp <= 0 || menu_id < 0) ){ new iTime=get_pcvar_num(gcvarFRVoteTime); new iOffset=get_systime()-giVoteStart; iTime-=iOffset; new szMenu[128]; formatex(szMenu, 127, "y%L^n^nw1. %L^n2. %L",id,"FREERUN_VOTEMENU",id,"YES",id,"NO"); show_menu(id, KeysFFVote, szMenu, iTime, "FRVote"); }else set_task(1.0, "show_menu_", tid); } public eventInGame(id){ if(giVotes[id][VOTE_ON] || giVotes[id][VOTE_OFF]) return; if(gbVote) set_task(1.0, "show_menu_", id+TASK_SHOWMENU); } public PressedFRVote(id, key) { if(gbVote==false) return; switch (key) { case VOTE_ON: { // 1 giVotes[id][VOTE_ON]=1; } case VOTE_OFF: { // 2 giVotes[id][VOTE_OFF]=1; } default:{ return; } } new szName[32]; get_user_name(id, szName, 31); client_print(0, print_chat, "* %L",LANG_PLAYER,(key==VOTE_ON)?"VOTED_FOR":"VOTED_AGAINST", szName); } stock Create_TE_BEAMPOINTS(Float:start[3], Float:end[3], iSprite, startFrame, frameRate, life, width, noise, red, green, blue, alpha, speed){ message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_BEAMPOINTS ) write_coord( floatround(start[0]) ) write_coord( floatround(start[1]) ) write_coord( floatround(start[2]) ) write_coord( floatround(end[0]) ) write_coord( floatround(end[1]) ) write_coord( floatround(end[2]) ) write_short( iSprite ) // model write_byte( startFrame ) // start frame write_byte( frameRate ) // framerate write_byte( life ) // life write_byte( width ) // width write_byte( noise ) // noise write_byte( red) // red write_byte( green ) // green write_byte( blue ) // blue write_byte( alpha ) // brightness write_byte( speed ) // speed message_end() } stock fm_get_brush_entity_origin(ent, Float:fOrigin[3]){ new Float:fMins[3], Float:fMaxs[3]; pev(ent, pev_mins, fMins); pev(ent, pev_maxs, fMaxs); for(new i=0;i<3;i++) fOrigin[i]=(fMins[i]+fMaxs[i])/2; }
Dodanych wklejek: 10848
Powered By (Pav32) Pastebin © 2011