Есть очень простой способ реализовать возможность банить за выход с микса. Правда бан будет локальный.
В
warmod.sp есть функция
OnClientDisconnect(client). В ее теле достаточно прописать
if (g_live && disconnected_by_user)
BanClient(client, 1440, BANFLAG_AUTHID, "Live disconnect." , "" , "sm_addban");
1440 - срок бана в минутах.
"Live disconnect." - причина бана.
Но в начале нужно создать переменную типа bool, например, с именем disconnected_by_user, в которой будет храниться информация о том, вышел ли клиент сам или по какой-то причине его выкинуло. Тело
Event_Player_Disc(Handle:event, const String:name[], bool:dontBroadcast) нужно изменить так
public Event_Player_Disc(Handle:event, const String:name[], bool:dontBroadcast) {
if (!IsActive(0, true))
return;
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if (GetConVarBool(g_h_stats_enabled) && g_live && client != 0) {
new String:log_string[256];
CS_GetLogString(client, log_string, sizeof(log_string));
new String:reason[128];
GetEventString(event, "reason", reason, sizeof(reason));
/* modified */
if (StrEqual(reason, "Disconnect by user.") )
disconnected_by_user = true;
else
disconnected_by_user = false;
/* end */
Log2Game("\"player_disconnect\" (player \"%s\") (reason \"%s\")", log_string, reason);
}
}
Так, например, если игрока выкинет по "timeout", он не будет забанен.
Измененный код и скомпилированный файл во вложении. Измененные части выделены /* modified */ /* end */