PDA

Просмотр полной версии : Готовый кривопашушщий скрипт на отсоединение клиента


kpa9pt
13.01.2010, 15:44
Здравствуйте.
Написал себе скрипт чтоб отсоединить клиент и он вродебы работает, когда запускаю его и выхожу в клиенте, ла2 у меня закрывается, а в программе остаётся соединение, и чаром можно управлять, но в программе постоянно приходят (спам нон стоп) сообщения WNS error ****/*** сразу после сообщения там же "Дисконект..клиент отвалился"
Я бы и не парился если бы не проблема, когда запускаю скрипт например на набитие pvp у меня виснет в у смерть программа из-за спама вот этих WNS error (при запуске скрипта поток увеличиваться) , а простой скрипт - сесть встать у меня работает. Собственно оба этих скрипта работают без проблем когда клиент запущен.
Вот часть (знающие допишут) работающего скрипта на отсоединение клиента, кто знает как избавиться от этих WNS error:
__________________________________
begin
ConnectID:=ConnectIDByName(Support);
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
end;
if FromClient and (pck[1] = Logout) then begin
pck:='';
buf:=LogOutOk;
SendToClient;
end;
---------------------------------------
собственно если пригодиться вот:

Logout='#$09';
LogoutOK='#$7E';

alexteam
13.01.2010, 15:58
http://coderx.ru/showpost.php?p=37024&postcount=23

kpa9pt
13.01.2010, 20:02
Странно добавил вроде вот эту строку

if (ConnectName=CHAR_NAME) and FromServer and logoutok then pck := '';

но пакеты на клиент всё равно идут.

вот что я в целом написал:


const
CHAR_NAME = 'HKfk';
var
logoutok : boolean;

procedure init;
begin
logoutok := false;
end;

begin

if pck='' then exit;
NoFreeOnServerDisconnect;
NoFreeOnClientDisconnect; //разрешить отключение клиента онли. при отключении сервера тунель будет разрушаться, что и должно происходить.
if (ConnectName=CHAR_NAME) then begin
if (FromClient) then begin
if (pck[1]=#$09) then
begin
Pck:='';
//Не забыл ли ты обнулить пакет ?
//pck := 0 или реквайст должен пройти на сервер ?
logoutok := true; //флаг
buf:=#$7E; //шлем логауток на клиент
SendToClientEx(CHAR_NAME);
end;
end;
end;

if (ConnectName=CHAR_NAME) and FromServer and logoutok then pck := ''; //!!!! не пропускать пакеты на клиент через ПХ!! если он уже отключен.


end.

alexteam
13.01.2010, 21:14
сравнив с оригиналом... и проанализировав изменения - честно.. заматюкался..

kpa9pt
13.01.2010, 23:16
Извени но твой оригинал у меня не работает, рвёт соединение программа, я добился работа способности только перенеся вот эту строку и добавив следом ещё одну, из-за этого перематюкался?) :

NoFreeOnServerDisconnect;
NoFreeOnClientDisconnect;

ну и ещё у меня пакет на logout другой.
Пожалуйста объясни где я не прав.

Добавлено через 1 час 27 минут
Всё заработало и дествительно плакать хочеться от того что я там наворотил в общем кому интересно вот работает:

const
CHAR_NAME = 'HKfk';
var
logoutok : boolean;

procedure init;
begin
logoutok := false;
end;

begin
if pck='' then exit;
if (ConnectName=CHAR_NAME) and (FromClient) and (pck[1]=#$00) then
begin
pck := ''; //или реквайст должен пройти на сервер ?
//Не забыл ли ты обнулить пакет ?
NoFreeOnClientDisconnect; //разрешить отключение клиента онли. при отключении сервера тунель будет разрушаться, что и должно происходить.
NoFreeOnServerDisconnect;
logoutok := true; //флаг
buf:=#$84; //шлем логауток на клиент
SendToClientEx(CHAR_NAME);
end;
if (ConnectName=CHAR_NAME) and FromServer and logoutok then pck := ''; //!!!! не пропускать пакеты на клиент через ПХ!! если он уже отключен.
end.


в твоей версии небыло вот этой строки:

NoFreeOnServerDisconnect;
у меня без неё не работает, и также у меня отличаються пакеты но это не суть главная вон та строчка.
Спасибо за всё.

А и ещё вопрос:
Вот теперь клиент закрыт а соединение висит, но не идут пакеты от сервера, вот если я активирую скрипт с наличием условия прихода пакета от сервера, он работать будет или нет?

Всё и с этим уже разобрался)