PDA

Просмотр полной версии : CharInfo...NpcInfo...лог пакетов...провокация)


ShamaN
28.05.2008, 08:12
сервер Interlude (походу OFF) если важно.
Вопрос такой : делаю скрипт который при нажатии ЛКМ+Shift на нпц или игроке считывает параметры из NpcInfo и CharInfo соответсв.
Вобщем на событии выделения получаю ID объекта...дальше созданы все процедуры считывания параметров из NpcInfo и CharInfo...........
...но нужные пакеты от серва приходят не так как я хочу;)
...вообще не понятно приходят...:o
Заметил, что в логах пакеты с инфой соответств. ID присутствуют!!!
1) Возможно ли как-нибудь проверкой логов по ID объекта вытащить из них нужную информацию.Например : найти в логах пакет от сервера c таким-то заголовком and таким-то ObjectID...ага найден?...ищем последнее вхождение...нашли...записываем во временный буфер...отрабатываем этот буфер...выкидываем...:)...вобщем понятно, да?
2) Быть можно, как-то спровоцировать повторную отправку пакета на этот ИД от сервера?;)...как пример...на серве о котором я говорю, чтобы спровоцировать отправку пакета UserInfo сервером, я знаю что нужно сделать.
P.S. Я на С++ прог. немного. Pascal стараюсь понимать на примерах)

Добавлено через 17 минут
Есть пакет от клиента
RequestRestart с заголовком 0х46
посылаю из проги на сервер(вкладка "Посылка") - все нормально выкидывает в окно с выбором перса.
Пытаюсь реализовать на скриптовом уровне...
//социальное действие yes
if FromClient and (pck=HStr('1B 06 00 00 00')) then
begin
buf:=hstr('46');
SendToServer;
end;
//************************
или так
if FromClient and (pck=HStr('1B 06 00 00 00')) then
begin
buf:=#$46;
SendToServer;
end;

Выкидывает из клиента!!!
Что-то не так?
Вот так надо задавать вопросы (с)Grinch

Grinch
28.05.2008, 09:42
делай масив из пакетов CharInfo и NpcInfo потом выбирай по ид персонажа, это надо делать т.к. CharInfo приходит рандомно или только в момент смены оружия шмота, NpcInfo приходит рандомно.

Добавлено через 3 минуты
а ты уверен что 46 и нет окончания 00 00 00 00 ?? если оно есть то его тоже надо отправлять, а в целом вроде нет ошибки

NLObP
28.05.2008, 09:50
делаю скрипт который при нажатии ЛКМ+Shift на нпц или игроке считывает параметры из NpcInfo и CharInfo соответсв

На сколько я помню от сервера должно вернуться только
29=TargetSelected:h(ObjectID)h(targetID)d(X)d(Y)d( Z)
но не как ни NPCInfo и CharInfo. Эти пакеты надо собирать в массивы по мере их прихода, а потом делать выборку из массива.

Grinch
28.05.2008, 10:05
На сколько я помню от сервера должно вернуться только
29=TargetSelected:h(ObjectID)h(targetID)d(X)d(Y)d( Z)
но не как ни NPCInfo и CharInfo. Эти пакеты надо собирать в массивы по мере их прихода, а потом делать выборку из массива.

таргет селект приходит часто :) и не только тебе но и на всех кто вокруг

NLObP
28.05.2008, 10:06
таргет селект приходит часто :) и не только тебе но и на всех кто вокруг

Это понятно. =)
Товарищ хотел чтобы на его таргет, что-то еще приходило.

Grinch
28.05.2008, 10:29
NLObP, да понятно, но респект товарищу грамотно вопрос задал :)

ShamaN
28.05.2008, 17:15
Вери мач за ответы...
Раз ответили, тогда продолжу:bomb:...
1) По поводу RequestRestart...
При нажатии на РЕСТАРТ в клиенте, l2phx ловит и показывает только!!! 1 байт 0х46. При отправке этого байта(без нулей) вручную на сервер через l2phx, все "проходит на ура"...если пытаться реализовать это в скрипте (примеры выше), то сервер рвет соединение...
2) По поводу массива из пакетов...
в момент смены оружия...именно так и делаю,когда надо получить UserInfo)...а то что NPCInfo и CharInfo не должны приходить по моему желанию я знаю :).
Я и прошу: если нежалко или есть что-то схожее на примере, как можно накапливать пакеты в массивы...удалять...хотя-бы какой-нибудь похожий скрипт или кусок (на его примере разберусь)
...сразу возникает вопрос, как это отразится на скорости работы скрипта...пакеты ведь будут накапливаться... жрать оперативку...???
Что будет когда зайдешь например в Гиран, а там народу куча...)???

Grinch
28.05.2008, 17:23
Вери мач за ответы...
Раз ответили, тогда продолжу:bomb:...
1) По поводу RequestRestart...
При нажатии на РЕСТАРТ в клиенте, l2phx ловит и показывает только!!! 1 байт 0х46. При отправке этого байта(без нулей) вручную на сервер через l2phx, все "проходит на ура"...если пытаться реализовать это в скрипте (примеры выше), то сервер рвет соединение...
2) По поводу массива из пакетов...
в момент смены оружия...именно так и делаю,когда надо получить UserInfo)...а то что NPCInfo и CharInfo не должны приходить по моему желанию я знаю :).
Я и прошу: если нежалко или есть что-то схожее на примере...)
...сразу возникает вопрос, как это отразится на скорости работы скрипта...пакеты ведь будут накапливаться... жрать оперативку...???
Что будет когда зайдешь например в Гиран, а там народу куча...)???

дык смотри в теме про ботов :) их море бота 3-4 переправить массив под свои нужды и загрузку в массив по моему не трудно, у меня пару дней бы ушло :D, а если умеешь программировать то пару часов.

ShamaN
28.05.2008, 17:47
to Grinch
Спасибо за наводку...)
...покопаю там)
А насчет RequestRestart нет мыслей?)

NLObP
28.05.2008, 17:53
1) По поводу RequestRestart...
При нажатии на РЕСТАРТ в клиенте, l2phx ловит и показывает только!!! 1 байт 0х46. При отправке этого байта(без нулей) вручную на сервер через l2phx, все "проходит на ура"...если пытаться реализовать это в скрипте (примеры выше), то сервер рвет соединение...

Тут может не сервер соединение рвет, а пакетхак?
есть же команды:
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
может в этом направлении копать?

Добавлено через 1 минуту
Я и прошу: если нежалко или есть что-то схожее на примере, как можно накапливать пакеты в массивы...удалять...хотя-бы какой-нибудь похожий скрипт или кусок (на его примере разберусь)
Так ведь масса примеров. Любой скрипт на бота. В них есть отслеживание пакетов и накопление в массиве.

NLObP
28.05.2008, 17:56
Ты путаешь
46=RequestRestart
с
6D=RequestRestartPoint:d(PointType)

ps: что то я с ответами отстаю =)

ShamaN
28.05.2008, 18:00
Ладно, огромное всем спасибо...буду анализировать пока то, что подсказали...надо время)

Grinch
28.05.2008, 18:01
дык я пост свой удалил :)

Добавлено через 9 секунд
проверил просто :)

APXAHGEJI
28.05.2008, 20:04
ShamaN, я хз почему у тебя выбрасывает, но можешь попробовать вот этот скрипт. Тут кароче я когдато эксперементировал, скрипт по нажатию клавиши Yes делает рестарт и снова заходит. У меня на аккаунте был один перс, так что если у тебя несколько их то не знаю который выберется.
На моем сервере соответсвенно все работает хорошо.
begin
if pck='' then exit;

//социальное действие Yes
if FromClient and (pck[1]=#$1B) and (ReadD(2)=6) then begin
pck:='';
buf:= #$46;
SendToServer;
end;

if FromServer then begin

if (pck[1]= #$13) then begin
buf:=#$0D;
WriteF(1);
WriteF(0);
WriteH(0);
sendToServer;
end;

if (pck[1]= #$15) then begin
buf:=#$D0;
WriteH(8);
sendToServer;
end;

end;
end.

Добавлено через 1 минуту
Блин пробелы в теге забыл убрать

NLObP
29.05.2008, 00:14
Используем для кода самую правую решётку, это и есть тэги для дэлфи!

APXAHGEJI
29.05.2008, 01:29
я бы использовал, да вот тока картинки отключены.
А подписи к кнопкам оказываются размазаны по всей странице

ShamaN
29.05.2008, 08:16
APXAHGEJI,спасибо! Ткнул носом))
По всей вероятности у меня так выходило: пришел пакет с действием "ДА" HStr('1B 06 00 00 00')...дальше я делал buf:=hstr('46');SendToServer;
...и у меня походу выходило, что пакет становился HStr('46!!! 06 00 00 00')...поэтому серв и кидал меня. Хоть не забанили%)))
Вобщем ИТОГ: надо было сперва затереть предыдущий пакет командой pck:='';
При таком раскладе все заработало. Сенкьювериматч) Нажился опытом, а ты спасибкой)

Добавлено через 57 минут
Так как я совсем недавно начал интересоваться этой темой, хотелось бы еще пару вопросов уточнить.
1)В пакетах CharInfo на теоретически самых вкусных местах 4 байта пропущены)))...это в программе специально сделано или серв такие данные не передает?...или как?)))
2)Я знаю, что форум не читерский и не спрашиваю КАК...
...и знаю, что куча всяких разных пакетов которых полно в инете не работают давно. Если и есть что-то интересное, то так просто это не достать( и это по определенным умозаключениям правильно).Вобщем вопрос такой: а вообще реально есть что-то, что можно найти на INTERLUDE OFF например...стоит ли искать?!!!...или только время терять?ВОТ!!!)************Хотя тема с пакетами и программа и без того МАСТ ХЭВ).

NLObP
29.05.2008, 19:41
В версии 3.2.0 можно посмотреть лог всех пакетов, даже которые ты формировал. Проверь. По моему ты ошибаешься насчет меня походу выходило, что пакет становился HStr('46!!! 06 00 00 00')

1)В пакетах CharInfo на теоретически самых вкусных местах 4 байта пропущены)))...это в программе специально сделано или серв такие данные не передает?...или как?)))
Просто наверное не известно, что там в этом месте.

APXAHGEJI
29.05.2008, 22:11
Я полагаю ошибка вызвана действительно тем что пакет соц действия (или на че там у тебя запускалось) не затирался.
Вследствии чего серверу сначала отправляся пакет рестарта и только после этого продолжал свое движение пакет соц действия, а рестарт был уже запущен и получалось что во время рестарта ты якобы нажимал соцдействие

ShamaN
30.05.2008, 15:01
to NLObP
я знаю,что в 3.2 можно посмотреть и свои пакеты ,но эта версия не пашет почему-то...при входе серв рвет соединение(с разными настройками)....
to APXAHGEJI
Это тогда программный баг ?Так или иначе из твоего примера понял, что имеет смысл обнулять пакеты в таких ситуациях)Сенкс)

P.S. А что насчет последних вопросов?)))))))))

APXAHGEJI
30.05.2008, 18:07
Нет это не програмный баг, просто так реализована обработка пакета.

А на счет последних вопросов, могу сказать что лучше бы ты их не задавал.
Я не знаю как остальные, но у меня интерес к твоим вопросам как то упал

NLObP
30.05.2008, 20:01
я знаю,что в 3.2 можно посмотреть и свои пакеты ,но эта версия не пашет почему-то...при входе серв рвет соединение(с разными настройками)....

Попробуй галочку "Перехват" снимать перед заходом в L2, включай только перед выбором сервера. Мне помагает.