Просмотр полной версии : Отключение клиента
Где-то видел функцию отключение клиента от ПХ без остановки скрипта
при использовании
procedure Init;
begin
NoFreeOnClientDisconnect;
DisconnectClient;
start;
end;
Клиент подвисает и чар выходит из игры. хроника - Gracia, нешифрованый трафик.
Неотклюая клиент скрипт работает прекрасно
Кста ето может быть из-за того что я пх собрал по кускам из разных версий? :D
l2phx 3.3.9, inject.dll 3.3.0 и без newxor.dll работает только так :confused:
перепробывал кучу варинтов или неправельно пакеты читает или их неловит или имя неправельно пишет или вообще имя не прописывает
подымаю топик вверх. Вопрос интересен. Как отвязать l2pnh от клиента.
Напишите плиз небольшой примерчик чтобы можно было клиента вырубить, а перс все еще был бы на сервере....
Данный вопрос уже поднимался и рассматривался в топике Пакетхак 3.2.0
Напишите плиз небольшой примерчик чтобы можно было клиента вырубить, а перс все еще был бы на сервере....
Всё ниже перечисленное проверяем и используем на свой страх и риск!!!
Основные моменты скрипта для С4, С5, Т0:
//************************************************** *************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** *************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента
//msg.Lines.Add('S>Пакет NetPing #$D3');
if LogOutOk then begin
buf:=NetPing;
SendToServerEx(Name);
//msg.Lines.Add('C>Пакет NetPing #$A8');
end;
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$09: begin //C>09=LogoutRequest - выходим ручками из клиента
//msg.Lines.Add('S>Пакет LogoutRequest #$09');
// вроде не надо тут их ставить?
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
pck:='';
// шлем s7E=LogOutOk, для отключения клиента
msg.Lines.Add('S>Пакет LogOutOk #$7E');
buf:=#$7E;
SendToClientEx(Name);
LogOutOk:=true;
end;
#$A8: begin // C>A8=NetPing:d(kID)d(PING)d(dta)
//msg.Lines.Add('C>Пакет NetPing #$A8');
NetPing:=pck; // запомним его
pck:='';
end;
#$1B: begin
//msg.Lines.Add('C>Пакет RequestSicialAction #$1B');
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
//msg.Lines.Add('Отключили клиент из скрипта...');
//для версии 3.1.9+ можно попробовать отключить клиента
//Варнинг! Опасно для жизни! =)
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
LogOutOk:=true;
buf:=#$7E;
SendToClientEx(Name); // отключаем клиент
//msg.Lines.Add('S>Пакет LogOutOk #$7E');
//не передаем серверу социальное действие
pck:='';
end;
end;
end;
end; //case
end;
end.
NLObP,
Незнаю как в C4,C5,T0, но в грации (руофф) к примеру ещё идёт запрос GameGuardQuery, на который поидее тоже нужно отвечать. (Естессно если наличествует ГГ)
а ПХ работает с ГГ?
На руофф работает.
На руофф работает.дык там вроде ГГ ене работает?
__name__
07.01.2011, 05:40
имеется скрипт он должен отключать клиент от сервера. по непонятной причине отключает только одно соединение(из чего делаю вывод что скрипт функционирует),а все последующие отключатся отказываются, и клиент находится в игре. поиск ничего толкового не дал может быть плохо ищу.
l2ph v.3.5.33.164
сервер локальная фришка Gracia Epilogue какая либо защита или кодировка отсутсвует.
const
n = 100;
fs_netping = #$D9;
fc_EnterWorld = #$11;
fc_logout = #$00;
fc_netping = #$B1;
var
NetPing: string;
LogOutOk: array of boolean;
playid : array of integer;
i,cnt:integer;
procedure init;
begin
cnt:=0;
NoCloseFrameAfterDisconnect;
NoCloseClientAfterServerDisconnect;
NoCloseServerAfterClientDisconnect;
end;
procedure onfromserver;
begin
case pck[1] of
fs_netping: begin
for i:=0 to cnt do
if (playid[i]=connectid) and (LogOutOk[i]) then begin
buf:=NetPing;
SendToServerEx(connectname);
end;
end;
end;
end;
procedure onfromclient;
begin
case pck[1] of
fc_logout: begin
pck:='';
buf:=#$20;
SendToClientEx(connectname);
for i:=0 to cnt do
if (playid[i]=connectid) then begin
LogOutOk[i]:=true;
end;
end;
fc_netping: begin
NetPing:=pck;
pck:='';
end;
fc_enterworld: begin
playid[cnt]:=connectid;
logoutok[cnt]:=false;
inc(cnt);
if cnt >= 101 then cnt := 0;
end;
end;
end;
begin
if fromServer then
onfromserver
else
onfromclient;
end.
прошу помочь.
P.S.: для тех кто не понял суть скрита чтобы отключить более 2 клиентов(соединений).
supernewbie
08.01.2011, 23:07
как-то так чтоли
const
n = 100;
fs_netping = #$D9;
fc_EnterWorld = #$11;
fc_logout = #$00;
fc_netping = #$B1;
var
NetPing: string;
LogOutOk: array of boolean;
playid : array of integer;
i,cnt:integer;
procedure init;
begin
cnt:=0;
end;
procedure NoClose;
begin
NoCloseFrameAfterDisconnect;
NoCloseClientAfterServerDisconnect;
NoCloseServerAfterClientDisconnect;
end;
procedure onfromserver;
begin
case pck[1] of
fs_netping: begin
for i:=0 to cnt do
if (playid[i]=connectid) and (LogOutOk[i]) then begin
buf:=NetPing;
SendToServer;
exit;
end;
end;
end;
end;
procedure onfromclient;
begin
case pck[1] of
fc_logout: begin
pck:='';
buf:=#$20;
SendToClient;
for i:=0 to cnt do
if (playid[i]=connectid) then begin
LogOutOk[i]:=true;
NoClose;
exit;
end;
end;
fc_netping: begin
NetPing:=pck;
pck:='';
end;
fc_enterworld: begin
SetLength(playid,cnt+1)
SetLength(logoutok,cnt+1)
playid[cnt]:=connectid;
logoutok[cnt]:=false;
inc(cnt);
if cnt >= 101 then cnt := 0;
end;
end;
end;
begin
if fromServer then
onfromserver
else
onfromclient;
end.
PS на нетпинг надо отвечать нихрена не так
NLObP,
Незнаю как в C4,C5,T0, но в грации (руофф) к примеру ещё идёт запрос GameGuardQuery, на который поидее тоже нужно отвечать. (Естессно если наличествует ГГ)
как мне сделать чтоб отвечал на этот пакет=F9(GameGuardQuery) этим :CA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00,а то через иг норм отправляет а ООГ фигню какую то
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot