ReHLDS/ReAPI Vip System

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
207
Симпатии
81
Пол
Мужской
Coder, каст оружие, добавлять планируете?
я противник этих голд оружий, поэтому добавлять их не планирую. Единственное что я хотел еще сделать, так это закрывать меню автоматически, если выходишь с зоны покупки или сделать квар через сколько секунд закрывать меню после старта раунда. Ну и чуть переписать код некоторые участки. Но когда это произойдет хз, так как тестовый сервер снес.
 

Lenin

Пользователь
Регистрация
9 Июн 2017
Сообщения
61
Симпатии
22
Пол
Мужской
Могу предоставить тестовый
 

Руслан Миронов

Пользователь
Регистрация
24 Июн 2017
Сообщения
276
Симпатии
3
Предупреждения
30
Пол
Мужской
Coder, сюда можно будет добавить голды оружия.
 

Swan

Пользователь
Регистрация
7 Июл 2017
Сообщения
30
Симпатии
1
Пол
Мужской
Руслан Миронов,
я противник этих голд оружий, поэтому добавлять их не планирую. Единственное что я хотел еще сделать, так это закрывать меню автоматически, если выходишь с зоны покупки или сделать квар через сколько секунд закрывать меню после старта раунда. Ну и чуть переписать код некоторые участки. Но когда это произойдет хз, так как тестовый сервер снес.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
207
Симпатии
81
Пол
Мужской
Подскажи как добавить автооткрытие меню и пунктом отключения как дамагер?
легко, если доберусь до своего компа, то может выложу переписанный код самой випки и добавленой этой возможностью. Времени нету.
 

GIT

Пользователь
Регистрация
9 Июн 2017
Сообщения
147
Симпатии
7
Пол
Мужской
легко, если доберусь до своего компа, то может выложу переписанный код самой випки и добавленой этой возможностью. Времени нету.
А ты платные заказы не выполняешь?[DOUBLEPOST=1541887206][/DOUBLEPOST]
А ты платные заказы не выполняешь?[/QUO
легко, если доберусь до своего компа, то может выложу переписанный код самой випки и добавленой этой возможностью. Времени нету.
Просто хотел чтобы ты свою випку доделал по меня?
 

several

Пользователь
Регистрация
1 Окт 2018
Сообщения
15
Симпатии
0
Можно как-нибудь сделать, чтобы випменю можно несколько раз было открывать?
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский

several

Пользователь
Регистрация
1 Окт 2018
Сообщения
15
Симпатии
0
Команда vipmenu не открывает меню второй раз?
Немного не так выразился.
Чтобы оружие можно было брать несколько раз за раунд. Сейчас ошибку выдаёт: "Вы уже брали оружие в этом раунде!"
 
K

kapangaIII

Открываешь исходник, в твоем случае нужно найти лишь похожий текст и удалить эту часть.
1547202462912.png
 

several

Пользователь
Регистрация
1 Окт 2018
Сообщения
15
Симпатии
0
K

kapangaIII

Затем ищешь то же условие что и выше по всему тексту и убираешь то что выделено(в обоих случаях).
1547209954323.png
 

several

Пользователь
Регистрация
1 Окт 2018
Сообщения
15
Симпатии
0
Затем ищешь то же условие что и выше по всему тексту и убираешь то что выделено(в обоих случаях).
Посмотреть вложение 8202
Не компилится

Код:
/*************************************************************************************************
*  Возможности:
*  1. Префикс сообщений от плагина
*  2. VipMenu (vipmenu, /vipmenu) - оружия: ak47, m4a1, awp, пулемет.
*  3. Так же работают чат команды: /ak47, /m4a1, /awp, /b51.
*  4. AWP и Пулемет можно использовать с N раунда (настраивается).
*  5. Не работает на картах awp_, аim_, 35hp, fy_
*  6. Дополнительные HP за убийства (настраивается)
*  7. Автовыдача дигла при спавне (отключаемо), если включено можно выставить с N раунда (настраивается).
*  8. Автовыдача гранат при спавне (отключаемо), если включено можно выставить с N раунда (настраивается).
*  9. Выдача брони при спавне с N раунда (настраивается).
*  10. Выдача дефузов за кт при спавне с N раунда (настраивается).
*  11. Срок до конда с Admin Loader by Neugomon (отключаемо).
*  12. VIP статус в TAB (отключаемо).
*  13. Сообщение при подключении игрока.
*  14. Звук при заходе вип игрока (отключаемо).
*  15. Дамагер (отключаемо).
*  16. Переключение дамагера (setinfo) по команде в чат /damager
*************************************************************************************************/

#include <amxmodx>
#include <reapi>

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

/* Конфигурационные defines */
#define VIP_ACCESS      ADMIN_LEVEL_H      // Флаг доступа VIP (по дефолту флаг "t" ADMIN_LEVEL_H)
#define PREFIX          "^1[^4VIP^1]^1"    // Префикс перед сообщениями ( ^1 - желтый ^3 - цвет команды ^4 - зеленый )
#define VIPROUND        3                  // C какого раунда можно открыть VIP меню
#define AWPM249RND      4                  // С какого раунда доступны AWP и пулемет
#define ADDHP_HS        15.0               // Кол-во добавляемого HP за убийство в голову (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define ADDHP           10.0                // Кол-во добавляемого HP за убийство (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define MAXHP           110.0              // Максимальное количество HP
#define VIPAUTODEAGLE                      // В начале каждого раунда давать Deagle (закомментируйте если не надо)
#define VIPAUTOGRENADE                     // Давать в начале каждого раунда гранаты (закомментируйте если не надо)
#define ROUND_NADES     1                  // С какого раунда давать гранаты (если раскомментировано VIPAUTOGRENADE иначе нет смысла менять работать не будет)
#define ROUND_DEAGLE    1                  // С какого раунда давать deagle (если раскомментировано VIPAUTODEAGLE иначе нет смысла менять работать не будет)
#define ROUND_ARMOR     1                  // С какого раунда давать броню
#define ROUND_DEFUSE    1                  // С какого раунда давать defuse kit
#define AUTOVIPMENU                        // Автоматически открывать в начале рануда Вип меню (выключено по дефолту)
#define VIPTAB                             // Показывать статус VIP в таблице на tab (закомментируйте если не надо)
// #define ADMIN_LOADER                       // Срок до конца с Admin Loader by Neugomon (закомментируйте если не надо)
#define SOUND_CONNECT                      // Звук при заходе вип игрока (раскомментируйте если надо)
#define DAMAGER                            // дамагер лесенкой (раскомментируйте если надо)
//#define FIFTH_ITEM                         // 5-й пункт в випке переключение дамагера по нажатию (раскомментируйте если надо + раскомментировать DAMAGER)
/* Конфигурационные defines */

#define isUserVip(%0) (get_user_flags(%0) & VIP_ACCESS)
#define IsPlayer(%1)  (1 <= %1 <= g_iMaxPlayers)

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

#if defined DAMAGER
    new const Float:g_fCoords[][] = { {0.52, 0.52}, {0.54, 0.54}, {0.56, 0.56}, {0.58, 0.58}, {0.60, 0.60}, {0.62, 0.62} };
    new g_iPlayerPos[33];
    new g_iSyncMsgDmg;
#endif

new g_iRoundCount;
new bool:g_bUseWeapon[33];
new bool:g_bBlockVip;
new bool:g_bUserVip[33];
new g_iSyncMsgAddHP;
new g_iMaxPlayers;
new g_bShow = true;
new g_isSwitchDmg[33] = {0, ...};
new g_szText[3] = "";

public plugin_init() {
    register_plugin("[ReAPI] Vip System", "1.4.1", "Dager* *.* -G-");
#if defined DAMAGER
    register_clcmd("say /damager", "cmdSwitchDmg");
    register_clcmd("say_team /damager", "cmdSwitchDmg");
#endif
    register_clcmd("say /vipmenu", "cmdVipMenu");
    register_clcmd("say_team /vipmenu", "cmdVipMenu");
    register_clcmd("vipmenu", "cmdVipMenu");
    register_clcmd("say", "hook_say");
    register_clcmd("say_team", "hook_say");
#if defined FIFTH_ITEM
    register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "VipMenuHandler");
#else
    register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "VipMenuHandler");
#endif
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
    RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
    RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
#if defined DAMAGER
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
#endif
    new szMapName[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
    rh_get_mapname(szMapName, charsmax(szMapName));
    for(new i; i < sizeof iMap_Prefix; i++) {
        if(containi(szMapName, iMap_Prefix[i]) != -1) {
            g_bBlockVip = true;
        }
    }
#if defined VIPTAB
    if(!get_member_game(m_bMapHasVIPSafetyZone)) {
        register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib");
    }
#endif
#if defined DAMAGER
    g_iSyncMsgDmg = CreateHudSyncObj();
#endif
    g_iSyncMsgAddHP = CreateHudSyncObj();
    g_iMaxPlayers = get_member_game(m_nMaxPlayers);
}

#if defined VIPTAB
public msgScoreAttrib() {
    if(isUserVip(get_msg_arg_int(1)) && !get_msg_arg_int(2)) {
        set_msg_arg_int(2, ARG_BYTE, (1<<2));
    }
}
#endif

public CSGameRules_RestartRound_Pre() {
    if(get_member_game(m_bCompleteReset)) {
        g_iRoundCount = 0;
    }
    g_iRoundCount++;
    arrayset(g_bUseWeapon, false, sizeof g_bUseWeapon);
}

public client_putinserver(id) {
    if(g_bShow) {
        get_user_info(id, "_damager", g_szText, charsmax(g_szText));
        g_isSwitchDmg[id] = (g_szText[0]) ? str_to_num(g_szText) : 1;
    } else {
        g_isSwitchDmg[id] = 0;
    }
    if(!isUserVip(id)) {
        return;
    }
    static szName[32];
    get_entvar(id, var_netname, szName, charsmax(szName));
#if defined SOUND_CONNECT
    client_cmd(0, "spk IDEAL_VIP/ideal_sound.wav");
#endif
    client_print_color(0, print_team_default, "%s На сервер зашёл ^3VIP клиент ^1%s", PREFIX, szName);
}

public CBasePlayer_Killed(pevVictim, pevAttacker) {
    if(IsPlayer(pevVictim) && IsPlayer(pevAttacker) && isUserVip(pevAttacker) && pevVictim != pevAttacker) {
        static Float:attackerHp, Float:addHp;
        attackerHp = Float:get_entvar(pevAttacker, var_health);
        addHp = get_member(pevVictim, m_bHeadshotKilled) ? ADDHP_HS : ADDHP;
        attackerHp += addHp;
        set_entvar(pevAttacker, var_health, attackerHp > MAXHP ? MAXHP : attackerHp);
        if(attackerHp >= MAXHP) {
            return;
        }
        if(addHp > 0.0) {
            set_hudmessage(0, 255, 0, 0.6, 0.4, 2, 1.0, 1.5, 0.1, 0.3, -1);
            ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "+%.0f hp", addHp);
        }
    }
    return;
}

#if defined DAMAGER
public CBasePlayer_TakeDamage(pevVictim, inflictor, pevAttacker, Float:damage) {
    if(!g_isSwitchDmg[pevAttacker] || !isUserVip(pevAttacker) || pevVictim == pevAttacker || get_member(pevVictim, m_iTeam) == get_member(pevAttacker, m_iTeam)) {
        return HC_CONTINUE;
    }
    if(IsPlayer(pevAttacker) && rg_is_player_can_takedamage(pevVictim, pevAttacker)) {
        static g_iDamage;
        g_iDamage = floatround(damage, floatround_floor);
        if(g_iDamage > 0) {
            static iPos;
            iPos = ++g_iPlayerPos[pevAttacker];
            if(iPos == sizeof(g_fCoords)) {
                iPos = g_iPlayerPos[pevAttacker] = 0;
            }
            set_hudmessage(0, 100, 200, Float:g_fCoords[iPos][0], Float:g_fCoords[iPos][1], 2, 0.5, 1.5, 0.02, 0.02, -1);
            ShowSyncHudMsg(pevAttacker, g_iSyncMsgDmg, "%d^n", g_iDamage);
        }
    }
    return HC_CONTINUE;
}
#endif

public CBasePlayer_Spawn(id) {
    if(g_bBlockVip || !is_user_alive(id)) {
        return 0;
    }
    if(isUserVip(id)) {
        g_bUserVip[id] = true;
    } else {
        return g_bUserVip[id] = false;
    }
#if defined VIPAUTOGRENADE
    if(g_iRoundCount >= ROUND_NADES) {
        rg_give_item(id, "weapon_hegrenade", GT_APPEND);
        rg_give_item(id, "weapon_flashbang", GT_APPEND);
        rg_give_item(id, "weapon_flashbang", GT_APPEND);
        rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
    }
#endif
#if defined VIPAUTODEAGLE
    if(g_iRoundCount >= ROUND_DEAGLE) {
        rg_give_item(id, "weapon_deagle", GT_REPLACE);
        rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
    }
#endif
    if(g_iRoundCount >= ROUND_ARMOR) {
        rg_set_user_armor(id, 100, ARMOR_VESTHELM);
    }
    if(g_iRoundCount >= ROUND_DEFUSE) {
        new TeamName:team = get_member(id, m_iTeam);
        if(team == TEAM_CT) {
            rg_give_defusekit(id, true);
        }
    }
   
#if defined AUTOVIPMENU
    if(g_iRoundCount >= VIPROUND) return cmdVipMenu(id);

#else

    return 0;

#endif

public hook_say(id) {
    static szMsg[128];
    read_args(szMsg, 127);
    remove_quotes(szMsg);
    if(szMsg[0] != '/') {
        return 0;
    }
    static const szChoosedWP[][] = { "/ak47", "/m4a1", "/awp", "/b51" };
    for(new i; i < sizeof szChoosedWP; i++) {
        if(!strcmp(szMsg, szChoosedWP[i])) {
            if(!isAllowToUse(id)) {
                break;
            }
            if(i > 1 && g_iRoundCount < AWPM249RND) {
                return client_print_color(id, 0, "%s Данное оружие доступно только с ^3%d ^1раунда!", PREFIX, AWPM249RND);
            }
            return VipMenuHandler(id, i);
        }
    }
    return 0;
}

public cmdVipMenu(id) {
    if(!isAllowToUse(id)) {
        return 0;
    }
    static szMenu[512], iLen, iKey;
    iKey = MENU_KEY_0;
#if defined ADMIN_LOADER
    new iExp = admin_expired(id);
    if(iExp > 0) {
        new sysTime = get_systime();
        if(iExp - sysTime > 0) {
            if((iExp - sysTime) / 86400 > 0) {
                iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%d дн.\r]^n^n", ((iExp - sysTime) / 86400));
            } else {
                iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%dч. %dмин.\r]^n^n", ((iExp - sysTime) / 3600), (((iExp - sysTime) / 60) - (((iExp - sysTime) / 3600) * 60)));
            }
        }
    } else if(iExp == 0) {
        iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
    }
#else
    iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
#endif
    iKey |= MENU_KEY_1|MENU_KEY_2;
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять \yAK47^n\r2. \wВзять \yM4A1^n");
    if(g_iRoundCount < AWPM249RND) {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \dВзять AWP \r[c %d раунда]^n\r4. \dВзять Пулемет \r[c %d раунда]^n^n", AWPM249RND, AWPM249RND);
    } else {
        iKey |= MENU_KEY_3|MENU_KEY_4;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wВзять \yAWP^n\r4. \wВзять \yПулемет^n^n");
    }
#if defined FIFTH_ITEM
    iKey |= MENU_KEY_5;
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wДамагер \r[\y%s\r]^n^n", g_isSwitchDmg[id] ? "Включен" : "Отключен");
#endif
    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");
    show_menu(id, iKey, szMenu, -1, "VipMenu");
    return PLUGIN_HANDLED;
}

public VipMenuHandler(id, iKey) {
#if defined FIFTH_ITEM
    if(iKey > 4) {
        return 0;
    }
#else
    if(iKey > 3) {
        return 0;
    }
#endif
    switch(iKey) {
        case 0..3: {
            static const szChoosedBP[] = { 180, 180, 60, 500 };
            static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_awp", "weapon_m249" };
            g_bUseWeapon[id] = true;
            return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey]);
        }
#if defined FIFTH_ITEM
        case 4: {
            g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
            num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
            client_cmd(id, "setinfo _damager %s", g_szText);
            return cmdVipMenu(id);
        }
#endif
    }
    return PLUGIN_HANDLED;
}

stock give_item_ex(id, currWeaponName[], ammoAmount) {
    rg_give_item(id, currWeaponName, GT_REPLACE);
    rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
    engclient_cmd(id, currWeaponName);
    return PLUGIN_HANDLED;
}

bool:isAllowToUse(id) {
    if(!g_bUserVip[id]) {
        client_print_color(id, print_team_default, "%s Только VIP-игрок может пользоваться этой командой!", PREFIX);
        return false;
    }
    if(!is_user_alive(id)) {
        client_print_color(id, print_team_default, "%s Для использования данной команды вы должны быть живы!", PREFIX);
        return false;
    }
    if(!g_iRoundCount) {
        client_print_color(id, print_team_default, "%s Разминочный раунд. Запрещено пользоваться командой!", PREFIX);
        return false;
    }
//    if(g_bUseWeapon[id]) {
//        client_print_color(id, print_team_default, "%s Вы уже брали оружие в этом раунде!", PREFIX);
//        return false;
//    }
    if(g_iRoundCount < VIPROUND) {
        client_print_color(id, print_team_default, "%s Оружия доступны только с ^3%d ^1раунда!", PREFIX, VIPROUND);
        return false;
    }
    return true;
}

public cmdSwitchDmg(id) {
    if(!isUserVip(id)) {
        client_print_color(id, print_team_default, "%s Эту команду может использовать только VIP игрок", PREFIX);
        return 0;
    }
    g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
    num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
    client_cmd(id, "setinfo _damager %s", g_szText);
    new szSwitch[20];
    format(szSwitch, charsmax(szSwitch), "%s", g_isSwitchDmg[id] ? "включили" : "отключили");
    client_print_color(id, print_team_default, "%s Вы ^3%s ^1дамагер для себя", PREFIX, szSwitch);
    return PLUGIN_CONTINUE;
}
 

several

Пользователь
Регистрация
1 Окт 2018
Сообщения
15
Симпатии
0
Информативно. Скрин/ошибку?
Скомпилировал всё таки. Но проблема не устранилась. Возможно из за этих участков в коде? Как их правильно удалить?

участок1.jpgучасток2.jpgучасток3.jpg
 
K

kapangaIII

Просто берешь и удаляешь. Они не влияют никак.
Какая именно проблема теперь?
 
K

kapangaIII

Скорее всего просто не перезалил в первый раз.
 
Сверху Снизу