Вот так в рыбалке у меня сделано, только скрипт после отключения ходить чара заставить не мог, не хватало эмуляции пакетов ValidatePosition от клиента.
delphi Код:
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента
if LogOutOk then begin
buf:=NetPing;
SendToServerEx(Name);
end;
end;
end;
end;
//****************************************************************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$09: begin //C>09=LogoutRequest - выходим ручками из клиента
pck:='';
// шлем s7E=LogOutOk, для отключения клиента
buf:=#$7E;
SendToClientEx(Name);
LogOutOk:=true;
end;
#$A8: begin // C>A8=NetPing:d(kID)d(PING)d(dta)
NetPing:=pck; // запомним его
pck:='';
end;
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
//не передаем серверу социальное действие
pck:='';
//для версии 3.1.9+ можно отключить клиента
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
LogOutOk:=true;
buf:=#$7E;
SendToClientEx(Name); // отключаем клиент
end;
end;
end;
end;
end;
Ловим пакет пинг от клиента и сохраняем его для дальнейшего использования, после этого можно попробовать отключиться от клиента: стандартно выйти по exit или выполнить соц.действие YES. Скрипт будет отслеживать пакет нетпинг от сервера и слать свой нетпинг в ответ.