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.
/* 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; }