Поймать событие игроков в команде слишком много

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C-подобный:
public Action Hook_JoinTeam(int iClient, const char[] command, int iArgs)
{
    Разумеется кроме этого кода есть многое другое.
    Суть в следующем. Если игрока не пустило в команду потому что игроков в другой команде слишком много. Надо сделать так чтобы этот код не отработал.
    
    if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && g_cvMinPlayers.IntValue <= iPlayers && !g_bCheckReconnect[iClient]) // (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0 Проверка чтобы у игрока небыло флага z и b
    {
        if(!g_cvAdminImmunity.BoolValue || g_cvAdminImmunity.BoolValue && (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0)
        {   
            g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
            if(!g_cvConsiderSpec.BoolValue && g_cvMinPlayers.IntValue == iPlayers && team_to != CS_TEAM_SPECTATOR || !g_cvConsiderSpec.BoolValue && g_cvMinPlayers.IntValue < iPlayers || g_cvConsiderSpec.BoolValue)
                CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
        }
    }
}



1636885730675-png.87201

Сообщения автоматически склеены:

Скорее всего это событие вызывается после JoinTeam но до player_team. Надо его поймать и отловить пропустило игрока или команда полная и ему не дало сменить команду.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,558
Реакции
5,055
если событие перехода за команду сработало, то игрок зашёл за команду
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
если событие перехода за команду сработало, то игрок зашёл за команду
В общем прошу за панику 2 чеса не знал как подойти. А потом посмотрел что у меня почти все переменные глобальные . В общем перенес код в public Action Event_PlayerTeam(Event hEvent, const char[] sEvName, bool bDontBroadcast)

По факту получилось как-то так.


C-подобный:
public Action Event_PlayerTeam(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
    int iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
   
    if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && g_cvMinPlayers.IntValue <= g_iPlayers[iClient] && !g_bCheckReconnect[iClient]) // (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0 Проверка чтобы у игрока небыло флага z и b
    {
        if(!g_cvAdminImmunity.BoolValue || g_cvAdminImmunity.BoolValue && (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0)
        {  
           
            if(!g_cvConsiderSpec.BoolValue && g_cvMinPlayers.IntValue == g_iPlayers[iClient] && hEvent.GetInt("team") != CS_TEAM_SPECTATOR || !g_cvConsiderSpec.BoolValue && g_cvMinPlayers.IntValue < g_iPlayers[iClient] || g_cvConsiderSpec.BoolValue)
            {  
                g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
                CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
            }
        }  
    }

    if(g_cvMinPlayers.IntValue > g_iPlayers[iClient] && g_iStatusSwapTeams[iClient])
        g_iStatusSwapTeams[iClient] = 0;
   
    if(!g_bCheckFirstConnection[iClient])
        g_bCheckFirstConnection[iClient] = true;
   
    if(g_bCheckReconnect[iClient])
        g_bCheckReconnect[iClient] = false;  

    g_iPlayers[iClient] = 0;
   
    return Plugin_Continue;
}
 
Последнее редактирование:
Сверху Снизу