Что нового

[Drakensang-Online] Бот для игры

Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
нашел классный проект, ищут движение на экране
Знаком этот проект, да только это дело не на автоите пишется и нам оно совершенно не нужно, идея поиска если только, но и она не нова. В остальном - общеизвестные принципы.

На сколько быстро работает такой вариант ?
Ну у меня не такой код, как в том примере. Написал наглядную функцию, тестируйте.

Код:
;Настраиваем поиск области	
	$winWH = WinGetClientSize($HWnd) ; получаем размер (W,H) клиентской части окна
	Local $searchZone[4] = [1, 1, $winWH[0], $winWH[1]] ; координаты сканируемой области
	
	; Делаем снимок области в слот 0
	FFSnapShot ( $searchZone[0], $searchZone[1], $searchZone[2], $searchZone[3], 0, $HWnd )
	Sleep(300) ; пауза (не рекомендуется ставить менее 100мс)
	FFSnapShot ( $searchZone[0], $searchZone[1], $searchZone[2], $searchZone[3], 1, $HWnd )

	$ResultLC = FFLocalizeChanges(0, 1, 10) ; поиск динамики на снимках
    
    if @Error AND $ResultLC[4] < 200 Then
        TrayTip("ShowChanges","Да нет тут нихрена никого...", 2000)
    Else
        TrayTip("ShowChanges","Чет шевелится: ("&$ResultLC[0]&","&$ResultLC[1]&","&$ResultLC[2]&","&$ResultLC[3]&"), здесь "&$ResultLC[4]&" пикселей различаются.", 2000)
		for $x = $ResultLC[0] to $ResultLC[2]
			for $y =$ResultLC[1] to $ResultLC[3]
				FFSetPixel ( $x, $y, 0xFF2525, 1 )
			Next
		Next
		FFDrawSnapShot(1)
    EndIf


Эта функция закрашивает первую найденную облать. А поиск у меня делает своя функция, так как FFLocalizeChanges тупит на х64, и, как правильно заметил nowost, работает в старых версиях библиотеки.

ЗЫ: bugaj, вот тебе, кстати, открытая ниша, можешь ее занять. Такую дллку тут многие ботоводы с руками оторвут, особенно оптимизированную. Так что занимай, пока lirikmel не перебил ) Можешь запатентовать, а Belfigor тебе защиту сваяет, какую хрен взломаешь... А мне процент за идею :laugh:


Добавлено:
Сообщение автоматически объединено:

Собственно смех смехом, а такая библиотека очень нужна. Сложи вместе ImageSearsh и FastFind, и, я думаю, она станет основой многих ботов, работающих чисто с графикой. И самой востребованной.
 

lirikmel

Продвинутый
Сообщения
225
Репутация
84
OffTopic:
Так что занимай, пока lirikmel не перебил )
не перебью -) предпочитаю работать с памятью процесса и только с ней. Графические боты на autoit слишком медлительны и громоздки ;D
 

bugaj

Знающий
Сообщения
140
Репутация
11
не могу представить как монетизировать dll, а то бы я уже налепил тут )
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
Ну почему все о деньгах думают, а? :scratch:
 

bugaj

Знающий
Сообщения
140
Репутация
11
Ну почему все о деньгах думают, а?
а ты не о них, когда ботов клиентам делаешь? :rofl: т.е. ты хочешь взять готовое бесплатно и продать. кого ты пытаешся обмануть? ) Вот если бы мне за это платили, я бы только этим бы и занимался, и уже была бы куча готовых вещей. Всем бы от этого хорошо было, но мне за это не платят, поэтому приходится ходить на работу, а ботить некада )
 

nowost

Знающий
Сообщения
178
Репутация
17
lirikmel, ты мобов ищешь и таргетишь на основе данных из памяти ?
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
Отвечу за него, так как знаю ответ. Любой кодер ботов, на мой вгляд, рано или поздно начинает работать с памятью. Это и серьезно упрощает код, и, при определенной сноровке, дает возможность получать от игры гораздо больше данных, чем при чтении графики. Да, lirikmel, как и многие другие, работает с памятью. Я тоже учусь ;)
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
Не получается у меня :'(
Ищу, допустим, указалеть на HP. Нахожу первый адрес в памяти, содержащий текущее значение. По этому первому адресу нахожу указатель, то есть адрес, который пишет в ту первую ячейку памяти. По тому адресу нахожу третий указатель, но дальше захожу в тупик - указатель на этот адрес не находится. Его просто не существует. Но ведь с этого адреса идет запись в ту ячейку! Как такое может быть?

Я понимаю принцип работы клиента так: некая функция обращается к другой функции, выполняющей получение данных с сервера. Та делает запрос, получает данные и отдает их этой функции. Функция выводит их на экран. Быть может потому я и не могу указатель найти, потому что данные появляются там лишь в момент запроса? Тогда как мне обойти это? Я смотрел видео, читал материалы по работе с СЕ, но все примеры годятся для локальных игр, в моей игрушке найти базовый адрес не получается, или мне не хватает знаний...
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
Сначала находятся 4 адреса, содержащих искомое значение. Два из них меняюся сразу, как только происходят изменения в игре, два других - постепенно. То есть полоска НР при одевании предмета, дающего большее максимальное значение НР постепенно начинает заполнятся, и это как раз в тех ячейках отражается. Далее ищу указатель на этот адрес. Нахожу, но он динамичный. Копаю дальше. А вот дальше - не получается. Находится адрес третьего уровня с нулевым смещением, но при попытке найти его...не находит ни одного значения, хотя СЕ показывает, что с этого адреса идет запись (я брекпоинт на доступ ставил). Пробовал другие игры - все получается, указатель нахожу. Вот, собственно, и причина моей паники. Может я был невнимателен, может что то пропускаю. Сейчас буду гуглить дальше, искать примеры. Боюсь, до поиска карты и мобов на ней мне еще долго расти...
 

lirikmel

Продвинутый
Сообщения
225
Репутация
84
попробуй все таки автоматический поиск
 

nowost

Знающий
Сообщения
178
Репутация
17
Если ты имеешь ввиду Pointerscan for this adress, то да довольно простая в использовании вещь. Есть только минус периодически нужно обновлять и отсеивать показатели.

Sebun, попробуй найди пойнтер автоматически затем воспользуйся соответствующей функцией из nomadmemory которая с модулем и офсетами. Т.е base adress+module офсет1 офсет2 офсет3 офсет4 офсет5 ( ну может и меньше офсетов быть)

А вообще не всегда удается найти базовый адрес способом, который указан в теме про ирис онлайн
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
Я искал вручную, говорят, что это самый правильный путь. Я только начал учиться потрошить память, думаю офсеты я найду, еще не все способы проверил. А вопрос задал потому, что возникло подозрение, что функция записывает в ячейку лишь в момент изменения в самом клиенте, поэтому я ее и не нахожу. Сегодня буду пробовать другие варианты. Сам я игры не писал, только догадываюсь об их устройстве, но базовые знания еще со времен DOS 6.22, Windows 3.11, то есть устарели )

Кстати, есть предложение к знатокам С++, может кто возмется... Тут вопрос был задан про поиск движения на подвижном фоне. Думаю, реализация была бы пусть не прорывом, но, по крайней мере, серьезно бы упростила жизнь начинающим ботоводам вроде меня. Итак...

Суть идеи в том, что в любой игре как правило три динамичных группы - это фон, декорации (вода, туман, световые эффекты и т.д.) и сами NPS. Практически все 3D-игры подразумевают наличие главного героя по центру окна (с разными вариациями), эмуляция движения есть движение фона (первая группа), на этом фоне движутся декорации (вторая группа) и различные объекты. Если ставить задачу искать движение лишь третьей группы, то нужно исключить первые две. Итак, фон. Отслеживание движения фона можно осуществить путем проверки смещения группы пикселей на нескольких участках снимка. Например, если проверка идет в 4-х точках окна и все четыре точки движутся в одном направлении, мы можем: определить направление движения, определить скорость движения. По этим двум параметрам мы исключаем сам фон - если объект движется в другом направлении или в том же, но с другой скоростью, значит это не фон.
Декорации, как правило, динамичны внутри определенной области и не контактируют с другими областями. Например трава, деревья, вода и т.д. Второй этап обработки - определение динамики декораций. Так, если на серии снимков объект, определенный нак "не фон" не смещается относительно фона, то есть стоит на месте, то это почти однозначно декорация. Остальные объекты можно распознать по каким то отличительным признакам, скажем размеру, цвету, скорости смещения и т.д. Ну и в итоге остаются только NPS со своими отличительными признаками.

Это лишь предположение, так что прошу не критиковать.
 

nowost

Знающий
Сообщения
178
Репутация
17
sebun путь то правильный но не быстрый ) у меня на поиск каждого показателя, порой уходила дня по 3-4 ) а вообще очень хочу научиться со структурами работать
 

tablo21

Новичок
Сообщения
4
Репутация
0
Столько лет прошло. в личной стате автора топика вижу что форум читает. значит автоит не забросил. Мне интересно продолжение этого топика. научился ли автор использовать opencv.
распознавать карту, а не бегать по поинтам.

да и вообще как дела то хоть бы видео выложил как работает. очень интересно :smile:

PS: В личку автору почему-то написать не смог.
 
Автор
sebun

sebun

Знающий
Сообщения
78
Репутация
5
да и вообще как дела то хоть бы видео выложил как работает. очень интересно :smile:
Я его потерял. Бот интересный получился. Сделал разные функции, автоматизировал по максимуму. Его можно было ставить в планировщик задач. Он запускался (даже заставку нарисовал), запускал игру, создавал окно нужного размера, после загрузки открывал карту, выбирал локацию, заходил туда и начинал чистить, выходил, заходил снова... Но в 2016-м кажется произошел у меня коллапс - винт посыпался. И я потерял все, что было, в том числе этого бота и его исходники. Потом как то не было времени и интереса, забросил игру, начались трудности в жизни. Сейчас есть интерес попробовать реализовать заново. Например, заточить бот на фарм камней и шмота.
 

eralex

Новичок
Сообщения
50
Репутация
4
Очень давно сделал пиксельный бот для этой игры (в году так 2013), год назад переделал бот на чтение данных из памяти игры - производительность и возможности бота возросли многократно, просто небо и земля.
 
Верх