[Урок] Выводим сообщения перед киком (0.3x)

Описание: Уроки по скриптингу
Модератор: SJplayer

Invi_Sasha M
Автор темы, Мл. сержант
Мл. сержант
Аватара
Invi_Sasha M
Автор темы, Мл. сержант
Мл. сержант
Сообщения: 34
Зарегистрирован: 20 мая 2013
С нами: 10 лет 10 месяцев

#1 Invi_Sasha » 22 мая 2013, 21:56

Как известно, в 0.3x функция Kick обрывает соединение с игроком не дожидаясь доставки сообщения и других пакетов с данными. Это сделано в целях защиты серверов. Сейчас я расскажу вам, как сделать доставку нужных нам данных игроку перед киком, максимально удобным способом.

Ко всем forward'ам:

Код: Выделить всё

forward KickTimer(playerid);   

В начало OnPlayerDisconnect:

Код: Выделить всё

if(GetPVarInt(playerid"Kick") != 0KillTimer(GetPVarInt(playerid"Kick"));   

В начало OnPlayerUpdate:

Код: Выделить всё

if(GetPVarInt(playerid"Kick") != 0GKick(playerid);   

В конец мода или другое подходящее место:

Код: Выделить всё

public KickTimer(playerid) return GKick(playerid); 

stock GKick(playeridtime 5000

    if(
GetPVarInt(playerid"Kick") == -1Kick(playerid); 
    else if(!
GetPVarInt(playerid"Kick")) SetPVarInt(playerid"Kick"SetTimerEx("KickTimer"time0"d"playerid)); 
    else 
    { 
        
KillTimer(GetPVarInt(playerid"Kick")); 
        
SetPVarInt(playerid"Kick", -1); 
        
GKick(playerid); 
    } 
    return 
1
}   


Теперь если вы захотите кикнуть игрока, то нужно использовать функцию GKick(playerid, time).
playerid - это ID игрока, которого вы хотите кикнуть.
time (не обязательно) - время, через которое игрока кикнет если он будет в AFK (по умолчанию 5 секунд).
Если игрок не находится в AFK его кикнет сразу же после доставки всех нужных пакетов с данными.

На этом всё, удачного программирования!
Автор: Wiki


Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 10 гостей