Я хотел помощи

snk

Сообщения
3
Реакции
0
Я хочу, чтобы меню открывалось после завершения «mp_freezetime», кто может помочь?
 

Вложения

Сообщения
1
Реакции
0
Код:
RegisterHookChain(RG_CSGameRules_OnRoundFreezeEnd, "@FreezeTime_End");

@FreezeTime_End(){
for(new i= 0; i < get_maxplayers(); i++){
    ShowMenu(i);
    }
}
 
Сообщения
25
Реакции
4
snk,
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <reapi>

#pragma semicolon 1

new const MenuKey = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);

enum _:cvars { GIVE_ITEMS, WEAPONSRND };

static sItems[10];
new iPistol[MAX_CLIENTS+1], bool:bUsePistol, bool:bUseWeapon[MAX_CLIENTS+1];

new iRound = 0;
new pCvar[cvars], pCvarCfg[cvars];

native admin_expired(id);
//#define ADMIN_LOADER

public plugin_init()
{
    register_plugin("[ReVIP] VIP Menu", "1.0", "Author");
    register_dictionary("vipsystem.txt");
    
    pCvar[GIVE_ITEMS] = register_cvar("give_items", "adhp");
    pCvar[WEAPONSRND] = register_cvar("weapons_rnd", "2");

    register_menucmd(register_menuid("VIP Menu"), MenuKey, "MenuHandler");
    
    RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound");
    
    RegisterHookChain(RG_CSGameRules_OnRoundFreezeEnd, "@FreezeTime_End");

}

public plugin_cfg()
{
    get_pcvar_string(pCvar[GIVE_ITEMS], sItems, charsmax(sItems)); trim(sItems);
    pCvarCfg[WEAPONSRND] = get_pcvar_num(pCvar[WEAPONSRND]);
}

@FreezeTime_End(){
for(new i= 0; i < get_maxplayers(); i++){
    ShowMenu(i);
    }
}

public CSGameRules_RestartRound()
{   
    if(get_member_game(m_bCompleteReset))
    {
        iRound = 0;   
    }   
    iRound++;
}

public CBasePlayer_Spawn(const id)
{
    if(!is_user_connected(id) || !is_user_alive(id))
        return;
    
    if(iRound > pCvarCfg[WEAPONSRND])
    {
        for(new i, str_len = strlen(sItems); i < str_len ; i++)
        {
            switch(sItems[i])
            {
                case 'a':
                {
                    rg_set_user_armor(id, 100, ARMOR_VESTHELM);
                }
                case 'd':
                {
                    new TeamName:team = get_member(id, m_iTeam);
                        
                    if(team == TEAM_CT)
                    {
                        rg_give_defusekit (id, true);
                    }
                }
                case 'h':
                {
                    rg_give_item(id, "weapon_hegrenade", GT_APPEND);
                    rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
                }
                case 'p':
                {
                    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); }
                    }
                    bUsePistol = true;
                }
            }
        }
        ShowMenu(id);
    }
}

public ShowMenu(id)
{
    new szMenu[512], key; key = MENU_KEY_0;
    new iLen, szName[32]; get_entvar(id, var_netname, szName, charsmax(szName));
    
    iLen = formatex(szMenu, charsmax(szMenu), "\r%L \w[\d%L\w]^n\w%L^n", LANG_SERVER, "MENU_NAME", LANG_SERVER, "NAME_SERVER", LANG_SERVER, "WELCOME", szName);

    #if defined ADMIN_LOADER
        new exp = admin_expired(id);
        
        if(exp > 0)
        {
            new sys = get_systime();
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n^n", LANG_SERVER, "VIP_EXPIRED", LANG_SERVER, ((exp - sys) / 86400 > 0) ? "VIP_DAYS" : "VIP_DAY", (exp - sys) / 86400);
        }
        else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n^n", LANG_SERVER, "VIP_EXPIRED_PRMANENT");
    #else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    #endif

    new szUseWpn[2]; formatex(szUseWpn, charsmax(szUseWpn), "%s", bUseWeapon[id] ? "d" : "w");

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \%s%L^n\r2. \%s%L^n\r3. \%s%L^n", szUseWpn, LANG_SERVER, "AK47", szUseWpn, LANG_SERVER, "M4A1", szUseWpn, LANG_SERVER, "FAMAS");
    }
    else
    {
        key |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \%s%L^n\r2. \%s%L^n\r3. \%s%L^n", szUseWpn, LANG_SERVER, "AK47", szUseWpn, LANG_SERVER, "M4A1", szUseWpn, LANG_SERVER, "FAMAS");
    }

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \%s%L^n", szUseWpn, LANG_SERVER, "SCOUT");
    }
    else
    {
        key |= MENU_KEY_4;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \%s%L^n", szUseWpn, LANG_SERVER, "SCOUT");
    }

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \%s%L^n", szUseWpn, LANG_SERVER, "AWP");
    }
    else
    {
        key |= MENU_KEY_5;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \%s%L^n", szUseWpn, LANG_SERVER, "AWP");
    }
    
    if(bUsePistol)
    {
        key |= MENU_KEY_6;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. %L \r[\w%s\r]^n", LANG_SERVER, "PISTOL", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock");
    }
    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r0. %L", LANG_SERVER, "EXIT");
    set_member(id, m_iMenu, Menu_OFF);
    return show_menu(id, key, szMenu, -1, "VIP Menu");
}

public MenuHandler(id, key)
{
    if(!cs_get_user_buyzone(id))
        return PLUGIN_HANDLED;
    
    if(!is_user_alive(id))
        return PLUGIN_HANDLED;
    
    if(key <= 4)
    {
        if(iRound < pCvarCfg[WEAPONSRND])
        {
            return client_print_color(id, 0, "%L %L", LANG_SERVER, "CHAT_TAG", LANG_SERVER, "PISTOLS_ROUND");
        }
        
        if(bUseWeapon[id])
        {
            return client_print_color(id, 0, "%L %L", LANG_SERVER, "CHAT_TAG", LANG_SERVER, "ALREDY_WEAPON_RND");
        }
        
        bUseWeapon[id] = false;
            
        static const szChoosedBP[] = { 90, 90, 90, 30, 30 };
        static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_scout", "weapon_awp"};
        return give_items(id, szChoosedWP[key], szChoosedBP[key]);
    }
    else if(key == 5)
    {
        GivePistol(id);
    }   
    return PLUGIN_HANDLED;
}

public GivePistol(id)
{
    iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++;
    ShowMenu(id);
    return PLUGIN_HANDLED;
}

public 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);
    engclient_cmd(id, currWeaponName);
    return PLUGIN_HANDLED;
}
 
Сообщения
923
Реакции
548
Помог
13 раз(а)
Проверку на живого игрока добавьте
 
Сообщения
20
Реакции
1
Можно так попробывать сделать, с проверкой, вызывается только у живых игроков, даже если кто-то заспавнился, но сразу умер (например, через slay), меню не появится



Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <reapi>

#pragma semicolon 1

new const MenuKey = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);

enum _:cvars { GIVE_ITEMS, WEAPONSRND };

static sItems[10];
new iPistol[MAX_CLIENTS+1], bool:bUsePistol, bool:bUseWeapon[MAX_CLIENTS+1];

new iRound = 0;
new pCvar[cvars], pCvarCfg[cvars];

native admin_expired(id);
//#define ADMIN_LOADER

public plugin_init()
{
    register_plugin("[ReVIP] VIP Menu", "1.0", "Author");
    register_dictionary("vipsystem.txt");

    pCvar[GIVE_ITEMS] = register_cvar("give_items", "adhp");
    pCvar[WEAPONSRND] = register_cvar("weapons_rnd", "2");

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

    RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound");

    RegisterHookChain(RG_CSGameRules_OnRoundFreezeEnd, "@FreezeTime_End");
}

public plugin_cfg()
{
    get_pcvar_string(pCvar[GIVE_ITEMS], sItems, charsmax(sItems)); trim(sItems);
    pCvarCfg[WEAPONSRND] = get_pcvar_num(pCvar[WEAPONSRND]);
}

@FreezeTime_End()
{
    for (new i = 1; i <= get_maxplayers(); i++) {
        if (is_user_connected(i) && is_user_alive(i)) {
            ShowMenu(i);
        }
    }
}

public CSGameRules_RestartRound()
{
    if(get_member_game(m_bCompleteReset)) {
        iRound = 0;
    }
    iRound++;
}

public CBasePlayer_Spawn(const id)
{
    if (!is_user_connected(id) || !is_user_alive(id))
        return;

    if (iRound > pCvarCfg[WEAPONSRND])
    {
        for (new i, str_len = strlen(sItems); i < str_len ; i++)
        {
            switch (sItems[i])
            {
                case 'a':
                {
                    rg_set_user_armor(id, 100, ARMOR_VESTHELM);
                }
                case 'd':
                {
                    new TeamName:team = get_member(id, m_iTeam);

                    if (team == TEAM_CT)
                    {
                        rg_give_defusekit(id, true);
                    }
                }
                case 'h':
                {
                    rg_give_item(id, "weapon_hegrenade", GT_APPEND);
                    rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
                }
                case 'p':
                {
                    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); }
                    }
                    bUsePistol = true;
                }
            }
        }

        if (is_user_alive(id)) {
            ShowMenu(id);
        }
    }
}

public ShowMenu(id)
{
    if (!is_user_connected(id) || !is_user_alive(id))
        return PLUGIN_HANDLED;

    new szMenu[512], key; key = MENU_KEY_0;
    new iLen, szName[32]; get_entvar(id, var_netname, szName, charsmax(szName));

    iLen = formatex(szMenu, charsmax(szMenu), "\r%L \w[\d%L\w]^n\w%L^n", LANG_SERVER, "MENU_NAME", LANG_SERVER, "NAME_SERVER", LANG_SERVER, "WELCOME", szName);

    #if defined ADMIN_LOADER
        new exp = admin_expired(id);

        if(exp > 0)
        {
            new sys = get_systime();
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n^n", LANG_SERVER, "VIP_EXPIRED", LANG_SERVER, ((exp - sys) / 86400 > 0) ? "VIP_DAYS" : "VIP_DAY", (exp - sys) / 86400);
        }
        else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n^n", LANG_SERVER, "VIP_EXPIRED_PRMANENT");
    #else
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    #endif

    new szUseWpn[2]; formatex(szUseWpn, charsmax(szUseWpn), "%s", bUseWeapon[id] ? "d" : "w");

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \%s%L^n\r2. \%s%L^n\r3. \%s%L^n", szUseWpn, LANG_SERVER, "AK47", szUseWpn, LANG_SERVER, "M4A1", szUseWpn, LANG_SERVER, "FAMAS");
    }
    else
    {
        key |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \%s%L^n\r2. \%s%L^n\r3. \%s%L^n", szUseWpn, LANG_SERVER, "AK47", szUseWpn, LANG_SERVER, "M4A1", szUseWpn, LANG_SERVER, "FAMAS");
    }

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \%s%L^n", szUseWpn, LANG_SERVER, "SCOUT");
    }
    else
    {
        key |= MENU_KEY_4;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \%s%L^n", szUseWpn, LANG_SERVER, "SCOUT");
    }

    if(iRound < pCvarCfg[WEAPONSRND])
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \%s%L^n", szUseWpn, LANG_SERVER, "AWP");
    }
    else
    {
        key |= MENU_KEY_5;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \%s%L^n", szUseWpn, LANG_SERVER, "AWP");
    }

    if(bUsePistol)
    {
        key |= MENU_KEY_6;
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. %L \r[\w%s\r]^n", LANG_SERVER, "PISTOL", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock");
    }

    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r0. %L", LANG_SERVER, "EXIT");
    set_member(id, m_iMenu, Menu_OFF);
    show_menu(id, key, szMenu, -1, "VIP Menu");

    return PLUGIN_HANDLED;
}

public MenuHandler(id, key)
{
    if (!cs_get_user_buyzone(id) || !is_user_alive(id))
        return PLUGIN_HANDLED;

    if (key <= 4)
    {
        if (iRound < pCvarCfg[WEAPONSRND])
        {
            return client_print_color(id, 0, "%L %L", LANG_SERVER, "CHAT_TAG", LANG_SERVER, "PISTOLS_ROUND");
        }

        if (bUseWeapon[id])
        {
            return client_print_color(id, 0, "%L %L", LANG_SERVER, "CHAT_TAG", LANG_SERVER, "ALREDY_WEAPON_RND");
        }

        bUseWeapon[id] = true;

        static const szChoosedBP[] = { 90, 90, 90, 30, 30 };
        static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_scout", "weapon_awp"};
        return give_items(id, szChoosedWP[key], szChoosedBP[key]);
    }
    else if (key == 5)
    {
        GivePistol(id);
    }
    return PLUGIN_HANDLED;
}

public GivePistol(id)
{
    iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++;
    ShowMenu(id);
    return PLUGIN_HANDLED;
}

public 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);
    engclient_cmd(id, currWeaponName);
    return PLUGIN_HANDLED;
}
 
Сообщения
923
Реакции
548
Помог
13 раз(а)
Код:
@FreezeTime_End()
{
    for (new i = 1; i <= MaxClients; i++) {
        if (is_user_alive(i)) {
            ShowMenu(i);
        }
    }
}
нет нужды проверять подключен ли игрок, если он живой
 

snk

Сообщения
3
Реакции
0
Maga_610,
Спасибо, но ваша версия не работает, даже ошибку выдает..
Вторник в 17:54
skripaura,
Спасибо, ваш вариант работает, но иногда не дает выбрать оружие..
Вторник в 17:55
Код:
@FreezeTime_End()
{
    for (new i = 1; i <= MaxClients; i++) {
        if (is_user_alive(i)) {
            ShowMenu(i);
        }
    }
}
нет нужды проверять подключен ли игрок, если он живой
Я не знаю и не умею писать этот код...
 
Сообщения
1,193
Реакции
90
Помог
15 раз(а)
snk,
@skripaura,
Спасибо, ваш вариант работает, но иногда не дает выбрать оружие..

Наверное игрок успевает выйти с зоны закупки, и пытается взять оружие, учтите это cs_get_user_buyzone
 

Пользователи, просматривающие эту тему

Сверху Снизу