PDA

Просмотр полной версии : Уменьшение числа внутри пакета(с чтением).


Amorality
23.03.2009, 03:49
Привет. В общем мне нужно при приходе пакета с ID 6C считать из него:
6C [9A 04 00 82] 78 EC 0E 00 00 00 00 00
То, что выделено квадратными скобками и ID останутся без изменения при отправке.

а вот следущие 4 байта :
6C 9A 04 00 82 [78 EC 0E 00] 00 00 00 00
Мне надо уменьшить на единицу. и получившееся:
6C C8 04 00 82 77 EC 0E 00 00 00 00 00 отправить на сервер.

Я еще плохо понимаю работу ф-ция рид и райт. Попыталась написать скрипт

if (fromclient) and (pck=#$6C) then begin
buf:=#$6C;
WriteD(ReadD(1));
WriteD(ReadD(2)-1);
WriteD(0);
SendToServer;
end;

Но он не работает, ничего не происходит. что тут не так объясните плз :)

Добавлено через 10 минут
Кстати l2pbx 3.4.1 после 3ех - 5ти минут игры что бы я не делала выдает "Не отправлять отчет" уже просто достало перезаходить >_<

Grinch
23.03.2009, 07:25
это не будет работать
надо объявить переменную (так по моему проще) присвоить ей значение из пакета потом убить этот пакет от клиента 6С, конечно если он от клиента идёт я чет не совсем догнал откуда он, и отправить на сервер тот пакет который нужен. Пример см в теме да будет бот или в любом другом скрипте.

Amorality
23.03.2009, 14:07
Grinch,
Сбрасывать пакет не нужно.. Вот что-то попыталась сделать, но помоему бред, помоги написать плз что-нить подобное, только верно работающее.


var
id: Integer;
l: Integer;
begin
if (fromclient) and (pck=#$6C) then begin
id:= StrToInt(HSTr(pck[2]+pck[3]+pck[4]+pck[5]));
l := StrToInt(Hstr(pck[6]+pck[7]+pck[8]+pck[9])) - 1;
buf:=#$6C;
WriteD(id);
WriteD(l);
WriteD(0);
SendToServer;
end;
end.

PanAm
23.03.2009, 14:32
begin
if fromclient and (pck=#$6C) then begin
buf:=#$6C;
WriteD(ReadD(2));
WriteD(ReadD(6)-1);
WriteD(0);
pck := buf;
end;
end.

Amorality
23.03.2009, 14:36
PanAm,
Мне не нужно заменять оригинал, оригинал должен быть отправлен а за ним еще и буфер.

Твой вариант идентичен моему первому варианту.. только ты оригинал меняешь. так вот это не работает почему-то

Добавлено через 2 минуты
А, ты тут с 6ого байта читаешь :) щас проверим :)

Sieg
23.03.2009, 14:44
Amorality, измененный пакет должен следовать именно ПОСЛЕ оригинала?

PanAm
23.03.2009, 16:20
тогда так
begin
if fromclient and (pck=#$6C) then begin
buf:=#$6C;
WriteD(ReadD(2));
WriteD(ReadD(6));
WriteD(0);
SendToServer;
WriteD(ReadD(6)-1, 6);
SendToServer;
pck := '';
end;
end.

Sieg
23.03.2009, 17:09
Кстати, а если от 78 отнять 1 разве получится 7А? А не 77 случайно?

Amorality
23.03.2009, 17:32
PanAm,
Я сама не понимаю.. Учу скилы на серве, ловлю пакеты.. Там гигантски большие лвл и при изучение неважно какого скила лвл уменьшается всегда на 1..

Добавлено через 33 секунды
ПС Не пашет, при ручной генерации подобного пакета кидает с серва :(

Добавлено через 5 минут
ПСС в 1 посте я вроде не то привела.. все верно в итоге должно быть 77 там.

NLObP
23.03.2009, 18:56
Может так?

var
tmp: integer; //временная переменная
begin
if fromclient and (pck=#$6C) then begin
buf:=pck; //копируем пакет для работы
tmp:=ReadD(6)-1; //сохраним в переменной
pck := ''; //удаляем
SendToServer; //отправляем пакет без изменения
WriteD(tmp, 6); //вставляем данные в пакет начиная с 6 байта
SendToServer; //отправляем изменённый пакет
end;
end.


Добавлено через 1 минуту
ПС Не пашет, при ручной генерации подобного пакета кидает с серва

Покажи пакеты из лога, которые получаются через клиент.