Что нового

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

bugaj

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

на автоите никак, вернее как, но на каждый кадр будет пол часа уходить ) мой рекорд за 2 миллисекунды 1920 на 1080 кадр переводит )
Но не с WinApi ни с автоитом такого результата не добиться. Переходи на машинный код ))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
bugaj сказал(а):
Ну, как это сделать, не нагружая лишними вычислениями бота, я пока не знаю. Все, что сделал - это выставил в настройках клиента минимальные значения графики. Выглядит жутковато, но пока для моих целей сойдет.

на автоите никак, вернее как, но на каждый кадр будет пол часа уходить ) мой рекорд за 2 миллисекунды 1920 на 1080 кадр переводит )
Но не с WinApi ни с автоитом такого результата не добиться. Переходи на машинный код ))
100% машинный код - это излишек исключительно для гурманов. Можно обойтись например С/С++ с ассемблерными вставками.
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
Belfigor сказал(а):
100% машинный код - это излишек исключительно для гурманов. Можно обойтись например С/С++ с ассемблерными вставками.
Не, ребят, спасибо конечно, но низкоуровневое программирование я начал изучать когда то давно и успешно забыл, как это выглядит. :stars: Так что сейчас ассемблер мне не по зубам, заново нужно открывать учебник и учить.

Отступление:
На Автоите начал писать незадолго до своего первого поста на этом форуме, благо знания и навыки программирования имелись и освоить программу не составило труда. Но работа с цветом - не мой конек, поэтому и возникли сложности.

Если касаться ассемблера, помню, когда то писал программу, еще на старинной машине (тогда это было круто) с процессором Intel386DX с тактовой частотой, вы не поверите - 25МГц! Там была задача напрямую работать с памятью. В своем первом посте я как раз такой вопрос и задал - про прямой доступ к видеопамяти. Однако архитектура современной системы построена таким образом, что для решения простой задачки, скажем, закрасить единственный пиксель на мониторе, задействуется множество различных процессов, теряется драгоценное время.

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

Вообще в идеале нужно даже не пиксели читать, а отслеживать движение на экране. Движется карта, на ней какие то объекты. Вот эти объекты должны мгновенно распознаваться, я должен знать, где что на карте шевелится. И тут же получать координаты. Это касалось моей задумки создать универсального бота, которого любой геймер смог бы самостоятельно научить бегать, ибо все игры однотипные. У Google, да и не только у нее, есть поиск похожей картинки. Собственно "найти картинку, похожую на эту, причем быстро" - это и есть основная задача в реализации подобного проекта. Человеческий глаз распознает движение мгновенно, потому что это движение... А вот как машину заставить понимать, без сложных математических задач, циклов, разбиения изображения... Не знаю.

Хочу поделиться с вами одной идеей, которую я реализовал на языке РНР для одного из сайтов, клиенту требовался универсальный взломщик капчи. Капча была как Гугловая, так Яндексовская, остальные я, имхо, за капчу не считаю (касается только стандартной капчи, сборка изображения из кусков и прочее - не в счет). Так вот, там был реализован векторный механизм определения, который давал почти 100% распознавание. Суть в том, что на изображение накладывалась сетка, по которой, в зависимости от цветов, рисовался вектор. И как ты капчу не крути, не наклоняй, вектор всегда загибался в нужную форму и безошибочно определялся, если надпись была хоть немного читаема.

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

bugaj

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


У меня картинка ищется уже за 30-300 миллисекунд (и не один пиксель, а куча), но до сих пор ничего не бегает, все оказывается гораздо сложнее :lol:

В общем критичные к скорости функции делать нужно не на автоите, а делать длл на каком нибудь высокоуровневом языке (но не через винАпи) и тогда можно прилепить их в автоит. Тут даже по форуму где то гуляет пару длл, но как я понял ищут они неахти.
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
хочу распознавание капчи, а для распознавания обычного текста это работает? может там есть чего оптимизировать?
Этот код дать не могу, я его даже не продаю, таков уговор с клиентом, а я свое слово держу. Под распознавание текста на изображении тоже можно приспособить, там функция работает только для одной строки в несколько знаков (максимум два слова), то есть заточена под капчу. Сделать разбиение картинки на куски и можно распознавать. Но для этого есть ABBYY FineReader, мой скрипт на PHP и предназначен для работы на стороне сервера.
 

bugaj

Знающий
Сообщения
140
Репутация
11
любопытно, как это к боту файн ридер прилепить? ;D в сущности у меня есть OCR, но топорный, вот надо бы че то поприкольней придумать. Интересен не скрипт, а алгоритм. ну шож нет так нет :whistle:
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
Алгоритм я тебе примерно сказал. Вначале накладывается сетка. Допустим 5х5 пикселей. Потом все составляющие обрабатываются. Суть в поиске аналогичного по величине участка по кривой Безье, причем не по цвету, а по размеру. На сетке строится сама кривая, гнутый вектор. Ну а потом делаешь проверку типа "на что похож этот вектор". У меня каждый такой вектор сжимался в простейшую фигуру и сравнивался с шаблоном.


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

Dellroc сказал(а):
Добавляю обещанные адреса.
Спасибо, тебе, человек! Вот сам поленился (а может и из за нежелания копать память) глянуть. Оказывается адреса то статичные. А значит, как ты говорил, если нет защиты, можно и рискнуть? Признаться, я запарился реально с поиском пикселей, и все больше склоняюсь к мысли использовать память - один фиг если немцы (авторы проекта) решат делать антибот, то они его сделают и для мышки.

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

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Ссылку на dll давали выше , вы пробовали ? читали о ее возможностях ? сравнивали скорость ? , неужели не устраивает?
Работа с памятью,и если надо все перенести в память, это уже второй вопрос, для начала стоит определить структуры моба и структуры персонажа, как минимум всегда будут координаты положения обеих сторон.опрелеить растояние до цели уже не составит проблем - следовательно все перенести в масштаб движения мыши также, отсюда и узнаете где моб
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вы не забываете что если вы пишете бота на продажу, exe автоита потрошится обратно в исходник одним движением руки?
 

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Ссылку на dll давали выше , вы пробовали ? читали о ее возможностях ? сравнивали скорость ? , неужели не устраивает?
Работа с памятью,и если надо все перенести в память, это уже второй вопрос, для начала стоит определить структуры моба и структуры персонажа, как минимум всегда будут координаты положения обеих сторон.опрелеить растояние до цели уже не составит проблем - следовательно все перенести в масштаб движения мыши также, отсюда и узнаете где моб
Примеры наше всё. Я вот даже не представляю как это сделать.
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
Вы не забываете что если вы пишете бота на продажу, exe автоита потрошится обратно в исходник одним движением руки?
Я это знаю, поэтому и сделал автоматический вход в игру. Бот игру запускает, вводит логин и пароль, позиционирует окно в нужном месте экрана с нужным размером рабочей области и начинает с ним работать. Клиент, зная, что его персональные данные зашиты в программу, вряд ли передаст кому то экзешник на растерзание, тем более если за него деньги плачены.

По поводу dll - пока только скачал и смотрю справку и примеры. Сейчас некогда, вечером гляну. Потом отпишусь что да как. Кстати, доработал скрипт с PixelSearch, заставив его читать только 4 пикселя дважды (два вида полоски жизни), на скан экрана уходит 8 секунд, за это время какая нибудь мелочь подбегает и убивает. :laugh:
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Кстати, доработал скрипт с PixelSearch, заставив его читать только 4 пикселя дважды (два вида полоски жизни), на скан экрана уходит 8 секунд, за это время какая нибудь мелочь подбегает и убивает. :laugh:
кусок кода поиска покажи , я не понимаю откуда у вас берутся восемь секунд, у меня занимало 4-5 секунд в RQ не долько првести мышкой по всему экрану , но и прокликать каждый сантиметр в разрешении 1600на 1050, параллельно искав порядка 10 пикселей после каждого перемещения мыши. :stars:
Примеры наше всё. Я вот даже не представляю как это сделать.
Так ведь не раз поднималась эта тема на форуме, находим координаты персонажа в памяти и координаты моба , теперь по теореме прямоугольных треугольников мы можем определить на каком расстоянии от нас моб и в каком направлении,масштабируем координатную сетку мыши относительно разрешения окна и координатами в памяти на которых стоит наш персонаж и моб , и теперь мы знаем куда и на сколько подвинуть мышку чтобы кликнуть на моба
 

sims

Осваивающий
Сообщения
184
Репутация
24
Если работа с пикселями слишком медленная, то может стоит написать dll на нативном ЯП, который быстрее обработает данные?
На одном из форумов видел сравнение AutoIt с нативным ЯП и AutoIt проиграл на несколько порядков в скорости работы с пикселями. http://purebasic.mybb.ru/viewtopic.php?id=418#p6173
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
кусок кода поиска покажи , я не понимаю откуда у вас берутся восемь секунд

Ответ #17, там вся функция поиска. Только читается не вся полоска а только 4 пикселя на ней. Сейчас сетка 10 на 10, то есть 10*10*2=200 обращений к PixelSearch за один проход. Добавлю еще одну функцию:

Код:
Func AttakMobs() 
   
   $MobXY = 0
   
   Do
	  $MobXY = SearchMob()   ; поиск ближайшего врага, если вместо координат вернул 0 - врагов нет
	  if $MobXY<>0 Then
		 MouseMove ( $MobXY[0], $MobXY[1] ) ; навести мышь на цель
		 MouseClick("right")	             ; огонь! 
	  EndIf
   Until $MobXY = 0 ; повторяет цикл, пока SearchMob() не вернет нулевой результат
   
EndFunc


ну и собственно движение:

Код:
MouseClick("left", 800, 300, 1) ; перемещение по карте
   Sleep(1500)                         ; ждем, когда добежит
   AttakMobs()                        ; чистим от мобов
   
   MouseClick("left", 770, 312, 1)
   Sleep(1500)
   AttakMobs()


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

может стоит написать dll на нативном ЯП, который быстрее обработает данные?
PureBasic, безусловно, работает куда быстрее, так как он компилируется полностью, а в АвтоИт эта компиляция условная, то есть имеется набор команд и их обработчик, что снижает производительность.

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

bugaj

Знающий
Сообщения
140
Репутация
11
Если работа с пикселями слишком медленная, то может стоит написать dll на нативном ЯП, который быстрее обработает данные?
На одном из форумов видел сравнение AutoIt с нативным ЯП и AutoIt проиграл на несколько порядков в скорости работы с пикселями. http://purebasic.mybb.ru/viewtopic.php?id=418#p6173

лирикмел же уже написал и даже ссылку в этом топике дал )

У мну средняя скорость поиска 25 КАРТИНОК в секунду ) т.е. я не заморачиваюсь поиском одного пикселя и поиском пикселя нужного постоянного цвета. Причем я хочу еще в несколько раз убыстрить. А вы таки медленно, медленно. Хотя если на каждый поиск запрашивать инфу у видеокарты, быстрей уже особо не получится ( самая медленная часть это как раз спросить у видеокарты данные по пикселю. И посему бросайте вы это дело, нужно сразу делать скриншот всего экрана и в нем искать пиксели, так быстрее.

Единственное чего не удается решить без потрошения памяти это как не застревать во всем чем ни попадя.

http://video.yandex.ru/search?text=%D0%B3%D0%BE%D1%80%D0%B4%D0%BE%D0%BD%20%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82&where=all&filmId=BdseJMPO0Cw

может запилим? в конце передачи после ручейника там тема )
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
может запилим? в конце передачи после ручейника там тема )
Посмотрел я тот ролик. Признаться, были наработки на эту тему, но... Максимум, что удалось сделать - это чат-бота с более-менее логичными ответами на вопрос, но там была жутко здоровенная база ответов, причем бот самооубчался и база пухла. Писал я его лет пять назад, сейчас его кажется уже выкинули, так как база неимоверно большая стала. Была задумка второго такого проекта - нужно было научить машину понимать слова, понимать значения предложений, но, боюсь, ни один человек не в состоянии даже близко повторить работу даже мозга обычной блохи. Загляни внутрь клетки. Там целый город - что то движется, что то куда то плывет, все подчиняется каким то законам. А мы даже правила собственного языка не помним. Да, я соглашусь, есть разработки, но это опять же, простая логика, единица или ноль, потому что это - машина. Можно создать сложнейшую программу, выдающую результат после сложнейшей аналитики, построить нейронные сети, но все это будет всегда работать лишь с условиями if ... else ... then и с рандомом. Другого не дано. Насколько я знаю, японцам удалось создать биокомпьютер, там какие то клетки выполняли математические вычисления и хранили данные в памяти. Вот это уже ближе, но... Не для простых смертных. Кстати, информация об этом проекте больше не появляется, и много дезинформации в сети, как и в случае с альтернативной энергетикой, как в случае с летающими дисками и т.д. Я, кстати, не просто верил в такие вещи, но и сам ознакомился с патентами Н.Тесла, который первым придумал эти вещи. Изучал его работы. Сам смотал несколько катушек, одна из которых заставила светиться энергосберегающие лампы в соседней квартире, чем вызвала переполох. Общался с ученым из Белоруссии на эту тему, он мне многое рассказал. В частности про всю эту систему работы в научных кругах, про работу ФСБ в России. Жаль, что я сам слабо волоку в электрике, хотя и смогу собрать транзисторный радиоприемник или починить телевизор, но мне не хватает знаний, что бы хотя бы мыслить на их уровне, производить расчеты, ставить эксперименты... Вот выдала моя катушка несколько тысяч вольт от 9-и вольтовой батарейки, это круто, да. Но что это за ток (а это статическое электричество), как его использовать, как преобразовывать? Вот этого я уже не знаю. Кстати про Тесла. Именно он первый заговорил о неком информационном поле, которое должно, по его утверждению, существовать. В игре Stalker упоминается некая биосфера, к которой ученые якобы подключились. И об этом же говорил Тесла. Кроме того, по некоторым данным, именно этим он и занимался в последние годы жизни. Но, мы в силах лишь писать ботов, незначительные програмки, слушать историю, размышлять. Мы не в силах сделать что то значимое, мы не сделаем переворота в науке, так как с детства получаем не те знания (скажем, что человек произошел от обезьяны, см. фильм "Ложь во имя науки"), наши познания в точных науках, скажем физике, ничтожны и не всегда обоснованы (например, принцип магнитной индукции). Мы - всего лишь рабочая масса, которая не должна знать больше положенного. А кто знает, тех ждет тюрьма. Или просто пропадают. Вспомним Болотова, Некрасова, Капанадзе... Первый сел якобы за антикоммунистические идеи, а ведь он из свинца золото делать научился. Второй просто исчез после публикации своей статьи о НЛО в местной газете. А грузина Капанадзе за его безтопливный генератор обязали слить в сеть дезинформацию (в его видео был генератор в стеклянном корпусе, а внутри стояли платы от телевизора), после чего и о нем ни слуху ни духу. Даже если тебе посчастливилось родиться гением и ты создал искуственный интеллект, считай, ты подписал себе смертный приговор. Вот такая она - горькая правда.

П.С. Все вышесказанное - мое ИМХО. Я понимаю, что статья может вызвать бурную дискуссию и полемику из за различия филосовских вглядов, поэтому хочу напомнить, что это тема о боте для игры Drkensang-online и давайте не будем оффтопить.
 

bugaj

Знающий
Сообщения
140
Репутация
11
Фигасе, я уж начал думать, что это копипаста ) Причем тут тесла и ФСБ. Там в конце передачи демонстрируют, как бот научился сам препядствия обходить ) играть в игру наерно легче чем русский язык боту выучить. А чтоб база не пухла нужно сделать ей потолок по размеру и забывать все редко используемое, оставляя вместо него "ощущения" ) Причем я думаю что надо без нейросетей делать, эмулировать паралельную работу нейронов на на однопотоковом (ну или на мало потоковом) процессоре по мойму это бред. Дорогу осилит идущий. Когда я начинал, я и программировать то не умел под винду )
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
По поводу конкретно обхода препятствий - я тут видел волновой алгоритм. Берем его за основу. Движение от точки А до точки Б внутри квадрата, в котором заданы неизвестные боту препятствия. Бот начал движение по прямой, наткнулся на препятствие, запомнил его, пошел дальше, в итоге через какое то время бот составил карту препятствий и теперь будет обходить их. Вот и весь их "крутой" алгоритм, это можно на любом ЯП организовать, только смысл? Лично мне достаточно показать боту траекторию движения и он побежал. А такой алгоритм хорош для слепого робота-пылесоса, который методом тыка определяет размер комнаты и расстановку мебели.
 
Автор
sebun

sebun

Знающий
Сообщения
81
Репутация
5
Использую FastFind 2.2. В процессе работы вылезает такое окно:

fd7e9fa8fc73.jpg


куда деваются координаты left и top, ведь размеры области заданы верно? Вот код:

Код:
Local $WinGame[4] = [460, 175, 1350, 647] ; координаты рабочей области (левый верхний и правый нижний)
   
   FFSetDebugMode(0x01)                                         ; режим отладки
   FFsetWnd($hwnd)                                              ; задано отдельной функцией
   
   While 1
	  
	 $Position=MouseGetPos()
	  
	 $mobColor = FFColorCount(0x881a15, 6, True, $Position[0]-1, $Position[1]-1, $Position[0]+1, $Position[1]+1)
	
	  If $mobColor >0 Then ;если находим хоть один то
		 ToolTip("MOB!", $Position[0]+1, $Position[1]+1)        
	  EndIf
	  
   WEnd
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну чисто следуя из текста ошибки, оно жалуется на превышение области поиска у окна, тогда когда у него область например x1y1x2y2, а ты насильно принуждаешь его искать в x1,y1,x2+3,y2
 
Верх