Если не выбрал команду перемещать в наблюдатели

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Подскажите как настроить чтобы если новый игрок при заходе на сервер не выбрал команду его перемещало в наблюдатели?
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Моделируем ситуацию. Ты подключаешься к серверу у тебя висит меню выбора команды ты не кого не выбираешь по истечению времени тебя кидает за случайную команду. Мне надо чтобы в спектра кидало.
[Любая игра] - AFK Manager v.3.5.0 устарел данная версия не корректно работает на кс го. Если что вот актуальная без багов [ANY] AFK Manager (Version 4.3.0 / Updated July 2nd 2018) - AlliedModders
 

Andy_Clashbit

🏅RPG-шник🏅
Сообщения
70
Реакции
13
mp_forceautoteam 1 - Включить / отключить автоматическое присоединение игрока к случайной команде при заходе на сервер.
+
AFK Manager
 

osTr0ve

Участник
Сообщения
59
Реакции
15
@oleg_nelasy,

Ну можно установить какой-нибудь AntiAfk менеджер. Там уже внутри него можно настроить чтобы он закидывал AFK в наблюдатели.
Более простое решение — но не будет закидывать за наблюдателей, а просто человек будет висеть пока не выберет команду.
mp_force_pick_time. Задаёт время, в течение которого игрок может выбрать команду. По истечении сервер выберет игроку команду.
Ну и типо ставим mp_force_pick_time 9999999 я думаю идея ясна.
 

WanekWest

Помешан на "Даунских названиях"
Сообщения
442
Реакции
143
Подскажите как настроить чтобы если новый игрок при заходе на сервер не выбрал команду его перемещало в наблюдатели?
Не проверял на компиляцию. Так быстро накинул вариантик.:
#pragma semicolon 1
#pragma newdecls required
#include <sdkhooks>
#include <sdktools>

float TimeDelay = 15.0; //Через сколько секунд проверить игрока
Handle ClientTimer[MAXPLAYERS+1];

public void OnPluginStart()
{
    AddCommandListener(ClientSelectedTeam, "jointeam");
}

public void OnClientPostAdminCheck(int iClient)
{
    ClientTimer[iClient] = CreateTimer(TimeDelay, CheckClientTeam, iClient, TIMER_FLAG_NO_MAPCHANGE);
}

Action CheckClientTeam(Handle hTimer, int iClient)
{
    if(IsClientConnected(iClient) && IsClientInGame(iClient) && ClientTimer[iClient] != null)
    {
        ChangeClientTeam(iClient, 1);
        ClientTimer[iClient] = null;
    }
}

public Action ClientSelectedTeam(int iClient, char[] command, int args)
{
    if (iClient && args && ClientTimer[iClient] != null)
    {
        KillTimer(ClientTimer[iClient]);
        ClientTimer[iClient] = null;
    }
}
 
Последнее редактирование:

babka68

Участник
Сообщения
2,124
Реакции
956
mp_forceautoteam
Unknown command "mp_forceautoteam"
В css ob данная команда есть

C-подобный:
EN
"mp_forceautoteam" = "0"
game notify replicated
- Automatically assign players to teams when joining.
RU
"mp_forceautoteam" = "0"
игра уведомляет реплицируется
- Автоматическое назначение игроков в команды при присоединении.
P.S Не обратил внимания,что тема находиться в разделе cs go
Сообщения автоматически склеены:

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

Другое - Forced Team можно попробовать данный плагин,если верить настройкам,то можно выставить наблюдатели
изображение_2021-04-20_222551.png
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@WanekWest, ты забыл убивать таймер при выходе игрока (а ещё лучше в таймер передавать UserID, а в хэндлере преобразовывать обратно в индекс и проверять валидность этого индекса) и хэндлер таймера тоже public должен быть.
Ещё при смене карты нужно обнулять хэндлы таймеров, т.к. флаг TIMER_FLAG_NO_MAPCHANGE не обнуляет их.
Кроме того в CheckClientTeam() надо бы проверять введённый параметр (можно написать jointeam 0, jointeam 4, что не не переведёт игрока ни в какую из команд, но таймер остановит).

Ну и этот код
C-подобный:
KillTimer(ClientTimer[iClient]);
ClientTimer[iClient] = null;
равнозначен этому
C-подобный:
delete ClientTimer[iClient];
 

WanekWest

Помешан на "Даунских названиях"
Сообщения
442
Реакции
143
@WanekWest, ты забыл убивать таймер при выходе игрока (а ещё лучше в таймер передавать UserID, а в хэндлере преобразовывать обратно в индекс и проверять валидность этого индекса) и хэндлер таймера тоже public должен быть.
Ещё при смене карты нужно обнулять хэндлы таймеров, т.к. флаг TIMER_FLAG_NO_MAPCHANGE не обнуляет их.
Кроме того в CheckClientTeam() надо бы проверять введённый параметр (можно написать jointeam 0, jointeam 4, что не не переведёт игрока ни в какую из команд, но таймер остановит).

Ну и этот код
C-подобный:
KillTimer(ClientTimer[iClient]);
ClientTimer[iClient] = null;
равнозначен этому
C-подобный:
delete ClientTimer[iClient];
Спасибо, учту.
 

КРУТОЙ

Участник
Сообщения
160
Реакции
30
Люди подскажите вроде нормально переводит в наблюдатели но табличка сама не уберается о выбаре команд
 

Вложения

  • 20230809_063513.jpg
    20230809_063513.jpg
    1.6 МБ · Просмотры: 27

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
@КРУТОЙ, если я не ошибаюсь то эту табличку автоматически не убрать, только нажатием выбора команды или esc.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@SlavON, можно и автоматически убрать
только нужно где-то с десяток строк кода добавит, емнип.
 

КРУТОЙ

Участник
Сообщения
160
Реакции
30
@SlavON, можно и автоматически убрать
только нужно где-то с десяток строк кода добавит

@SlavON, можно и автоматически убрать
только нужно где-то с десяток строк кода добавит, емнип.
какие можно узнать
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
какие можно узнать
вот такие:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

static const float DELAY = 15.0;    // Через сколько секунд проверить игрока

Handle hTimer[MAXPLAYERS+1];

public void OnPluginStart()
{
    AddCommandListener(Cmd_Team, "jointeam");
}

public void OnMapStart()
{
    for(int i = 1; i <= MaxClients; i++) hTimer[i] = null;
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client))
        hTimer[client] = CreateTimer(DELAY, Timer_CheckClient, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
}

public Action Cmd_Team(int client, char[] command, int args)
{
    if(client && hTimer[client] && !IsFakeClient(client) && args)
    {
        static char buffer[4];
        GetCmdArg(1, buffer, sizeof(buffer));
        StripQuotes(buffer);
        int team;
        if(TrimString(buffer) && (team = StringToInt(buffer)) > 0 && team < 4)
        {
            KillTimer(hTimer[client]);
            hTimer[client] = null;
        }
    }
    return Plugin_Continue;
}

public Action Timer_CheckClient(Handle timer, int client)
{
    if((client = GetClientOfUserId(client)) && !GetClientTeam(client))
    {
        hTimer[client] = null;

        ChangeClientTeam(client, 1);
        RequestFrame(RequestFrame_Callback, GetClientUserId(client));
    }
    return Plugin_Stop;
}

public void RequestFrame_Callback(int client)
{
    if(!(client = GetClientOfUserId(client))) return;

    Event event = CreateEvent("player_team");
    event.SetInt("userid", GetClientUserId(client));
    event.FireToClient(client);
    CancelCreatedEvent(event);
}

public void OnClientDisconnect(int client)
{
    if(hTimer[client]) CloseHandle(hTimer[client]);
    hTimer[client] = null;
}
 

КРУТОЙ

Участник
Сообщения
160
Реакции
30
вот такие:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

static const float DELAY = 15.0;    // Через сколько секунд проверить игрока

Handle hTimer[MAXPLAYERS+1];

public void OnPluginStart()
{
    AddCommandListener(Cmd_Team, "jointeam");
}

public void OnMapStart()
{
    for(int i = 1; i <= MaxClients; i++) hTimer[i] = null;
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client))
        hTimer[client] = CreateTimer(DELAY, Timer_CheckClient, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
}

public Action Cmd_Team(int client, char[] command, int args)
{
    if(client && hTimer[client] && !IsFakeClient(client) && args)
    {
        static char buffer[4];
        GetCmdArg(1, buffer, sizeof(buffer));
        StripQuotes(buffer);
        int team;
        if(TrimString(buffer) && (team = StringToInt(buffer)) > 0 && team < 4)
        {
            KillTimer(hTimer[client]);
            hTimer[client] = null;
        }
    }
    return Plugin_Continue;
}

public Action Timer_CheckClient(Handle timer, int client)
{
    if((client = GetClientOfUserId(client)) && !GetClientTeam(client))
    {
        hTimer[client] = null;

        ChangeClientTeam(client, 1);
        RequestFrame(RequestFrame_Callback, GetClientUserId(client));
    }
    return Plugin_Stop;
}

public void RequestFrame_Callback(int client)
{
    if(!(client = GetClientOfUserId(client))) return;

    Event event = CreateEvent("player_team");
    event.SetInt("userid", GetClientUserId(client));
    event.FireToClient(client);
    CancelCreatedEvent(event);
}

public void OnClientDisconnect(int client)
{
    if(hTimer[client]) CloseHandle(hTimer[client]);
    hTimer[client] = null;
}
Круто ,спасибо!!!
 
Сверху Снизу