|
You last visited: Today at 07:51
Advertisement
Rus. server
Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.
11/07/2009, 13:20
|
#571
|
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
|
Quote:
Originally Posted by sumikot
Ну раз я первый зашел, мне и флудить...
drShtain
Если текст вызывает улыбку - он не является флудом 
Насчет умного поста есть один глупый вопрос - не могу придумать, каким способом можно обходить препятствия. Могу включить в умения перса проходить сквозь них, если возникнет ситуация, с которой бот не справится.
Допустим, прыгнул - не помогло. Движение вправо - не помогло... Проходим. Но это не выход. Могу еще сирену включить, чтоб ботовода разбудить (системный бипер, например). Это вообще жестоко.
maxim31153 А вот тут есть несколько выходов. Первый - скачать Autoit и начать читать форум полностью. Если будут какие то вопросы - всегда помогут те, кто будет в сети. Но для этого нужны какие то начальные знания. Второй - есть платные боты довольно неплохого качества. Найти их в сети нетрудно. Главное - не накачать вирусов на "левых" сайтах. Третий - подождать, может, все таки кто нибудь напишет что нибудь более путевое и выложит хотя бы для теста. Я собирался выложить, но меня напрягает то обстоятельство, что за это привлекли ботописателей в китае. И, наверно, надолго. Да и не готов мой бот еще...
vies1812 HP первого питомца BaseAdress+$20+$c24+$10+$38
Максимального нет. Может, оно где то и есть - не нашли. Можно при каждом считывании HP сравнивать его с MaxHP. Если HP больше MaxHP, присваиваем значение MaxHP. Вроде работает. Автор идеи FunkU.
KOPC Напиши, какие смещения ему нужны - не пользовался я этим ботом. Или гугли, если до сих пор еще не нашел.
Добавил: Не это?
[Perfect_World_Base_Address_In_Decimal]
Application_Title=Element Client
Base_Address=9925052
[Custom_32_Offsets_In_Decimal]
Target_OffSet=2664
MaxMP_OffSet=1176
MaxHP_OffSet=1172
MP_OffSet=1128
HP_OffSet=1124
Ну вот, нафлудился... Всем удачного фарма!
Тем, кто знает больше меня, над ответами не смеяться!!!
|
Могу предложить выход для этой ситуации, но это уже не по силам будет аутоиту, я думаю. Точнее, этот выход будет нагружать систему до небывалых высот.
Тем не менее, смотри в сторону алгоритма "красскал" или алгоритма "Дейкстра". Второй сложнее, но результативнее. А крас простой, тупой, долгий, но работает. 
Это алгоритмы ИИ перемещения.
|
|
|
11/07/2009, 17:04
|
#572
|
elite*gold: 0
Join Date: Aug 2009
Posts: 70
Received Thanks: 18
|
Гм.... Слишком умный ответ. Ну, по крайней мере, для меня... А для аутоита так вообще... Но все равно спасибо.
Добавил:
Погуглил, подумал... Ну в принципе, с красскалом даже скриптовый справится. Попадаются ресурсы, где все это обьяснено на пальцах... Но я не собирался прикручивать к боту матрицу для рассчета интеллектуального движения от города к городу. Задача минимум - при не привязанном к определенной точке фарме обходить единичное препятствие от координат, где стоял перс до координат трупа моба. Поиск ближайшего незанятого моба соответствующего лвл соответствующего типа есть. Как следствие - постоянный неконтролируемый сдвиг координат перса. При агре моба удар скилом через встреченное препятствие проходит (я так понимаю - магия, блин), а вот перс до выпавшего лута иногда дойти не может. Так что решение - либо привязать перса к точке фарма с ограничением действия по доступному радиусу, либо все таки читать геодату, потому что "тыканье" персом для определения доступности прохода сделать можно, но выглядеть это будет не совсем эстетично.
|
|
|
11/07/2009, 19:36
|
#573
|
elite*gold: 0
Join Date: Nov 2007
Posts: 160
Received Thanks: 28
|
Насчёт дэйкстры, это ты хорошо подколол... Кстати, далеко не самый удачный алгоритм. Есть вариант делать собственную геодату и карту проходимости. И потом (если её разбить по квадратам) можно и a* использовать. Но всё выше описанное - извращение из разряда "онанизм в присядку".
|
|
|
11/07/2009, 20:44
|
#574
|
elite*gold: 0
Join Date: Sep 2009
Posts: 9
Received Thanks: 1
|
А из клиента можно получить геодату?
|
|
|
11/08/2009, 06:20
|
#575
|
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
|
BuBucekTop: по CS болел раньше? про PodBOT знавал? 
Там используется именно тобой описанный алгоритм, самый простой в создании и самый объемный, я тоже делал waypoint-ы, просто бегал по полям, бот у меня сам ставил точки где надо 
Где надо - точка с прыжком, где надо - точка с обзором мобов, где надо взлетать, где садиться, какую высоту держать...  и т.д. 
А потом для формирования маршрутного графа я юзал дейкстру. Таким образом перс легко пересекал всю карту. 
ну... я думаю, ясно, что это не понты, а открытая передача неформализованного алгоритма?
Skand: геодату из клиента не просто получить можно, ей можно пользоваться прямо в клиенте. Это тоже одно из полей основного класса игры.
что то я задумываться стал о переработке своей зверушки... под открытый пкоаз.
|
|
|
11/08/2009, 11:09
|
#576
|
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 403
|
Quote:
Originally Posted by drShtain
геодату из клиента не просто получить можно, ей можно пользоваться прямо в клиенте. Это тоже одно из полей основного класса игры.
|
А можно немного подробнее: как найти эти данные, что они из себя представляют?
|
|
|
11/08/2009, 15:22
|
#577
|
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
|
Можно, но чуть погодя. Там все поля по другому теперь расположены и моя старая информация негодня, разве только для обучения.
Кстати все это можно углядеть в моей ексельке, которую я где то на 55 странице выложил...
|
|
|
11/10/2009, 13:45
|
#578
|
elite*gold: 0
Join Date: Oct 2009
Posts: 3
Received Thanks: 0
|
Всем привет
После изучения autoit и копания в коде MHS возник вопрос:
как сделать так чтобы бот после убийства моба атаковал другова моба петом, а потом летел на место смерти предыдущего моба и собирал лут?
Буду рад любым подсказкам, заранее спс.
|
|
|
11/10/2009, 14:44
|
#579
|
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
|
ajiekc92: последовательность действий:
1- проверяем хп моба, если больше 0, то выходим.
2- запоминаем координаты моба.
3- выбираем следующего моба.
4- шлем команду 'Alt+1' в клиент.
5- устанавливаем точку перемещения на запомненные координаты.
6- в течении 2-3 сек собираем лут просто посылкой команды сбора лута.
7- включаем режим атаки текущего моба.
Всё. Вопросы?
Код написать не надо просить, я напишу открытый C++ код и ничего не будет понятно. Это неформализованный простенький алгоритм. Формализовать его следует самому, а иначе зачем изучать аутоит вообще?
Не пинайте только 
|
|
|
11/11/2009, 00:01
|
#580
|
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
|
Здравствуйте, прочитал тему про инжекции  , но не смог в ней разобраться, может сможет кто выложить код на С++ под PW-RU, для таргета
|
|
|
11/12/2009, 07:31
|
#581
|
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
|
Подскажите, в фунции
Quote:
procedure InjectFunc(Hdl: Cardinal; Func: Pointer; aParams: Pointer; aParamsSize: cardinal);
var
BytesWrite :cardinal;
ProcessId :cardinal;
hThread :cardinal;
ThreadId :cardinal;
BytesRead :cardinal;
ThreadAddr : pointer;
ParamAddr : pointer;
begin
if Hdl<>0 then
begin
ChangePrivilege('SeDebugPrivilege', True);
// Выделяем в открытом процессе память под имя модуля
ThreadAddr := VirtualAllocEx(Hdl, 0, 4096, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if ThreadAddr = nil then Exit;
// Пишем имя модуля в его адресное пространство
WriteProcessMemory(Hdl, ThreadAddr, Func, 4096, BytesWrite);
// Выделяем память под структуру, которая передается нашей функции
ParamAddr := VirtualAllocEx(Hdl, nil, aParamsSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if ParamAddr = nil then Exit;
// Пишем саму структуру
WriteProcessMemory(Hdl, ParamAddr, aParams, aParamsSize, BytesWrite);
// Запускаем удаленный поток
hThread := CreateRemoteThread(Hdl, nil, 0, ThreadAddr, ParamAddr, 0, ThreadId);
if hThread = 0 then Exit;
// Ждем пока удаленный поток отработает...
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(Hdl, ThreadAddr, 4096, MEM_RELEASE);
VirtualFreeEx(Hdl, ParamAddr, aParamsSize, MEM_RELEASE);
CloseHandle(hThread);
end
end;
|
какие входные параметры.
Как я понял Hdl - это Handle процесса,
а что означает Func, aParams и aParamsSize
|
|
|
11/14/2009, 00:05
|
#582
|
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
|
Может мне все таки кто нибудь объяснить про инжекцию, какая функция вызывается первой InjectFunc или SelectMonster и какие значения подставлять в InjectFunc в Func, aParams и aParamsSize? Какой СallAddress?
|
|
|
11/14/2009, 00:15
|
#583
|
elite*gold: 0
Join Date: Sep 2009
Posts: 9
Received Thanks: 1
|
johnic, сначала определись на каком языке ты будешь писать. Сначала ты просишь пример на С++, а потом даешь код на Delphi.
|
|
|
11/14/2009, 03:22
|
#584
|
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 403
|
Quote:
Originally Posted by johnic
Может мне все таки кто нибудь объяснить про инжекцию, какая функция вызывается первой InjectFunc или SelectMonster и какие значения подставлять в InjectFunc в Func, aParams и aParamsSize? Какой СallAddress?
|
После выбора языка, стоит начать читать книжки по программированию.
Чтобы подставлять какие-либо значения в функции, надо знать, что эти функции делают, для этого нужно идти на  или хотя бы гуглом воспользоваться. А для определения СallAddress - дебаггер (ollydbg можно) тебе в руки + много свободного времени и желание учиться.
|
|
|
11/14/2009, 08:49
|
#585
|
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
|
Я пишу на С#, но так как в нем нельзя вставлять ассемблерные строки, приходится создавать проект на C++ и вставлять в мой проект. Я хочу разобраться как делается инжекция, поэтому и спрашиваю разные примеры.
|
|
|
All times are GMT +1. The time now is 07:56.
|
|