ReHLDS/ReAPI [2.5] VIP System

To be or not to be

Постоялец
Регистрация
9 Июн 2017
Сообщения
819
Симпатии
176
Fantomas17, если вам не нужны советы - тогда не просили бы пароль, сами бы нашли его.
 

Fantomas17

Пользователь
Регистрация
11 Июл 2017
Сообщения
98
Симпатии
12
Пол
Мужской
Fantomas17, если вам не нужны советы - тогда не просили бы пароль, сами бы нашли его.
куда копать мне уже подсказали, спасибку оставил, а его советы пусть прибережет для себя, какой от них прок если ответ мне уже и так известен? Он бы еще через год об этом написал
 

ReGIoN

Пользователь
Регистрация
21 Фев 2018
Сообщения
100
Симпатии
13
дак эту менюху продают
 

kostian911

Пользователь
Регистрация
21 Июл 2017
Сообщения
9
Симпатии
0
Пол
Мужской
Код:
/*
    pUzzlik created by http://www.neugomon.ru
    Original code: neygomon
*/

#include <amxmodx>
#include <reapi>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif   

/*    ########### Настройка плагина ############    */
#define ACCESS_FLAG    ADMIN_LEVEL_H    //    Флаги доступа к вип системе, вип меню, выдача амуниции и др.

/*    ***** Настройка функционала плагина. Для откл. закоментируйте строку *****    */
#define SHOW_DAMAGER    //    Вкл/выкл дамагер для випов
#define HP_ADD            //    Вкл/выкл прибавление ХП для випов (Вампирка)
#define ADMIN_LOADER    //    Совместимость с Admin Loader от неугомона (https://www.neugomon.ru/threads/486/)
#define SAY_WEAPONS        //    Позволяет включить чат команды "/ak47", "/m4a1", "/famas", "/awp", "/b51"
#define AUTO_MENU        //    Автоматически открывать в начале рануда Вип меню, включения происходит с WEAPONSRND раунда, по ум. отключено
#define VIP_SHOW_INFO    //    Оповещение при заходе вип игрока на сервер
#define VIP_TAB            //    Вип в табе

#define GIVE_PISTOL        //    Выдавать пистолет на спавне
#define GIVE_HEGRENADE    //    Выдавать взрывную гранату на спавне
#define GIVE_FlASHBANG    //    Выдавать две световые гранаты на спавне
#define GIVE_SMOKE        //    Выдавать дымовую гранату на спавне
#define GIVE_ARMOR        //    Выдавать броню и шлем на спавне
#define GIVE_DEFUSEKIT    //    Выдавать набор сапёра
/*    **** Конец настройки ****    */

#define VIPMENU        1    //    C какого раунда можно открыть вип меню, для откл. закоментируйте строку (Для тех у кого есть разминка перед основными раундами)
#define WEAPONSRND    2    //    C какого раунда доступно оружие
#define AWPM249RND    4    //    С какого раунда доступны AWP и пулемет

#if defined HP_ADD
/*        Настройка прибавления хп для випов        */
    //#define HP_MAP_BLOCK                    //    Отключать вампирку на картах BLOCK_MAPS
    #define HP_ADD_ACCESS    ADMIN_LEVEL_H    //    С каким флагом доступена вампирка
    #define HP_OFF            1                //    C какого раунда включать прибавление ХП (0 - откл. функцию)
    #define HP_MAX            100.0            //    макс. кол-во HP
    #define HP_BODY            10.0            //    за убийство в тело
    #define HP_HS            15.0            //    за убийство в голову
#endif

#if defined SHOW_DAMAGER
/*    Настройка дамагера    */
    //#define DMG_MAP_BLOCK                    //    Отключать дамагер на картах BLOCK_MAPS
    #define DAMAGER_ACCESS    ADMIN_LEVEL_H    //    С каким флагом доступен дамагер
    //#define DAMAGER_OFF                    //    Возможность откл. дамагер в вип меню
#endif

#if defined VIP_SHOW_INFO
    //#define CONNECTED_SOUND    "misc/vip.wav"    //    Дополненине к VIP_SHOW_INFO, звук при заходе вип игрока на сервер, по ум. отключено
#endif

#define PREFIX        "^1[^4VipInfo^1]"    //    Тег чата
#define NAME_SERVER    "Only-Friends"        //    Название сервера в вип меню, макс. размерность массива 47 байт.

#define BLOCK_MAPS    "awp_", "aim_", "fy_", "35hp", "$2000$"    //    Блокируемые карты
/*    ########### Конец настройки плагина #############    */

#if !defined MAX_NAME_LENGTH
    #define MAX_NAME_LENGTH 32
#endif

#define IsUserVip(%1) (get_user_flags(%1) & ACCESS_FLAG)
#define MenuKey (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)

#pragma semicolon 1

#if defined ADMIN_LOADER
    native admin_expired(index);
#endif

new iPistol[MAX_CLIENTS+1], bool:g_bUseWeapon[MAX_CLIENTS+1];
new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed, HookChain:HookPlayer_TakeDamage;
new g_iRound, bool:g_bMapsBlock;

#if defined DAMAGER_OFF
    new bool:g_bUseDamager[MAX_CLIENTS+1];
#endif
#if defined VIP_TAB
    new Msg_ScoreAttrib;
#endif
#if defined HP_ADD
    new g_iSyncMsgAddHP;
#endif
#if defined SHOW_DAMAGER
    new g_iSyncMsgDamage;
#endif

#if defined CONNECTED_SOUND
public plugin_precache()
    precache_sound(CONNECTED_SOUND);
#endif

public plugin_init() {
    register_plugin("[ReAPI] VIP System", "1.3.1", "pUzzlik");

    register_event("TextMsg", "evNewRound", "a", "2=#Game_will_restart_in", "2=#Game_Commencing");
    register_event("HLTV", "evRoundStart", "a", "1=0", "2=0");

    HookPlayer_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
    EnableHookChain(HookPlayer_Spawn);
    #if defined HP_ADD
        HookPlayer_Killed = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
        EnableHookChain(HookPlayer_Killed);
        g_iSyncMsgAddHP = CreateHudSyncObj();
    #endif
    #if defined SHOW_DAMAGER
        HookPlayer_TakeDamage = RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
        EnableHookChain(HookPlayer_TakeDamage);
        g_iSyncMsgDamage = CreateHudSyncObj();
    #endif

    register_clcmd("weaponmenu", "ShowMenu");
    register_clcmd("say /vipmenu", "ShowMenu");
    register_clcmd("say_team /vipmenu", "ShowMenu");

    #if defined SAY_WEAPONS
        register_clcmd("say", "hook_say");
        register_clcmd("say_team", "hook_say");
    #endif

    register_menucmd(register_menuid("Vip Menu"), MenuKey, "MenuHandler");

    #if defined VIP_TAB
        Msg_ScoreAttrib = get_user_msgid("ScoreAttrib");
    #endif
}

public plugin_cfg() {
    new map[32]; rh_get_mapname(map, charsmax(map));
    new BlockMap[][] = { BLOCK_MAPS };
    for(new i; i < sizeof BlockMap; i++)
        if(containi(map, BlockMap[i]) != -1) {
            DisableHookChain(HookPlayer_Spawn);
            #if defined HP_MAP_BLOCK
                DisableHookChain(HookPlayer_Killed);
            #endif
            #if defined DMG_MAP_BLOCK
                DisableHookChain(HookPlayer_TakeDamage);
            #endif
            g_bMapsBlock = true;
        }
}

public evNewRound() g_iRound = 0;

public evRoundStart() {
    arrayset(g_bUseWeapon, false, sizeof(g_bUseWeapon)); g_iRound++;
}

public client_putinserver(id) {
    if(IsUserVip(id)) {
        #if defined DAMAGER_OFF
            if(id > 0 || id < 33) {
                new sUserInfo[16]; get_user_info(id, "_dmg", sUserInfo, charsmax(sUserInfo));
                if(sUserInfo[0] && equal(sUserInfo, "off")) g_bUseDamager[id] = false;
                else g_bUseDamager[id] = true;
            }
        #endif
        #if defined VIP_SHOW_INFO
            new name[MAX_NAME_LENGTH]; get_entvar(id, var_netname, name, charsmax(name));
            new players[MAX_CLIENTS], num; get_players(players, num, "ch");

            for(new i; i < num ; i++) {
                client_print_color(players[i], -3, "%s ^1На сервер зашёл ^3VIP ^1клиент ^4%s", PREFIX, name);

                #if defined CONNECTED_SOUND
                    client_cmd(players[i], "spk %s", CONNECTED_SOUND);
                #endif
            }
        #endif
    }
}

#if defined HP_ADD
public CBasePlayer_Killed(const pevVictim, pevAttacker) {
    #if HP_OFF > 0
        if(HP_OFF >= g_iRound) return;
    #endif
    if(    is_user_connected(pevAttacker)
        && get_user_flags(pevAttacker) & HP_ADD_ACCESS
        && pevVictim != pevAttacker)
    {
        static Float:attackerHp, Float:addHp;

        attackerHp = Float:get_entvar(pevAttacker, var_health);
        addHp = get_member(pevVictim, m_bHeadshotKilled) ? HP_HS : HP_BODY;

        attackerHp += addHp;
        set_entvar(pevAttacker, var_health, attackerHp > HP_MAX ? HP_MAX : attackerHp);

        if(attackerHp >= HP_MAX) return;

        set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1);
        ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "Добавлено +%d HP", floatround(addHp));
    }
}
#endif

#if defined SHOW_DAMAGER
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType) {
    #if defined DAMAGER_OFF
        if(pevAttacker < 1 || pevAttacker > 32 || !g_bUseDamager[pevAttacker]) return;
    #endif
    if(    is_user_connected(pevAttacker)
        && get_user_flags(pevAttacker) & DAMAGER_ACCESS
        && rg_is_player_can_takedamage(pevVictim, pevAttacker))
    {   
        set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1);
        ShowSyncHudMsg(pevAttacker, g_iSyncMsgDamage, "%d", floatround(damage));
    }
}
#endif

public CBasePlayer_Spawn(const id) {
    if(is_bonus_spawn(id)) {
        #if defined GIVE_PISTOL
            switch(iPistol[id]) {
                case 0: { rg_give_item(id, "weapon_deagle", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); }
                case 1: { rg_give_item(id, "weapon_usp", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_USP, 100); }
                case 2: { rg_give_item(id, "weapon_glock18", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_GLOCK18, 120); }
            }
        #endif
        #if defined GIVE_HEGRENADE
            rg_give_item(id, "weapon_hegrenade", GT_APPEND);
        #endif
        #if defined GIVE_FlASHBANG
            rg_give_item(id, "weapon_flashbang", GT_APPEND);
            rg_give_item(id, "weapon_flashbang", GT_APPEND);
        #endif
        #if defined GIVE_SMOKE
            rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
        #endif
        #if defined GIVE_ARMOR
            rg_set_user_armor(id, 100, ARMOR_VESTHELM);
        #endif
        #if defined GIVE_DEFUSEKIT
            new TeamName:team = get_member(id, m_iTeam);
            if(team == TEAM_CT) rg_give_defusekit (id, true);
        #endif   
    
        #if defined VIP_TAB
            message_begin(MSG_BROADCAST, Msg_ScoreAttrib);
            write_byte(id);
            write_byte(4);
            message_end();
        #endif
    
        #if defined AUTO_MENU
            if(g_iRound >= WEAPONSRND) ShowMenu(id);
        #endif
    }
}

#if defined SAY_WEAPONS
public hook_say(id) {
    static szMsg[32]; read_args(szMsg, charsmax(szMsg)); remove_quotes(szMsg);
    static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };

    for(new a; a < sizeof szChoosedWP; a++) {
        if(!strcmp(szMsg, szChoosedWP[a])) {
            if(!is_allow_use(id)) break;
            return MenuHandler(id, a);
        }
    }
    return HC_CONTINUE;
}
#endif

public ShowMenu(id) {
    if(!is_allow_use(id)) return HC_CONTINUE;

    static szMenu[512], szNameServer[48], iLen, key, name[MAX_NAME_LENGTH];
    get_entvar(id, var_netname, name, charsmax(name));
    formatex(szNameServer, charsmax(szNameServer), "%s", NAME_SERVER);

    key = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
    iLen = formatex(szMenu, charsmax(szMenu), "\rVIP меню \w[\d%s\w]^n\wПривет, [\y%s\w]^n", szNameServer, name);

    #if defined ADMIN_LOADER
        new exp = admin_expired(id);
        if(exp > 0) {
            new sys = get_systime();
            if((exp - sys) / 86400 > 0)    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w%d дн.!^n^n", (exp - sys) / 86400);
            else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w1 день!^n^n");
        }
        else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yДействие вип: \wне ограничено!^n^n");
    #else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    #endif

    if(g_iRound < WEAPONSRND)
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47 \r[%d раунд]^n\r2. \dВзять M4A1 \r[%d раунд]^n\r3. \dВзять Famas \r[%d раунд]^n", WEAPONSRND, WEAPONSRND, WEAPONSRND);
    else if(g_bUseWeapon[id])
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47^n\r2. \dВзять M4A1^n\r3. \dВзять Famas^n");
    else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять AK47^n\r2. \wВзять M4A1^n\r3. \wВзять Famas^n");
        
    if(g_iRound < AWPM249RND)
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP \r[%d раунд]^n\r5. \dВзять Пулемет \r[%d раунд]^n^n", AWPM249RND, AWPM249RND);
    else if(g_bUseWeapon[id])
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP^n\r5. \dВзять Пулемет^n^n");
    else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wВзять AWP^n\r5. \wВзять Пулемет^n^n");

    #if defined GIVE_PISTOL
        key |= MENU_KEY_6;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yПистолет при спавне \d[\w%s\d]^n", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock");
        #if defined DAMAGER_OFF
            key |= MENU_KEY_7;
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r7. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
        #endif
    #endif
    #if !defined GIVE_PISTOL
        #if defined DAMAGER_OFF
            key |= MENU_KEY_6;
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
        #endif
    #endif

    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \rВыход");

    set_member(id, m_iMenu, Menu_OFF);
    return show_menu(id, key, szMenu, -1, "Vip Menu");
}

public MenuHandler(id, key) {
    if(key <= 4) {
        if(g_bUseWeapon[id]) return client_print_color(id, 0, "%s Вы ^3уже брали ^1оружие в этом раунде!", PREFIX);
        if(g_iRound < WEAPONSRND) return client_print_color(id, 0, "%s Этот поединок на ^3пистолетах^1!", PREFIX);
        if(3 <= key <= 4)
            if(g_iRound < AWPM249RND) return client_print_color(id, 0, "%s Оружие доступно только с^3 %d ^1раунда!", PREFIX, AWPM249RND);

        g_bUseWeapon[id] = true;
    }

    static const szChoosedBP[] = { 90, 90, 90, 30, 250 };
    static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp", "weapon_m249" };

    #if defined GIVE_PISTOL
        switch(key) {
            case 5: {
                iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++;
                ShowMenu(id);
            }
            #if defined DAMAGER_OFF
                case 6: ShowDamage(id);
            #endif
        }
    #endif
    #if !defined GIVE_PISTOL
        #if defined DAMAGER_OFF
            switch(key) {
                case 5: ShowDamage(id);
            }
        #endif
    #endif

    if(key > 4) return HC_CONTINUE;
    return rg_give_items(id, szChoosedWP[key], szChoosedBP[key]);
}

#if defined DAMAGER_OFF
public ShowDamage(id) {
    g_bUseDamager[id] = !g_bUseDamager[id];
    if(g_bUseDamager[id]) client_cmd(id, "setinfo _dmg on");
    else client_cmd(id, "setinfo _dmg off");

    client_print_color(id, 0, "%s Вы ^3%s ^1дамагер.", PREFIX, g_bUseDamager[id] ? "включили" : "отключили");
}
#endif

stock rg_give_items(id,currWeaponName[],ammoAmount) {
    rg_give_item(id, currWeaponName, GT_DROP_AND_REPLACE);
    rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
    return HC_CONTINUE;
}

bool:is_bonus_spawn(id) {
    if(!is_user_alive(id)) return false;
    if(!IsUserVip(id)) return false;
    return true;
}

bool:is_allow_use(id) {
    if(!is_user_alive(id)) {
        client_print_color(id, -2, "%s Для использования данной команды вы должны быть ^3живы^1!", PREFIX);
        return false;
    }
    if(!IsUserVip(id)) {
        client_print_color(id, 0, "%s Только ^4VIP-игрок ^1может пользоваться этой командой!", PREFIX);
        return false;
    }
    if(g_bMapsBlock) {
        client_print_color(id, 0, "%s На данной карте брать оружие ^3запрещено^1!", PREFIX);
        return false;
    }
    #if defined VIPMENU
        if(VIPMENU > g_iRound) {
            client_print_color(id, -2, "%s Разминочный раунд. ^3Запрещено ^1пользоваться командой!", PREFIX);
            return false;
        }
    #endif
    return true;
}
Как добавить в VIP вызов другого меню!!!??
 

пазлик~

Разработчик
Регистрация
8 Июн 2017
Сообщения
216
Симпатии
120
Пол
Мужской
kostian911, У вас есть какой то конкретный форвард или же просто по команде в чат?
 

artiom555

Пользователь
Регистрация
2 Мар 2018
Сообщения
16
Симпатии
0
Пол
Мужской
Памогите ошибка при компиляции
error2.png
Пятница в 18:19
Код:
/*
    pUzzlik created by http://www.neugomon.ru
    Original code: neygomon
*/

#include <amxmodx>
#include <reapi>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif   

/*    ########### Настройка плагина ############    */
#define ACCESS_FLAG    ADMIN_LEVEL_H    //    Флаги доступа к вип системе, вип меню, выдача амуниции и др.

/*    ***** Настройка функционала плагина. Для откл. закоментируйте строку *****    */
//#define SHOW_DAMAGER    //    Вкл/выкл дамагер для випов
#define HP_ADD            //    Вкл/выкл прибавление ХП для випов (Вампирка)
//#define ADMIN_LOADER    //    Совместимость с Admin Loader от неугомона (https://www.neugomon.ru/threads/486/)
//#define SAY_WEAPONS        //    Позволяет включить чат команды "/ak47", "/m4a1", "/famas", "/awp", "/b51"
#define AUTO_MENU        //    Автоматически открывать в начале рануда Вип меню, включения происходит с WEAPONSRND раунда, по ум. отключено
#define VIP_SHOW_INFO    //    Оповещение при заходе вип игрока на сервер
#define VIP_TAB            //    Вип в табе

#define GIVE_PISTOL        //    Выдавать пистолет на спавне
#define GIVE_HEGRENADE    //    Выдавать взрывную гранату на спавне
#define GIVE_FlASHBANG    //    Выдавать две световые гранаты на спавне
#define GIVE_SMOKE        //    Выдавать дымовую гранату на спавне
#define GIVE_ARMOR        //    Выдавать броню и шлем на спавне
#define GIVE_DEFUSEKIT    //    Выдавать набор сапёра
/*    **** Конец настройки ****    */

#define VIPMENU        1    //    C какого раунда можно открыть вип меню, для откл. закоментируйте строку (Для тех у кого есть разминка перед основными раундами)
#define WEAPONSRND    2    //    C какого раунда доступно оружие
#define AWPM249RND    4    //    С какого раунда доступны AWP и пулемет

#if defined HP_ADD
/*        Настройка прибавления хп для випов        */
    //#define HP_MAP_BLOCK                    //    Отключать вампирку на картах BLOCK_MAPS
    #define HP_ADD_ACCESS    ADMIN_LEVEL_H    //    С каким флагом доступена вампирка
    #define HP_OFF            1                //    C какого раунда включать прибавление ХП (0 - откл. функцию)
    #define HP_MAX            120.0            //    макс. кол-во HP
    #define HP_BODY            15.0            //    за убийство в тело
    #define HP_HS            25.0            //    за убийство в голову
#endif

#if defined SHOW_DAMAGER
/*    Настройка дамагера    */
    //#define DMG_MAP_BLOCK                    //    Отключать дамагер на картах BLOCK_MAPS
    #define DAMAGER_ACCESS    ADMIN_LEVEL_H    //    С каким флагом доступен дамагер
    //#define DAMAGER_OFF                    //    Возможность откл. дамагер в вип меню
#endif

#if defined VIP_SHOW_INFO
    //#define CONNECTED_SOUND    "misc/vip.wav"    //    Дополненине к VIP_SHOW_INFO, звук при заходе вип игрока на сервер, по ум. отключено
#endif

#define PREFIX        "^1[^4V.I.P^1]"    //    Тег чата
#define NAME_SERVER    "Masofke.eu"        //    Название сервера в вип меню, макс. размерность массива 47 байт.

#define BLOCK_MAPS    "awp_", "aim_", "fy_", "35hp", "$2000$"    //    Блокируемые карты
/*    ########### Конец настройки плагина #############    */

#if !defined MAX_NAME_LENGTH
    #define MAX_NAME_LENGTH 32
#endif

#define IsUserVip(%1) (get_user_flags(%1) & ACCESS_FLAG)
#define MenuKey (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)

#pragma semicolon 1

#if defined ADMIN_LOADER
    native admin_expired(index);
#endif

new iPistol[MAX_CLIENTS+1], bool:g_bUseWeapon[MAX_CLIENTS+1];
new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed, HookChain:HookPlayer_TakeDamage;
new g_iRound, bool:g_bMapsBlock;

#if defined DAMAGER_OFF
    new bool:g_bUseDamager[MAX_CLIENTS+1];
#endif
#if defined VIP_TAB
    new Msg_ScoreAttrib;
#endif
#if defined HP_ADD
    new g_iSyncMsgAddHP;
#endif
#if defined SHOW_DAMAGER
    new g_iSyncMsgDamage;
#endif

#if defined CONNECTED_SOUND
public plugin_precache()
    precache_sound(CONNECTED_SOUND);
#endif

public plugin_init() {
    register_plugin("[ReAPI] VIP System", "1.3.1", "pUzzlik");

    register_event("TextMsg", "evNewRound", "a", "2=#Game_will_restart_in", "2=#Game_Commencing");
    register_event("HLTV", "evRoundStart", "a", "1=0", "2=0");

    HookPlayer_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
    EnableHookChain(HookPlayer_Spawn);
    #if defined HP_ADD
        HookPlayer_Killed = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
        EnableHookChain(HookPlayer_Killed);
        g_iSyncMsgAddHP = CreateHudSyncObj();
    #endif
    #if defined SHOW_DAMAGER
        HookPlayer_TakeDamage = RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
        EnableHookChain(HookPlayer_TakeDamage);
        g_iSyncMsgDamage = CreateHudSyncObj();
    #endif

    register_clcmd("weaponmenu", "ShowMenu");
    register_clcmd("say /vm", "ShowMenu");
    register_clcmd("say_team /vm", "ShowMenu");

    #if defined SAY_WEAPONS
        register_clcmd("say", "hook_say");
        register_clcmd("say_team", "hook_say");
    #endif

    register_menucmd(register_menuid("Vip Menu"), MenuKey, "MenuHandler");

    #if defined VIP_TAB
        Msg_ScoreAttrib = get_user_msgid("ScoreAttrib");
    #endif
}

public plugin_cfg() {
    new map[32]; rh_get_mapname(map, charsmax(map));
    new BlockMap[][] = { BLOCK_MAPS };
    for(new i; i < sizeof BlockMap; i++)
        if(containi(map, BlockMap[i]) != -1) {
            DisableHookChain(HookPlayer_Spawn);
            #if defined HP_MAP_BLOCK
                DisableHookChain(HookPlayer_Killed);
            #endif
            #if defined DMG_MAP_BLOCK
                DisableHookChain(HookPlayer_TakeDamage);
            #endif
            g_bMapsBlock = true;
        }
}

public evNewRound() g_iRound = 0;

public evRoundStart() {
    arrayset(g_bUseWeapon, false, sizeof(g_bUseWeapon)); g_iRound++;
}

public client_putinserver(id) {
    if(IsUserVip(id)) {
        #if defined DAMAGER_OFF
            if(id > 0 || id < 33) {
                new sUserInfo[16]; get_user_info(id, "_dmg", sUserInfo, charsmax(sUserInfo));
                if(sUserInfo[0] && equal(sUserInfo, "off")) g_bUseDamager[id] = false;
                else g_bUseDamager[id] = true;
            }
        #endif
        #if defined VIP_SHOW_INFO
            new name[MAX_NAME_LENGTH]; get_entvar(id, var_netname, name, charsmax(name));
            new players[MAX_CLIENTS], num; get_players(players, num, "ch");

            for(new i; i < num ; i++) {
                client_print_color(players[i], -3, "%s ^1На сервер зашёл ^3VIP ^1клиент ^4%s", PREFIX, name);

                #if defined CONNECTED_SOUND
                    client_cmd(players[i], "spk %s", CONNECTED_SOUND);
                #endif
            }
        #endif
    }
}

#if defined HP_ADD
public CBasePlayer_Killed(const pevVictim, pevAttacker) {
    #if HP_OFF > 0
        if(HP_OFF >= g_iRound) return;
    #endif
    if(    is_user_connected(pevAttacker)
        && get_user_flags(pevAttacker) & HP_ADD_ACCESS
        && pevVictim != pevAttacker)
    {
        static Float:attackerHp, Float:addHp;

        attackerHp = Float:get_entvar(pevAttacker, var_health);
        addHp = get_member(pevVictim, m_bHeadshotKilled) ? HP_HS : HP_BODY;

        attackerHp += addHp;
        set_entvar(pevAttacker, var_health, attackerHp > HP_MAX ? HP_MAX : attackerHp);

        if(attackerHp >= HP_MAX) return;

        set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1);
        ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "Added +%d HP", floatround(addHp));
    }
}
#endif

#if defined SHOW_DAMAGER
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType) {
    #if defined DAMAGER_OFF
        if(pevAttacker < 1 || pevAttacker > 32 || !g_bUseDamager[pevAttacker]) return;
    #endif
    if(    is_user_connected(pevAttacker)
        && get_user_flags(pevAttacker) & DAMAGER_ACCESS
        && rg_is_player_can_takedamage(pevVictim, pevAttacker))
    {   
        set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1);
        ShowSyncHudMsg(pevAttacker, g_iSyncMsgDamage, "%d", floatround(damage));
    }
}
#endif

public CBasePlayer_Spawn(const id) {
    if(is_bonus_spawn(id)) {
        #if defined GIVE_PISTOL
            switch(iPistol[id]) {
                case 0: { rg_give_item(id, "weapon_deagle", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); }
                case 1: { rg_give_item(id, "weapon_usp", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_USP, 100); }
                case 2: { rg_give_item(id, "weapon_glock18", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_GLOCK18, 120); }
            }
        #endif
        #if defined GIVE_HEGRENADE
            rg_give_item(id, "weapon_hegrenade", GT_APPEND);
        #endif
        #if defined GIVE_FlASHBANG
            rg_give_item(id, "weapon_flashbang", GT_APPEND);
            rg_give_item(id, "weapon_flashbang", GT_APPEND);
        #endif
        #if defined GIVE_SMOKE
            rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
        #endif
        #if defined GIVE_ARMOR
            rg_set_user_armor(id, 100, ARMOR_VESTHELM);
        #endif
        #if defined GIVE_DEFUSEKIT
            new TeamName:team = get_member(id, m_iTeam);
            if(team == TEAM_CT) rg_give_defusekit (id, true);
        #endif   
    
        #if defined VIP_TAB
            message_begin(MSG_BROADCAST, Msg_ScoreAttrib);
            write_byte(id);
            write_byte(4);
            message_end();
        #endif
    
        #if defined AUTO_MENU
            if(g_iRound >= WEAPONSRND) ShowMenu(id);
        #endif
    }
}

#if defined SAY_WEAPONS
public hook_say(id) {
    static szMsg[32]; read_args(szMsg, charsmax(szMsg)); remove_quotes(szMsg);
    static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };

    for(new a; a < sizeof szChoosedWP; a++) {
        if(!strcmp(szMsg, szChoosedWP[a])) {
            if(!is_allow_use(id)) break;
            return MenuHandler(id, a);
        }
    }
    return HC_CONTINUE;
}
#endif

public ShowMenu(id) {
    if(!is_allow_use(id)) return HC_CONTINUE;

    static szMenu[512], szNameServer[48], iLen, key, name[MAX_NAME_LENGTH];
    get_entvar(id, var_netname, name, charsmax(name));
    formatex(szNameServer, charsmax(szNameServer), "%s", NAME_SERVER);

    key = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
    iLen = formatex(szMenu, charsmax(szMenu), "\rVIP меню \w[\d%s\w]^n\wПривет, [\y%s\w]^n", szNameServer, name);

    #if defined ADMIN_LOADER
        new exp = admin_expired(id);
        if(exp > 0) {
            new sys = get_systime();
            if((exp - sys) / 86400 > 0)    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w%d дн.!^n^n", (exp - sys) / 86400);
            else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w1 день!^n^n");
        }
        else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yДействие вип: \wне ограничено!^n^n");
    #else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    #endif

    if(g_iRound < WEAPONSRND)
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47 \r[%d раунд]^n\r2. \dВзять M4A1 \r[%d раунд]^n\r3. \dВзять Famas \r[%d раунд]^n", WEAPONSRND, WEAPONSRND, WEAPONSRND);
    else if(g_bUseWeapon[id])
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47^n\r2. \dВзять M4A1^n\r3. \dВзять Famas^n");
    else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять AK47^n\r2. \wВзять M4A1^n\r3. \wВзять Famas^n");
        
    if(g_iRound < AWPM249RND)
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP \r[%d раунд]^n\r5. \dВзять Пулемет \r[%d раунд]^n^n", AWPM249RND, AWPM249RND);
    else if(g_bUseWeapon[id])
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP^n\r5. \dВзять Пулемет^n^n");
    else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wВзять AWP^n\r5. \wВзять Пулемет^n^n");

    #if defined GIVE_PISTOL
        key |= MENU_KEY_6;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yПистолет при спавне \d[\w%s\d]^n", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock");
        #if defined DAMAGER_OFF
            key |= MENU_KEY_7;
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r7. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
        #endif
    #endif
    #if !defined GIVE_PISTOL
        #if defined DAMAGER_OFF
            key |= MENU_KEY_6;
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
        #endif
    #endif

    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \rВыход");

    set_member(id, m_iMenu, Menu_OFF);
    return show_menu(id, key, szMenu, -1, "Vip Menu");
}

public MenuHandler(id, key) {
    if(key <= 4) {
        if(g_bUseWeapon[id]) return client_print_color(id, 0, "%s Вы ^3уже брали ^1оружие в этом раунде!", PREFIX);
        if(g_iRound < WEAPONSRND) return client_print_color(id, 0, "%s Этот поединок на ^3пистолетах^1!", PREFIX);
        if(3 <= key <= 4)
            if(g_iRound < AWPM249RND) return client_print_color(id, 0, "%s Оружие доступно только с^3 %d ^1раунда!", PREFIX, AWPM249RND);

        g_bUseWeapon[id] = true;
    }

    static const szChoosedBP[] = { 90, 90, 90, 30, 250 };
    static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp", "weapon_m249" };

    #if defined GIVE_PISTOL
        switch(key) {
            case 5: {
                iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++;
                ShowMenu(id);
            }
            #if defined DAMAGER_OFF
                case 6: ShowDamage(id);
            #endif
        }
    #endif
    #if !defined GIVE_PISTOL
        #if defined DAMAGER_OFF
            switch(key) {
                case 5: ShowDamage(id);
            }
        #endif
    #endif

    if(key > 4) return HC_CONTINUE;
    return rg_give_items(id, szChoosedWP[key], szChoosedBP[key]);
}

#if defined DAMAGER_OFF
public ShowDamage(id) {
    g_bUseDamager[id] = !g_bUseDamager[id];
    if(g_bUseDamager[id]) client_cmd(id, "setinfo _dmg on");
    else client_cmd(id, "setinfo _dmg off");

    client_print_color(id, 0, "%s Вы ^3%s ^1дамагер.", PREFIX, g_bUseDamager[id] ? "включили" : "отключили");
}
#endif

stock rg_give_items(id,currWeaponName[],ammoAmount) {
    rg_give_item(id, currWeaponName, GT_DROP_AND_REPLACE);
    rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
    return HC_CONTINUE;
}

bool:is_bonus_spawn(id) {
    if(!is_user_alive(id)) return false;
    if(!IsUserVip(id)) return false;
    return true;
}

bool:is_allow_use(id) {
    if(!is_user_alive(id)) {
        client_print_color(id, -2, "%s Для использования данной команды вы должны быть ^3живы^1!", PREFIX);
        return false;
    }
    if(!IsUserVip(id)) {
        client_print_color(id, 0, "%s Только ^4VIP-игрок ^1может пользоваться этой командой!", PREFIX);
        return false;
    }
    if(g_bMapsBlock) {
        client_print_color(id, 0, "%s На данной карте брать оружие ^3запрещено^1!", PREFIX);
        return false;
    }
    #if defined VIPMENU
        if(VIPMENU > g_iRound) {
            client_print_color(id, -2, "%s Разминочный раунд. ^3Запрещено ^1пользоваться командой!", PREFIX);
            return false;
        }
    #endif
    return true;
}
 

artiom555

Пользователь
Регистрация
2 Мар 2018
Сообщения
16
Симпатии
0
Пол
Мужской

artiom555

Пользователь
Регистрация
2 Мар 2018
Сообщения
16
Симпатии
0
Пол
Мужской
На сколько я знаю но могу ошибатся когда есть такие предупреждения в плагинах они патом в логах сервера вылетают тем самым забивают место в логах или я что то путаю :)?
 

perfectblood0

Флудер
Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
720
Симпатии
170
На сколько я знаю но могу ошибатся когда есть такие предупреждения в плагинах они патом в логах сервера вылетают тем самым забивают место в логах или я что то путаю :)?
Все не так однобоко и просто.
Некоторые ошибки могут возникать только при определенном стечении обстоятельств. На этот warning(предупреждение, не ошибка) можно закрыть глаза
 

artiom555

Пользователь
Регистрация
2 Мар 2018
Сообщения
16
Симпатии
0
Пол
Мужской
Все не так однобоко и просто.
Некоторые ошибки могут возникать только при определенном стечении обстоятельств. На этот warning(предупреждение, не ошибка) можно закрыть глаза
Спс буду знать ;)