dr lex
Участник
- Сообщения
- 22
- Реакции
- 5
Доброе время суток
Нужна помощь по событию player_disconnect
В сети мало информации именно по самому Event
Суть проблемы:
Нужно узнать причину выхода игрока
Сам код:
Нужно отловить именно причины: когда игрок сам вышел или по ошибке вылетел. Возможно ли это узнать в принципе?
Нужна помощь по событию player_disconnect
В сети мало информации именно по самому Event
Суть проблемы:
Нужно узнать причину выхода игрока
string | reason | "self", "kick", "ban", "cheat", "error" |
Сам код:
C-подобный:
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required
char sg_log[160];
public void OnPluginStart()
{
HookEvent("player_disconnect", Event_PlayerDisconnect);
BuildPath(Path_SM, sg_log, sizeof(sg_log)-1, "logs/hm_disconnect.log");
}
public Action Event_PlayerDisconnect(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if ((client != 0) && !IsFakeClient(client))
{
char reason[100];
event.GetString("reason", reason, sizeof(reason));
if (StrContains(reason, "self", false) != -1)
{
strcopy(reason, sizeof(reason), "self");
LogToFileEx(sg_log, "self");
}
else if (StrContains(reason, "kick", false) != -1)
{
strcopy(reason, sizeof(reason), "kick");
LogToFileEx(sg_log, "Kicked");
}
else if (StrContains(reason, "ban", false) != -1)
{
strcopy(reason, sizeof(reason), "ban");
LogToFileEx(sg_log, "ban");
}
else if (StrContains(reason, "cheat", false) != -1)
{
strcopy(reason, sizeof(reason), "cheat");
LogToFileEx(sg_log, "cheat");
}
else if (StrContains(reason, "error", false) != -1)
{
strcopy(reason, sizeof(reason), "error");
LogToFileEx(sg_log, "error");
}
else
{
strcopy(reason, sizeof(reason), "???");
LogToFileEx(sg_log, "???");
}
char player_name[MAX_NAME_LENGTH];
event.GetString("name", player_name, sizeof(player_name));
LogToFileEx(sg_log, "[%s] Disconnect (%s)", player_name, reason);
if (!dontBroadcast)
{
SetEventBroadcast(event, true);
}
}
return Plugin_Continue;
}
Нужно отловить именно причины: когда игрок сам вышел или по ошибке вылетел. Возможно ли это узнать в принципе?
Последнее редактирование: