10.03.2013, 15:48
Что тут гениального? У вас завышена самооценка... Набросал более грамотное решение:
Юзаете KickTimeout(playerid); или KickTimeout(playerid, время_таймаута); т.е. для тех кто в танке:
KickTimeout(playerid, 20000); кикнет игрока моментально, после доставки всех нужных сообщений и т.д. но с таймаутом в 20 секунд (например если игрок в ESC).
pawn Код:
new PlayerKickState[MAX_PLAYERS];
stock KickTimeout(playerid, timeout = 5000) {
if(PlayerKickState[playerid] == 0) {
PlayerKickState[playerid] = SetTimerEx("KickTimeoutTimer", timeout, false, "i", playerid);
}
}
KickTimeoutCheck(playerid) {
if(PlayerKickState[playerid]) {
KillTimer(PlayerKickState[playerid]);
PlayerKickState[playerid] = 0;
return 1;
}
return 0;
}
forward KickTimeoutTimer(playerid);
public KickTimeoutTimer(playerid) {
PlayerKickState[playerid] = 0;
Kick(playerid);
}
// Callback's
public OnplayerDisconnect(playerid, reason) {
KickTimeoutCheck(playerid);
return 1;
}
public OnPlayerUpdate(playerid) {
if(KickTimeoutCheck(playerid)) {
Kick(playerid);
}
return 1;
}
KickTimeout(playerid, 20000); кикнет игрока моментально, после доставки всех нужных сообщений и т.д. но с таймаутом в 20 секунд (например если игрок в ESC).