[CS:GO] Auto join team on connect only spec

beer

Участник
Сообщения
4
Реакции
0
Операционная система
Linux
Текст ошибки
нет ошибки
Список мета-модулей
[01] SourceMod (1.10.0.6392) by AlliedModders LLC
[02] CS Tools (1.10.0.6392) by AlliedModders LLC
[03] SDK Tools (1.10.0.6392) by AlliedModders LLC
[04] SDK Hooks (1.10.0.6392) by AlliedModders LLC
Список плагинов SM
01 "Admin Help" (1.10.0.6392) by AlliedModders LLC
02 "Admin Menu" (1.10.0.6392) by AlliedModders LLC
03 "Basic Commands" (1.9.0.5909) by AlliedModders LLC
04 "Sound Commands" (1.10.0.6392) by AlliedModders LLC
Список расширений SM
[01] Automatic Updater (1.10.0.6392): Updates SourceMod gamedata files
[02] Webternet (1.10.0.6392): Extension for interacting with URLs
[03] CS Tools (1.10.0.6392): CS extended functionality
[04] BinTools (1.10.0.6392): Low-level C/C++ Calling API
[05] SDK Tools (1.10.0.6392): Source SDK Tools
[06] Top Menus (1.10.0.6392): Creates sorted nested menus
[07] SDK Hooks (1.10.0.6392): Source SDK Hooks
[08] Client Preferences (1.10.0.6392): Saves client preference settings
[09] SQLite (1.10.0.6392): SQLite Driver
[10] MySQL-DBI (1.10.0.6392): MySQL driver implementation for DBI
Доброе утро. Хочу исправить не большую ошибку. Что когда игрок подключается к сервер и не выбирает команду afk обычно, то его кидает в игру.
Команд к сожалению не нашел,. С плагинов почти подходит один.
[CS:GO] Auto join team on connect Оригинал

Но он работает рандомна кидает туда где меньше, а хотелось чтобы кидал только в спектри, а потом игрок сам выбирал команду нажав "M"
Кому не трудно подправте код 😏

C-подобный:
#include <sourcemod>
#include <cstrike>
#include <sdktools>

new Handle: Team

public Plugin:myinfo = {
    name = "Auto Join On Connect",
    author = "Divin!",
    description = "Based on players number with bug fixed",
    version = "1.0",
    url = "http://wtfcs.com/forum"
}

public OnPluginStart( ) {
    Team = CreateConVar( "sm_join_team", "1", "Do not edit this" )
    AddCommandListener(SelectTeam, "jointeam");
    HookEvent( "player_connect_full", Event_OnFullConnect, EventHookMode_Post )
}

public Event_OnFullConnect( Handle:event, const String:name[ ], bool:dontBroadcast ) {
    new client = GetClientOfUserId( GetEventInt( event, "userid" ) )
    
    if( client != 0 && IsClientInGame( client ) && !IsFakeClient( client ) ) {
        CreateTimer( 0.5, AssignTeam, client )
    }
}

public Action: AssignTeam( Handle: timer, any: client ) {
    if( IsClientInGame( client ) ) {
        int iCvar = GetConVarInt( Team )
        
        switch( iCvar ) {
            case 0 : {
                return Plugin_Handled
            }
            case 1 : {
                new iRed, iBlue;
                for(new i = 1; i <= MaxClients; i++)
                {
                    if(!IsClientInGame(i))
                        continue;

                    new iTeam = GetClientTeam(i);
                    if(iTeam == CS_TEAM_T)
                        iRed++;
                    else if(iTeam == CS_TEAM_CT)
                        iBlue++;
                }
                if( iRed > iBlue )
                {
                    ChangeClientTeam( client, 3 )
                }
                else
                if( iRed < iBlue )
                {
                    ChangeClientTeam( client, 2 )
                }
                else
                if( iRed == iBlue )
                {
                    ChangeClientTeam( client, 2 )
                }
                CS_RespawnPlayer(client);
                            
            }
            
            case 2 : {
                ChangeClientTeam( client, 2 )
            }
            
            case 3 : {
                ChangeClientTeam( client, 3 )
            }
        }
    }
    
    return Plugin_Continue
}

public Action:SelectTeam(client, const String:command[], args)
{
    if (client && args)
    {
        decl String:team[2];
        GetCmdArg(1, team, sizeof(team));
        switch (StringToInt(team))
        {
            case CS_TEAM_SPECTATOR: ChangeClientTeam(client, CS_TEAM_SPECTATOR);
            case CS_TEAM_T: {
                new iRed, iBlue;
                for(new i = 1; i <= MaxClients; i++)
                {
                    if(!IsClientInGame(i))
                        continue;

                    new iTeam = GetClientTeam(i);
                    if(iTeam == CS_TEAM_T)
                        iRed++;
                    else if(iTeam == CS_TEAM_CT)
                        iBlue++;
                }
                if( iRed < iBlue )
                {
                    ForcePlayerSuicide(client);
                    ChangeClientTeam( client, 2 )
                }
                else
                if( iRed == iBlue )
                {
                    ForcePlayerSuicide(client);
                    ChangeClientTeam( client, 2 )
                }
            }
            case CS_TEAM_CT: {
                new iRed, iBlue;
                for(new i = 1; i <= MaxClients; i++)
                {
                    if(!IsClientInGame(i))
                        continue;

                    new iTeam = GetClientTeam(i);
                    if(iTeam == CS_TEAM_T)
                        iRed++;
                    else if(iTeam == CS_TEAM_CT)
                        iBlue++;
                }
                if( iRed > iBlue )
                {
                    ForcePlayerSuicide(client);
                    ChangeClientTeam( client, 3 )
                }
                else
                if( iRed == iBlue )
                {
                    ForcePlayerSuicide(client);
                    ChangeClientTeam( client, 3 )
                }
            }
        }
    }
    return Plugin_Continue;
}
 

smoke96

Участник
Сообщения
1,134
Реакции
175
PHP:
new Handle:g_wait = INVALID_HANDLE;

public void OnPluginStart()
{
    g_wait = CreateConVar("sm_wait_time", "5.0", "Время в секундах до перемещения игрока в наблюдатели.")
}

public void OnClientPostAdminCheck(int iClient)
{
    CreateTimer(GetConVarFloat(g_wait), MovePlayer, GetClientUserId(iClient));
}

public Action MovePlayer(Handle timer, any:UserId)
{
    new iClient = GetClientOfUserId(UserId);
    if(iClient && IsClientInGame(iClient) && GetClientTeam(iClient) == 0 && !IsClientSourceTV(iClient))
    {
        ChangeClientTeam(iClient, 1);
    }
    return Plugin_Stop;
}

После подключения, через промежуток времени sm_wait_time , игрок будет перемещен в наблюдатели.
 

beer

Участник
Сообщения
4
Реакции
0
Большое спасибо! работает
 
Сверху Снизу