hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.16. 23:42



Jelenlévő felhasználók

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

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot]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: Deathrun free modban nincs fegyo
HozzászólásElküldve:2012.06.14. 14:24 
Offline
Jómunkásember

Csatlakozott:2011.07.14. 11:12
Hozzászólások:320
Megköszönt másnak: 1 alkalommal
Helló nekem azt kéne ebbe a pluginba beleírni

Kód:
  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.3"

  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.  

  50. //VOTE

  51.  

  52. #define TASK_SHOWMENU 432

  53. #define TASK_RES 123

  54.  

  55. #define MAX_ROUNDS 999

  56.  

  57. #define KeysFFVote (1<<0)|(1<<1) // Keys: 12

  58.  

  59. new gcvarFRVoteTime;

  60.  

  61. new giVoteStart, giVoteTime;

  62.  

  63. new bool:gbFreeRun=false;

  64. new bool:gbVote=false;

  65.  

  66. #define VOTE_ON 0

  67. #define VOTE_OFF 1

  68.  

  69. new giVotes[33][2];

  70.  

  71. new giRounds=MAX_ROUNDS, giTime=0;

  72.  

  73. public plugin_init() {

  74.         register_plugin(PLUGIN, VERSION, AUTHOR);

  75.        

  76.         register_dictionary("common.txt");

  77.         register_dictionary("adminvote.txt");

  78.         register_dictionary("use_button_once.txt");

  79.        

  80.         register_menucmd(register_menuid("FRVote"), KeysFFVote, "PressedFRVote");

  81.         register_menucmd(register_menuid("ButtonsMenu"), KeysButtonsMenu, "PressedButtonsMenu");

  82.         register_menucmd(register_menuid("OptionsMenu"), KeysOptionsMenu, "PressedOptionsMenu");

  83.         register_menucmd(register_menuid("DelayMenu"), KeysDelayMenu, "PressedDelayMenu");

  84.        

  85.         register_clcmd("amx_buttons","cmd_amx_buttons",ADMIN_CFG,": Buttons Menu");

  86.        

  87.         //Default count of uses

  88.         gcvarDefault=register_cvar("amx_buttons_default","1");

  89.         //Who plugin analyze

  90.         //0 - anyone(plugin disabled?)

  91.         //1 - Te

  92.         //2 - Ct

  93.         //3 - Te+Ct

  94.         gcvarTeam=register_cvar("amx_buttons_team","1");

  95.         //Enabled FreeRun mode?

  96.         gcvarFreeRun=register_cvar("amx_buttons_freerun","1");

  97.         //Vote time

  98.         gcvarFRVoteTime=register_cvar("amx_freerun_votetime","10");

  99.        

  100.         //Type of limit

  101.         //0 - enabled after 'amx_freerun_limit' rounds

  102.         //1 - enabled after 'amx_freerun_limit' minutes

  103.         gcvarLimitMode=register_cvar("amx_freerun_limit_mode","0");

  104.         //Size of Limit

  105.         gcvarLimit=register_cvar("amx_freerun_limit","5");

  106.        

  107.         //Interval of message

  108.         gcvarMessage=register_cvar("amx_freerun_info","120.0",0,120.0);

  109.        

  110.         //Terrorist`s privilege

  111.         //if he use /free FreeRun will start without vote, can he?

  112.         gcvarPrivilege=register_cvar("amx_freerun_tt_privilege","1");

  113.        

  114.         //restore buttons on new round

  115.         gcvarRestore=register_cvar("amx_restore_buttons","1");

  116.        

  117.         register_clcmd("say /free","cmdVoteFreeRun");

  118.         register_clcmd("say_team /free","cmdVoteFreeRun");

  119.         register_clcmd("say free","cmdVoteFreeRun");

  120.         register_clcmd("say_team free","cmdVoteFreeRun");

  121.        

  122.         register_clcmd("say /freerun","cmdVoteFreeRun");

  123.         register_clcmd("say_team /freerun","cmdVoteFreeRun");

  124.         register_clcmd("say freerun","cmdVoteFreeRun");

  125.         register_clcmd("say_team freerun","cmdVoteFreeRun");

  126.        

  127.         register_clcmd("say /fr","cmdVoteFreeRun");

  128.         register_clcmd("say_team /fr","cmdVoteFreeRun");

  129.         register_clcmd("say fr","cmdVoteFreeRun");

  130.         register_clcmd("say_team fr","cmdVoteFreeRun");

  131.        

  132.         if( engfunc(EngFunc_FindEntityByString,-1 ,"classname", "func_button"))

  133.                 RegisterHam(Ham_Use, "func_button", "fwButtonUsed");

  134.  

  135.         if(engfunc(EngFunc_FindEntityByString,-1 ,"classname","func_rot_button"))

  136.                 RegisterHam(Ham_Use, "func_rot_button", "fwButtonUsed");

  137.                

  138.         if(engfunc(EngFunc_FindEntityByString,-1 ,"classname", "button_target"))

  139.                 RegisterHam(Ham_Use, "button_target", "fwButtonUsed");

  140.                

  141.         register_logevent( "ResetButtons", 2, "0=World triggered", "1=Round_Start");

  142.        

  143.         fillButtons("func_button");

  144.         fillButtons("func_rot_button");

  145.         fillButtons("button_target");

  146. }

  147. public plugin_cfg(){

  148.         setButtons();

  149.        

  150.         new iLen=0, iMax=charsmax(gszFile);

  151.         iLen=get_configsdir(gszFile, iMax );

  152.         iLen+=copy(gszFile[iLen], iMax-iLen, "/dr_buttons/");

  153.        

  154.         if(!dir_exists(gszFile)){

  155.                 set_fail_state("Not found dir: configs/dr_buttons");

  156.                 return;

  157.         }

  158.         new szMap[32];

  159.         get_mapname(szMap, 31);

  160.         formatex(gszFile[iLen], charsmax(gszFile)-iLen, "%s.ini", szMap);

  161.         if(!file_exists(gszFile)){

  162.                 return;

  163.         }

  164.         new szLine[51];

  165.         new szButton[4], szTimes[3], szDelay[5];

  166.         new Float:fDelay;

  167.         for(new i=0;read_file(gszFile, i, szLine, 50, iLen);i++){

  168.                 if(iLen==0) continue;

  169.                 trim(szLine);

  170.                 if(szLine[0]==';') continue;

  171.                 parse(szLine, szButton, 3, szTimes, 2, szDelay, 4);

  172.                 fDelay=szDelay[0]?str_to_float(szDelay):-1.0;

  173.                 set_start_value(str_to_num(szButton), str_to_num(szTimes), fDelay);

  174.         }

  175.         new Float:fInterval=get_pcvar_float(gcvarMessage);

  176.         if(fInterval > 0.0)

  177.                 set_task(120.0, "announceVote",ANNOUNCE_TASK,_,_,"b");

  178. }

  179. public plugin_precache(){

  180.         giSprite=precache_model("sprites/flare1.spr");

  181.        

  182. }

  183. public client_putinserver(id){

  184.         if(!is_user_bot(id))

  185.                 eventInGame(id);

  186. }

  187. public client_connect(id){

  188.         giVotes[id][VOTE_ON]=0;

  189.         giVotes[id][VOTE_OFF]=0;

  190. }

  191. public announceVote(){

  192.         if(get_pcvar_num(gcvarFreeRun))

  193.                 ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER, "ANNOUNCE");

  194. }

  195. setButtons(){

  196.         new iDef=get_pcvar_num(gcvarDefault);

  197.         for(new i=0;i<giPointer;i++){

  198.                 gUsed[i]=iDef;

  199.                 gOnStart[i]=iDef;

  200.                 gDelay[i]=get_pdata_float(gEnt[i],m_flWait);

  201.                 gDefaultDelay[i]=gDelay[i];

  202.         }

  203. }

  204. fillButtons(const szClass[]){

  205.         new ent = -1;

  206.         while((ent = engfunc(EngFunc_FindEntityByString,ent ,"classname", szClass)) != 0){

  207.                 gEnt[giPointer++]=ent;

  208.                 set_pev(ent, pev_iuser4, giPointer);

  209.         }

  210. }

  211. set_start_value(ent, times, Float:delay){

  212.         new index=get_ent_index(ent);

  213.         if(index!=-1){

  214.                 gOnStart[index]=times;

  215.                 if(delay>=0.0)

  216.                         gDelay[index]=delay;

  217.         }

  218. }

  219. get_ent_index(ent){

  220.         /*

  221.         for(new i=0;i<giPointer;i++)

  222.                 if(gEnt[i]==ent) return i;

  223.         return -1;

  224.         */

  225.         return pev(ent, pev_iuser4)-1;

  226. }

  227. restoreButton(ent){

  228.         if(pev(ent, pev_frame) > 0.0){

  229.                 new Float:Life;

  230.                 pev(ent, pev_nextthink, Life);

  231.                 set_pev(ent, pev_ltime, Life-0.01);

  232.         }

  233. }

  234. public ResetButtons(){

  235.         gbFreeRun=false;

  236.         gbVote=false;

  237.         new bool:bRestore=get_pcvar_num(gcvarRestore)!=0;

  238.         for(new i=0;i<MAX_BUTTONS;i++){

  239.                 gUsed[i]=gOnStart[i];

  240.                 if(bRestore){

  241.                         restoreButton(gEnt[i]);

  242.                 }

  243.         }

  244.         giRounds++;

  245. }

  246. public fwButtonUsed(this, idcaller, idactivator, use_type, Float:value){

  247.         if(idcaller!=idactivator) return HAM_IGNORED;

  248.        

  249.         if(pev(this, pev_frame) > 0.0)

  250.                  return HAM_IGNORED;

  251.         new index=get_ent_index(this);

  252.         if(index==-1)

  253.                 return HAM_IGNORED;

  254.         if(get_user_team(idcaller)&get_pcvar_num(gcvarTeam)){

  255.                

  256.                 if(gbFreeRun){

  257.                         ColorChat(idcaller,GREEN, "[FreeRun]^x01 %L",idcaller, "BUTTON_FREERUN");

  258.                         return HAM_SUPERCEDE;

  259.                 }

  260.                 else if(gUsed[index]<=0 && gOnStart[index]!=-1){

  261.                         ColorChat(idcaller,GREEN, "[Info]^x01 %L",idcaller,"BUTTON_NOMORE");

  262.                         return HAM_SUPERCEDE;

  263.                 }

  264.                 else{

  265.                         if(gUsed[index]>0)

  266.                                 if(--gUsed[index]){

  267.                                         ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_LEFT", gUsed[index]);

  268.                                 }else

  269.                                         ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_ENDOFLIMIT");

  270.                 }

  271.         }

  272.        

  273.         set_task(0.1,"setDelay",this);

  274.        

  275.         return HAM_IGNORED;

  276. }

  277. public setDelay(this){

  278.         new index=get_ent_index(this);

  279.         set_pev(this, pev_nextthink, pev(this, pev_ltime)+gDelay[index]+0.01);

  280. }

  281.  

  282. //MENU--------------

  283. public cmd_amx_buttons(id, level, cid){

  284.         if(!cmd_access(id, level, cid, 1))

  285.                 return PLUGIN_HANDLED;

  286.         if(giPointer==0)

  287.                 client_print(id, print_chat, "%L", id,"NO_BUTTONS");

  288.         else

  289.                 ShowButtonsMenu(id);

  290.         return PLUGIN_HANDLED;

  291. }

  292. ShowButtonsMenu(id, trace=1){

  293.         if(!is_user_alive(id)){

  294.                 client_print(id, print_center, "%L",id, "MUST_B_ALIVE");

  295.                 return;

  296.         }

  297.         new iNow=gInMenu[id];

  298.         new iKeys=(1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);

  299.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  300.         new szNoLimit[32];

  301.         formatex(szNoLimit,31,"(%L)",id,"NOLIMIT");

  302.         iLen=copy(szMenu, iMax,"\yButtons Menu^n");

  303.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\wEnt#%d^n^n",gEnt[iNow]);

  304.         iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %d %s^n\y1\w. %L ",id, "USAGE",gOnStart[iNow],(gOnStart[iNow]==-1)?szNoLimit:"", id, "MORE");

  305.        

  306.         if(gOnStart[iNow]>=0){

  307.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\y2\w. %L",id, "WORD_LESS");

  308.                 iKeys|=(1<<1);

  309.         }else

  310.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\d2. %L\w",id,"WORD_LESS");

  311.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n3. %L^n^n4. %L^n^n",id, "DELAY_EDITOR",id,"OPTIONS");

  312.        

  313.         iLen+=formatex(szMenu[iLen], iMax-iLen,"5. %sNo Clip\w^n",isNoClip(id)?"\r":"");

  314.         iLen+=formatex(szMenu[iLen], iMax-iLen,"6. %sGodMode\w^n",isGodMode(id)?"\r":"");

  315.        

  316.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n7. \r%L^n\w",id, "WORD_SAVE");

  317.        

  318.         if(iNow>0){

  319.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"^n8. %L",id, "BACK");

  320.                 iKeys|=(1<<7);

  321.         }

  322.         if(iNow<giPointer-1){

  323.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"^n9. %L",id, "WORD_NEXT");

  324.                 iKeys|=(1<<8);

  325.         }

  326.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n0. %L", id, "EXIT");

  327.         show_menu(id, iKeys, szMenu, -1, "ButtonsMenu");

  328.         if(trace){

  329.                 new Float:fOrigin[3], Float:fOrigin2[3];

  330.                 fm_get_brush_entity_origin(gEnt[gInMenu[id]], fOrigin);

  331.                 pev(id, pev_origin, fOrigin2);

  332.                 Create_TE_BEAMPOINTS(fOrigin, fOrigin2, giSprite, 0, 10, 20, 5, 1, 255, 0, 0, 100, 50);

  333.         }

  334. }

  335. bool:isNoClip(id)

  336.         return pev(id, pev_movetype)==MOVETYPE_NOCLIP;

  337.        

  338. bool:isGodMode(id)

  339.         return pev(id, pev_takedamage)==0.0;

  340.        

  341. public PressedButtonsMenu(id, key) {

  342.         if(!is_user_alive(id)){

  343.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  344.                 return;

  345.         }

  346.         /* Menu:

  347.         * Buttons Menu

  348.         * Ent#<ent>

  349.         *

  350.         * Uzyc: <ile>

  351.         * 1. Wiecej 2. Mniej

  352.         *

  353.         * 3. Editor

  354.         *

  355.         * 4. Options

  356.         *

  357.         * 5. NoClip

  358.         * 6. GodMode

  359.         *

  360.         * 7. Zapisz

  361.         *

  362.         * 8. Poprzedni

  363.         * 9. Nastepny

  364.         * 0. Wyjdz

  365.         */

  366.         new trace=0;

  367.         switch (key) {

  368.                 case 0: { // 1

  369.                         gOnStart[gInMenu[id]]++;

  370.                 }

  371.                 case 1: { // 2

  372.                         gOnStart[gInMenu[id]]--;

  373.                 }

  374.                 case 2: { // 3

  375.                         ShowDelayMenu(id);

  376.                         return;

  377.                 }

  378.                 case 3:{ //4

  379.                         ShowOptionsMenu(id);

  380.                         return;

  381.                 }

  382.                 case 4:{ //5

  383.                         set_pev(id, pev_movetype, isNoClip(id)?MOVETYPE_WALK:MOVETYPE_NOCLIP)

  384.                 }

  385.                 case 5:{ //6

  386.                         set_pev(id, pev_takedamage, isGodMode(id)?1.0:0.0);

  387.                 }

  388.                 case 6: { // 7

  389.                         save2File(id);

  390.                 }

  391.                 case 7: { // 8

  392.                         gInMenu[id]--;

  393.                         trace=1;

  394.                 }

  395.                 case 8: { // 9

  396.                         gInMenu[id]++;

  397.                         trace=1;

  398.                 }

  399.                 case 9: { // 0

  400.                         return;

  401.                 }

  402.         }

  403.         ShowButtonsMenu(id, trace);

  404. }

  405. //--------------

  406. ShowOptionsMenu(id){

  407.         if(!is_user_alive(id)){

  408.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  409.                 return;

  410.         }

  411.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  412.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\yOptions^n^n");

  413.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\w1. %L^n",id, "GOTO");

  414.         iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L^n^n",id, "NEAREST");

  415.         iLen+=formatex(szMenu[iLen], iMax-iLen,"9. %L",id, "BACK");

  416.         show_menu(id, KeysOptionsMenu, szMenu, -1, "OptionsMenu");

  417. }

  418. public PressedOptionsMenu(id, key){

  419.         if(!is_user_alive(id)){

  420.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  421.                 return;

  422.         }

  423.         new trace=0;

  424.         switch (key) {

  425.                 case 0: { // 1

  426.                         go2Button(id);

  427.                 }

  428.                 case 1: { // 2

  429.                         gInMenu[id]=findTheClosest(id);

  430.                         trace=1;

  431.                 }

  432.         }

  433.         ShowButtonsMenu(id, trace);

  434. }

  435. //-------------

  436. ShowDelayMenu(id){

  437.         if(!is_user_alive(id)){

  438.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  439.                 return;

  440.         }

  441.         new iNow=gInMenu[id];

  442.         new iKeys=(1<<0)|(1<<2)|(1<<8);

  443.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  444.         iLen=copy(szMenu, iMax,"\yDelay Menu^n");

  445.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\wEnt#%d^n^n",gEnt[iNow]);

  446.         iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %.1f^n",id, "CURRENT_DELAY", gDelay[iNow]);

  447.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\y1\w. %L ",id, "MORE");

  448.         if(gDelay[iNow]>0.0){

  449.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\y2\w. %L",id, "WORD_LESS");

  450.                 iKeys|=(1<<1);

  451.         }else

  452.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\d2. %L\w",id,"WORD_LESS");

  453.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n3. %L",id, "DEFAULT");

  454.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n9. %L",id, "BACK");

  455.         show_menu(id, iKeys, szMenu, -1, "DelayMenu");

  456. }

  457. public PressedDelayMenu(id, key){

  458.         new iNow=gInMenu[id];

  459.         switch(key){

  460.                 case 0:{

  461.                         gDelay[iNow]+=1.0;

  462.                 }

  463.                 case 1:{

  464.                         gDelay[iNow]-=1.0;

  465.                         if(gDelay[iNow] < 0.0)

  466.                                 gDelay[iNow]=0.0;

  467.                 }

  468.                 case 2:{

  469.                         gDelay[iNow]=gDefaultDelay[iNow];

  470.                 }

  471.                 case 8:{

  472.                         ShowButtonsMenu(id, 0);

  473.                         return;

  474.                 }

  475.         }

  476.         ShowDelayMenu(id);

  477. }

  478. //-------------

  479. save2File(id){

  480.         if(file_exists(gszFile))

  481.                 delete_file(gszFile);

  482.         write_file(gszFile, ";<ent> <count> <delay>");

  483.         new szLine[35];

  484.         for(new i=0;i<giPointer;i++){

  485.                 formatex(szLine, 34, "%d %d %.1f",gEnt[i], gOnStart[i], gDelay[i]);

  486.                 write_file(gszFile, szLine);

  487.         }

  488.         client_print(id, print_center, "%L!",id,"WORD_SAVED");

  489. }

  490. findTheClosest(id){

  491.         new Float:fPlayerOrig[3];

  492.         pev(id, pev_origin, fPlayerOrig);

  493.         new Float:fOrigin[3];

  494.         fm_get_brush_entity_origin(gEnt[0], fOrigin);

  495.        

  496.         new Float:fRange=get_distance_f(fOrigin, fPlayerOrig), index=0;

  497.         new Float:fNewRange;

  498.         for(new i=1;i<giPointer;i++){

  499.                 fm_get_brush_entity_origin(gEnt[i], fOrigin);

  500.                 fNewRange=get_distance_f( fOrigin,  fPlayerOrig);

  501.                 if(fNewRange < fRange){

  502.                         fRange=fNewRange;

  503.                         index=i;

  504.                 }

  505.         }

  506.         return index;

  507. }

  508. go2Button(id, ent=-1){

  509.         if(ent==-1)

  510.                 ent=gInMenu[id];

  511.         ent=gEnt[ent];

  512.         if(!pev_valid(ent)){

  513.                 client_print(id, print_center, "%L",id,"NOTARGET");

  514.                 return;

  515.         }

  516.         new Float:fOrigin[3];

  517.         fm_get_brush_entity_origin(ent, fOrigin);

  518.         set_pev(id, pev_origin, fOrigin);

  519.         client_print(id, print_chat, "PS. No Clip :)");

  520. }

  521. //FreeRun

  522. public cmdVoteFreeRun(id){

  523.         if(get_pcvar_num(gcvarFreeRun)==0){

  524.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_DISABLED");

  525.                 return PLUGIN_HANDLED;

  526.         }

  527.         if(gbVote){

  528.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_VOTE_IS_NOW");

  529.                 return PLUGIN_HANDLED;

  530.         }

  531.         if(!is_user_alive(id)){

  532.                 client_print(id, print_center, "%L",id, "MUST_B_ALIVE");

  533.                 return PLUGIN_HANDLED;

  534.         }

  535.         if(get_pcvar_num(gcvarPrivilege)!=0 && !gbFreeRun && get_user_team(id)==1){

  536.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_TT_DECIDED");

  537.                 makeFreeRun(true);

  538.                 return PLUGIN_HANDLED;

  539.         }

  540.         new iLimit=get_pcvar_num(gcvarLimit);

  541.         new iOffset=0;

  542.         if(get_pcvar_num(gcvarLimitMode)){

  543.                 iOffset = ( giTime + iLimit * 60 )  - get_systime();

  544.                 if( iOffset > 0 ){

  545.                         ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_TIME", iOffset/60, iOffset%60);

  546.                         return PLUGIN_HANDLED;

  547.                 }

  548.         }

  549.         else{

  550.                 iOffset =  min(MAX_ROUNDS, iLimit) - giRounds;

  551.                 if( iOffset > 0 ){

  552.                         ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_ROUNDS", iOffset);

  553.                         return PLUGIN_HANDLED;

  554.                 }

  555.         }

  556.        

  557.         makeVote();

  558.         return PLUGIN_CONTINUE;

  559. }

  560. //FREERUN

  561. public makeVote(){

  562.         giVoteTime=get_pcvar_num(gcvarFRVoteTime);

  563.         gbVote=true;

  564.         giVoteStart=get_systime();

  565.         set_task(float(giVoteTime), "resultsOfVote", TASK_RES);

  566.         new Players[32], playerCount;

  567.         new id;

  568.         get_players(Players, playerCount);

  569.         for (new i=0; i<playerCount; i++){

  570.                 id = Players[i];

  571.                 eventInGame(id);

  572.         }

  573.        

  574. }

  575. public resultsOfVote(tid){

  576.         gbVote=false;

  577.        

  578.         new giVotesOn=count(VOTE_ON);

  579.         new giVotesOff=count(VOTE_OFF);

  580.        

  581.         ColorChat(0,GREEN, "[FreeRun]^x01 %L %L(%d) vs %L(%d)",LANG_SERVER,"FREERUN_RESULTS",LANG_SERVER,"YES",giVotesOn,LANG_SERVER,"NO", giVotesOff);

  582.        

  583.         if( giVotesOn == giVotesOff ){

  584.                 ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER,"FREERUN_TIE");

  585.                 return;

  586.         }

  587.         makeFreeRun((giVotesOn > giVotesOff));

  588.         ColorChat(0,GREEN, "[FreeRun]^x01 %L ^x03%L",LANG_SERVER,"FREERUN_WINOPTION",LANG_SERVER, gbFreeRun?"YES":"NO");

  589. }

  590. makeFreeRun(bool:bFR=true){

  591.         gbFreeRun=bFR;

  592.         reset();

  593.         giRounds=0;

  594.         giTime=get_systime();

  595.        

  596.         if(gbFreeRun){

  597.                 set_hudmessage(0, 255, 255, 0.02, -1.0);

  598.                 show_hudmessage(0, "FreeRun!");

  599.         }

  600.        

  601. }

  602. count(VOTE_STATE){

  603.         new iCounter=0;

  604.         for(new i=1;i<33;i++)

  605.                 if(giVotes[i][VOTE_STATE])

  606.                         iCounter++;

  607.         return iCounter;

  608. }

  609. reset(){

  610.         for(new i=1;i<33;i++){

  611.                 giVotes[i][VOTE_ON]=0;

  612.                 giVotes[i][VOTE_OFF]=0;

  613.         }

  614. }

  615. public show_menu_(tid){

  616.         new id=tid-TASK_SHOWMENU;

  617.         new iTeam=get_user_team(id);

  618.         new menu_id, keys;

  619.         new menuUp = player_menu_info( id, menu_id, keys );

  620.         // Only display menu if another isn't shown

  621.         if ( iTeam && (menuUp <= 0 || menu_id < 0) ){

  622.                 new iTime=get_pcvar_num(gcvarFRVoteTime);

  623.                 new iOffset=get_systime()-giVoteStart;

  624.                 iTime-=iOffset;

  625.                 new szMenu[128];

  626.                 formatex(szMenu, 127, "\y%L^n^n\w1. %L^n2. %L",id,"FREERUN_VOTEMENU",id,"YES",id,"NO");

  627.                 show_menu(id, KeysFFVote, szMenu, iTime, "FRVote");

  628.         }else

  629.                 set_task(1.0, "show_menu_", tid);

  630. }

  631. public eventInGame(id){

  632.         if(giVotes[id][VOTE_ON] || giVotes[id][VOTE_OFF])

  633.                 return;

  634.         if(gbVote)

  635.                 set_task(1.0, "show_menu_", id+TASK_SHOWMENU);

  636. }

  637. public PressedFRVote(id, key) {

  638.         if(gbVote==false) return;

  639.         switch (key) {

  640.                 case VOTE_ON: { // 1

  641.                         giVotes[id][VOTE_ON]=1;

  642.                 }

  643.                 case VOTE_OFF: { // 2

  644.                         giVotes[id][VOTE_OFF]=1;

  645.                 }

  646.                 default:{

  647.                         return;

  648.                 }

  649.         }

  650.         new szName[32];

  651.         get_user_name(id, szName, 31);

  652.        

  653.         client_print(0, print_chat, "* %L",LANG_PLAYER,(key==VOTE_ON)?"VOTED_FOR":"VOTED_AGAINST", szName);

  654. }

  655.  

  656. stock Create_TE_BEAMPOINTS(Float:start[3], Float:end[3], iSprite, startFrame, frameRate, life, width, noise, red, green, blue, alpha, speed){

  657.         message_begin( MSG_BROADCAST, SVC_TEMPENTITY )

  658.         write_byte( TE_BEAMPOINTS )

  659.         write_coord( floatround(start[0]) )

  660.         write_coord( floatround(start[1]) )

  661.         write_coord( floatround(start[2]) )

  662.         write_coord( floatround(end[0]) )

  663.         write_coord( floatround(end[1]) )

  664.         write_coord( floatround(end[2]) )

  665.         write_short( iSprite )                  // model

  666.         write_byte( startFrame )                // start frame

  667.         write_byte( frameRate )                 // framerate

  668.         write_byte( life )                              // life

  669.         write_byte( width )                             // width

  670.         write_byte( noise )                             // noise

  671.         write_byte( red)                                // red

  672.         write_byte( green )                             // green

  673.         write_byte( blue )                              // blue

  674.         write_byte( alpha )                             // brightness

  675.         write_byte( speed )                             // speed

  676.         message_end()

  677. }

  678. stock fm_get_brush_entity_origin(ent, Float:fOrigin[3]){

  679.         new Float:fMins[3], Float:fMaxs[3];

  680.         pev(ent, pev_mins, fMins);

  681.         pev(ent, pev_maxs, fMaxs);

  682.        

  683.         for(new i=0;i<3;i++)

  684.                 fOrigin[i]=(fMins[i]+fMaxs[i])/2;

  685. }

  686.  


azt hogyha free modot megszavazták akkor onnantól minden felvett fegyvert dobasson el vele a gép még CT-k usp-jét is.

Előre is thx.

_________________
Csesszétekmeg megint ide szoktam.

Idegbeteg leszek ha 30 percenként meg nem nézem, hogy nyílt-e új téma vagy jött-e valahova új comment.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Deathrun free modban nincs fegyo
HozzászólásElküldve:2012.06.14. 14:32 
Offline
Veterán
Avatar

Csatlakozott:2011.06.07. 15:29
Hozzászólások:1728
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 63 alkalommal
Kód:
  1. /*

  2.  

  3. Manager of Buttons

  4.  

  5. for DeathRun

  6.  

  7.  

  8.  

  9. Licence: GPL

  10.  

  11. Description:

  12.  

  13.         Allow admin to define how many times every button could be used by Menu.

  14.  

  15.         Add to game (cvar controlled) FreeRun mode - during round with FR traps can`t

  16.  

  17.         be used by defined teams (default Te).

  18.  

  19.  

  20.  

  21. */

  22.  

  23. #include <amxmodx>

  24.  

  25. #include <amxmisc>

  26. #include <fun>

  27.  

  28. #include <hamsandwich>

  29.  

  30. #include <fakemeta>

  31.  

  32. #include <colorchat>

  33.  

  34.  

  35.  

  36. #define PLUGIN "Use button once"

  37.  

  38. #define VERSION "1.3"

  39.  

  40. #define AUTHOR "R3X"

  41.  

  42.  

  43.  

  44. #define MAX_BUTTONS 100

  45.  

  46. #define KeysButtonsMenu (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 137890

  47.  

  48. #define KeysOptionsMenu (1<<0)|(1<<1)|(1<<8) //129

  49.  

  50. #define KeysDelayMenu (1<<0)|(1<<1)|(1<<2)|(1<<8) //1239

  51.  

  52.  

  53.  

  54. #define ANNOUNCE_TASK 10000

  55.  

  56.  

  57.  

  58. #define m_flWait 44

  59.  

  60.  

  61.  

  62. //Main

  63.  

  64.  

  65.  

  66. new gEnt[MAX_BUTTONS];

  67.  

  68. new gUsed[MAX_BUTTONS];

  69.  

  70. new giPointer=0;

  71.  

  72. new gOnStart[MAX_BUTTONS];

  73.  

  74. new Float:gDefaultDelay[MAX_BUTTONS];

  75.  

  76. new Float:gDelay[MAX_BUTTONS];

  77.  

  78.  

  79.  

  80. new gInMenu[33];

  81.  

  82.  

  83.  

  84. new gszFile[128];

  85.  

  86.  

  87.  

  88. new giSprite;

  89.  

  90.  

  91.  

  92. new gcvarDefault, gcvarTeam, gcvarFreeRun;

  93.  

  94. new gcvarLimit, gcvarLimitMode, gcvarPrivilege;

  95.  

  96. new gcvarMessage, gcvarRestore;

  97.  

  98.  

  99.  

  100. //VOTE

  101.  

  102.  

  103.  

  104. #define TASK_SHOWMENU 432

  105.  

  106. #define TASK_RES 123

  107.  

  108.  

  109.  

  110. #define MAX_ROUNDS 999

  111.  

  112.  

  113.  

  114. #define KeysFFVote (1<<0)|(1<<1) // Keys: 12

  115.  

  116.  

  117.  

  118. new gcvarFRVoteTime;

  119.  

  120.  

  121.  

  122. new giVoteStart, giVoteTime;

  123.  

  124.  

  125.  

  126. new bool:gbFreeRun=false;

  127.  

  128. new bool:gbVote=false;

  129.  

  130.  

  131.  

  132. #define VOTE_ON 0

  133.  

  134. #define VOTE_OFF 1

  135.  

  136.  

  137.  

  138. new giVotes[33][2];

  139.  

  140.  

  141.  

  142. new giRounds=MAX_ROUNDS, giTime=0;

  143.  

  144.  

  145.  

  146. public plugin_init() {

  147.  

  148.         register_plugin(PLUGIN, VERSION, AUTHOR);

  149.  

  150.        

  151.  

  152.         register_dictionary("common.txt");

  153.  

  154.         register_dictionary("adminvote.txt");

  155.  

  156.         register_dictionary("use_button_once.txt");

  157.  

  158.        

  159.  

  160.         register_menucmd(register_menuid("FRVote"), KeysFFVote, "PressedFRVote");

  161.  

  162.         register_menucmd(register_menuid("ButtonsMenu"), KeysButtonsMenu, "PressedButtonsMenu");

  163.  

  164.         register_menucmd(register_menuid("OptionsMenu"), KeysOptionsMenu, "PressedOptionsMenu");

  165.  

  166.         register_menucmd(register_menuid("DelayMenu"), KeysDelayMenu, "PressedDelayMenu");

  167.  

  168.        

  169.  

  170.         register_clcmd("amx_buttons","cmd_amx_buttons",ADMIN_CFG,": Buttons Menu");

  171.  

  172.        

  173.  

  174.         //Default count of uses

  175.  

  176.         gcvarDefault=register_cvar("amx_buttons_default","1");

  177.  

  178.         //Who plugin analyze

  179.  

  180.         //0 - anyone(plugin disabled?)

  181.  

  182.         //1 - Te

  183.  

  184.         //2 - Ct

  185.  

  186.         //3 - Te+Ct

  187.  

  188.         gcvarTeam=register_cvar("amx_buttons_team","1");

  189.  

  190.         //Enabled FreeRun mode?

  191.  

  192.         gcvarFreeRun=register_cvar("amx_buttons_freerun","1");

  193.  

  194.         //Vote time

  195.  

  196.         gcvarFRVoteTime=register_cvar("amx_freerun_votetime","10");

  197.  

  198.        

  199.  

  200.         //Type of limit

  201.  

  202.         //0 - enabled after 'amx_freerun_limit' rounds

  203.  

  204.         //1 - enabled after 'amx_freerun_limit' minutes

  205.  

  206.         gcvarLimitMode=register_cvar("amx_freerun_limit_mode","0");

  207.  

  208.         //Size of Limit

  209.  

  210.         gcvarLimit=register_cvar("amx_freerun_limit","5");

  211.  

  212.        

  213.  

  214.         //Interval of message

  215.  

  216.         gcvarMessage=register_cvar("amx_freerun_info","120.0",0,120.0);

  217.  

  218.        

  219.  

  220.         //Terrorist`s privilege

  221.  

  222.         //if he use /free FreeRun will start without vote, can he?

  223.  

  224.         gcvarPrivilege=register_cvar("amx_freerun_tt_privilege","1");

  225.  

  226.        

  227.  

  228.         //restore buttons on new round

  229.  

  230.         gcvarRestore=register_cvar("amx_restore_buttons","1");

  231.  

  232.        

  233.  

  234.         register_clcmd("say /free","cmdVoteFreeRun");

  235.  

  236.         register_clcmd("say_team /free","cmdVoteFreeRun");

  237.  

  238.         register_clcmd("say free","cmdVoteFreeRun");

  239.  

  240.         register_clcmd("say_team free","cmdVoteFreeRun");

  241.  

  242.        

  243.  

  244.         register_clcmd("say /freerun","cmdVoteFreeRun");

  245.  

  246.         register_clcmd("say_team /freerun","cmdVoteFreeRun");

  247.  

  248.         register_clcmd("say freerun","cmdVoteFreeRun");

  249.  

  250.         register_clcmd("say_team freerun","cmdVoteFreeRun");

  251.  

  252.        

  253.  

  254.         register_clcmd("say /fr","cmdVoteFreeRun");

  255.  

  256.         register_clcmd("say_team /fr","cmdVoteFreeRun");

  257.  

  258.         register_clcmd("say fr","cmdVoteFreeRun");

  259.  

  260.         register_clcmd("say_team fr","cmdVoteFreeRun");

  261.  

  262.        

  263.  

  264.         if( engfunc(EngFunc_FindEntityByString,-1 ,"classname", "func_button"))

  265.  

  266.                 RegisterHam(Ham_Use, "func_button", "fwButtonUsed");

  267.  

  268.  

  269.  

  270.         if(engfunc(EngFunc_FindEntityByString,-1 ,"classname","func_rot_button"))

  271.  

  272.                 RegisterHam(Ham_Use, "func_rot_button", "fwButtonUsed");

  273.  

  274.                

  275.  

  276.         if(engfunc(EngFunc_FindEntityByString,-1 ,"classname", "button_target"))

  277.  

  278.                 RegisterHam(Ham_Use, "button_target", "fwButtonUsed");

  279.  

  280.                

  281.  

  282.         register_logevent( "ResetButtons", 2, "0=World triggered", "1=Round_Start");

  283.  

  284.        

  285.  

  286.         fillButtons("func_button");

  287.  

  288.         fillButtons("func_rot_button");

  289.  

  290.         fillButtons("button_target");

  291.  

  292. }

  293.  

  294. public plugin_cfg(){

  295.  

  296.         setButtons();

  297.  

  298.        

  299.  

  300.         new iLen=0, iMax=charsmax(gszFile);

  301.  

  302.         iLen=get_configsdir(gszFile, iMax );

  303.  

  304.         iLen+=copy(gszFile[iLen], iMax-iLen, "/dr_buttons/");

  305.  

  306.        

  307.  

  308.         if(!dir_exists(gszFile)){

  309.  

  310.                 set_fail_state("Not found dir: configs/dr_buttons");

  311.  

  312.                 return;

  313.  

  314.         }

  315.  

  316.         new szMap[32];

  317.  

  318.         get_mapname(szMap, 31);

  319.  

  320.         formatex(gszFile[iLen], charsmax(gszFile)-iLen, "%s.ini", szMap);

  321.  

  322.         if(!file_exists(gszFile)){

  323.  

  324.                 return;

  325.  

  326.         }

  327.  

  328.         new szLine[51];

  329.  

  330.         new szButton[4], szTimes[3], szDelay[5];

  331.  

  332.         new Float:fDelay;

  333.  

  334.         for(new i=0;read_file(gszFile, i, szLine, 50, iLen);i++){

  335.  

  336.                 if(iLen==0) continue;

  337.  

  338.                 trim(szLine);

  339.  

  340.                 if(szLine[0]==';') continue;

  341.  

  342.                 parse(szLine, szButton, 3, szTimes, 2, szDelay, 4);

  343.  

  344.                 fDelay=szDelay[0]?str_to_float(szDelay):-1.0;

  345.  

  346.                 set_start_value(str_to_num(szButton), str_to_num(szTimes), fDelay);

  347.  

  348.         }

  349.  

  350.         new Float:fInterval=get_pcvar_float(gcvarMessage);

  351.  

  352.         if(fInterval > 0.0)

  353.  

  354.                 set_task(120.0, "announceVote",ANNOUNCE_TASK,_,_,"b");

  355.  

  356. }

  357.  

  358. public plugin_precache(){

  359.  

  360.         giSprite=precache_model("sprites/flare1.spr");

  361.  

  362.        

  363.  

  364. }

  365.  

  366. public client_putinserver(id){

  367.  

  368.         if(!is_user_bot(id))

  369.  

  370.                 eventInGame(id);

  371.  

  372. }

  373.  

  374. public client_connect(id){

  375.  

  376.         giVotes[id][VOTE_ON]=0;

  377.  

  378.         giVotes[id][VOTE_OFF]=0;

  379.  

  380. }

  381.  

  382. public announceVote(){

  383.  

  384.         if(get_pcvar_num(gcvarFreeRun))

  385.  

  386.                 ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER, "ANNOUNCE");

  387.  

  388. }

  389.  

  390. setButtons(){

  391.  

  392.         new iDef=get_pcvar_num(gcvarDefault);

  393.  

  394.         for(new i=0;i<giPointer;i++){

  395.  

  396.                 gUsed[i]=iDef;

  397.  

  398.                 gOnStart[i]=iDef;

  399.  

  400.                 gDelay[i]=get_pdata_float(gEnt[i],m_flWait);

  401.  

  402.                 gDefaultDelay[i]=gDelay[i];

  403.  

  404.         }

  405.  

  406. }

  407.  

  408. fillButtons(const szClass[]){

  409.  

  410.         new ent = -1;

  411.  

  412.         while((ent = engfunc(EngFunc_FindEntityByString,ent ,"classname", szClass)) != 0){

  413.  

  414.                 gEnt[giPointer++]=ent;

  415.  

  416.                 set_pev(ent, pev_iuser4, giPointer);

  417.  

  418.         }

  419.  

  420. }

  421.  

  422. set_start_value(ent, times, Float:delay){

  423.  

  424.         new index=get_ent_index(ent);

  425.  

  426.         if(index!=-1){

  427.  

  428.                 gOnStart[index]=times;

  429.  

  430.                 if(delay>=0.0)

  431.  

  432.                         gDelay[index]=delay;

  433.  

  434.         }

  435.  

  436. }

  437.  

  438. get_ent_index(ent){

  439.  

  440.         /*

  441.  

  442.         for(new i=0;i<giPointer;i++)

  443.  

  444.                 if(gEnt[i]==ent) return i;

  445.  

  446.         return -1;

  447.  

  448.         */

  449.  

  450.         return pev(ent, pev_iuser4)-1;

  451.  

  452. }

  453.  

  454. restoreButton(ent){

  455.  

  456.         if(pev(ent, pev_frame) > 0.0){

  457.  

  458.                 new Float:Life;

  459.  

  460.                 pev(ent, pev_nextthink, Life);

  461.  

  462.                 set_pev(ent, pev_ltime, Life-0.01);

  463.  

  464.         }

  465.  

  466. }

  467.  

  468. public ResetButtons(){

  469.  

  470.         gbFreeRun=false;

  471.  

  472.         gbVote=false;

  473.  

  474.         new bool:bRestore=get_pcvar_num(gcvarRestore)!=0;

  475.  

  476.         for(new i=0;i<MAX_BUTTONS;i++){

  477.  

  478.                 gUsed[i]=gOnStart[i];

  479.  

  480.                 if(bRestore){

  481.  

  482.                         restoreButton(gEnt[i]);

  483.  

  484.                 }

  485.  

  486.         }

  487.  

  488.         giRounds++;

  489.  

  490. }

  491.  

  492. public fwButtonUsed(this, idcaller, idactivator, use_type, Float:value){

  493.  

  494.         if(idcaller!=idactivator) return HAM_IGNORED;

  495.  

  496.        

  497.  

  498.         if(pev(this, pev_frame) > 0.0)

  499.  

  500.                  return HAM_IGNORED;

  501.  

  502.         new index=get_ent_index(this);

  503.  

  504.         if(index==-1)

  505.  

  506.                 return HAM_IGNORED;

  507.  

  508.         if(get_user_team(idcaller)&get_pcvar_num(gcvarTeam)){

  509.  

  510.                

  511.  

  512.                 if(gbFreeRun){

  513.  

  514.                         ColorChat(idcaller,GREEN, "[FreeRun]^x01 %L",idcaller, "BUTTON_FREERUN");

  515.  

  516.                         return HAM_SUPERCEDE;

  517.  

  518.                 }

  519.  

  520.                 else if(gUsed[index]<=0 && gOnStart[index]!=-1){

  521.  

  522.                         ColorChat(idcaller,GREEN, "[Info]^x01 %L",idcaller,"BUTTON_NOMORE");

  523.  

  524.                         return HAM_SUPERCEDE;

  525.  

  526.                 }

  527.  

  528.                 else{

  529.  

  530.                         if(gUsed[index]>0)

  531.  

  532.                                 if(--gUsed[index]){

  533.  

  534.                                         ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_LEFT", gUsed[index]);

  535.  

  536.                                 }else

  537.  

  538.                                         ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_ENDOFLIMIT");

  539.  

  540.                 }

  541.  

  542.         }

  543.  

  544.        

  545.  

  546.         set_task(0.1,"setDelay",this);

  547.  

  548.        

  549.  

  550.         return HAM_IGNORED;

  551.  

  552. }

  553.  

  554. public setDelay(this){

  555.  

  556.         new index=get_ent_index(this);

  557.  

  558.         set_pev(this, pev_nextthink, pev(this, pev_ltime)+gDelay[index]+0.01);

  559.  

  560. }

  561.  

  562.  

  563.  

  564. //MENU--------------

  565.  

  566. public cmd_amx_buttons(id, level, cid){

  567.  

  568.         if(!cmd_access(id, level, cid, 1))

  569.  

  570.                 return PLUGIN_HANDLED;

  571.  

  572.         if(giPointer==0)

  573.  

  574.                 client_print(id, print_chat, "%L", id,"NO_BUTTONS");

  575.  

  576.         else

  577.  

  578.                 ShowButtonsMenu(id);

  579.  

  580.         return PLUGIN_HANDLED;

  581.  

  582. }

  583.  

  584. ShowButtonsMenu(id, trace=1){

  585.  

  586.         if(!is_user_alive(id)){

  587.  

  588.                 client_print(id, print_center, "%L",id, "MUST_B_ALIVE");

  589.  

  590.                 return;

  591.  

  592.         }

  593.  

  594.         new iNow=gInMenu[id];

  595.  

  596.         new iKeys=(1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);

  597.  

  598.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  599.  

  600.         new szNoLimit[32];

  601.  

  602.         formatex(szNoLimit,31,"(%L)",id,"NOLIMIT");

  603.  

  604.         iLen=copy(szMenu, iMax,"\yButtons Menu^n");

  605.  

  606.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\wEnt#%d^n^n",gEnt[iNow]);

  607.  

  608.         iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %d %s^n\y1\w. %L ",id, "USAGE",gOnStart[iNow],(gOnStart[iNow]==-1)?szNoLimit:"", id, "MORE");

  609.  

  610.        

  611.  

  612.         if(gOnStart[iNow]>=0){

  613.  

  614.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\y2\w. %L",id, "WORD_LESS");

  615.  

  616.                 iKeys|=(1<<1);

  617.  

  618.         }else

  619.  

  620.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\d2. %L\w",id,"WORD_LESS");

  621.  

  622.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n3. %L^n^n4. %L^n^n",id, "DELAY_EDITOR",id,"OPTIONS");

  623.  

  624.        

  625.  

  626.         iLen+=formatex(szMenu[iLen], iMax-iLen,"5. %sNo Clip\w^n",isNoClip(id)?"\r":"");

  627.  

  628.         iLen+=formatex(szMenu[iLen], iMax-iLen,"6. %sGodMode\w^n",isGodMode(id)?"\r":"");

  629.  

  630.        

  631.  

  632.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n7. \r%L^n\w",id, "WORD_SAVE");

  633.  

  634.        

  635.  

  636.         if(iNow>0){

  637.  

  638.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"^n8. %L",id, "BACK");

  639.  

  640.                 iKeys|=(1<<7);

  641.  

  642.         }

  643.  

  644.         if(iNow<giPointer-1){

  645.  

  646.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"^n9. %L",id, "WORD_NEXT");

  647.  

  648.                 iKeys|=(1<<8);

  649.  

  650.         }

  651.  

  652.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n0. %L", id, "EXIT");

  653.  

  654.         show_menu(id, iKeys, szMenu, -1, "ButtonsMenu");

  655.  

  656.         if(trace){

  657.  

  658.                 new Float:fOrigin[3], Float:fOrigin2[3];

  659.  

  660.                 fm_get_brush_entity_origin(gEnt[gInMenu[id]], fOrigin);

  661.  

  662.                 pev(id, pev_origin, fOrigin2);

  663.  

  664.                 Create_TE_BEAMPOINTS(fOrigin, fOrigin2, giSprite, 0, 10, 20, 5, 1, 255, 0, 0, 100, 50);

  665.  

  666.         }

  667.  

  668. }

  669.  

  670. bool:isNoClip(id)

  671.  

  672.         return pev(id, pev_movetype)==MOVETYPE_NOCLIP;

  673.  

  674.        

  675.  

  676. bool:isGodMode(id)

  677.  

  678.         return pev(id, pev_takedamage)==0.0;

  679.  

  680.        

  681.  

  682. public PressedButtonsMenu(id, key) {

  683.  

  684.         if(!is_user_alive(id)){

  685.  

  686.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  687.  

  688.                 return;

  689.  

  690.         }

  691.  

  692.         /* Menu:

  693.  

  694.         * Buttons Menu

  695.  

  696.         * Ent#<ent>

  697.  

  698.         *

  699.  

  700.         * Uzyc: <ile>

  701.  

  702.         * 1. Wiecej 2. Mniej

  703.  

  704.         *

  705.  

  706.         * 3. Editor

  707.  

  708.         *

  709.  

  710.         * 4. Options

  711.  

  712.         *

  713.  

  714.         * 5. NoClip

  715.  

  716.         * 6. GodMode

  717.  

  718.         *

  719.  

  720.         * 7. Zapisz

  721.  

  722.         *

  723.  

  724.         * 8. Poprzedni

  725.  

  726.         * 9. Nastepny

  727.  

  728.         * 0. Wyjdz

  729.  

  730.         */

  731.  

  732.         new trace=0;

  733.  

  734.         switch (key) {

  735.  

  736.                 case 0: { // 1

  737.  

  738.                         gOnStart[gInMenu[id]]++;

  739.  

  740.                 }

  741.  

  742.                 case 1: { // 2

  743.  

  744.                         gOnStart[gInMenu[id]]--;

  745.  

  746.                 }

  747.  

  748.                 case 2: { // 3

  749.  

  750.                         ShowDelayMenu(id);

  751.  

  752.                         return;

  753.  

  754.                 }

  755.  

  756.                 case 3:{ //4

  757.  

  758.                         ShowOptionsMenu(id);

  759.  

  760.                         return;

  761.  

  762.                 }

  763.  

  764.                 case 4:{ //5

  765.  

  766.                         set_pev(id, pev_movetype, isNoClip(id)?MOVETYPE_WALK:MOVETYPE_NOCLIP);  

  767.  

  768.                 }

  769.  

  770.                 case 5:{ //6

  771.  

  772.                         set_pev(id, pev_takedamage, isGodMode(id)?1.0:0.0);

  773.  

  774.                 }

  775.  

  776.                 case 6: { // 7

  777.  

  778.                         save2File(id);

  779.  

  780.                 }

  781.  

  782.                 case 7: { // 8

  783.  

  784.                         gInMenu[id]--;

  785.  

  786.                         trace=1;

  787.  

  788.                 }

  789.  

  790.                 case 8: { // 9

  791.  

  792.                         gInMenu[id]++;

  793.  

  794.                         trace=1;

  795.  

  796.                 }

  797.  

  798.                 case 9: { // 0

  799.  

  800.                         return;

  801.  

  802.                 }

  803.  

  804.         }

  805.  

  806.         ShowButtonsMenu(id, trace);

  807.  

  808. }

  809.  

  810. //--------------

  811.  

  812. ShowOptionsMenu(id){

  813.  

  814.         if(!is_user_alive(id)){

  815.  

  816.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  817.  

  818.                 return;

  819.  

  820.         }

  821.  

  822.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  823.  

  824.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\yOptions^n^n");

  825.  

  826.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\w1. %L^n",id, "GOTO");

  827.  

  828.         iLen+=formatex(szMenu[iLen], iMax-iLen,"2. %L^n^n",id, "NEAREST");

  829.  

  830.         iLen+=formatex(szMenu[iLen], iMax-iLen,"9. %L",id, "BACK");

  831.  

  832.         show_menu(id, KeysOptionsMenu, szMenu, -1, "OptionsMenu");

  833.  

  834. }

  835.  

  836. public PressedOptionsMenu(id, key){

  837.  

  838.         if(!is_user_alive(id)){

  839.  

  840.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  841.  

  842.                 return;

  843.  

  844.         }

  845.  

  846.         new trace=0;

  847.  

  848.         switch (key) {

  849.  

  850.                 case 0: { // 1

  851.  

  852.                         go2Button(id);

  853.  

  854.                 }

  855.  

  856.                 case 1: { // 2

  857.  

  858.                         gInMenu[id]=findTheClosest(id);

  859.  

  860.                         trace=1;

  861.  

  862.                 }

  863.  

  864.         }

  865.  

  866.         ShowButtonsMenu(id, trace);

  867.  

  868. }

  869.  

  870. //-------------

  871.  

  872. ShowDelayMenu(id){

  873.  

  874.         if(!is_user_alive(id)){

  875.  

  876.                 client_print(id, print_center, "%L",id,"MUST_B_ALIVE");

  877.  

  878.                 return;

  879.  

  880.         }

  881.  

  882.         new iNow=gInMenu[id];

  883.  

  884.         new iKeys=(1<<0)|(1<<2)|(1<<8);

  885.  

  886.         new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;

  887.  

  888.         iLen=copy(szMenu, iMax,"\yDelay Menu^n");

  889.  

  890.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\wEnt#%d^n^n",gEnt[iNow]);

  891.  

  892.         iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %.1f^n",id, "CURRENT_DELAY", gDelay[iNow]);

  893.  

  894.         iLen+=formatex(szMenu[iLen], iMax-iLen,"\y1\w. %L ",id, "MORE");

  895.  

  896.         if(gDelay[iNow]>0.0){

  897.  

  898.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\y2\w. %L",id, "WORD_LESS");

  899.  

  900.                 iKeys|=(1<<1);

  901.  

  902.         }else

  903.  

  904.                 iLen+=formatex(szMenu[iLen], iMax-iLen,"\d2. %L\w",id,"WORD_LESS");

  905.  

  906.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n3. %L",id, "DEFAULT");

  907.  

  908.         iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n9. %L",id, "BACK");

  909.  

  910.         show_menu(id, iKeys, szMenu, -1, "DelayMenu");

  911.  

  912. }

  913.  

  914. public PressedDelayMenu(id, key){

  915.  

  916.         new iNow=gInMenu[id];

  917.  

  918.         switch(key){

  919.  

  920.                 case 0:{

  921.  

  922.                         gDelay[iNow]+=1.0;

  923.  

  924.                 }

  925.  

  926.                 case 1:{

  927.  

  928.                         gDelay[iNow]-=1.0;

  929.  

  930.                         if(gDelay[iNow] < 0.0)

  931.  

  932.                                 gDelay[iNow]=0.0;

  933.  

  934.                 }

  935.  

  936.                 case 2:{

  937.  

  938.                         gDelay[iNow]=gDefaultDelay[iNow];

  939.  

  940.                 }

  941.  

  942.                 case 8:{

  943.  

  944.                         ShowButtonsMenu(id, 0);

  945.  

  946.                         return;

  947.  

  948.                 }

  949.  

  950.         }

  951.  

  952.         ShowDelayMenu(id);

  953.  

  954. }

  955.  

  956. //-------------

  957.  

  958. save2File(id){

  959.  

  960.         if(file_exists(gszFile))

  961.  

  962.                 delete_file(gszFile);

  963.  

  964.         write_file(gszFile, ";<ent> <count> <delay>");

  965.  

  966.         new szLine[35];

  967.  

  968.         for(new i=0;i<giPointer;i++){

  969.  

  970.                 formatex(szLine, 34, "%d %d %.1f",gEnt[i], gOnStart[i], gDelay[i]);

  971.  

  972.                 write_file(gszFile, szLine);

  973.  

  974.         }

  975.  

  976.         client_print(id, print_center, "%L!",id,"WORD_SAVED");

  977.  

  978. }

  979.  

  980. findTheClosest(id){

  981.  

  982.         new Float:fPlayerOrig[3];

  983.  

  984.         pev(id, pev_origin, fPlayerOrig);

  985.  

  986.         new Float:fOrigin[3];

  987.  

  988.         fm_get_brush_entity_origin(gEnt[0], fOrigin);

  989.  

  990.        

  991.  

  992.         new Float:fRange=get_distance_f(fOrigin, fPlayerOrig), index=0;

  993.  

  994.         new Float:fNewRange;

  995.  

  996.         for(new i=1;i<giPointer;i++){

  997.  

  998.                 fm_get_brush_entity_origin(gEnt[i], fOrigin);

  999.  

  1000.                 fNewRange=get_distance_f( fOrigin,  fPlayerOrig);

  1001.  

  1002.                 if(fNewRange < fRange){

  1003.  

  1004.                         fRange=fNewRange;

  1005.  

  1006.                         index=i;

  1007.  

  1008.                 }

  1009.  

  1010.         }

  1011.  

  1012.         return index;

  1013.  

  1014. }

  1015.  

  1016. go2Button(id, ent=-1){

  1017.  

  1018.         if(ent==-1)

  1019.  

  1020.                 ent=gInMenu[id];

  1021.  

  1022.         ent=gEnt[ent];

  1023.  

  1024.         if(!pev_valid(ent)){

  1025.  

  1026.                 client_print(id, print_center, "%L",id,"NOTARGET");

  1027.  

  1028.                 return;

  1029.  

  1030.         }

  1031.  

  1032.         new Float:fOrigin[3];

  1033.  

  1034.         fm_get_brush_entity_origin(ent, fOrigin);

  1035.  

  1036.         set_pev(id, pev_origin, fOrigin);

  1037.  

  1038.         client_print(id, print_chat, "PS. No Clip :)");

  1039.  

  1040. }

  1041.  

  1042. //FreeRun

  1043.  

  1044. public cmdVoteFreeRun(id){

  1045.  

  1046.         if(get_pcvar_num(gcvarFreeRun)==0){

  1047.  

  1048.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_DISABLED");

  1049.  

  1050.                 return PLUGIN_HANDLED;

  1051.  

  1052.         }

  1053.  

  1054.         if(gbVote){

  1055.  

  1056.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_VOTE_IS_NOW");

  1057.  

  1058.                 return PLUGIN_HANDLED;

  1059.  

  1060.         }

  1061.  

  1062.         if(!is_user_alive(id)){

  1063.  

  1064.                 client_print(id, print_center, "%L",id, "MUST_B_ALIVE");

  1065.  

  1066.                 return PLUGIN_HANDLED;

  1067.  

  1068.         }

  1069.  

  1070.         if(get_pcvar_num(gcvarPrivilege)!=0 && !gbFreeRun && get_user_team(id)==1){

  1071.  

  1072.                 ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_TT_DECIDED");

  1073.  

  1074.                 makeFreeRun(true);

  1075.  

  1076.                 return PLUGIN_HANDLED;

  1077.  

  1078.         }

  1079.  

  1080.         new iLimit=get_pcvar_num(gcvarLimit);

  1081.  

  1082.         new iOffset=0;

  1083.  

  1084.         if(get_pcvar_num(gcvarLimitMode)){

  1085.  

  1086.                 iOffset = ( giTime + iLimit * 60 )  - get_systime();

  1087.  

  1088.                 if( iOffset > 0 ){

  1089.  

  1090.                         ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_TIME", iOffset/60, iOffset%60);

  1091.  

  1092.                         return PLUGIN_HANDLED;

  1093.  

  1094.                 }

  1095.  

  1096.         }

  1097.  

  1098.         else{

  1099.  

  1100.                 iOffset =  min(MAX_ROUNDS, iLimit) - giRounds;

  1101.  

  1102.                 if( iOffset > 0 ){

  1103.  

  1104.                         ColorChat(id, GREEN, "[FreeRun]^x01 %L",id,"FREERUN_NEXT_VOTE_ROUNDS", iOffset);

  1105.  

  1106.                         return PLUGIN_HANDLED;

  1107.  

  1108.                 }

  1109.  

  1110.         }

  1111.  

  1112.        

  1113.  

  1114.         makeVote();

  1115.  

  1116.         return PLUGIN_CONTINUE;

  1117.  

  1118. }

  1119.  

  1120. //FREERUN

  1121.  

  1122. public makeVote(){

  1123.  

  1124.         giVoteTime=get_pcvar_num(gcvarFRVoteTime);

  1125.  

  1126.         gbVote=true;

  1127.  

  1128.         giVoteStart=get_systime();

  1129.  

  1130.         set_task(float(giVoteTime), "resultsOfVote", TASK_RES);

  1131.  

  1132.         new Players[32], playerCount;

  1133.  

  1134.         new id;

  1135.  

  1136.         get_players(Players, playerCount);

  1137.  

  1138.         for (new i=0; i<playerCount; i++){

  1139.  

  1140.                 id = Players[i];

  1141.  

  1142.                 eventInGame(id);

  1143.  

  1144.         }

  1145.  

  1146.        

  1147.  

  1148. }

  1149.  

  1150. public resultsOfVote(tid){

  1151.  

  1152.         gbVote=false;

  1153.  

  1154.        

  1155.  

  1156.         new giVotesOn=count(VOTE_ON);

  1157.  

  1158.         new giVotesOff=count(VOTE_OFF);

  1159.  

  1160.        

  1161.  

  1162.         ColorChat(0,GREEN, "[FreeRun]^x01 %L %L(%d) vs %L(%d)",LANG_SERVER,"FREERUN_RESULTS",LANG_SERVER,"YES",giVotesOn,LANG_SERVER,"NO", giVotesOff);

  1163.  

  1164.        

  1165.  

  1166.         if( giVotesOn == giVotesOff ){

  1167.  

  1168.                 ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER,"FREERUN_TIE");

  1169.  

  1170.                 return;

  1171.  

  1172.         }

  1173.  

  1174.         makeFreeRun((giVotesOn > giVotesOff));

  1175.  

  1176.         ColorChat(0,GREEN, "[FreeRun]^x01 %L ^x03%L",LANG_SERVER,"FREERUN_WINOPTION",LANG_SERVER, gbFreeRun?"YES":"NO");

  1177.  

  1178. }

  1179.  

  1180. makeFreeRun(bool:bFR=true){

  1181.  

  1182.         gbFreeRun=bFR;

  1183.  

  1184.         reset();

  1185.  

  1186.         giRounds=0;

  1187.  

  1188.         giTime=get_systime();

  1189.  

  1190.        

  1191.  

  1192.         if(gbFreeRun){

  1193.  

  1194.                 set_hudmessage(0, 255, 255, 0.02, -1.0);

  1195.  

  1196.                 show_hudmessage(0, "FreeRun!");

  1197.                 strip_user_weapons(0)

  1198.  

  1199.         }

  1200.  

  1201.        

  1202.  

  1203. }

  1204.  

  1205. count(VOTE_STATE){

  1206.  

  1207.         new iCounter=0;

  1208.  

  1209.         for(new i=1;i<33;i++)

  1210.  

  1211.                 if(giVotes[i][VOTE_STATE])

  1212.  

  1213.                         iCounter++;

  1214.  

  1215.         return iCounter;

  1216.  

  1217. }

  1218.  

  1219. reset(){

  1220.  

  1221.         for(new i=1;i<33;i++){

  1222.  

  1223.                 giVotes[i][VOTE_ON]=0;

  1224.  

  1225.                 giVotes[i][VOTE_OFF]=0;

  1226.  

  1227.         }

  1228.  

  1229. }

  1230.  

  1231. public show_menu_(tid){

  1232.  

  1233.         new id=tid-TASK_SHOWMENU;

  1234.  

  1235.         new iTeam=get_user_team(id);

  1236.  

  1237.         new menu_id, keys;

  1238.  

  1239.         new menuUp = player_menu_info( id, menu_id, keys );

  1240.  

  1241.         // Only display menu if another isn't shown

  1242.  

  1243.         if ( iTeam && (menuUp <= 0 || menu_id < 0) ){

  1244.  

  1245.                 new iTime=get_pcvar_num(gcvarFRVoteTime);

  1246.  

  1247.                 new iOffset=get_systime()-giVoteStart;

  1248.  

  1249.                 iTime-=iOffset;

  1250.  

  1251.                 new szMenu[128];

  1252.  

  1253.                 formatex(szMenu, 127, "\y%L^n^n\w1. %L^n2. %L",id,"FREERUN_VOTEMENU",id,"YES",id,"NO");

  1254.  

  1255.                 show_menu(id, KeysFFVote, szMenu, iTime, "FRVote");

  1256.  

  1257.         }else

  1258.  

  1259.                 set_task(1.0, "show_menu_", tid);

  1260.  

  1261. }

  1262.  

  1263. public eventInGame(id){

  1264.  

  1265.         if(giVotes[id][VOTE_ON] || giVotes[id][VOTE_OFF])

  1266.  

  1267.                 return;

  1268.  

  1269.         if(gbVote)

  1270.  

  1271.                 set_task(1.0, "show_menu_", id+TASK_SHOWMENU);

  1272.  

  1273. }

  1274.  

  1275. public PressedFRVote(id, key) {

  1276.  

  1277.         if(gbVote==false) return;

  1278.  

  1279.         switch (key) {

  1280.  

  1281.                 case VOTE_ON: { // 1

  1282.  

  1283.                         giVotes[id][VOTE_ON]=1;

  1284.  

  1285.                 }

  1286.  

  1287.                 case VOTE_OFF: { // 2

  1288.  

  1289.                         giVotes[id][VOTE_OFF]=1;

  1290.  

  1291.                 }

  1292.  

  1293.                 default:{

  1294.  

  1295.                         return;

  1296.  

  1297.                 }

  1298.  

  1299.         }

  1300.  

  1301.         new szName[32];

  1302.  

  1303.         get_user_name(id, szName, 31);

  1304.  

  1305.        

  1306.  

  1307.         client_print(0, print_chat, "* %L",LANG_PLAYER,(key==VOTE_ON)?"VOTED_FOR":"VOTED_AGAINST", szName);

  1308.  

  1309. }

  1310.  

  1311.  

  1312.  

  1313. stock Create_TE_BEAMPOINTS(Float:start[3], Float:end[3], iSprite, startFrame, frameRate, life, width, noise, red, green, blue, alpha, speed){

  1314.  

  1315.         message_begin( MSG_BROADCAST, SVC_TEMPENTITY )

  1316.  

  1317.         write_byte( TE_BEAMPOINTS )

  1318.  

  1319.         write_coord( floatround(start[0]) )

  1320.  

  1321.         write_coord( floatround(start[1]) )

  1322.  

  1323.         write_coord( floatround(start[2]) )

  1324.  

  1325.         write_coord( floatround(end[0]) )

  1326.  

  1327.         write_coord( floatround(end[1]) )

  1328.  

  1329.         write_coord( floatround(end[2]) )

  1330.  

  1331.         write_short( iSprite )                  // model

  1332.  

  1333.         write_byte( startFrame )                // start frame

  1334.  

  1335.         write_byte( frameRate )                 // framerate

  1336.  

  1337.         write_byte( life )                              // life

  1338.  

  1339.         write_byte( width )                             // width

  1340.  

  1341.         write_byte( noise )                             // noise

  1342.  

  1343.         write_byte( red)                                // red

  1344.  

  1345.         write_byte( green )                             // green

  1346.  

  1347.         write_byte( blue )                              // blue

  1348.  

  1349.         write_byte( alpha )                             // brightness

  1350.  

  1351.         write_byte( speed )                             // speed

  1352.  

  1353.         message_end()

  1354.  

  1355. }

  1356.  

  1357. stock fm_get_brush_entity_origin(ent, Float:fOrigin[3]){

  1358.  

  1359.         new Float:fMins[3], Float:fMaxs[3];

  1360.  

  1361.         pev(ent, pev_mins, fMins);

  1362.  

  1363.         pev(ent, pev_maxs, fMaxs);

  1364.  

  1365.        

  1366.  

  1367.         for(new i=0;i<3;i++)

  1368.  

  1369.                 fOrigin[i]=(fMins[i]+fMaxs[i])/2;

  1370.  

  1371. }

  1372.  

  1373.  


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 6 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