Поиск Join Team Problem

Сообщения
48
Реакции
4
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Hello i have one plugin for join in team not allow to stay spec but i have one problem when write in console jointeam 6 he can go in spec how to blocked not allow to go or to stay anybody spectator to blocked
 

Вложения

Сообщения
317
Реакции
131
Помог
4 раз(а)
should work
Код:
#include <amxmodx>

enum
{
    TEAM_NONE = 0,
    TEAM_T,
    TEAM_CT,
    TEAM_SPEC,
    
    MAX_TEAMS
};
new const g_cTeamChars[MAX_TEAMS] =
{
    'U',
    'T',
    'C',
    'S'
};
new const g_sTeamNums[MAX_TEAMS][] =
{
    "0",
    "1",
    "2",
    "3"
};
new const g_sClassNums[MAX_TEAMS][] =
{
    "1",
    "2",
    "3",
    "4"
};

// Old Style Menus
stock const FIRST_JOIN_MSG[] =        "#Team_Select";
stock const FIRST_JOIN_MSG_SPEC[] =    "#Team_Select_Spect";
stock const INGAME_JOIN_MSG[] =        "#IG_Team_Select";
stock const INGAME_JOIN_MSG_SPEC[] =    "#IG_Team_Select_Spect";
const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC);

// New VGUI Menus
stock const VGUI_JOIN_TEAM_NUM =        2;

new g_iTeam[33];
new g_iPlayers[MAX_TEAMS];

new tjm_join_team;
new tjm_switch_team;
new tjm_class[MAX_TEAMS];
new tjm_block_change;

public plugin_init()
{
    register_plugin("Auto join", "0.3", "Exolent");
    register_event("TeamInfo", "event_TeamInfo", "a");
    register_message(get_user_msgid("ShowMenu"), "message_ShowMenu");
    register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu");
    // added
    register_clcmd("jointeam 6", "cmdJoinTeam");
    // added
    tjm_join_team = register_cvar("tjm_join_team", "4");
    tjm_switch_team = register_cvar("tjm_switch_team", "0");
    tjm_class[TEAM_T] = register_cvar("tjm_class_t", "5");
    tjm_class[TEAM_CT] = register_cvar("tjm_class_ct", "5");
    tjm_block_change = register_cvar("tjm_block_change", "1");
}

// block jointeam 6
public cmdJoinTeam()
    return PLUGIN_HANDLED;

public plugin_cfg()
{
    set_cvar_num("mp_limitteams", 32);
    set_cvar_num("sv_restart", 1);
}

public client_disconnect(id)
{
    remove_task(id);
}

public event_TeamInfo()
{
    new id = read_data(1);
    new sTeam[32], iTeam;
    read_data(2, sTeam, sizeof(sTeam) - 1);
    for(new i = 0; i < MAX_TEAMS; i++)
    {
        if(g_cTeamChars[i] == sTeam[0])
        {
            iTeam = i;
            break;
        }
    }
    
    if(g_iTeam[id] != iTeam)
    {
        g_iPlayers[g_iTeam[id]]--;
        g_iTeam[id] = iTeam;
        g_iPlayers[iTeam]++;
    }
}

public message_ShowMenu(iMsgid, iDest, id)
{
    static sMenuCode[iMaxLen];
    get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1);
    if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC))
    {
        if(should_autojoin(id))
        {
            set_autojoin_task(id, iMsgid);
            return PLUGIN_HANDLED;
        }
    }
    else if(equal(sMenuCode, INGAME_JOIN_MSG) || equal(sMenuCode, INGAME_JOIN_MSG_SPEC))
    {
        if(should_autoswitch(id))
        {
            set_autoswitch_task(id, iMsgid);
            return PLUGIN_HANDLED;
        }
        else if(get_pcvar_num(tjm_block_change))
        {
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}

public message_VGUIMenu(iMsgid, iDest, id)
{
    if(get_msg_arg_int(1) != VGUI_JOIN_TEAM_NUM)
    {
        return PLUGIN_CONTINUE;
    }
    
    if(should_autojoin(id))
    {
        set_autojoin_task(id, iMsgid);
        return PLUGIN_HANDLED;
    }
    else if(should_autoswitch(id))
    {
        set_autoswitch_task(id, iMsgid);
        return PLUGIN_HANDLED;
    }
    else if((TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && get_pcvar_num(tjm_block_change))
    {
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

public task_Autojoin(iParam[], id)
{
    new iTeam = get_new_team(get_pcvar_num(tjm_join_team));
    if(iTeam != -1)
    {
        handle_join(id, iParam[0], iTeam);
    }
}

public task_Autoswitch(iParam[], id)
{
    new iTeam = get_switch_team(id);
    if(iTeam != -1)
    {
        handle_join(id, iParam[0], iTeam);
    }
}

stock handle_join(id, iMsgid, iTeam)
{
    new iMsgBlock = get_msg_block(iMsgid);
    set_msg_block(iMsgid, BLOCK_SET);
    
    engclient_cmd(id, "jointeam", g_sTeamNums[iTeam]);
    
    new iClass = get_team_class(iTeam);
    if(1 <= iClass <= 4)
    {
        engclient_cmd(id, "joinclass", g_sClassNums[iClass - 1]);
    }
    set_msg_block(iMsgid, iMsgBlock);
}

stock get_new_team(iCvar)
{
    switch(iCvar)
    {
        case 1:
        {
            return TEAM_T;
        }
        case 2:
        {
            return TEAM_CT;
        }
        case 3:
        {
            return TEAM_SPEC;
        }
        case 4:
        {
            new iTCount = g_iPlayers[TEAM_T];
            new iCTCount = g_iPlayers[TEAM_CT];
            if(iTCount < iCTCount)
            {
                return TEAM_T;
            }
            else if(iTCount > iCTCount)
            {
                return TEAM_CT;
            }
            else
            {
                return random_num(TEAM_T, TEAM_CT);
            }
        }
    }
    return -1;
}

stock get_switch_team(id)
{
    new iTeam;
    
    new iTCount = g_iPlayers[TEAM_T];
    new iCTCount = g_iPlayers[TEAM_CT];
    switch(g_iTeam[id])
    {
        case TEAM_T: iTCount--;
        case TEAM_CT: iCTCount--;
    }
    if(iTCount < iCTCount)
    {
        iTeam = TEAM_T;
    }
    else if(iTCount > iCTCount)
    {
        iTeam = TEAM_CT;
    }
    else
    {
        iTeam = random_num(TEAM_T, TEAM_CT);
    }
    
    if(iTeam != g_iTeam[id])
    {
        return iTeam;
    }
    
    return -1;
}

stock get_team_class(iTeam)
{
    new iClass;
    if(TEAM_NONE < iTeam < TEAM_SPEC)
    {
        iClass = get_pcvar_num(tjm_class[iTeam]);
        if(iClass < 1 || iClass > 4)
        {
            iClass = random_num(1, 4);
        }
    }
    return iClass;
}

stock set_autojoin_task(id, iMsgid)
{
    new iParam[2];
    iParam[0] = iMsgid;
    set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam));
}

stock set_autoswitch_task(id, iMsgid)
{
    new iParam[2];
    iParam[0] = iMsgid;
    set_task(0.1, "task_Autoswitch", id, iParam, sizeof(iParam));
}

stock bool:should_autojoin(id)
{
    return ((5 > get_pcvar_num(tjm_join_team) > 0) && is_user_connected(id) && !(TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}

stock bool:should_autoswitch(id)
{
    return (get_pcvar_num(tjm_switch_team) && is_user_connected(id) && (TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}
 
Сообщения
48
Реакции
4
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
@undefined, you blocked to stay and to go in spec ?
 

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

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