Установка администратору хп

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

  1. Ice_Sochi

    Ice_Sochi

    Сообщения:
    89
    Симпатии:
    22
    Раньше никогда кодингом не занимался, решил начать с малого: плагин, устанавливающий админам с флагом бана 110 хп в начале раунда. Игра ксс.
    Просидев около часа:
    #define PLUGIN_AUTHOR ""
    #define PLUGIN_VERSION "1.0"

    #include <sourcemod>
    #include <sdktools>
    //#include <sdkhooks>

    public Plugin:myinfo =
    {
    name = "AdminHp",
    author = PLUGIN_AUTHOR,
    description = "1",
    version = PLUGIN_VERSION,
    url = ""
    }
    public OnPluginStart()
    {
    public HookEvent("round_start", round_start);
    }
    public round_start(Handle:event, const String:name[], bool:dontBroadcast)
    {
    if (CheckAdminBan()) PrintToChat("Вы получаете 110 хп как админ"); //насколько я понял, тут должно устанавливаться хп админу
    else Plugin_Handled;
    }
    bool:CheckAdminBan()
    {
    for (new i = 1, i <= MaxClients, i++)
    {
    if(IsClientInGame(i) && GetUserFlagBits(i) & ADMFLAG_BAN)
    {
    return true;
    }
    }
    return false;
    }
    Подскажите пожалуйста, как осуществить саму выдачу хп, желательно с пояснениями

    Компилятор ругается тоже:
    error 021: symbol already defined: "i"
    warning 204: symbol is assigned a value that is never used: "i"
    Done
    Оффтоп
     
  2. Danyas

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

    Сообщения:
    1.719
    Симпатии:
    459
    PHP:
    public OnPluginStart()
    {
        
    HookEvent("round_start"round_start);
    }


    public 
    round_start(Handle:event, const String:name[], bool:dontBroadcast)
    {
        for (new 
    0<= MaxClientsi++)
        {
            if(
    CheckAdminBan(i))
            {
                
    SetEntityHealth(i110);
            }
        }
    }

    bool:CheckAdminBan(client)
    {
        if(
    IsClientInGame(client) && GetUserFlagBits(client) & ADMFLAG_BAN)
        {
            return 
    true;
        }
        return 
    false;
    }
    --- Добавлено позже ---
    Да и вообще, логичней было бы это делать в player_spawn
     
  3. AlmazON

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

    Сообщения:
    4.540
    Симпатии:
    1.984
    Возвращает все флаги (бит-сумму флагов), а не только один. Для проверки на конкретный админ-флаг, используй:
    PHP:
    GetAdminFlag(AdminId:idAdminFlag:flagAdmAccessMode:mode=Access_Effective);
    Функция PrintToChat всегда требует индекс клиента того, кому конкретно отсылаешь сообщение.
     
    Последнее редактирование: 23 авг 2016
  4. Ice_Sochi

    Ice_Sochi

    Сообщения:
    89
    Симпатии:
    22
    Получается, правильнее будет так?
    PHP:
    bool:CheckAdminBan(client)
    {
    if(
    IsClientInGame(client) && GetAdminFlag(AdminFlag:ban))
    {
    return 
    true;
    }
    return 
    false;
    }
     
  5. AlmazON

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

    Сообщения:
    4.540
    Симпатии:
    1.984
    PHP:
    GetAdminFlag(GetUserAdmin(client), Admin_Ban)
    Проверку делать на входе, далее просто сохранять в bool переменную.
    Я бы вообще сделал через SDKHook-событие.
     
  6. Ice_Sochi

    Ice_Sochi

    Сообщения:
    89
    Симпатии:
    22

    @AlmazON


    @Danyas

    Спасибо большое за подсказки, советы и помощь

    Сделал через player_spawn, мало ли кому-нибудь нужно будет
     

    Вложения:

    • adminhp.sp
      Размер файла:
      829 байт
      Просмотров:
      1
  7. AlmazON

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

    Сообщения:
    4.540
    Симпатии:
    1.984
    Неправильно. Для этого события цикл по всем игрокам не нужен, т.к. он вызывается ровно столько раз, сколько игроков отспавнилось (и именно для того, кто сейчас возродился).
    PHP:
    #define PLUGIN_AUTHOR ""
    #define PLUGIN_VERSION "1.0sdkhooks"

    #include <sourcemod>
    //Подключаем нашу библиотеку sdkhooks для компиляции и работы его же функций (SDKHook).
    #include <sdkhooks>

    public Plugin:myinfo =
    {
        
    name "AdminHp",
        
    author PLUGIN_AUTHOR,
        
    description "Установка определенного кол-ва HP админам с флагом 'b'",
        
    version PLUGIN_VERSION,
        
    url "hlmod.ru"
    }

    //Вызывается каждый раз для ВСЕХ игроков, когда все их административные полномочия (флаги) уже точно известны (client - индекс игрока при его вызове).
    public OnClientPostAdminCheck(client)
    {
        
    //Проверяем, что зашедший игрок имеет нужный нам флаг ('b' - ban).
        
    if (GetAdminFlag(GetUserAdmin(client), Admin_Ban))
        {
            
    //ТОЛЬКО нужному нам администратору "ставим" индивидуальный хук Спавна.
            //Таким образом, код никогда не будет вызываться на ботах и других игроках, которые нам не нужны. Избавляет от возможных багов и оптимизирует.
            
    SDKHook(clientSDKHook_SpawnPostSpawnPost);
        }
    }

    //Вызывается каждый раз, когда админ (с индексом client) возрождается.
    public SpawnPost(client)
    {
        
    //Собственно установка админу client количества HP, равным 110 (client, HP).
        
    SetEntityHealth(client110);
    }
     
  8. Ice_Sochi

    Ice_Sochi

    Сообщения:
    89
    Симпатии:
    22
    теперь понял, еще раз огромное спасибо