hlmod.hu
https://hlmod.hu/

Deathrun free
https://hlmod.hu/viewtopic.php?f=10&t=17617
Oldal: 1 / 1

Szerző:  levo00 [2014.10.18. 18:20 ]
Hozzászólás témája:  Deathrun free

Sziasztok! ez lenne egy olyan ha beirja DR-en az illető hogy /free , /freeround akkor ugye a Terrorista kap fegyvert és ruli van! és valaki birná javítani? hogy ne kel jen szavazni rá hogy lehessen! köszi! ha megcsinálod megy a gomb! :)
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4.  
  5. #define PLUGIN "Free For All"
  6. #define AUTHOR "ConnorMcLeod"
  7. #define VERSION "1.0"
  8.  
  9. #define OFFSET_TEAM 114
  10. #define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)
  11. #define fm_set_user_team(%1,%2) set_pdata_int(%1,OFFSET_TEAM,%2)
  12.  
  13. new gmsgRadar
  14. new g_iMaxPlayers
  15. new mp_friendlyfire, g_iOldFFVal
  16. new HamHook:g_hTraceAttack, HamHook:g_hTakeDamage, HamHook:g_hKilled, g_mRadarHook
  17. new bool:g_bFFA
  18.  
  19. public plugin_init()
  20. {
  21. register_plugin( PLUGIN, VERSION, AUTHOR )
  22.  
  23. register_concmd("amx_set_ffa", "AdminCommand_SetFFA", ADMIN_CFG)
  24. register_clcmd("drawradar", "ClientCommand_DrawRadar") // not sure this is hookable but anyway Radar Msg is bloqued as well
  25.  
  26. g_iMaxPlayers = get_maxplayers()
  27. mp_friendlyfire = get_cvar_pointer("mp_friendlyfire")
  28. g_iOldFFVal = get_pcvar_num(mp_friendlyfire)
  29. gmsgRadar = get_user_msgid("Radar")
  30. }
  31.  
  32. public AdminCommand_SetFFA(id, level)
  33. {
  34. if( !(get_user_flags(id) & level) )
  35. {
  36. return PLUGIN_HANDLED
  37. }
  38.  
  39. if( read_argc() < 2 )
  40. {
  41. if( id )
  42. {
  43. client_print(id, print_console, "Hasznalat: amx_set_ffa <0|1>" )
  44. }
  45. else
  46. {
  47. server_print( "Hasznalat: amx_set_ffa <0|1>" )
  48. }
  49. }
  50. else
  51. {
  52. new szArg[3]
  53. read_argv(1, szArg, charsmax(szArg))
  54. if( g_bFFA && (szArg[0] == '0' || szArg[1] == 'f' || szArg[1] == 'F') )
  55. {
  56. set_pcvar_num(mp_friendlyfire, g_iOldFFVal)
  57. client_cmd(0, "drawradar")
  58. Register_Forwards((g_bFFA=false))
  59. }
  60. else if( !g_bFFA && (szArg[0] == '1' || szArg[1] == 'n' || szArg[1] == 'N') )
  61. {
  62. g_iOldFFVal = get_pcvar_num(mp_friendlyfire)
  63. set_pcvar_num(mp_friendlyfire, 1)
  64. client_cmd(0, "hideradar")
  65. Register_Forwards((g_bFFA=true))
  66. }
  67. }
  68.  
  69. if( id )
  70. {
  71. client_print(id, print_console, "FFA mod %s", g_bFFA ? "Bekapcsolva" : "Kikapcsolva" )
  72. }
  73. else
  74. {
  75. server_print( "FFA mod %s", g_bFFA ? "Bekapcsolva" : "Kikapcsolva" )
  76. }
  77. return PLUGIN_HANDLED
  78. }
  79.  
  80. public client_connect(id)
  81. {
  82. if( g_bFFA )
  83. {
  84. client_cmd(id, "hideradar")
  85. }
  86. }
  87.  
  88. public TraceAttack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
  89. {
  90. if( victim != attacker && (1 <= attacker <= g_iMaxPlayers) )
  91. {
  92. new vteam = fm_get_user_team(victim)
  93. if( vteam == fm_get_user_team(attacker) )
  94. {
  95. fm_set_user_team(victim, vteam == 1 ? 2 : 1)
  96. ExecuteHamB(Ham_TraceAttack, victim, attacker, damage, direction, tracehandle, damagebits)
  97. fm_set_user_team(victim, vteam)
  98. return HAM_SUPERCEDE
  99. }
  100. }
  101. return HAM_IGNORED
  102. }
  103.  
  104. public TakeDamage(victim, idinflictor, attacker, Float:damage, damagebits)
  105. {
  106. if( victim != attacker && (1 <= attacker <= g_iMaxPlayers) )
  107. {
  108. new vteam = fm_get_user_team(victim)
  109. if( vteam == fm_get_user_team(attacker) )
  110. {
  111. fm_set_user_team(victim, vteam == 1 ? 2 : 1)
  112. ExecuteHamB(Ham_TakeDamage, victim, idinflictor, attacker, damage, damagebits)
  113. fm_set_user_team(victim, vteam)
  114. return HAM_SUPERCEDE
  115. }
  116. }
  117. return HAM_IGNORED
  118. }
  119.  
  120. public Killed(victim, attacker, shouldgib)
  121. {
  122. if( victim != attacker && (1 <= attacker <= g_iMaxPlayers) )
  123. {
  124. new vteam = fm_get_user_team(victim)
  125. if( vteam == fm_get_user_team(attacker) )
  126. {
  127. fm_set_user_team(victim, vteam == 1 ? 2 : 1)
  128. ExecuteHamB(Ham_Killed, victim, attacker, shouldgib)
  129. fm_set_user_team(victim, vteam)
  130. return HAM_SUPERCEDE
  131. }
  132. }
  133. return HAM_IGNORED
  134. }
  135.  
  136. public Message_Radar(iMsgId, MSG_DEST, id)
  137. {
  138. return PLUGIN_HANDLED
  139. }
  140.  
  141. public ClientCommand_DrawRadar(id)
  142. {
  143. return _:g_bFFA
  144. }
  145.  
  146. Register_Forwards(bool:bState)
  147. {
  148. if(bState)
  149. {
  150. if( g_hTraceAttack )
  151. {
  152. EnableHamForward( g_hTraceAttack )
  153. }
  154. else
  155. {
  156. g_hTraceAttack = RegisterHam(Ham_TraceAttack, "player", "TraceAttack")
  157. }
  158.  
  159. if( g_hTakeDamage )
  160. {
  161. EnableHamForward( g_hTakeDamage )
  162. }
  163. else
  164. {
  165. g_hTakeDamage = RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
  166. }
  167.  
  168. if( g_hKilled )
  169. {
  170. EnableHamForward( g_hKilled )
  171. }
  172. else
  173. {
  174. g_hKilled = RegisterHam(Ham_Killed, "player", "Killed")
  175. }
  176.  
  177. if( !g_mRadarHook )
  178. {
  179. g_mRadarHook = register_message( gmsgRadar, "Message_Radar")
  180. }
  181. }
  182. else
  183. {
  184. if( g_hTraceAttack )
  185. {
  186. DisableHamForward( g_hTraceAttack )
  187. }
  188.  
  189. if( g_hTakeDamage )
  190. {
  191. DisableHamForward( g_hTakeDamage )
  192. }
  193.  
  194. if( g_hKilled )
  195. {
  196. DisableHamForward( g_hKilled )
  197. }
  198.  
  199. if( g_mRadarHook )
  200. {
  201. unregister_message(gmsgRadar, g_mRadarHook)
  202. g_mRadarHook = 0
  203. }
  204. }
  205. }

Szerző:  TraneTommy [2014.12.21. 19:31 ]
Hozzászólás témája:  Re: Deathrun free

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

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/