oleg_nelasy
Участник
- Сообщения
- 664
- Реакции
- 46
Подскажите как настроить чтобы если новый игрок при заходе на сервер не выбрал команду его перемещало в наблюдатели?
Последнее редактирование:
Моделируем ситуацию. Ты подключаешься к серверу у тебя висит меню выбора команды ты не кого не выбираешь по истечению времени тебя кидает за случайную команду. Мне надо чтобы в спектра кидало.Вот [Любая игра] - AFK Manager v.3.5.0
Тут всё можно настроить
mp_forceautoteammp_forceautoteam 1 - Включить / отключить автоматическое присоединение игрока к случайной команде при заходе на сервер.
+
AFK Manager
Подскажите как настроить чтобы если новый игрок при заходе на сервер не выбрал команду его перемещало в наблюдатели?
#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;
}
}
В css ob данная команда естьmp_forceautoteam
Unknown command "mp_forceautoteam"
EN
"mp_forceautoteam" = "0"
game notify replicated
- Automatically assign players to teams when joining.
RU
"mp_forceautoteam" = "0"
игра уведомляет реплицируется
- Автоматическое назначение игроков в команды при присоединении.
KillTimer(ClientTimer[iClient]);
ClientTimer[iClient] = null;
delete ClientTimer[iClient];
Спасибо, учту.@WanekWest, ты забыл убивать таймер при выходе игрока (а ещё лучше в таймер передавать UserID, а в хэндлере преобразовывать обратно в индекс и проверять валидность этого индекса) и хэндлер таймера тоже public должен быть.
Ещё при смене карты нужно обнулять хэндлы таймеров, т.к. флаг TIMER_FLAG_NO_MAPCHANGE не обнуляет их.
Кроме того в CheckClientTeam() надо бы проверять введённый параметр (можно написать jointeam 0, jointeam 4, что не не переведёт игрока ни в какую из команд, но таймер остановит).
Ну и этот кодравнозначен этомуC-подобный:KillTimer(ClientTimer[iClient]); ClientTimer[iClient] = null;
C-подобный:delete ClientTimer[iClient];
вот такие:какие можно узнать
#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;
}
Круто ,спасибо!!!вот такие: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; }