Упрощённый плагин Weaponrestrict

Тема в разделе "Программирование / Скриптинг", создана пользователем Equality, 6 апр 2012.

  1. Equality

    Equality

    Сообщения:
    53
    Симпатии:
    8
    Пишу плагин для сервера КСС в первый раз. Вообщем, появилась необходимость написать нечто вроде Weaponrestrict. Этот плагин (его старые версии) ну никак не хочеть адекватно работать на сервере кс 34 версии (см, сдхуукс и пр старые).

    Решил написать для начала самый простой и необходимый пример - запрет и резрешение использовать флешки.
    Например, хочу, чтоб флешки отключались при вводе админом некой команды в консоль:

    Код:
    public OnPluginStart()
    {
    RegAdminCmd("sm_flash_0", Flash_0, ADMFLAG_BAN, "Flashbangs are not allowed");
    }
    Так ведь? А далее нашёл пример в интернете для запрета покупки оружия:

    Код:
    public Action:CS_OnBuyCommand(client, const String:weapon[]) 
     { 
         if (StrEqual(weapon, "flashbang", false)) 
         { 
             PrintToChat(client, "Flashbangs are not allowed"); 
             return Plugin_Handled; 
         } 
         return Plugin_Continue; 
     }
    Но, вот возникает вопрос, а как это связать? Чтоб запрет покупки оружия выполнялся при использовании команды sm_flash_0 ?
    К сожалению, синтаксис знаю на уровне нескольких статей на эту тему...но, так и не понял, как сделать.
    Ещё, как делается запрет на то, чтоб подбирать запрещенное оружие с земли? Или может лучше использовать библиотеку "restrict" ?
     
  2. S1deX

    S1deX Скриптер ;)

    Сообщения:
    129
    Симпатии:
    204
    PHP:
    #include <sourcemod>
    #include <cstrike>

    new bool:g_bfEnabled true;

    public 
    OnPluginStart()
    {
     
    RegAdminCmd("sm_flash_0"Flash_0ADMFLAG_BAN"Flashbangs are not allowed");
    }

    public 
    Action:Flash_0(clientargs)
    {
     
    g_bfEnabled false;
    }

    public 
    Action:CS_OnBuyCommand(client, const String:weapon[]) 

        if (
    StrEqual(weapon"flashbang"false) && !g_bfEnabled
        { 
            
    PrintToChat(client"Flashbangs are not allowed"); 
            return 
    Plugin_Handled
        } 
        return 
    Plugin_Continue
    }
     
    Equality нравится это.
  3. Equality

    Equality

    Сообщения:
    53
    Симпатии:
    8
    Спасибо огромное!
    ПС: А где можно более детально почитать о том, как использовать adminmenu, кроме как здесь?

    ----------------------------------------------------------------

    К сожалению, данный код не работает( Плагин компилируется без ошибок, но в игре:
    "Unknown command: sm_flash_0"
     
    Последнее редактирование: 6 апр 2012
  4. Игорь Охремчук

    Игорь Охремчук Админ uaplayer.com

    Сообщения:
    243
    Симпатии:
    366
    Это ничего не значит и это пишет сам клиент, а на самом же деле, если команда зарегистирована через какой-либо плагин, то она на сервере работает. Добавь PrintToChat();, чтоб убедится в этом. Ну а блочить покупку можно не только через форвард, но и через AddCommandListener(); или RegConsoleCmd();
    PHP:
    public OnPluginStart()
    {
        
    AddCommandListener(CommandBuy"buy");
    }

    public 
    Action:CommandBuy(client, const String:command[], args)
    {
        
    decl String:sText[64];
        
    GetCmdArg(1sTextsizeof(sText));
        if(!
    strcmp(sText"flashbang"false))
        {
            return 
    Plugin_Handled;
        }
        
        return 
    Plugin_Continue;
    }
    А про админменю там написано предостаточно, чтоб разобратся.
    PHP:
     
    NagarD нравится это.
  5. S1deX

    S1deX Скриптер ;)

    Сообщения:
    129
    Симпатии:
    204
    Лучше юзать кстрайк форвард, ну или все-таки контролить еще и команды rebuy и autobuy =)
     
    Equality нравится это.
  6. Игорь Охремчук

    Игорь Охремчук Админ uaplayer.com

    Сообщения:
    243
    Симпатии:
    366
    А ты попробуй на сервере что-нибудь заблочить только через buy)
     
    Equality нравится это.
  7. Equality

    Equality

    Сообщения:
    53
    Симпатии:
    8
    То есть, даже, если клиент отвечает, что команда неизвестная, она всё равно на сервере работает? То есть, теоретически, несмотря на сообщение, флешки должны были заблокироватся для использования? Но, тогда почему я всё равно могу нормально их использовать? Флешки однозначно не ограничелись.
     
  8. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    PHP:
    #include <sourcemod>
    #include <cstrike>

    new bool:g_bfEnabled true;

    public 
    OnPluginStart()
    {
     
    RegAdminCmd("sm_flash_0"Flash_0ADMFLAG_BAN"Flashbangs are not allowed");
    }

    public 
    Action:Flash_0(clientargs)
    {
     
    g_bfEnabled false;
     return 
    Plugin_Handled;
    }

    public 
    Action:CS_OnBuyCommand(client, const String:weapon[]) 

        if (
    StrEqual(weapon"flashbang"false) && !g_bfEnabled
        { 
            
    PrintToChat(client"Flashbangs are not allowed"); 
            return 
    Plugin_Handled
        } 
        return 
    Plugin_Continue
    }
     
    Equality нравится это.