Покупка гранат только админам

Тема в разделе "Общие вопросы", создана пользователем Юра Шмигель, 24 ноя 2015.

  1. Юра Шмигель

    Юра Шмигель

    Сообщения:
    32
    Симпатии:
    8
    Пытаюсь написать плагин для запрета покупки гранат рядовым пользователям...
    Помогите советом как это реализовать

    PHP:
    #include <sourcemod> 

    public Action:CS_OnBuyCommand(client, const String:weapon[]) 
    {
        if(
    strcmp(weapon"molotov") == || !(GetUserFlagBits(client) & ADMFLAG_GENERIC)) 
        { 
            
    PrintToChat(client"Покупка Коктеля Молотова доступна только админам!"); 
            return 
    Plugin_Handled
        } 
        else if(
    strcmp(weapon"incgrenade") == || !(GetUserFlagBits(client) & ADMFLAG_GENERIC)) 
        { 
            
    PrintToChat(client"Покупка Зажигательной гранаты доступна только админам!"); 
            return 
    Plugin_Handled
        }
        return 
    Plugin_Continue;
    }  
    При таком коде пропадает у обычных игров возможность покупки вообще любого оружия
     
  2. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
  3. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    Код:
    StrContains(weapon, "molotov") != -1 && !has_admflag[client]
    
    
    public OnClientPostAdminCheck(client)
    {
     has_admflag[client] = false;
     if(GetUserFlagBits(client) & ADMFLAG_GENERIC || GetUserFlagBits(client) & ADMFLAG_ROOT)
     {
     has_admflag[client] = true;
     }
    }
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.978
    а почему бы не
    PHP:
    GetUserAdmin(client) == INVALID_ADMIN_ID
     
  5. Юра Шмигель

    Юра Шмигель

    Сообщения:
    32
    Симпатии:
    8
    Рико мне твой вариант больше нравится :yes: сейчас попробую

    Добавлено через 8 минут
    Да фигня какая то... на локальном сервере все хорошо отрабатывает плагин а на сетевом сервере у всех блочится закуп оружия кроме админа! Есть идеи? на том и на том сервере плины все идентичные
     
    Последнее редактирование: 24 ноя 2015
  6. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Попробуй.

    PHP:
    #pragma semicolon 1

    #include <sdkhooks>

    // Список блокируемого оружия.
    new const String:block_weapons_list[][] =
    {
        
    "incgrenade""molotov"
    };

    #define Weapon_Count sizeof(block_weapons_list)

    public OnClientPostAdminCheck(client){SDKHook(clientSDKHook_WeaponEquipWeaponEquip);}
    public 
    OnClientDisconnect(client){SDKUnhook(clientSDKHook_WeaponEquipWeaponEquip);}

    // Запрещает использовать и поднимать запрещенное оружие.
    public Action:WeaponEquip(clientweapon

            
    decl String:blockWeapon[21]; 
            
    GetEntityClassname(weaponblockWeaponsizeof(blockWeapon));

            for(new 
    0Weapon_Count; ++i
            { 
                if(
    strcmp(blockWeapon[7], block_weapons_list[i]) == && !(GetUserFlagBits(client) & ADMFLAG_GENERIC))
                {   
                    return 
    Plugin_Handled
                } 
            } 
        return 
    Plugin_Continue


    // Запрещает покупать заблокированное оружие.
    public Action:CS_OnBuyCommand(client, const String:weapon[])  

        for(new 
    0Weapon_Count; ++i)
        { 
            if(
    strcmp(weaponblock_weapons_list[i]) == && !(GetUserFlagBits(client) & ADMFLAG_GENERIC))
            { 
                
    PrintToChat(client"Разрешено только администратору"); // Сообщение клиенту.  
                
    return Plugin_Handled
            } 
        } 
           return 
    Plugin_Continue
    }
     
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.978
    Hejter, если он админ мы зря получаем имя оружия и сравниваем. Не админов можно отсеять сразу. Да и зачем 2 раза проверять

    PHP:
    public Action:WeaponEquip(clientweapon)  
    {
        if(
    GetUserAdmin(client) == INVALID_ADMIN_ID)
        {
            
    decl String:blockWeapon[32], i;  
            
    GetEntityClassname(weaponblockWeaponsizeof(blockWeapon)); 

            for(
    0Weapon_Count; ++i)  
            {  
                if(
    strcmp(blockWeapon[7], block_weapons_list[i]) == 
                {    
                    return 
    Plugin_Handled;  
                }  
            }
        }
        return 
    Plugin_Continue;  
    }  

    // Запрещает покупать заблокированное оружие. 
    public Action:CS_OnBuyCommand(client, const String:weapon[])   
    {  
        if(
    GetUserAdmin(client) == INVALID_ADMIN_ID)
        {
            for(new 
    0Weapon_Count; ++i
            {  
                if(
    strcmp(weaponblock_weapons_list[i]) == 0
                {  
                    
    PrintToChat(client"Разрешено только администратору"); // Сообщение клиенту.   
                    
    return Plugin_Handled;  
                }  
            }
        }
        return 
    Plugin_Continue;  
     
  8. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Теперь понятно.
     
  9. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.978
    А вообще на админ права проверять нужно бы при входе и просто хранить в bool
     
  10. Юра Шмигель

    Юра Шмигель

    Сообщения:
    32
    Симпатии:
    8
    пока без bool попробую

    Добавлено через 20 минут
    Ну вот эта версия вроде работает :) всем спасибо! Рико отдельное СПАСИБО
     
    Последнее редактирование: 24 ноя 2015
  11. -_-Ecarus-_-

    -_-Ecarus-_-

    Сообщения:
    69
    Симпатии:
    0
    Как ограничить покупку грант всем, кроме админов на css v34?
     
  12. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.507
    Симпатии:
    1.961
    PHP:
    new bool:g_bIsAdmin[MAXPLAYERS 1];

    public 
    OnClientPostAdminCheck(clientg_bIsAdmin[client] = GetUserAdmin(client) != INVALID_ADMIN_ID;

    public 
    Action:CS_OnBuyCommand(client, const String:weapon[])
    {
        return 
    StrContains(weapon"grenade") == -|| g_bIsAdmin[client] ? Plugin_Continue:Plugin_Handled;
    }
     
  13. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    А лично дле тебя и правда так удобно читать код?
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.507
    Симпатии:
    1.961
    Оффтоп
     
    Danyas нравится это.
  15. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    А лично дле тебя и правда так удобно читать код?
     
  16. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.714
    Симпатии:
    451
    Инклюд cstrike разве не нужен?
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.507
    Симпатии:
    1.961
    Для компиляции - нет.
     
  18. -_-Ecarus-_-

    -_-Ecarus-_-

    Сообщения:
    69
    Симпатии:
    0
    Код:
    #pragma semicolon 1
    
    #include <sdkhooks>
    #include <colors>
    
    // Список блокируемого оружия.
    new const String:block_weapons_list[][] =
    {
        "incgrenade", "smokegrenade"
    };
    
    #define Weapon_Count sizeof(block_weapons_list)
    
    public OnClientPostAdminCheck(client){SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);}
    public OnClientDisconnect(client){SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);}
    
    // Запрещает использовать и поднимать запрещенное оружие.
    public Action:WeaponEquip(client, weapon)   
    {
        if(GetUserAdmin(client) == INVALID_ADMIN_ID)
        {
            decl String:blockWeapon[32], i;   
            GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon)); 
    
            for(i = 0; i < Weapon_Count; ++i)   
            {   
                if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0 ) 
                {     
                    return Plugin_Handled;   
                }   
            }
        }
        return Plugin_Continue;   
    }   
    
    // Запрещает покупать заблокированное оружие. 
    public Action:CS_OnBuyCommand(client, const String:weapon[])   
    {   
        if(GetUserAdmin(client) == INVALID_ADMIN_ID)
        {
            for(new i = 0; i < Weapon_Count; ++i) 
            {   
                if(strcmp(weapon, block_weapons_list[i]) == 0) 
                {   
                    PrintToChat(client, "\x01[\x04Замораживающая граната\x01] \x03Разрешено только администратору"); // Сообщение клиенту.   
                    return Plugin_Handled;   
                }   
            }
        }
        return Plugin_Continue;   
    } 

    Как сделать, чтобы происходила проверка по определённому флагу доступа?
     
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.507
    Симпатии:
    1.961
    Оба замени на:
    PHP:
    if(!GetAdminFlag(GetUserAdmin(client), Admin_Root))
    Где: Admin_Root - административный флаг доступа (Root, "z").
    Код:
        Admin_Reservation = 0,    /**< Reserved slot */
        Admin_Generic,            /**< Generic admin abilities */
        Admin_Kick,                /**< Kick another user */
        Admin_Ban,                /**< Ban another user */
        Admin_Unban,            /**< Unban another user */
        Admin_Slay,                /**< Slay/kill/damage another user */
        Admin_Changemap,        /**< Change the map */
        Admin_Convars,            /**< Change basic convars */
        Admin_Config,            /**< Change configuration */
        Admin_Chat,                /**< Special chat privileges */
        Admin_Vote,                /**< Special vote privileges */
        Admin_Password,            /**< Set a server password */
        Admin_RCON,                /**< Use RCON */
        Admin_Cheats,            /**< Change sv_cheats and use its commands */
        Admin_Root,                /**< All access by default */
        Admin_Custom1,            /**< First custom flag type */
        Admin_Custom2,            /**< Second custom flag type */
        Admin_Custom3,            /**< Third custom flag type */
        Admin_Custom4,            /**< Fourth custom flag type */
        Admin_Custom5,            /**< Fifth custom flag type */
        Admin_Custom6,            /**< Sixth custom flag type */