Настройка плагина

Статус
В этой теме нельзя размещать новые ответы.

Molodoi

Команда форума
Модератор
Регистрация
14 Июн 2017
Сообщения
608
Симпатии
126
Ребята помогите настроить плагин так чтоб когда на сервере менш чем 10 игроков авп было запрещено заранее спасибо.
Вот плагин
PHP:
#include < amxmodx >
#include < reapi >

#if AMXX_VERSION_NUM < 183
    #include < colorchat >
    #define MAX_PLAYERS 32
#endif

#define IsPlayer(%0)            (0 < %0 < 33)

//■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■//
// ^4 - зелёный | ^3 - цвет тимы (КТ - синий | Т - красный | SPEC - серый) | ^1 - жёлтый
#define MSG_PREFIX             "^3[^4AWP^3]"
#define MSG_LOWONLINE         "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT             "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."

#define ALLPLAYERS
/*
    Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).
    
    Пример:
    Допустим на сервере 5 ботов и 2 человека 1 хлтв.
    Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
    Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).
    
    Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG                 ADMIN_BAN                //Флаг для иммунитета от лимита

#define RETURN_MONEY                                //Возвращать деньги при отборе авп в конце раунда из-за низкого онлайна? (Закоментируйте, если не хотите, чтобы возвращало деньги)
#if defined RETURN_MONEY
    #define MONEY_AWP        4750                    //Сколько денег возвращать?
#endif

#define PERCENT_PLAYERS   
/*
    Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob'yasnyat']
    
    Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
    10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//

enum ECVARS {
    CVAR_ONLINE = 0,
    CVAR_LIMIT_AWP_STATUS,
    CVAR_LIMIT_MAX_AWP,
    CVAR_LIMIT_IMMUN
};

enum {
    AWP_NONE = 0,
    AWP_BUY,
    AWP_PICK_UP
};

new sAwp[TeamName: TEAM_SPECTATOR], gCount, gCvar[ECVARS], gAwp[MAX_PLAYERS + 1], TeamName: gTeam[MAX_PLAYERS + 1];

#if defined PERCENT_PLAYERS
new gLimit;
#endif

public plugin_init(){
    register_plugin("[ReAPI] AWPoff", "1.3", "PAffAEJIkA :3");
    
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp" };
    for(new i; i < sizeof maps; i++){
        if(containi(mapname, maps[i]) != -1){
            pause("ad");
            return;
        }
    }
    
    RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
    RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "RestrictItem");
    RegisterHookChain(RG_CBasePlayer_RemovePlayerItem, "RemoveItem");
    RegisterHookChain(RG_CBasePlayer_Spawn, "SpawnPlayer", true);
    
    register_logevent("EventRoundEnd", 2, "1=Round_End");
    register_logevent("EventRestartRound", 2, "1&Restart_Round_");
    
    gCvar[CVAR_ONLINE] =             register_cvar("awp_players_low", "8");        //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
    gCvar[CVAR_LIMIT_AWP_STATUS] =     register_cvar("awp_limit", "1");            //Включить|Выключить лимит авп [Стандартно: включен]
    gCvar[CVAR_LIMIT_MAX_AWP] =        register_cvar("awp_limit_max", "2");        //Сколько АВП разрешено при лимите [Стандартно по 2 авп на команду] | Если раскоментирован PERCENT_PLAYERS, то сюда вписывать нужный процент
    gCvar[CVAR_LIMIT_IMMUN] =         register_cvar("awp_limit_immun", "1");        //Включить|Выключить иммунитет от лимита(Людей с флагом не учитывает вообще) [Стандартно включен]
}

public client_disconnect(id)    if(IsPlayer(id))    minus_awp(id);

public EventRestartRound(){
    sAwp[TEAM_CT] = 0;
    sAwp[TEAM_TERRORIST] = 0;
    arrayset(gAwp, AWP_NONE, sizeof gAwp);
}

public EventRoundEnd(){
    new players[32];
    #if defined ALLPLAYERS
    get_players(players, gCount);
    #else
    new players1[32], gTT, gCT;
    get_players(players, gCT, "che", "CT");
    get_players(players1, gTT, "che", "TERRORIST");
    
    gCount = gTT + gCT;
    #endif
    
    #if defined PERCENT_PLAYERS
    const MAX_PERCENT = 100;
    gLimit = gCount * get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]) / MAX_PERCENT;
    #endif
    
    if(gCount >= get_pcvar_num(gCvar[CVAR_ONLINE]))
        return PLUGIN_CONTINUE;
    
    #if defined ALLPLAYERS
    for(new i = 0, id; i < gCount; i ++){
        id = players[i];
        
        if(!is_user_valid(id))   
            continue;

        return_awp(id);
    }
    #else
    for(new i = 0; i < gTT; i ++)
        return_awp(players1[i]);

    for(new i = 0; i < gCT; i ++)
        return_awp(players[i]);
    #endif
    
    EventRestartRound();
    return PLUGIN_CONTINUE;
}

return_awp(id){   
    if(gAwp[id] == AWP_NONE)
        return;
    
    rg_remove_item(id, "weapon_awp");
    #if defined RETURN_MONEY
    if(gAwp[id] == AWP_BUY)
        rg_add_account(id, MONEY_AWP);
    #endif
    client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
}

public RestrictItem(id, ItemID:item, ItemRestType:type){
    if(item != ITEM_AWP || !is_user_valid(id) || gAwp[id] != AWP_NONE || type != ITEM_TYPE_BUYING)
        return HC_CONTINUE;
    
    /* * * Первая "покупка" при нехватке денег проскакивает >< * * */
    const COST_AWP = 4750;
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
    /* * * Можете удалить этот "чудофикс", если он вам не нравится * * */
    
    gAwp[id] = AWP_BUY;
    
    if(check_awp(id, false))
        return HC_CONTINUE;
    
    gAwp[id] = AWP_NONE;
    
    SetHookChainReturn(ATYPE_INTEGER, true);
    return HC_SUPERCEDE;
}

public AddItem(id, pItem){
    if(get_member(pItem, m_iId) != WEAPON_AWP || gAwp[id] != AWP_NONE || !is_user_valid(id))
        return HC_CONTINUE;
    
    if(check_awp(id, false)){
        gAwp[id] = AWP_PICK_UP;
        return HC_CONTINUE;
    }
    
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}

public SpawnPlayer(id){
    if(!is_user_alive(id))
        return HC_CONTINUE;
    
    gTeam[id] = get_member(id, m_iTeam);
    return HC_CONTINUE;
}

//Native's
public plugin_natives()
    register_native("awpoff_check", "check_native", true);
    
public check_native(id)
    return check_awp(id, true);
//Native's

bool: check_awp(id, check){   
    if(gCount < get_pcvar_num(gCvar[CVAR_ONLINE]))
        client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
    else if(get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS])){
        
        if(get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]) && get_user_flags(id) & FLAG)
            return true;
        
        #if defined PERCENT_PLAYERS       
        if(sAwp[gTeam[id]] < gLimit)
        #else
        if(sAwp[gTeam[id]] < get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]))
        #endif
        {
            if(!check)
                sAwp[gTeam[id]] ++;
            return true;
        }else
            client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LIMIT);
    }else
        return true;
    
    return false;
}

public RemoveItem(id, pItem){
    if(get_member(pItem, m_iId) == WEAPON_AWP)
        minus_awp(id);
}

minus_awp(id){   
    if(!is_user_valid(id) || gAwp[id] == AWP_NONE)
        return;
    
    gAwp[id] = AWP_NONE;
    
    if(!get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS]))
        return;
        
    if(get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]) && get_user_flags(id) & FLAG)
        return;
    
    sAwp[gTeam[id]] --;   
}
    
bool: is_user_valid(id){
    if(is_user_bot(id))        return false;   
    if(is_user_hltv(id))    return false;   
    return true;
}
 

SPIRIT

Пользователь
Регистрация
11 Июл 2017
Сообщения
34
Симпатии
11
Пол
Мужской
PHP:
#include < amxmodx >
#include < reapi >

#if AMXX_VERSION_NUM < 183
    #include < colorchat >
    #define MAX_PLAYERS 32
#endif

#define IsPlayer(%0)            (0 < %0 < 33)

//■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■//
// ^4 - зелёный | ^3 - цвет тимы (КТ - синий | Т - красный | SPEC - серый) | ^1 - жёлтый
#define MSG_PREFIX             "^3[^4AWP^3]"
#define MSG_LOWONLINE         "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT             "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."

// #define ALLPLAYERS
/*
    Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).
    
    Пример:
    Допустим на сервере 5 ботов и 2 человека 1 хлтв.
    Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
    Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).
    
    Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG                 ADMIN_BAN                //Флаг для иммунитета от лимита

#define RETURN_MONEY                                //Возвращать деньги при отборе авп в конце раунда из-за низкого онлайна? (Закоментируйте, если не хотите, чтобы возвращало деньги)
#if defined RETURN_MONEY
    #define MONEY_AWP        4750                    //Сколько денег возвращать?
#endif

//#define PERCENT_PLAYERS   
/*
    Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob'yasnyat']
    
    Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
    10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//

enum ECVARS {
    CVAR_ONLINE = 0,
    CVAR_LIMIT_AWP_STATUS,
    CVAR_LIMIT_MAX_AWP,
    CVAR_LIMIT_IMMUN
};

enum {
    AWP_NONE = 0,
    AWP_BUY,
    AWP_PICK_UP
};

new sAwp[TeamName: TEAM_SPECTATOR], gCount, gCvar[ECVARS], gAwp[MAX_PLAYERS + 1], TeamName: gTeam[MAX_PLAYERS + 1];

#if defined PERCENT_PLAYERS
new gLimit;
#endif

public plugin_init(){
    register_plugin("[ReAPI] AWPoff", "1.3", "PAffAEJIkA :3");
    
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp" };
    for(new i; i < sizeof maps; i++){
        if(containi(mapname, maps[i]) != -1){
            pause("ad");
            return;
        }
    }
    
    RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
    RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "RestrictItem");
    RegisterHookChain(RG_CBasePlayer_RemovePlayerItem, "RemoveItem");
    RegisterHookChain(RG_CBasePlayer_Spawn, "SpawnPlayer", true);
    
    register_logevent("EventRoundEnd", 2, "1=Round_End");
    register_logevent("EventRestartRound", 2, "1&Restart_Round_");
    
    gCvar[CVAR_ONLINE] =             register_cvar("awp_players_low", "10");        //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
    gCvar[CVAR_LIMIT_AWP_STATUS] =     register_cvar("awp_limit", "1");            //Включить|Выключить лимит авп [Стандартно: включен]
    gCvar[CVAR_LIMIT_MAX_AWP] =        register_cvar("awp_limit_max", "2");        //Сколько АВП разрешено при лимите [Стандартно по 2 авп на команду] | Если раскоментирован PERCENT_PLAYERS, то сюда вписывать нужный процент
    gCvar[CVAR_LIMIT_IMMUN] =         register_cvar("awp_limit_immun", "1");        //Включить|Выключить иммунитет от лимита(Людей с флагом не учитывает вообще) [Стандартно включен]
}

public client_disconnect(id)    if(IsPlayer(id))    minus_awp(id);

public EventRestartRound(){
    sAwp[TEAM_CT] = 0;
    sAwp[TEAM_TERRORIST] = 0;
    arrayset(gAwp, AWP_NONE, sizeof gAwp);
}

public EventRoundEnd(){
    new players[32];
    #if defined ALLPLAYERS
    get_players(players, gCount);
    #else
    new players1[32], gTT, gCT;
    get_players(players, gCT, "che", "CT");
    get_players(players1, gTT, "che", "TERRORIST");
    
    gCount = gTT + gCT;
    #endif
    
    #if defined PERCENT_PLAYERS
    const MAX_PERCENT = 100;
    gLimit = gCount * get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]) / MAX_PERCENT;
    #endif
    
    if(gCount >= get_pcvar_num(gCvar[CVAR_ONLINE]))
        return PLUGIN_CONTINUE;
    
    #if defined ALLPLAYERS
    for(new i = 0, id; i < gCount; i ++){
        id = players[i];
        
        if(!is_user_valid(id))   
            continue;

        return_awp(id);
    }
    #else
    for(new i = 0; i < gTT; i ++)
        return_awp(players1[i]);

    for(new i = 0; i < gCT; i ++)
        return_awp(players[i]);
    #endif
    
    EventRestartRound();
    return PLUGIN_CONTINUE;
}

return_awp(id){   
    if(gAwp[id] == AWP_NONE)
        return;
    
    rg_remove_item(id, "weapon_awp");
    #if defined RETURN_MONEY
    if(gAwp[id] == AWP_BUY)
        rg_add_account(id, MONEY_AWP);
    #endif
    client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
}

public RestrictItem(id, ItemID:item, ItemRestType:type){
    if(item != ITEM_AWP || !is_user_valid(id) || gAwp[id] != AWP_NONE || type != ITEM_TYPE_BUYING)
        return HC_CONTINUE;
    
    /* * * Первая "покупка" при нехватке денег проскакивает >< * * */
    const COST_AWP = 4750;
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
    /* * * Можете удалить этот "чудофикс", если он вам не нравится * * */
    
    gAwp[id] = AWP_BUY;
    
    if(check_awp(id, false))
        return HC_CONTINUE;
    
    gAwp[id] = AWP_NONE;
    
    SetHookChainReturn(ATYPE_INTEGER, true);
    return HC_SUPERCEDE;
}

public AddItem(id, pItem){
    if(get_member(pItem, m_iId) != WEAPON_AWP || gAwp[id] != AWP_NONE || !is_user_valid(id))
        return HC_CONTINUE;
    
    if(check_awp(id, false)){
        gAwp[id] = AWP_PICK_UP;
        return HC_CONTINUE;
    }
    
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}

public SpawnPlayer(id){
    if(!is_user_alive(id))
        return HC_CONTINUE;
    
    gTeam[id] = get_member(id, m_iTeam);
    return HC_CONTINUE;
}

//Native's
public plugin_natives()
    register_native("awpoff_check", "check_native", true);
    
public check_native(id)
    return check_awp(id, true);
//Native's

bool: check_awp(id, check){   
    if(gCount < get_pcvar_num(gCvar[CVAR_ONLINE]))
        client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
    else if(get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS])){
        
        if(get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]) && get_user_flags(id) & FLAG)
            return true;
        
        #if defined PERCENT_PLAYERS       
        if(sAwp[gTeam[id]] < gLimit)
        #else
        if(sAwp[gTeam[id]] < get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]))
        #endif
        {
            if(!check)
                sAwp[gTeam[id]] ++;
            return true;
        }else
            client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LIMIT);
    }else
        return true;
    
    return false;
}

public RemoveItem(id, pItem){
    if(get_member(pItem, m_iId) == WEAPON_AWP)
        minus_awp(id);
}

minus_awp(id){   
    if(!is_user_valid(id) || gAwp[id] == AWP_NONE)
        return;
    
    gAwp[id] = AWP_NONE;
    
    if(!get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS]))
        return;
        
    if(get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]) && get_user_flags(id) & FLAG)
        return;
    
    sAwp[gTeam[id]] --;   
}
    
bool: is_user_valid(id){
    if(is_user_bot(id))        return false;   
    if(is_user_hltv(id))    return false;   
    return true;
}
 

Molodoi

Команда форума
Модератор
Регистрация
14 Июн 2017
Сообщения
608
Симпатии
126
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу