Поиск перевести игрока за вип команду

Сообщения
542
Реакции
50
Предупреждения
2
Помог
4 раз(а)
всем привет. есть ли плагин, который позволяет на as_ картах, перевести игрока за випов?
 
Сообщения
775
Реакции
291
Помог
11 раз(а)
Artemich,
Код:
#include <amxmodx>
#include <reapi>

//#define CUSTOM_MENU            // Меню с 3-мя пунктами. 1 - Войти в игру, 6 - Наблюдатели, 0 - Выход
#define TIME_CHANGE    10            // Пауза между сменой команд, в секундах
#define PLAYER_DIFF    1            // Разница между командами (если на n человек больше, за эту команду зайти нельзя)
#define MAXPLAYERS    32

new g_MapName[32], bool:g_VIPMap = false, VGUIMenu:menus;
new Float:g_fLastTeamChange[MAXPLAYERS+1];
new HookChain:HookShowMenuPre;

public plugin_init()
{
    register_plugin("[ReAPI] Choose team", "1.1", "maFFyoZZyk");

    register_clcmd("chooseteam", "CMD_ChooseTeam");
    RegisterHookChain(RG_ShowVGUIMenu,         "ShowVGUIMenu_Pre", false);
    RegisterHookChain(RG_HandleMenu_ChooseTeam,     "HandleMenu_ChooseTeam_Pre", false);
    HookShowMenuPre = RegisterHookChain(RG_ShowMenu, "ShowMenu_Pre", false);
    DisableHookChain(HookShowMenuPre);
    
    get_mapname(g_MapName, charsmax(g_MapName));
    if(containi(g_MapName, "as_") != -1) g_VIPMap = true;

    set_task(1.2, "ChangeServerCvars");
}

public ChangeServerCvars()    set_cvar_num("mp_limitteams", 0);

public CMD_ChooseTeam(id)
{
    if(!is_user_connected(id))
        return HC_CONTINUE;

    set_member(id, m_bTeamChanged, false);
    
    if(TIME_CHANGE && get_member(id, m_iTeam))
    {
        new Float:fNextChoose = g_fLastTeamChange[id] + TIME_CHANGE;
        new Float:fCurTime = get_gametime();
        
        if(fNextChoose > fCurTime)
        {
            client_print_color(id, 0, "^1[^4GFS^1] Сменить команду можно через ^4%d ^1секунд", floatround(fNextChoose - fCurTime));
            return HC_SUPERCEDE;
        }
    }
    return HC_CONTINUE;
}

public ShowVGUIMenu_Pre(const id, VGUIMenu:menuType, const bitsSlots, szOldMenu[])
{
    if (is_user_bot(id))
    {
        return HC_CONTINUE;
    }

    new szMenu[MAX_MENU_LENGTH], iKeys = MENU_KEY_0;
    if(menuType == VGUI_Menu_Team)
    {
#if defined CUSTOM_MENU   
        SetHookChainArg(3, ATYPE_INTEGER, MENU_KEY_0 | MENU_KEY_1 | MENU_KEY_6);
        SetHookChainArg(4, ATYPE_STRING, "\yВыберите действие:^n^n\y1. \rВойти в игру^n\y6. \wНаблюдение^n^n\y0. \wВыход");
#else
        new iTeamTT, iTeamCT; CalculateTeamNum(iTeamTT, iTeamCT);
        new TeamName:team = get_member(id, m_iTeam);
        new iLen = formatex(szMenu, charsmax(szMenu), "\yВыбор команды:^n^n");
        if((iTeamTT - iTeamCT) >= PLAYER_DIFF || team == TEAM_TERRORIST)    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \dТеррористы [\r%d\w]^n", iTeamTT);
        else
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wТеррористы [\r%d\w]^n", iTeamTT);
            iKeys |= MENU_KEY_1;
        }
        
        if((iTeamCT - iTeamTT) >= PLAYER_DIFF || team == TEAM_CT)    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \dСпецотряд [\r%d\w]^n^n", iTeamCT);
        else
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wСпецотряд [\r%d\w]^n^n", iTeamCT);
            iKeys |= MENU_KEY_2;
        }
        if(g_VIPMap)
        {
            if(team != TEAM_CT) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \dVIP^n^n");
            else
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wVIP^n^n");
                iKeys |= MENU_KEY_3;
            }
        }
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \yАвто-Выбор^n");
        iKeys |= MENU_KEY_5;
        
        if(team == TEAM_SPECTATOR)    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \rНаблюдение^n^n^n");
        else
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \rНаблюдение^n^n^n");
            iKeys |= MENU_KEY_6;
        }
        
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0. \wВыход");
        
        SetHookChainArg(3, ATYPE_INTEGER, iKeys);
        SetHookChainArg(4, ATYPE_STRING, szMenu);
        
        if (strlen(szMenu) > 175)
        {
            EnableHookChain(HookShowMenuPre);
        }

#endif
    }
    else if(menuType == VGUI_Menu_Class_T)
    {
        new iLen = formatex(szMenu, charsmax(szMenu), "\yВыбор класса:^n^n");

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wФеникс^n");
        iKeys |= MENU_KEY_1;
    
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wЭлитный отряд^n");
        iKeys |= MENU_KEY_2;

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wАрктические мстители^n");
        iKeys |= MENU_KEY_3;
            
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \rПартизаны^n^n^n");
        iKeys |= MENU_KEY_4;

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \yАвто-Выбор^n");
        iKeys |= MENU_KEY_5;
                
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0. \wВыход");
        
        SetHookChainArg(3, ATYPE_INTEGER, iKeys);
        SetHookChainArg(4, ATYPE_STRING, szMenu);
        
        if (strlen(szMenu) > 175)
        {
            EnableHookChain(HookShowMenuPre);
        }
        
    }
    else if(menuType ==  VGUI_Menu_Class_CT)
    {
        new iLen = formatex(szMenu, charsmax(szMenu), "\yВыбор класса:^n^n");

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wМорские котики^n");
        iKeys |= MENU_KEY_1;
    
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wСпецназ^n");
        iKeys |= MENU_KEY_2;

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wДесантники^n");
        iKeys |= MENU_KEY_3;
            
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \rКарательный отряд^n^n^n");
        iKeys |= MENU_KEY_4;

        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \yАвто-Выбор^n");
        iKeys |= MENU_KEY_5;
            
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0. \wВыход");
        
        SetHookChainArg(3, ATYPE_INTEGER, iKeys);
        SetHookChainArg(4, ATYPE_STRING, szMenu);
        
        if (strlen(szMenu) > 175)
        {
            EnableHookChain(HookShowMenuPre);
        }
    }
    return HC_CONTINUE;
}

// Fix menu limit in ReGameDLL (https://github.com/s1lentq/ReGameDLL_CS/blob/9d89a347fa22662b716697c97150ddea2bd00d99/regamedll/dlls/client.cpp#L394)
public ShowMenu_Pre(const id, const keys, const time, const needMore, const menu[]) {
    DisableHookChain(HookShowMenuPre);
    show_menu(id, keys, menu, time);
    switch(menus)
    {
        case Menu_ChooseTeam: set_member(id, m_iMenu, Menu_ChooseTeam); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Class_T: set_member(id, m_iMenu, VGUI_Menu_Class_T); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Class_CT: set_member(id, m_iMenu, VGUI_Menu_Class_CT); // AMXX overide m_iMenu after show_menu
    }
    return HC_SUPERCEDE;
}

public HandleMenu_ChooseTeam_Pre(const id, const MenuChooseTeam:key)
{
    if (is_user_bot(id)) {
        return HC_CONTINUE;
    }
    switch(key)
    {
#if defined CUSTOM_MENU   
        case 1: SetHookChainArg(2, ATYPE_INTEGER, (rg_get_join_team_priority() == TEAM_TERRORIST) ? MenuChoose_T : MenuChoose_CT);
        case MenuChoose_Spec:    user_silentkill(id);
#else           
        case MenuChoose_T: SetHookChainArg(2, ATYPE_INTEGER, MenuChoose_T);
        case MenuChoose_CT: SetHookChainArg(2, ATYPE_INTEGER, MenuChoose_CT);
        case MenuChoose_AutoSelect: SetHookChainArg(2, ATYPE_INTEGER, MenuChoose_AutoSelect);
        case MenuChoose_Spec:    user_silentkill(id);
#endif
    }
    g_fLastTeamChange[id] = get_gametime();
    return HC_CONTINUE;
}

CalculateTeamNum(&iTeamTT, &iTeamCT)
{
    for(new id = 1; id <=  MAXPLAYERS; id++)
    {
        if(!is_user_connected(id)) continue;
        
        switch(get_member(id, m_iTeam))
        {
            case TEAM_CT:            iTeamCT++;
            case TEAM_TERRORIST:    iTeamTT++;
        }
    }
}
 
Сообщения
542
Реакции
50
Предупреждения
2
Помог
4 раз(а)
maFFyoZZyk, какая команда что-бы открыть меню?
 
Сообщения
862
Реакции
144
Помог
25 раз(а)
@Artemich,это замена стандартного выбора (клавиша М)
 
Сообщения
542
Реакции
50
Предупреждения
2
Помог
4 раз(а)
ImmortalAmxx, мне игрока перевести через меню надо, а не чтобы он выбрал команду
 

d3m37r4

111111
Сообщения
1,429
Реакции
1,169
Помог
10 раз(а)
Проще в пре хуке MakeVip нужный айди игрока подсунуть, в реапи он есть
 
Сообщения
1,498
Реакции
1,496
Помог
2 раз(а)
Сообщения
939
Реакции
187
Помог
4 раз(а)
MayroN, Поперчить и посалить по просьбе?:boast:
 
Сообщения
542
Реакции
50
Предупреждения
2
Помог
4 раз(а)
MayroN, молодец, поумничал. попробую сделать что то с примером
 

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу