L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
Вот ЧТО может быть неправильно в таком скрипте? Я ля уже в шоке.
Код:
var
NickName : String;
procedure Init;
begin
NickName := 'lalala'; // тут все как надо
end;
procedure Free;
begin
end;
//====================================================================================
procedure getYes;
begin
buf:=#$4A; WriteD(0); WriteD(10); WriteS(''); WriteS('Прошло YES'); SendToClient;
pck := '';
end;
//====================================================================================
procedure getNo;
begin
buf:=#$4A; WriteD(0); WriteD(10); WriteS(''); WriteS('Прошло NO'); SendToClient;
pck := '';
end;
//====================================================================================
//====================================================================================
begin
if pck = '' then exit;
if (ConnectName = NickName) and FromClient then begin
if (pck[1]=#$34) and (pck[2]=#$06) then getYes;
if (pck[1]=#$34) and (pck[2]=#$05) then getNo;
end;
end.
Притом CreatureSay идет дважды, хотя клиент рисует анонс один раз.
Я это обнаружил когда по Yes отправлял на сервер запрос - мало того, что не блокировался Yes, так и запрос проходил ДВАЖДЫ, хотя в коде, разумеется, отправка была одна-единственная. Либо я чего-то важного не понимаю, либо l2ph косячит, либо одно из трех.
ну, на вскидку могу сказать только 2 места где пакет отправляется это пропуск пакета скриптами (pck не был обнулен) и отработка SendToxxx
так что отправляет он действительно ровно столько раз сколько от него требуется...
с отрисовкой немного посложнее.. пакет сначала добавляется в акумулятор дня отрисовки а поом уже с него забирается.. там я могу накосячить
да и
Цитата:
Притом CreatureSay идет дважды, хотя клиент рисует анонс один раз.
ППЦ, это магия!!!
пх 3.4.1.83 на yes выдает Access violation по гениальному адресу 13232819 (что-то читает адрес 0), _до_ того, как отправляет-таки на сервер yes, creature say срабатывает один раз. Для No все ок.
Добавлено через 3 минуты
Если обойтись без анонсов, то все равно access violation при yes, проблема конкретно в нем. Перейду на другое соц. действие Двойную отправку считаем фантомом, тем более, что в 3.4.1.83 ее вроде нет...
Добавлено через 12 минут
ААААААААААААААААААААААААААААА, бля, я понял!!!
Проблема в том, что при yes срабатывает вызов, pck чистится, и после возврата следующий if лезет в несуществующие элементы срокового массива, а дальше уж неизвестно что происходит, но плохое. Если скрипт сделать с отложенным удалением, все ок. (ну кроме двойной отправки, которую мы считаем кажущейся)
Это, ребята, надо в доку вносить, это может быть системой...
Код:
var
NickName : String;
killPacket:Boolean;
procedure Init;
begin
NickName := 'userName';
end;
procedure Free;
begin
NickName := '';
killPacket := false;
end;
//====================================================================================
procedure getNo;
begin
killPacket := true;
end;
//====================================================================================
procedure getYes;
begin
killPacket := true;
end;
//====================================================================================
//====================================================================================
begin
if pck = '' then exit;
if (ConnectName = NickName) and FromClient then begin
if (pck[1]=#$34) and (pck[2]=#$06) then getYes;
if (pck[1]=#$34) and (pck[2]=#$05) then getNo;
end;
if (killPacket) then pck := '';
killPacket := false;
end.
Последний раз редактировалось ПолуГость2, 20.06.2009 в 00:24.
Причина: Добавлено сообщение