1. Notty Пользователь

    Регистрация:
    09.03.15
    Сообщения:
    126
    Симпатии:
    23
    Пол:
    Мужской
    Помогите добавить ограничение, чтобы вход в меню был только разрешен админу с доступ к rcon

    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <amxmisc>
    3. #include <cstrike>
    4. #include <fakemeta>
    5.  
    6. new g_bwEnt[33]
    7.  
    8. #define PLUG_NAME "Hats"
    9. #define PLUG_AUTH "trofian"
    10. #define PLUG_VERS "1.0"
    11.  
    12. #define menusize     1024
    13.  
    14. #define HATS_PATH     "models/knife_hats"
    15.  
    16. new HatFile[128]
    17. new MenuPages, TotalHats
    18. new CurrentMenu[33]
    19.  
    20. new UserHaveHatWith[33] = 'o' // s - skin, m - two models, n - normal hat, o - not connected
    21. new UserHatModel[33][256]
    22.  
    23. #define MAX_HATS 64
    24. new HATMDL[MAX_HATS][128]
    25. new HATNAME[MAX_HATS][128]
    26.  
    27. public plugin_init()
    28. {
    29.     register_plugin(PLUG_NAME, PLUG_VERS, PLUG_AUTH)
    30.     register_concmd("amx_givehat", "Give_Hat", ADMIN_RCON, "<nick> <mdl #>")
    31.     register_concmd("amx_removehats", "Remove_Hat", ADMIN_RCON, " - Removes hats from everyone.")
    32.     register_menucmd(register_menuid("\rМеню шапок \yツ [Page"),(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9),"MenuCommand")
    33.     register_clcmd("say /hatsergag",        "ShowMenu", -1, "Shows Knife menu")
    34.     register_clcmd("hats",        "ShowMenu", -1, "Shows Knife menu")
    35.     register_event("ResetHUD", "ResetHUD", "be")
    36. }
    37.  
    38. public ResetHUD(id) set_task(2.0, "reload_hat", id)
    39.  
    40. public reload_hat(id)
    41. {
    42.     if(!is_user_alive(id))
    43.         return
    44.    
    45.     new CsTeams:team = cs_get_user_team(id)
    46.    
    47.     if(!pev_valid(g_bwEnt[id]))
    48.         return
    49.    
    50.     if(UserHaveHatWith[id] == 's')
    51.     {
    52.         if(team == CS_TEAM_CT)
    53.             set_pev(g_bwEnt[id], pev_skin, 1)
    54.         else if(team == CS_TEAM_T)
    55.             set_pev(g_bwEnt[id], pev_skin, 0)
    56.     }
    57.     if(UserHaveHatWith[id] == 'm')
    58.     {
    59.         new hatmodel[256]
    60.        
    61.         if(team == CS_TEAM_CT)
    62.             formatex(hatmodel, charsmax(hatmodel), "%s/c_%s", HATS_PATH, UserHatModel[id])
    63.         else if(team == CS_TEAM_T)
    64.             formatex(hatmodel, charsmax(hatmodel), "%s/t_%s", HATS_PATH, UserHatModel[id])
    65.        
    66.         engfunc(EngFunc_SetModel, g_bwEnt[id], hatmodel)
    67.     }
    68. }
    69.  
    70. public ShowMenu(id)
    71. {
    72.     CurrentMenu[id] = 1
    73.     ShowHats(id)
    74.     return PLUGIN_HANDLED
    75. }
    76.  
    77. public ShowHats(id)
    78. {
    79.     new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
    80.    
    81.     new szMenuBody[menusize + 1], WpnID
    82.     new nLen = format(szMenuBody, menusize, "\rМеню шапок \yツ [Page %i/%i]^n",CurrentMenu[id],MenuPages)
    83.    
    84.     // Get Hat Names And Add Them To The List
    85.     for (new hatid=0; hatid < 8; hatid++) {
    86.         WpnID = ((CurrentMenu[id] * 8) + hatid - 8)
    87.         if (WpnID < TotalHats) {
    88.             new hatText[256]
    89.             if(WpnID > 0)
    90.             {
    91.                 if(HATNAME[WpnID][0] == 's')
    92.                     format(hatText, charsmax(hatText), "\y%s \w[\rцвет команды\w]", HATNAME[WpnID][1])
    93.                 else if(HATNAME[WpnID][0] == 'm')
    94.                     format(hatText, charsmax(hatText), "\y%s \w[\rмодель команды\w]", HATNAME[WpnID][1])
    95.                 else
    96.                     format(hatText, charsmax(hatText), "\w%s", HATNAME[WpnID])
    97.             }
    98.             else
    99.                 format(hatText, charsmax(hatText), "\r%s", HATNAME[WpnID])
    100.             nLen += format(szMenuBody[nLen], menusize-nLen, "^n\w %i. %s",hatid + 1,hatText)
    101.         }
    102.     }
    103.    
    104.     // Next Page And Previous/Close
    105.     if (CurrentMenu[id] == MenuPages) {
    106.         nLen += format(szMenuBody[nLen], menusize-nLen, "^n^n\w9. \dСледующая")
    107.     } else {
    108.         nLen += format(szMenuBody[nLen], menusize-nLen, "^n^n\w9. \yСледующая")
    109.     }
    110.    
    111.     if (CurrentMenu[id] > 1) {
    112.         nLen += format(szMenuBody[nLen], menusize-nLen, "^n\w0. \yПредудыщая")
    113.     } else {
    114.         nLen += format(szMenuBody[nLen], menusize-nLen, "^n\w0. \rВыход")
    115.     }
    116.     show_menu(id, keys, szMenuBody, -1)
    117.     return PLUGIN_HANDLED
    118. }
    119. public MenuCommand(id, key)
    120. {
    121.     switch(key)
    122.     {
    123.         case 8:        //9 - [Next Page]
    124.         {
    125.             if (CurrentMenu[id] < MenuPages) CurrentMenu[id]++
    126.             ShowHats(id)
    127.             return PLUGIN_HANDLED
    128.         }
    129.         case 9:        //0 - [Close]
    130.         {
    131.             CurrentMenu[id]--
    132.             if (CurrentMenu[id] > 0) ShowHats(id)
    133.             return PLUGIN_HANDLED
    134.         }
    135.         default:
    136.         {
    137.             new HatID = ((CurrentMenu[id] * 8) + key - 8)
    138.             if (HatID < TotalHats) {
    139.                 Set_Hat(id,HatID,id)
    140.             }
    141.         }
    142.     }
    143.     return PLUGIN_HANDLED
    144. }
    145.  
    146. public plugin_precache()
    147. {
    148.     new cfgDir[32]
    149.     get_configsdir(cfgDir,31)
    150.     formatex(HatFile,63,"%s/HatList.ini",cfgDir)
    151.     command_load()
    152.    
    153.     for (new i = 1; i < TotalHats; ++i) {
    154.         if(HATNAME[i][0] == 'm')
    155.         {
    156.             new CurrFile[256]
    157.            
    158.             formatex(CurrFile, charsmax(CurrFile), "%s/t_%s", HATS_PATH, HATMDL[i])
    159.             if(file_exists(CurrFile)) precache_model(CurrFile)
    160.            
    161.             formatex(CurrFile, charsmax(CurrFile), "%s/c_%s", HATS_PATH, HATMDL[i])
    162.             if(file_exists(CurrFile)) precache_model(CurrFile)
    163.         }
    164.         else
    165.         {
    166.             new CurrFile[256]
    167.             formatex(CurrFile, charsmax(CurrFile), "%s/%s", HATS_PATH, HATMDL[i])
    168.            
    169.             if (file_exists (CurrFile))
    170.             {
    171.                 precache_model(CurrFile)
    172.                 server_print("[%s] Precached %s",PLUG_NAME,CurrFile)
    173.             }
    174.             else
    175.                 server_print("[%s] Failed to precache %s",PLUG_NAME,CurrFile)
    176.         }
    177.     }
    178. }
    179.  
    180. public client_connect(id)
    181. {
    182.     if(g_bwEnt[id] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[id])
    183.     g_bwEnt[id] = 0
    184. }
    185.  
    186. public client_disconnect(id)
    187. {
    188.     if(g_bwEnt[id] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[id])
    189.     g_bwEnt[id] = 0
    190.     UserHaveHatWith[id] = 'o'
    191.     formatex(UserHatModel[id], 255, "!NULL")
    192. }
    193.  
    194. public Give_Hat(id)
    195. {
    196.     new smodelnum[5], name[32]
    197.     read_argv(1,name,31)
    198.     read_argv(2,smodelnum,4)
    199.    
    200.     new player = cmd_target(id,name,2)
    201.     if (!player) {
    202.         print_col_chat(id, "!g[%s] !yИгрок с таким именем не найден", PLUG_NAME)
    203.         return PLUGIN_HANDLED
    204.     }
    205.    
    206.     new imodelnum = (str_to_num(smodelnum))
    207.     if (imodelnum > MAX_HATS) return PLUGIN_HANDLED
    208.    
    209.     Set_Hat(player,imodelnum,id)
    210.  
    211.     return PLUGIN_CONTINUE
    212. }
    213.  
    214. public Remove_Hat(id)
    215. {
    216.     for (new i = 0; i < get_maxplayers(); ++i) {
    217.         if (is_user_connected(i) && g_bwEnt[i] > 0) {
    218.             engfunc(EngFunc_RemoveEntity,g_bwEnt[i])
    219.             g_bwEnt[i] = 0
    220.         }
    221.     }
    222.     client_print(id,print_chat,"[%s] Removed hats from everyone.",PLUG_NAME)
    223.     return PLUGIN_CONTINUE
    224. }
    225.  
    226. public Set_Hat(player,imodelnum,targeter)
    227. {
    228.     new name[32]
    229.     get_user_name(player, name, 31)
    230.     if (imodelnum == 0) {
    231.         if(g_bwEnt[player] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[player])
    232.         g_bwEnt[player] = 0
    233.         print_col_chat(targeter, "!g[%s] !yШапка снята с !t%s", PLUG_NAME, name)
    234.        
    235.     } else {
    236.         if(g_bwEnt[player] < 1) {
    237.             g_bwEnt[player] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
    238.             if(g_bwEnt[player] > 0)
    239.             {
    240.                 UserHaveHatWith[player] = 'n'
    241.                 new mdlName[256]
    242.                 new CsTeams:team = cs_get_user_team(player)
    243.                
    244.                 formatex(UserHatModel[player], 255, "%s", HATMDL[imodelnum])
    245.                
    246.                 set_pev(g_bwEnt[player], pev_movetype, MOVETYPE_FOLLOW)
    247.                 set_pev(g_bwEnt[player], pev_aiment, player)
    248.                 set_pev(g_bwEnt[player], pev_rendermode, kRenderNormal)
    249.                 set_pev(g_bwEnt[player], pev_renderamt, 0.0)
    250.                
    251.                 if(HATNAME[imodelnum][0] == 'm')
    252.                 {
    253.                     UserHaveHatWith[player] = 'm'
    254.                    
    255.                     if(team == CS_TEAM_CT)
    256.                         formatex(mdlName, charsmax(mdlName), "%s/c_%s", HATS_PATH, HATMDL[imodelnum])
    257.                     else if(team == CS_TEAM_T)
    258.                         formatex(mdlName, charsmax(mdlName), "%s/t_%s", HATS_PATH, HATMDL[imodelnum])
    259.                    
    260.                     engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
    261.                 }
    262.                 else
    263.                 {
    264.                     format(mdlName, charsmax(mdlName), "%s/%s", HATS_PATH, HATMDL[imodelnum])
    265.                    
    266.                     engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
    267.                 }
    268.                
    269.                 if(HATNAME[imodelnum][0] == 's')
    270.                 {
    271.                     UserHaveHatWith[player] = 's'
    272.                    
    273.                     if(team == CS_TEAM_CT)
    274.                         set_pev(g_bwEnt[player], pev_skin, 1)
    275.                     else if(team == CS_TEAM_T)
    276.                         set_pev(g_bwEnt[player], pev_skin, 0)
    277.                 }
    278.             }
    279.         } else {
    280.                 UserHaveHatWith[player] = 'n'
    281.                 new mdlName[256]
    282.                 new CsTeams:team = cs_get_user_team(player)
    283.                 formatex(UserHatModel[player], 255, "%s", HATMDL[imodelnum])
    284.                
    285.                 if(HATNAME[imodelnum][0] == 'm')
    286.                 {
    287.                     UserHaveHatWith[player] = 'm'
    288.                     if(team == CS_TEAM_CT)
    289.                         formatex(mdlName, charsmax(mdlName), "%s/c_%s", HATS_PATH, HATMDL[imodelnum])
    290.                     else if(team == CS_TEAM_T)
    291.                         formatex(mdlName, charsmax(mdlName), "%s/t_%s", HATS_PATH, HATMDL[imodelnum])
    292.                    
    293.                     engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
    294.                 }
    295.                 else
    296.                 {
    297.                     formatex(mdlName, charsmax(mdlName), "%s/%s", HATS_PATH, HATMDL[imodelnum])
    298.                    
    299.                     engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
    300.                 }
    301.                
    302.                 if(HATNAME[imodelnum][0] == 's')
    303.                 {
    304.                     UserHaveHatWith[player] = 's'
    305.                    
    306.                     if(team == CS_TEAM_CT)
    307.                         set_pev(g_bwEnt[player], pev_skin, 1)
    308.                     else if(team == CS_TEAM_T)
    309.                         set_pev(g_bwEnt[player], pev_skin, 0)
    310.                 }
    311.         }
    312.         if(HATNAME[imodelnum][0] == 's' || HATNAME[imodelnum][0] == 'm')
    313.             print_col_chat(targeter, "!g[%s] !yШапку !g%s !yодел !t%s", PLUG_NAME, HATNAME[imodelnum][1],name)
    314.         else
    315.             print_col_chat(targeter, "!g[%s] !yШапку !g%s !yодел !t%s", PLUG_NAME, HATNAME[imodelnum],name)
    316.     }
    317. }
    318.  
    319. public command_load()
    320. {
    321.     if(file_exists(HatFile)) {
    322.         HATMDL[0] = ""
    323.         HATNAME[0] = "Снять шапку"
    324.         TotalHats = 1
    325.         new sfLineData[128]
    326.         new file = fopen(HatFile,"rt")
    327.         while(file && !feof(file)) {
    328.             fgets(file,sfLineData,127)
    329.            
    330.             // Skip Comment and Empty Lines
    331.             if (containi(sfLineData,";") > -1) continue
    332.            
    333.             // BREAK IT UP!
    334.             parse(sfLineData, HATMDL[TotalHats],40,HATNAME[TotalHats],40)
    335.            
    336.             TotalHats += 1
    337.             if(TotalHats >= MAX_HATS) {
    338.                 server_print("[%s] Reached hat limit",PLUG_NAME)
    339.                 break
    340.             }
    341.         }
    342.         if(file) fclose(file)
    343.     }
    344.     MenuPages = floatround((TotalHats / 8.0), floatround_ceil)
    345.     server_print("[%s] Loaded %i hats, Generated %i pages)",PLUG_NAME,TotalHats,MenuPages)
    346. }
    347.  
    348. stock print_col_chat(const id, const input[], any:...)
    349. {
    350.     new count = 1, players[32]
    351.     static msg[191]
    352.     vformat(msg, 190, input, 3)
    353.     replace_all(msg, 190, "!g", "^4") // Green Color
    354.     replace_all(msg, 190, "!y", "^1") // Default Color
    355.     replace_all(msg, 190, "!t", "^3") // Team Color
    356.    
    357.     if (id)
    358.         players[0] = id
    359.     else
    360.         get_players(players, count, "ch")
    361.    
    362.     {
    363.         for ( new i = 0; i < count; i++ )
    364.         {
    365.             if (is_user_connected(players[i]))
    366.             {
    367.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
    368.                 write_byte(players[i])
    369.                 write_string(msg)
    370.                 message_end()
    371.             }
    372.         }
    373.     }
    374. }
     
  2. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.543
    Симпатии:
    4.142
    Пол:
    Мужской
    Код (Unknown Language):
    1. public ShowMenu(id)
    2. {
    3.     if(get_user_flags(id) & ADMIN_RCON)
    4.     {
    5.         CurrentMenu[id] = 1
    6.         ShowHats(id)
    7.     }  
    8.     return PLUGIN_HANDLED
    9. }
     
    Notty нравится это.