Register for your free account! | Forgot your password?


Go Back   elitepvpers > MMORPGs > Perfect World
You last visited: Today at 07:38

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement




Rus. server

Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.

Reply
 
Old 11/07/2009, 13:20   #571
 
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
Quote:
Originally Posted by sumikot View Post
Ну раз я первый зашел, мне и флудить...

drShtain
Насчет умного поста есть один глупый вопрос - не могу придумать, каким способом можно обходить препятствия. Могу включить в умения перса проходить сквозь них, если возникнет ситуация, с которой бот не справится.
Могу предложить выход для этой ситуации, но это уже не по силам будет аутоиту, я думаю. Точнее, этот выход будет нагружать систему до небывалых высот.
Тем не менее, смотри в сторону алгоритма "красскал" или алгоритма "Дейкстра". Второй сложнее, но результативнее. А крас простой, тупой, долгий, но работает.
Это алгоритмы ИИ перемещения.
drShtain is offline  
Thanks
1 User
Old 11/07/2009, 17:04   #572
 
elite*gold: 0
Join Date: Aug 2009
Posts: 70
Received Thanks: 18
Гм.... Слишком умный ответ. Ну, по крайней мере, для меня... А для аутоита так вообще... Но все равно спасибо.

Добавил:
Погуглил, подумал... Ну в принципе, с красскалом даже скриптовый справится. Попадаются ресурсы, где все это обьяснено на пальцах... Но я не собирался прикручивать к боту матрицу для рассчета интеллектуального движения от города к городу. Задача минимум - при не привязанном к определенной точке фарме обходить единичное препятствие от координат, где стоял перс до координат трупа моба. Поиск ближайшего незанятого моба соответствующего лвл соответствующего типа есть. Как следствие - постоянный неконтролируемый сдвиг координат перса. При агре моба удар скилом через встреченное препятствие проходит (я так понимаю - магия, блин), а вот перс до выпавшего лута иногда дойти не может. Так что решение - либо привязать перса к точке фарма с ограничением действия по доступному радиусу, либо все таки читать геодату, потому что "тыканье" персом для определения доступности прохода сделать можно, но выглядеть это будет не совсем эстетично.
sumikot is offline  
Old 11/07/2009, 19:36   #573
 
elite*gold: 0
Join Date: Nov 2007
Posts: 160
Received Thanks: 28
Насчёт дэйкстры, это ты хорошо подколол... Кстати, далеко не самый удачный алгоритм. Есть вариант делать собственную геодату и карту проходимости. И потом (если её разбить по квадратам) можно и a* использовать. Но всё выше описанное - извращение из разряда "онанизм в присядку".
BuBucekTop is offline  
Old 11/07/2009, 20:44   #574
 
elite*gold: 0
Join Date: Sep 2009
Posts: 9
Received Thanks: 1
А из клиента можно получить геодату?
Skand is offline  
Old 11/08/2009, 06:20   #575
 
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
BuBucekTop: по CS болел раньше? про PodBOT знавал?
Там используется именно тобой описанный алгоритм, самый простой в создании и самый объемный, я тоже делал waypoint-ы, просто бегал по полям, бот у меня сам ставил точки где надо
Где надо - точка с прыжком, где надо - точка с обзором мобов, где надо взлетать, где садиться, какую высоту держать... и т.д.
А потом для формирования маршрутного графа я юзал дейкстру. Таким образом перс легко пересекал всю карту.
ну... я думаю, ясно, что это не понты, а открытая передача неформализованного алгоритма?

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

что то я задумываться стал о переработке своей зверушки... под открытый пкоаз.
drShtain is offline  
Old 11/08/2009, 11:09   #576
 
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 400
Quote:
Originally Posted by drShtain View Post
геодату из клиента не просто получить можно, ей можно пользоваться прямо в клиенте. Это тоже одно из полей основного класса игры.
А можно немного подробнее: как найти эти данные, что они из себя представляют?
dwar is offline  
Old 11/08/2009, 15:22   #577
 
elite*gold: 0
Join Date: Dec 2008
Posts: 47
Received Thanks: 52
Можно, но чуть погодя. Там все поля по другому теперь расположены и моя старая информация негодня, разве только для обучения.
Кстати все это можно углядеть в моей ексельке, которую я где то на 55 странице выложил...
drShtain is offline  
Old 11/10/2009, 13:45   #578
 
elite*gold: 0
Join Date: Oct 2009
Posts: 3
Received Thanks: 0
Всем привет
После изучения autoit и копания в коде MHS возник вопрос:
как сделать так чтобы бот после убийства моба атаковал другова моба петом, а потом летел на место смерти предыдущего моба и собирал лут?
Буду рад любым подсказкам, заранее спс.
ajiekc92 is offline  
Old 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- включаем режим атаки текущего моба.

Всё. Вопросы?
drShtain is offline  
Old 11/11/2009, 00:01   #580
 
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
Здравствуйте, прочитал тему про инжекции , но не смог в ней разобраться, может сможет кто выложить код на С++ под PW-RU, для таргета
johnic is offline  
Old 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
johnic is offline  
Old 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?
johnic is offline  
Old 11/14/2009, 00:15   #583
 
elite*gold: 0
Join Date: Sep 2009
Posts: 9
Received Thanks: 1
johnic, сначала определись на каком языке ты будешь писать. Сначала ты просишь пример на С++, а потом даешь код на Delphi.
Skand is offline  
Old 11/14/2009, 03:22   #584
 
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 400
Quote:
Originally Posted by johnic View Post
Может мне все таки кто нибудь объяснить про инжекцию, какая функция вызывается первой InjectFunc или SelectMonster и какие значения подставлять в InjectFunc в Func, aParams и aParamsSize? Какой СallAddress?
После выбора языка, стоит начать читать книжки по программированию.
Чтобы подставлять какие-либо значения в функции, надо знать, что эти функции делают, для этого нужно идти на MSDN: Microsoft Development, MSDN Subscriptions, Resources, and More или хотя бы гуглом воспользоваться. А для определения СallAddress - дебаггер (ollydbg можно) тебе в руки + много свободного времени и желание учиться.
dwar is offline  
Old 11/14/2009, 08:49   #585
 
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
Я пишу на С#, но так как в нем нельзя вставлять ассемблерные строки, приходится создавать проект на C++ и вставлять в мой проект. Я хочу разобраться как делается инжекция, поэтому и спрашиваю разные примеры.
johnic is offline  
Reply




All times are GMT +1. The time now is 07:38.


Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2021 elitepvpers All Rights Reserved.