Как известно, в 0.3x функция Kick обрывает соединение с игроком не дожидаясь доставки сообщения и других пакетов с данными. Это сделано в целях защиты серверов. Сейчас я расскажу вам, как сделать доставку нужных нам данных игроку перед киком, максимально удобным способом.
[spoiler="Ко всем forward'ам:"]
Код
forward KickTimer(playerid);
[/spoiler]
[spoiler="В начало OnPlayerDisconnect:"]
Код
if(GetPVarInt(playerid, "Kick") != 0) KillTimer(GetPVarInt(playerid, "Kick"));
[/spoiler]
[spoiler="В начало OnPlayerUpdate:"]
Код
if(GetPVarInt(playerid, "Kick") != 0) GKick(playerid);
[/spoiler]
[spoiler="В конец мода или другое подходящее место:"]
Код
public KickTimer(playerid) return GKick(playerid);
stock GKick(playerid, time = 5000)
{
if(GetPVarInt(playerid, "Kick") == -1) Kick(playerid);
else if(!GetPVarInt(playerid, "Kick")) SetPVarInt(playerid, "Kick", SetTimerEx("KickTimer", time, 0, "d", playerid));
else
{
KillTimer(GetPVarInt(playerid, "Kick"));
SetPVarInt(playerid, "Kick", -1);
GKick(playerid);
}
return 1;
}
[/spoiler]
Теперь если вы захотите кикнуть игрока, то нужно использовать функцию GKick(playerid, time).
playerid - это ID игрока, которого вы хотите кикнуть.
time (не обязательно) - время, через которое игрока кикнет если он будет в AFK (по умолчанию 5 секунд).
Если игрок не находится в AFK его кикнет сразу же после доставки всех нужных пакетов с данными.
На этом всё, удачного программирования!
Автор: XemyL