Что нового

Общий подход к написанию HealBot'a (WoW)

Nonstopich

Новичок
Сообщения
4
Репутация
0
Доброго времени суток.
Самая идея привязана не к игрушке WoW, а к изучению ИИ(искусственного интеллекта). Игра взята как подопытный кролик.

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

Примерный ход Решения:
1) Постоянный scan наличия ХП и Magic-излишка(дебаффа). Итого на вход получаем массив из 5(группа) 10(рейд10) 25(рейд25) игроков с 2умя параметрами. $Raid[25][2]
2) Реализация сканирования: Варианта два: аддон + анализ (текста)??? или самое вкусное и самое сложное - чтение памяти.
3) Реализация алгоритма ИИ - но это к автоиту уже мало относится.

Вопрос: Для реализации сканирования, использовать PixelSearch на полоске с хп, оказалось очень не рационально, ибо FPS падает с 60 до 30, а то и меньше. Если запускать "синхронное" сканирование 5ти целей этим алгоритмом, играть становится совсем невозможно. Как "правильнее" на ваш взгляд стоит поступить? Прописать аддон и реализовать взаимодействие GUI WOW с AutoIT или сразу лезть в Память игры и работать с ней?

Вопрос начальный. В зависимости от ответа будут ещё :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Написать аддон - проще чем расковырять память если не имеешь уже готовой таблицы с разбитой структурой памяти. А ты sleep хотябы на 100мс ставить не пробовал? Ведь если у тебя нету слипа то фактически скрипт проверяет хп раз в несколько мс, а тебе обновлять данные о хп с такой скорость совершенно не надо, 2 раз в секунду имхо хватит за глаза :smile:
 
Автор
N

Nonstopich

Новичок
Сообщения
4
Репутация
0
Код:
func CheckPartyHP($x0,$x1,$y,$step)
	Local $party[3][2]
For $i = 0 to UBound($party, 1) - 1
	$hp = PixelSearch($x0, $y+$i*$step, $x1, $y+$i*$step, 0x242424, 5)
		if not @error Then
			$party[$i][0] = Int(100-(($x1 - $hp[0])*100)/($x1-$x0))
		EndIf
Next 
For $i = 0 to UBound($party, 1) - 1
	PixelSearch($x0, $y+6+$i*$step, $x1, $y+6+$i*$step, 0x65a9fc, 5)
		if not @error Then
			$party[$i][1] = 1
		EndIf
Next 
EndFunc


Эта функция вызывается перед каждым нажатием на кнопку. Кнопки жмуться раз в 1секунду это минимум (с учётом ГлобальногоКулдауна на доступность спелла)

По логам функция вызывается раз в 1.5 - 3секунды.


p.S массив 3х2 из-аз того что фрейм танка идёт отдельно, мой тоже. От группы остаётся лишь 3и чеолвека. У каждого есть хп(первый For), и наличие на нём вредоносной магии(второй For). Пока тестирование идёт на 5ти игроках
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
{CodeWarn}
можешь еще увеличить шаг поиска,
Код:
PixelSearch($x0, $y+6+$i*$step, $x1, $y+6+$i*$step, 0x65a9fc, 5, 5)
 
Автор
N

Nonstopich

Новичок
Сообщения
4
Репутация
0
Ну с аддоном всё работает. Медленнее чем, если использовать PixelSearch. Что касается стабильности - результат очень хороший. Но ускорить это дело в любом случае надо.

Исходя из этого вопрос: как работать с памятью? Я так понимаю Cheat Engine для поиска адресов памяти, в которой лежит то или иное значение. Что касается готовых библиотек, где можно поискать? Ведь они 100% есть. И какие функции в AutoIt используются для доступа к процессу, чтения памяти из него и т.д.
 
Верх