Вход

Просмотр полной версии : igExt


PIONER
14.10.2009, 12:53
Часто вылетает при динамичном каче.

Буквально через 10 минут.
Из за чего может быть? Начинает бежать к мобу и дисконнект..

Добавлено через 52 минуты
Вот лог посмотрел. Моб не выделен, тупит, но идёт флуд 1F с интервалом в 100мсек. и качаться отказывается. тупо привязывается к одной точке и хочет стоять там. наверно из-за такого флуда и дисконнект.

alexteam
14.10.2009, 13:07
1F = action = как раз попытка взять моба в таргет.

PIONER
14.10.2009, 13:19
да, но походу уже умершего моба(бежит в одну точку и не хочет оттуда уходить, при этом флуд 1f наблюдался)

Добавлено через 32 секунды
чёто глю чит сильно сбивается всё время, непойму из-за чего

Добавлено через 7 минут
бывает пакетхак или ошибку с памятью выдаёт, или вылетает, может не в скрипте дело.
Всю ночь тесчю, покоя нет

alexteam
14.10.2009, 13:29
да, но походу уже умершего моба(бежит в одну точку и не хочет оттуда уходить, при этом флуд 1f наблюдался)
или, попытка поднять шмотку. с уже убитого моба. возможно якорь.

PIONER
14.10.2009, 13:39
мм, плохо.
Это значит якорь у меня в сумке?

alexteam
14.10.2009, 13:51
хех.
еще раз говорю. возможно. возможно просто упало под землю.
вот и будет он там стоять, пока вещь с мира не пропадет.

Добавлено через 49 секунд
лог выложи, с такой ситуацией.

Добавлено через 6 минут
хотя, хм. по идее такого происходить не должно. он запоминает шмотку на которую он последний раз тыкнул, когда приходит время тыкать еще раз он просто увеличивает коофициент влияющий на дальность и использующийся при расчете подбора вещи.
т.к. подбираються ближайшие вещи, это будет продолжаться пока растояние до вещи умноженое на коофициент не превысит радиус поиска вещи.
вечных циклов насколько я знаю в боте нет. во всяком случае, предусмотрел подобное везде где сочел нужным.

PIONER
14.10.2009, 15:10
http://dump.ru/file/3578743

Вот, что-то случилось, чар побежал в стену, дисконект, а пакетхак флудит. и влетели какието ошибки - l2phx.3.5.26.148
На l2phx.3.5.24.142 табличек с ошибками не выкидывало при этом.

Добавлено через 1 минуту
кач на патчнодах, до этого на радиусе долго качался(сбивался, но не выкидывало), но не так активно.

alexteam
14.10.2009, 17:26
а, легко,
это попытка добежать до ближайшего к текущему положению игрока патчнода который находиться за стеной. угадай почему у него это не выходит ? -)
тут 2 нюанса.
1. все стенки и препятствия стоит обносить мелкими патчнодами (с радиусом скажем 100). на приблизительно таком же растоянии (100) от препятствия.
2.один патчнод перекрывающий раиусом второй для бота означает что от первого ко второму можно добежать. в противном случае он будет вот так стоять упершись в стену пока ктонить из мобов его не стукнет, или рядышком не пройдет.

Добавлено через 12 минут
по идее так. хотя, я там еще переписывал много чего.. потом к чертям этот код заремарил, ибо у мну на сервере гео норм. и все эти извраты и даром не нужны.

PIONER
16.10.2009, 03:20
опиши пжалуйста подробнее действие функций.
*searchmob radius - радиус поиска моба. рекомендуеться ставить больше чем радиус комбатзоны при использовании "use center point and radius" и "hunting area defined by pathchpoints"
*searchnode radius - используеться при поиске ближайшего нода. рекомендуеться не трогать -))
*pickup radius - радис в котором производиться подьем вещей. рекомендую ставить 300-400


я так понял первое нужно больше чтоб бот запоминал мобов и следил за ними если они зайдут в комбат зону.

alexteam
16.10.2009, 11:40
я так понял первое нужно больше чтоб бот запоминал мобов и следил за ними если они зайдут в комбат зону.
вообщето.. он помнит всех мобов и "следит" за ними вне зависимости от того в комбат зоне они или нет..


данные штуковины по разному работают при разных режимах.
1. серч моб - задает радиус в котором производиться поиск ближайшего моба. режимах рандом/центерпоинт. при этом в центрпоинт мобы за пределами радиуса центральной точки будут игнорироватся.
в режиме бега по патчпоинтах он действует схоже с цп.

2. серчнод - поиск ближайшего нода. по нему осуществляется поиск ближайшего патчпоинта и движение к нему. при использовании режима бега по патчпоинтах. (к примеру если игрок выбежал за пределы територии описаной патчнодами он будет пытаться вернуться ориентируясь на ближайший в этом радиусе патчнод. если не найдет - мы далеко за пределами зоны боя например в городе.)

3. пикап - радиус подъема.
при смерти моба в этом радиусе (точнее радиусах) производиться
поиск атакующих нас нпц и давание здачи. если таковых нет -
подьем вещей сначала в круге с этим радиусом и центром равным координатам игрока.
если вещей не найдено - в круге с этим радиусом и центром равным координатам умершего моба.
если вещей не найдено, либо подымать нам их не надо - производиться поиск и атака следующей цели.

PIONER
17.10.2009, 08:58
Убедительная просьба всем обновить клиент. В противном случае после планового рестарта с воскресенье на понедельник, вы не сможете взять в цель NPC/Игрока, а анти-бот система будет посылать на сервер тикеты что вы бот...

Я так понял должны пострадать Action и Attack? Чтоб исправить нужно в плагин лезть?

alexteam
17.10.2009, 12:07
нет.
вся разборка/сборка пакетов в скрипте.

PIONER
20.10.2009, 19:17
А ты не планировал вставить функцию ассиста?(

В нём есть защита от якорей по кторым бота ловят?

alexteam
20.10.2009, 20:42
по умолчанию он подымает все.
добавить в список игнорирования можно вручную прописав в инишке айди вещи.
либо из игры, при условии что ты ее только что поднял.

по поводу асиста.. в принципе у меня лежит версия которая работает в парти.. но выкладывать пока не намерен, там еще много работы. да и занят немного другими вещами сейчас.

PIONER
21.10.2009, 04:43
а можно сделать так чтобы если вещи нету в списке, чтоб она не подымалась?
А то якоря дело такое, чтоб ид узнать нада поднять сначала). Да и новый якорь не проблема.

alexteam
21.10.2009, 11:37
да и занят немного другими вещами сейчас.
и вообще.. исходники есть... как бы...

PIONER
22.10.2009, 20:49
Извените.
Я нуб, программировать не умею. сам не смогу.(

ZaN
30.10.2009, 18:07
PIONER, Оч извиняюсь что влез в чужую тему.

Но у меня есть один просьб к alexteam:
Я играю не на ПТ2 и возможно по этой причине бот с использованием IgExt наотрез не желал бафаться. После изучения исходников
в uSelfBuffsController.pas в procedure TSelfBuffsTimer.Execute был найден кусочек
if not tuser(Controller.User).Brain.InCombatMode and
not tuser(Controller.User).Brain.isdead and
not tuser(Controller.User).Brain.Disabled and
not tuser(Controller.User).Brain.Sitting and
not tuser(Controller.User).Brain.AttackingMode and
not tuser(Controller.User).Brain.PickUpMode then
Меня заинтересовала строка "not tuser(Controller.User).Brain.AttackingMode and ". Для проверки предположения я добавил процедуру которая совпадала по коду с procedure TSelfBuffsTimer.Execute (исключил счетчик времени leftdellay и
проверку AttackingMode ) и добавил вызов этой процедуры в Brain.pas (после сбора дропа/реста и перед выбором моба для атаки).
Бот стал бафаться.
Собственно вопрос: бафается ли бот без данной корректировки в Грации.

alexteam
30.10.2009, 18:56
Текущий бафается, в старый лезть не охота, ибо я этот кусок скорей всего переделывал.
он там бафаеться в 2х режимах, по времени и автоматом. автомат в зависимости от сервера может косячить (перекрывающиеся бафы на разных серверах работают по разному)
кстати. обновил.

PIONER
13.11.2009, 05:44
Дай инфу по новым функциям, что и как они делают.

I am support in party (healler/buffer) (скилл из хелер опшинс возьмёца?)
Accept life from partymembers
Accept life from ALL

Последние 2 исходя из перевода не понял что должны делать, на практике ещё не успел применить.

alexteam
13.11.2009, 11:54
"I am support in party (healler/buffer)"
он не будет атаковать моба если он в патии и его бьет моб.
акцепт лайф - разрешать рес от патимемберов либо всех.

настройки парти как таковой появляются только тогда когда он в пати... там отдельная вкладка.

PIONER
13.11.2009, 18:42
настройки парти как таковой появляются только тогда когда он в пати... там отдельная вкладка.
Ок, добрался)

Follow rest не понял
Rest near не понял
Protect - понятно, бьёт моба если бьют голову
Follow atack - бьёт моба, если голова бьёт моба
Active follow - бежит рядом с чаром.

Бегает он резво, но всегда лезет вперёд головного чара. Как то паливно, как сделать чтоб он двигался как будто на хвосте бегает?(или просто останавливался за основой а не перед ней)

Допустим если отключить атаку, и привязать его в клиенте, после бафа он отцепится(

alexteam
13.11.2009, 19:51
Follow rest садиться на рест следом за персонажем в сетингах которого установлена эта галочка.
Rest near садиться рядом с персонажем.. т.е. он подбежит.. а потом сядет.
Бегает он резво, но всегда лезет вперёд головного чара. Как то паливно, как сделать чтоб он двигался как будто на хвосте бегает?(или просто останавливался за основой а не перед ней)
"I am support in party (healler/buffer)" ?

ZaN
19.11.2009, 19:02
Тестировал некоторое время никак не мог понять почему при запуске (активации настроенного бота) он вылетал. По логике получилось что на сервере стоит некая проверка на частоту пакетов. Написал задержку в CallActionFunc, однако данное решение собирает не весь дроп. Возможны какие то еще решения?

Еще один вопрос: время в течении которого может работать бот (тестировал только соло режим) в среднем 1час (+-15 мин) далее идет
Тунель ($26316208) Отвалились от сервера
Закономерность найти не удалось
тестировал много, порог в 1.5 часа преодолеть не удалось
изредка (примерно 1 из 10 тестов) наблюдал непонятные пакеты, однако закономерности между отключением и подозрительными пакетами не нашел.
Собственно открыт для идей, предположений, мыслей...

alexteam
19.11.2009, 19:23
Собственно, igExt я не намерен дальше разрабатывать.
уменьшить кол-во акшинов до нормального значения можно с помошью введения проверки на движение к цели(моб/дроп) и блокировки лишних акшинов ответственных за движение к цели если мы уже движемся к цели (жесткий каламбур).
а так же учетом пакета autoattackstart/stop.

и еще. скрипт - это парсер и конструктор. никакие "задержки" в скрипте не приемлимы.

ZaN
07.12.2009, 10:25
мб кому пригодиться:
Долгое время не мог понять источника "Unknown" пакетов. Недавно нашел.
Для лечения надо:
в функции CallActionFunc добавить проверку на правильную сборку пакетов. Например:
...
'callnpcinfo':
begin
//params = [ObjId, x,y,z, npcname]
buf := #$0c;
WriteMask('ddddddddddddddddddffffdddcccccssddddddd dccffdddd',[params[0], npcconst+PathNodeNpc,0,params[1],params[2],params[3],5000,0,10,10,10,10,10,10,10,10,10,10,1,1,1,22,0,0 ,0,1,0,0,0,0,params[4],'',0,0,0,0,0,0,0,0,0,0,1,22,0,0,0,0]);
if buf[1] := #$0c then SendToClientCheck;
end;
...
фишка в том что IgExt.dll оч шустрый =) Пока выполняется WriteMask происходит очередное обращение к CallActionFunc и выполняется строчка "buf := '';". Соответсвенно нарушается сборка пакета и получившийся мусор идет на сервер, который отключает флудера.

ПС: Недостаток решения - потеря пакетов, но вроде IgExt "держит руку на пульсе" и имеет от этого защиту. Можно еще конечно поиграть с локальными и глобальными переменными - будет надо напишу пример.

alexteam
07.12.2009, 13:49
а вот это я не учел..
в самом плагине следует сделать очередь выполнения для callfunction дабы избежать подобное.
ибо callfunction вызывается одновременно с нескольких потоков и они естественно могут накладываться друг на друга.
делать это в igExt я не буду.. а вот в l2ext сделаю -)

Добавлено через 1 час 9 минут
нет, даже не так.. во время выполнение callfunction другие callfunction заблокированы по определению.
тут наоборот. во время выполнения callfunction может прийти пакет от сервера и сам пакетхак автоматически обнулит buf.
надо будет параметр в скриптовый движек пх добавить.. запрещающий это делать.

sinles
17.01.2010, 13:18
Я нашел решение как обеспечить долгую жизнь боту (что бы он не вылетал)
качать и разбираться в компиляторе паскаля мне как то лень было поэтому я правил только сам скрипт.
Я добавил буфер в котором сохраняются действия сгенерированные длл-ем. Этот буфер читается по таймеру, раз в 100мсек и действия обрабатываются. Зачем буфер ? уже подчеркивалось что длл работает сильно быстро и возможно скрипт не успевает отрабатывать действия переданные ему, а насколько мне кажется занесение в буфер быстрее чем поиск нужного действия и выполнение его. Плюс таким образом добавляется задержка в ответах на присланные с сервера пакеты и пакеты успевают дойти до клиента раньше чем до сервера ответ на них...
Автор говорил что было бы не плохо запретить параллельное использование функции вызываемой длл-кой. Сделать это можно или синхронизируя все потоки или просто ввести переменную "функция_занята", что я и сделал. Но тут вступила в силу какая то мистика которую я не могу обьяснить,иногда переменная так и не освобождалась (я так понимаю в этот момент раньше происходило вылетание), поэтому в качестве переменной я использовал Timer.enabled и получилось что если переменная не освободилась сама, то таймер досчитает до 200мс и сам освободит переменную. И теперь что то в пх вылетает (не понимаю о чем в ошибке написано), но все продолжает работать.
Итого - 8 часов полет нормальный :) (пока бот ни разу не упал)
Вот скрипт

Xen
24.05.2010, 18:10
Настраивая данный скрипт на тзе_онлайн, я столкнулся с такой строкой:

...

if FromClient then
case pck[1] of
...

#$86: //(RequestTutorialPassCmdToServer)
PckRequestTutorialPassCmdToServer(reads(2));

...


Это пакет формируется, когда вы настраиваете меню, но я заметил, что он отправляется на сервер =)
Т.о. мы здорово палимся господа, следует заменить на:

...

if FromClient then
case pck[1] of
...

#$86://(RequestTutorialPassCmdToServer)
begin
PckRequestTutorialPassCmdToServer(reads(2));
pck:='';
end;
end;
...



alexteam, спс за бота

alexteam
24.05.2010, 18:44
что он отправляется на сервер
неужели.
с внутрянки при обработке должен вызыватся KillPck

Xen
26.05.2010, 14:32
Тестю на эрпэгэкла6_х1000 там не шифрованный трафик оф птс гф.

Итак опция баффа в пати, тестил более 30 минут, с разными вариациями продолжительности.
Ставлю беферу бафать 1 скилл каждые 60 секунд, чтобы набаффал например щит (не важно), как только начинает кастовать скилл я включаю таймер. Дальше начинается самое интересное, проходит ровно 30 секунд и бафер перебаффывает скилл, хотя ребафф стоит 1 минута

Выбрал другой скилл в этой же ячейке, но поставил уже 120 сек (2 мин), как толькобаффе бафнул патимембера, прошло ровно 60 секунд, и он начинает снова перебаффывать этот скилл, хотя ребафф стоит 2 минуты
___________________________________________
Еще заметил нюанс, если баффер очень быстро баффает (акумен + соски+СА акумем), то как я на вид понял, пакет PartySpell не успевает прийти и баффер кастует этот бафф неостанавливаясь, и только его (зацикливается). Когда откл. соски (бафает заметно медленнее), идет норм порядок наложения баффов.

В скрипте сделать задержки? или лезть в ддлку?

С сельф баффами все ОК.

Нашел некорректную обработку пакета 0x48 (MagicSkillUse), сначало юзается скилл, потом юзается блез спиритшот (который тоже считается скилом), и бота зацикливает на одном баффе скила, он будет ео бафать пока мр не кочится, лечится игнором шотов

Т.е. отправить данные о набафанном скилле, а скиллы сосок пропустим мимо (в приемре выше стоит только для сосок Агр. блесспиритшот). Т.е. юх шотов = юзу скилов, поправте кто юзает, еще несность осталась с временем реюза скила в пати, ставлю например 60 сек, ребафф идет каждые 30 сек и т.д., если 120 сек, тогда ребафф будет 60 сек