добавить звук в limit_awp

Voron24rus

Только чтение
Заблокированные
Пользователь
Регистрация
1 Апр 2019
Сообщения
15
Симпатии
0
Предупреждения
200
здравствуйте форумчане)
как добавить звук например blip1.wav когда пишет что покупка запрещена низкий онлайн и у вас отобрано awp
сам пробовал, плагин компилировал но звук не скачивал
помогите ребят

Код:
#include < amxmodx >
#include <center_msg_fix>
#include < reapi >

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

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

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


#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 у кт)
*/

//#define NOEND            //Если разкоментировано, то не будет отбирать АВП в конце раунда из-за низкого онлайна. [Если онлайн ниже чем указан в кваре и человек сам дропнет авп или потеряет ее, то подобрать заного не сможет]
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//

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

enum EBLOCKS {
    BL_RND = 0,
    BL_LIMIT,
    BL_ONLINE
};

enum {
    AWP_DROP = 0,
    AWP_NONE,
    AWP_BUY,
    AWP_PICK_UP
};

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

#if defined PERCENT_PLAYERS
new gLimit;
#endif

public plugin_precache(){
    register_plugin("[ReAPI] AWPoff", "1.4.2", "PAffAEJIkA :3");
    
    gCvar[CVAR_ONLINE] =             register_cvar("awp_players_low", "12");        //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 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", "0");        //Иммунитет для админов. [0 - Выкл | 1 - Иммунитет от лимита кол-ва АВП | 2 - Иммунитет от блока АВП по раундам | 3 - Имумунитет от 1 и 2]
    gCvar[CVAR_ROUNDS_LIMIT] =         register_cvar("awp_limit_round", "1");        //На сколько раундов блочить?
}

public plugin_init(){   
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    static maps[][] = { "awp", "aim", "35hp" };
    for(new i; i < sizeof maps; i++){
        if(containi(mapname, maps[i]) != -1){
            pause("ad");
            return;
        }
    }
    
    COST_AWP = rg_get_weapon_info(WEAPON_AWP, WI_COST);
    
    RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
    RegisterHookChain(RG_BuyWeaponByWeaponID, "BuyWeaponByWeaponID");
    RegisterHookChain(RG_CBasePlayer_RemovePlayerItem, "RemoveItem");
    
    register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");
    register_logevent("EventRestartRound", 2, "1&Restart_Round_");
    #if !defined NOEND
    register_logevent("EventRoundEnd", 2, "1=Round_End");
    #endif
}

#if AMXX_VERSION_NUM < 183
public plugin_cfg()
    server_exec();
#endif

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

public EventRoundStart(){
    gRound ++;
    gCount = 0;
    
    new pl[32];
    get_pl(pl, gCount);
    
    #if defined PERCENT_PLAYERS
    const MAX_PERCENT = 100;
    gLimit = gCount * get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]) / MAX_PERCENT;
    #endif
    
    sAwp[TEAM_CT] = 0;
    sAwp[TEAM_TERRORIST] = 0;
    
    for(new i,id; i < gCount; i ++){
        id = pl[i];
        gTeam[id] = get_member(id, m_iTeam);
        
        #if defined ALLPLAYERS
        if(!(TEAM_UNASSIGNED < gTeam[id] < TEAM_SPECTATOR) || !is_user_valid(id))
            continue;
        #endif
        
        switch(gAwp[id]){           
            case AWP_NONE:    continue;
            case AWP_DROP:{
                gAwp[id] = AWP_NONE;
                gBlock[id] = gRound + get_pcvar_num(gCvar[CVAR_ROUNDS_LIMIT]);
            }
            default:        sAwp[gTeam[id]] ++;
        }
    }
}

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

#if !defined NOEND
public EventRoundEnd(){
    new players[32], count;
    get_pl(players, count);
    
    if(count >= get_pcvar_num(gCvar[CVAR_ONLINE]))
        return PLUGIN_CONTINUE;
    
    for(new i = 0; i < count; i ++){       
        #if defined ALLPLAYERS       
        if(!is_user_valid(players[i]))   
            continue;
        #endif

        return_awp(players[i]);
    }
    EventRestartRound();
    return PLUGIN_CONTINUE;
}
#endif

stock get_pl(players[32], &count){
    #if defined ALLPLAYERS
    get_players(players, count);
    #else
    get_players(players, count, "ch");   
    new players1[32], cnt = 0;
    for(new i; i < count; i ++){
        if(TEAM_UNASSIGNED < get_member(players[i], m_iTeam) < TEAM_SPECTATOR)
            players1[cnt ++] = players[i];
    }
    
    players = players1;
    count = cnt;
    #endif
}

stock 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(id, print_center, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
}

public BuyWeaponByWeaponID(id, WeaponIdType:weaponID){
    if(weaponID != WEAPON_AWP || !is_user_valid(id) || gAwp[id] > AWP_NONE)
        return HC_CONTINUE;
        
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
    
    gAwp[id] = AWP_BUY;
    
    if(check_awp(id))
        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)){
        gAwp[id] = AWP_PICK_UP;
        return HC_CONTINUE;
    }
    
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}

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

bool: check_awp(id, check = false, chat = true){
    new EBLOCKS:block;
    
    if(gBlock[id] > gRound)
        block = BL_RND;
    else if(gCount < get_pcvar_num(gCvar[CVAR_ONLINE]))
        block = BL_ONLINE;
    else if(get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS])){
        
        new cvar = get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]);
        if(cvar && cvar != 2 && 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
            block = BL_LIMIT;
    }else
        return true;
        
    if(chat){                    //Слишком туп, чтобы придумать какой нибудь другой вариант с чатом.
        switch(block){
            case BL_RND:{
                new c = gBlock[id] - gRound;
                client_print(id, print_center, MSG_ROUND, MSG_PREFIX, c, get_text(c));
            }
            case BL_ONLINE:        client_print(id, print_center, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
            case BL_LIMIT:        client_print(id, print_center, "%s %s", MSG_PREFIX, MSG_LIMIT);
        }
    }   
    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;
    
    new flag = get_user_flags(id) & FLAG, cvar = get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]);
    gAwp[id] = (flag && cvar > 1) ? AWP_NONE : AWP_DROP;
    
    if(!get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS]))
        return;
        
    if(cvar && cvar != 2 && 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;
}
 
get_text(tm){
    new ost = tm % 10, ost2 = tm % 100, buff[16];
    
    if(ost2 >= 5 && ost2 <= 20)
        format(buff, charsmax(buff), "раундов");
    else{
        switch(ost){
            case 1:            format(buff, charsmax(buff), "раунд");
            case 2..4:        format(buff, charsmax(buff), "раунда");
            case 0, 5..9:    format(buff, charsmax(buff), "раундов");
        }
    }
    return buff;
}
 

GIT

Пользователь
Регистрация
9 Июн 2017
Сообщения
147
Симпатии
7
Пол
Мужской
Между 211 и 212 строчкой добавь
client_cmd(id, "spk buttons/blip1.wav");
Я думаю еще куда-то нужно добавить!
 

IIuToH

Только чтение
Заблокированные
Регистрация
5 Авг 2018
Сообщения
143
Симпатии
0
Предупреждения
260
не поможет
 

Voron24rus

Только чтение
Заблокированные
Пользователь
Регистрация
1 Апр 2019
Сообщения
15
Симпатии
0
Предупреждения
200
GIT, даже так делал но не пашет

public plugin_precache(){
precache_sound("buttons/blip1.wav");
 

GIT

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

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

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

//■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■//
#define AWP_ONLINE                                        //Закоментируйте, если не нужен функционал отключения авп при низком онлайне
#define AWP_LIMIT                                        //Закоментируйте, если не нужен функционал ограничения авп по командам
#define AWP_ROUND_LIMIT                                    //Закоментируйте, если не нужен функционал ограничения авп по раундам

// ^4 - зелёный | ^3 - цвет тимы (КТ - синий | Т - красный | SPEC - серый) | ^1 - жёлтый
#define MSG_PREFIX             "^4[^3AWP Контроль^4]"
#define MSG_LOWONLINE         "У вас ^3отобрано AWP^4. ^3Причина: ^4АВП ^35 ^4на ^35"
#define MSG_LIMIT             "У вас ^3отобрано AWP^4. ^3Причина: ^4превышен ^3лимит^4."
#define MSG_ROUND             "%s У вас ^3отобрано AWP^4. ^3Причина: ^4подождите ^3%d %s"

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

#define FLAG                 ADMIN_RESERVATION               //Флаг для иммунитета от лимита и блока на раунды

#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 у кт)
*/

//#define NOEND            //Если разкоментировано, то не будет отбирать АВП в конце раунда из-за низкого онлайна. [Если онлайн ниже чем указан в кваре и человек сам дропнет авп или потеряет ее, то подобрать заного не сможет]
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//

#if !defined AWP_LIMIT && defined PERCENT_PLAYERS
    #undef PERCENT_PLAYERS
#endif
#if !defined AWP_ONLINE && !defined NOEND
    #define NOEND
#endif

enum ECVARS {
    CVAR_ONLINE,
    CVAR_LIMIT_AWP_STATUS,
    CVAR_LIMIT_MAX_AWP,
    CVAR_LIMIT_IMMUN,
    CVAR_ROUNDS_LIMIT
};

enum EBLOCKS {
    BL_RND,
    BL_LIMIT,
    BL_ONLINE
};

enum {
    AWP_DROP = 0,
    AWP_NONE,
    AWP_BUY,
    AWP_PICK_UP
};

new gCvar[ECVARS], sCvars[ECVARS], COST_AWP, gAwp[MAX_PLAYERS + 1], gCount;

#if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
new TeamName: gTeam[MAX_PLAYERS + 1];
#endif
#if defined AWP_LIMIT
new sAwp[TeamName: TEAM_SPECTATOR];
#endif
#if defined AWP_ROUND_LIMIT
new gBlock[MAX_PLAYERS + 1], gRound;
#endif

#if defined PERCENT_PLAYERS
new gLimit;
#endif

public plugin_precache(){
    register_plugin("[ReAPI] AWPoff", "1.4.3", "PAffAEJIkA :3");
    
    #if !defined AWP_LIMIT && !defined AWP_ROUND_LIMIT && !defined AWP_ONLINE
    set_fail_state("xmm, ti ubral ves' funkcional plagina, no postavil ego na server... ti molodec!");
    #endif
    
    #if defined AWP_ONLINE
    gCvar[CVAR_ONLINE] =             register_cvar("awp_players_low", "10");        //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
    #endif
    #if defined AWP_LIMIT
    gCvar[CVAR_LIMIT_AWP_STATUS] =     register_cvar("awp_limit", "1");            //Включить|Выключить лимит авп [Стандартно: включен]
    gCvar[CVAR_LIMIT_MAX_AWP] =        register_cvar("awp_limit_max", "13");        //Сколько АВП разрешено при лимите [Стандартно по 2 авп на команду] | Если раскоментирован PERCENT_PLAYERS, то сюда вписывать нужный процент
    gCvar[CVAR_LIMIT_IMMUN] =         register_cvar("awp_limit_immun", "1");        //Иммунитет для админов. [0 - Выкл | 1 - Иммунитет от лимита кол-ва АВП | 2 - Иммунитет от блока АВП по раундам | 3 - Имумунитет от 1 и 2]
    #endif
    #if defined AWP_ROUND_LIMIT
    gCvar[CVAR_ROUNDS_LIMIT] =         register_cvar("awp_limit_round", "2");        //На сколько раундов блочить?
    #endif
}

public plugin_init(){   
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    static maps[][] = { "awp", "aim", "35hp" , "$2000$" , "fun" };
    for(new i; i < sizeof maps; i++){
        if(containi(mapname, maps[i]) != -1){
            pause("ad");
            return;
        }
    }
    
    COST_AWP = rg_get_weapon_info(WEAPON_AWP, WI_COST);
    
    RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
    RegisterHookChain(RG_BuyWeaponByWeaponID, "BuyWeaponByWeaponID");
    RegisterHookChain(RG_CBasePlayer_RemovePlayerItem, "RemoveItem");
    
    register_concmd("awpoff_reload", "load_cvars");
    
    register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");
    register_logevent("EventRestartRound", 2, "1&Restart_Round_");
    #if !defined NOEND
    register_logevent("EventRoundEnd", 2, "1=Round_End");
    #endif
}

public plugin_cfg(){
    #if AMXX_VERSION_NUM < 183
    server_exec();
    #endif
    load_cvars(0);
}

public load_cvars(id){
    #if defined AWP_ONLINE
    sCvars[CVAR_ONLINE] =                     get_pcvar_num(gCvar[CVAR_ONLINE]);
    #endif
    #if defined AWP_LIMIT
    sCvars[CVAR_LIMIT_AWP_STATUS] =         get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS]);
    sCvars[CVAR_LIMIT_MAX_AWP] =             get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]);
    sCvars[CVAR_LIMIT_IMMUN] =                 get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]);
    #endif
    #if defined AWP_ROUND_LIMIT
    sCvars[CVAR_ROUNDS_LIMIT] =             get_pcvar_num(gCvar[CVAR_ROUNDS_LIMIT]);
    #endif
    if(IsPlayer(id))   
        client_print(id, print_center, "[AWPoff] Cvars have been reloaded!");
}

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

public EventRoundStart(){
    #if defined AWP_ROUND_LIMIT
    gRound ++;
    #endif
    
    gCount = 0;   
    
    static pl[32];
    get_pl(pl, gCount);
    
    #if defined PERCENT_PLAYERS
    const MAX_PERCENT = 100;
    gLimit = gCount * sCvars[CVAR_LIMIT_MAX_AWP] / MAX_PERCENT;
    #endif
    
    #if defined AWP_LIMIT
    sAwp[TEAM_CT] = 0;
    sAwp[TEAM_TERRORIST] = 0;
    #endif
    
    #if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
    for(new i,id; i < gCount; i ++){
        id = pl[i];
        
        gTeam[id] = get_member(id, m_iTeam);   
        #if defined ALLPLAYERS
        if(!(TEAM_UNASSIGNED < gTeam[id] < TEAM_SPECTATOR) || !is_user_valid(id))
            continue;
        #endif
        
        switch(gAwp[id]){           
            case AWP_NONE:    continue;
            #if defined AWP_ROUND_LIMIT
            case AWP_DROP:{
                gAwp[id] = AWP_NONE;
                gBlock[id] = gRound + sCvars[CVAR_ROUNDS_LIMIT];
            }
            #endif
            #if defined AWP_LIMIT
            default:        sAwp[gTeam[id]] ++;
            #endif
        }
    }
    #endif
}

public EventRestartRound(){
    #if defined AWP_LIMIT
    sAwp[TEAM_CT] = 0;
    sAwp[TEAM_TERRORIST] = 0;
    #endif
    #if defined  AWP_ROUND_LIMIT
    gRound = 0;
    arrayset(gBlock, false, sizeof gBlock);
    #endif
    arrayset(gAwp, AWP_NONE, sizeof gAwp);
}

#if !defined NOEND
public EventRoundEnd(){
    new players[32], count;
    get_pl(players, count);
    
    if(count >= sCvars[CVAR_ONLINE])
        return PLUGIN_CONTINUE;
    
    for(new i = 0; i < count; i ++){       
        #if defined ALLPLAYERS       
        if(!is_user_valid(players[i]))   
            continue;
        #endif

        return_awp(players[i]);
    }
    EventRestartRound();
    return PLUGIN_CONTINUE;
}
#endif

stock get_pl(players[32], &count){
    #if defined ALLPLAYERS
    get_players(players, count);
    #else
    get_players(players, count, "ch");   
    new players1[32], cnt = 0;
    for(new i; i < count; i ++){
        if(TEAM_UNASSIGNED < get_member(players[i], m_iTeam) < TEAM_SPECTATOR)
            players1[cnt ++] = players[i];
    }
    
    players = players1;
    count = cnt;
    #endif
}

stock 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);
    client_cmd(id, "spk buttons/button2.wav");
}

public BuyWeaponByWeaponID(id, WeaponIdType:weaponID){
    if(weaponID != WEAPON_AWP || !is_user_valid(id) || gAwp[id] > AWP_NONE)
        return HC_CONTINUE;
        
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
    
    if(check_awp(id)){
        gAwp[id] = AWP_BUY;
        return HC_CONTINUE;
    }
    
    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)){
        gAwp[id] = AWP_PICK_UP;
        return HC_CONTINUE;
    }
    
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}

//Native's
public plugin_natives()
    register_native("awpoff_check", "check_native", true);
    
public check_native(id, chat){
    #if defined AWP_LIMIT
    #if defined ALLPLAYERS
    if(!(TEAM_UNASSIGNED < gTeam[id] < TEAM_SPECTATOR))
        return false;
    #endif
    return check_awp(id, true, chat);
    #else
    return check_awp(id, chat);
    #endif
}
//Native's

#if defined AWP_LIMIT
bool: check_awp(id, check = false, chat = true)
#else
bool: check_awp(id, chat = true)
#endif
{
    new EBLOCKS:block;
    
    #if defined AWP_ROUND_LIMIT
    if(gBlock[id] > gRound)
        block = BL_RND;
    else
    #endif
    #if defined AWP_ONLINE
    if(gCount < sCvars[CVAR_ONLINE])
        block = BL_ONLINE;
    else
    #endif
    #if defined AWP_LIMIT
    if(sCvars[CVAR_LIMIT_AWP_STATUS]){
        if(sCvars[CVAR_LIMIT_IMMUN] && sCvars[CVAR_LIMIT_IMMUN] != 2 && get_user_flags(id) & FLAG)
            return true;
        
        #if defined PERCENT_PLAYERS       
        if(sAwp[gTeam[id]] < gLimit)
        #else
        if(sAwp[gTeam[id]] < sCvars[CVAR_LIMIT_MAX_AWP])
        #endif
        {
            if(!check)
                sAwp[gTeam[id]] ++;
            return true;
        }else
            block = BL_LIMIT;
    }else
    #endif
        return true;
        
    if(chat){                    //Слишком туп, чтобы придумать какой нибудь другой вариант с чатом.
        switch(block){
            #if defined AWP_ROUND_LIMIT
            case BL_RND:{
                new c = gBlock[id] - gRound;
                client_print_color(id, false, MSG_ROUND, MSG_PREFIX, c, get_text(c));
                client_cmd(id, "spk buttons/button2.wav");
            }
            #endif
            #if defined AWP_ONLINE
            case BL_ONLINE:{
                   client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
                client_cmd(id, "spk buttons/button2.wav");
            }                   
            #endif
            #if defined AWP_LIMIT
            case BL_LIMIT:{   
                 client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LIMIT);
                    client_cmd(id, "spk buttons/button2.wav");
            }
            #endif
        }
    }   
    return false;
}

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

stock minus_awp(id){   
    if(!is_user_valid(id) || gAwp[id] <= AWP_NONE)
        return;
    
    #if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
    new flag = get_user_flags(id) & FLAG;
    #endif
    
    #if defined AWP_ROUND_LIMIT
    gAwp[id] = (flag && sCvars[CVAR_LIMIT_IMMUN] > 1) ? AWP_NONE : AWP_DROP;
    #else
    gAwp[id] = AWP_NONE;
    #endif
    
    #if defined AWP_LIMIT
    if(!sCvars[CVAR_LIMIT_AWP_STATUS])
        return;
        
    if(sCvars[CVAR_LIMIT_IMMUN] && sCvars[CVAR_LIMIT_IMMUN] != 2 && flag)
        return;
    
    sAwp[gTeam[id]] --;   
    #endif
}
    
stock bool: is_user_valid(id){
    if(is_user_bot(id) || is_user_hltv(id))       
        return false;   
    return true;
}
 
stock get_text(tm){
    new ost = tm % 10, ost2 = tm % 100, buff[16];
    
    if(ost2 >= 5 && ost2 <= 20)
        format(buff, charsmax(buff), "раундов");
    else{
        switch(ost){
            case 1:            format(buff, charsmax(buff), "раунд");
            case 2..4:        format(buff, charsmax(buff), "раунда");
            case 0, 5..9:    format(buff, charsmax(buff), "раундов");
        }
    }
    return buff;
}
 

Voron24rus

Только чтение
Заблокированные
Пользователь
Регистрация
1 Апр 2019
Сообщения
15
Симпатии
0
Предупреждения
200
GIT, не работает! звук даже не скачивается, с кс удалил для проверки скачивания
GIT, а всё решил спс, прекеш забыл
 
Последнее редактирование:
Сверху Снизу