|
|
  |
Игровой бот Небеса: уникальная игра! |
|
|
dimоn |
10.2.2015, 17:53
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Добрался, наконец-то, все никак руки не доходили... В общем, появилось немного свободного времени, задался вопросом написания бота, самого обычного, для поиска, выноса мобов и разбора... Пошарил поиск, видел несколько незаконченных тем, но решил создать новую, потому что работает немного по другой структуре. Хотелось бы выразить благодарность DarkMaster'у Все-таки, не каждый человек, будет сидеть на каком-то форуме, что бы помочь народу с написанием какой-то, нужной им, лабуды, с целью их умственного развития... Честно скажу, времени ушло много, но в основном это зависело от наличия свободного и в тот или иной момент, желания. Не обошлось и без блок-схемы. Только так смог собрать все посещающие голову мысли в единое целое. (IMG: http://clip2net.com/clip/m359722/2d2fd-clip-82kb.jpg) Итак, значит бот построен по следующей структуре: (IMG: http://clip2net.com/clip/m359722/3c33e-clip-25kb.jpg) Блок поиска и нападения - это все индивидуально, в зависимости от хар-к и направленности. Блок дропа, соответственно, от блока поиска, то есть от задач. Хотелось бы разобрать блок боя. Основными задачами были возможность самостоятельной безконтрольной игры, ну и, конечно же, не засветиться с ботом, то есть, к минимуму свести холостые и однотипные"тыки" ... Исходный код set #h workwindow set workwindow #h :boy while_not (1147, 456 72864) or (1154, 454 778406) while_not 840, 204 936748 wait 2000 if 1190, 474 2249471 goto boy_okonchen end_if end_while if 658, 214 16763649 if (731, 612 16777215 ) or ( 782, 612 16711665 ) if 731, 612 16777215 left 728, 615 wait 1000 + random (2500) set #x 841 + random (210) set #y 263 + random (200) left #x #y goto boy end_if if 782, 612 16711665 left 784, 613 wait 1000 + random (2500) set #x 841 + random (210) set #y 263 + random (200) left #x #y goto boy end_if else if_not (733, 607 15592941) and ( 787, 615 8928750) start_script 2 stop_script end_if end_if else if 989, 616 7484429 wait 1000 left 1007, 616 wait 1000 left 919, 644 wait 1000 else start_script 2 stop_script end_if end_if end_while :boy_okonchen If 1175, 455 92751 left 964, 516 wait 3500 left 788, 515 wait 1500 left 1000, 530 wait 1000 goto boy end_if
start_script 3 pause_script resume_script 0
stop_script На момент написания отдельных элементов стоял образ архангела, поэтому, чтобы не переделывать, в конечной версии осталось так же. Следующей задачей был алгоритм хода, на случай, если ни квадрата, ни креста нет. На самом деле, не придумал ничего проще, чем сходить по подсказке... Исходный код // (межстрочный интервал 10) set #h workwindow set workwindow #h
while_not #x1 > 0 set $l findimage (792, 210 1094, 517 (\image\стрелки\лево.bmp)%lv 2 20 1 5) if ($l > 0) set #x1 %lv[1 1] set #y1 %lv[1 2] set #x2 #x1 + 40 set #y2 #y1 end_if
set $v findimage (792, 210 1094, 517 (\image\стрелки\верх.bmp)%up 2 21 1 5) if ($v > 0) set #x1 %up[1 1] set #y1 %up[1 2] set #x2 #x1 set #y2 #y1 + 40 end_if if_not 840, 204 936748 goto end end_if end_while wait 1000 left #x1 #y1 wait 1000 + random (1500) left #x2 #y2 left #x2 #y2 wait 1500 :end start_script 1 stop_script
лево.bmp ( 3,33 килобайт )
Кол-во скачиваний: 8669
верх.bmp ( 2,27 килобайт )
Кол-во скачиваний: 8300Долго мучался со стрелками, их вращением и считыванием именно той, которой нужно. Так вроде работает. Скрипт_0 - поиск, нападение, 1 - бой, 2 - ход, 3 - дроп, разбор, с него уходим "resume_script 1" Народ, скрипт сырой, если появятся какие-то правки, замечания, изменения, не будьте единоличниками, выкладывайте. Так же, выкладываю все на безвозмездной основе, попытки продать, как бота - это, как минимум свинство и того не стоит. Что не понравилось, с сохранением у пилота, какая-то беда, и в настройках указал, сохранять при выходе: то, писал что-то, возьмет, не сохранит, то возьмет заменит чем-нибудь.. В общем беда. Так же не понравилось и добавило объема - в пилоте, почему то, нет ф-ции отрицания... т.е. есть if_not, while_not, но нет not_and, not_or и пр. а это дополнительные проверки... По крайней мере не нашел ни описания, к ним, ни синтаксиса.
Прикрепленные файлы
бой.txt ( 1,63 килобайт )
Кол-во скачиваний: 45137
ход.txt ( 697 байт )
Кол-во скачиваний: 6792
|
|
|
|
dimоn |
10.2.2015, 18:27
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Цитата(DarkMaster @ 10.2.2015, 18:09)  Код истинность второго выражения при этом должна была бы измениться на противоположность Да, именно про это! Цитата(DarkMaster @ 10.2.2015, 18:09)  Просьба выложить скрипт в виде кода под спойлером. Шанс того, что аттач отвалится намного выше, чем пост умрет.
Сделал.
|
|
|
|
dimоn |
9.4.2015, 17:21
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Тишина, гробовая.. Навязывается вопрос, это вообще кому-нибудь интересно? (IMG: style_emoticons/default/biggrin.gif) Переделал блок хода. Работает, практически без промашек.. Код // межстрочный интервал - к минимуму set #h workwindow set workwindow #h
while_not ((($V > 0) xor ($l > 0)) and (#x1 > 0)) or ($kv > 0) or ($kr > 0) or ($d <= 0)
set $v findimage (792, 210 1094, 517 (\verkh.bmp)%up 2 21 1 5) set $v1 findimage (792, 210 1094, 517 (\verkh1.bmp)%up1 2 20 1 5) set $l findimage (792, 210 1094, 517 (\levo.bmp)%lv 2 21 1 5) set $l1 findimage (792, 210 1094, 517 (\levo1.bmp)%lv1 2 20 1 5)
if ($v > 0) or ($vl > 0) if_not ($l > 0) or ($l1 > 0) if $v >. 0 set #x1 %up[1 1] set #y1 %up[1 2] set #x2 #x1 set #y2 #y1 + 40 else set #x1 %up1[1 1] set #x1 #x1 + 15 set #y1 %up1[1 2] set #x2 #x1 set #y2 #y1 + 40 end_if end_if end_if if ($l > 0) or ($l1 > 0) if_not ($v > 0) or ($v1 > 0) if $l > 0 set #x1 %lv[1 1] set #y1 %lv[1 2] set #x2 #x1 + 40 set #y2 #y1 else set #x1 %lv1[1 1] set #y1 %lv1[1 2] set #y1 #y1 + 15 set #x2 #x1 + 40 set #y2 #y1 end_if end_if end_if set $d findimage (716, 156 920, 330 (\ход.bmp)%p 2 90 1 5) set $kv findimage (598, 548 968, 710 (\квадрат.bmp)%p 2 90 1 5) set $kr findimage (598, 548 968, 710 (\крест.bmp)%p 2 90 1 5) end_while if (#x1 > 0) wait 1000 left #x1 #y1 wait 1000 + random (1500) left #x2 #y2 left #x2 #y2 wait 1500 end_if start_script 1 stop_script основной блок тоже немного видоизменился, но еще оттестирован. Кому интересно, попозже тоже могу выкинуть...
|
|
|
|
dimоn |
10.4.2015, 11:30
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Цитата(dimоn @ 10.4.2015, 11:09)  Почему? Что в ней не так?
А, я понял.. Нет, она не лишняя. Косяк во вращении стрелок. В какой момент скрин их поймает неизвестно, поэтому на проверку сделал по две картинки одного и две другого и условие со строгим или. Так вот, если поймает не тот поиск, то дергать из массивов координаты будет проблемно, большая вероятность холостого тыка, а если вообще не поступят, скрипт может и слететь. То есть потеряет смысл. Или это не к той строчке?
|
|
|
|
dimоn |
16.5.2015, 5:30
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Не знаю, куда написать, тему создавать, смысла, особо, не вижу, если что перенесите месседж... Подскажите, а никак нельзя, к примеру в команде findimage, за один прострел проверить две картинки?
|
|
|
|
dimоn |
24.5.2015, 13:18
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Такой вопрос, на сколько и в какую сторону изменяется точность, при указании типа поиска, в переменной среды path? Или, может не то что-то делаю?
Значит, запускаю на цикл printscreen 1 0 0 0 0 c:\client window.bmp set $v findimage (792, 210 1094, 517 (\verkh.bmp)%up (c:\client window.bmp) 20 1 5) set $l findimage (792, 210 1094, 517 (\levo.bmp)%lv (c:\client window.bmp) 21 1 5) set $g findimage (716, 156 920, 330 (\ход.bmp)%p (c:\client window.bmp) 90 1 5)
с разными показателями значений точности. Совпадений ноль, прострелов из ста. Но простенькую иконку, с ходом, находит без проблем.
|
|
|
|
dimоn |
24.5.2015, 14:17
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Начал разбираться с командами, и в описании к findimege`у Цитата 2.27 Научил 'findimage' искать картинки в перекрытых окнах. ищет не на всем экране, а в конкретном указанном окне. хэндл окна указывается в качестве типа поиска
set #w findwindow (test.bmp) set $a FindImage ( 0 0 1300 1300 (2.bmp) %a workwindow 70 10 15) set $a FindImage ( 0 0 1300 1300 (2.bmp) %a #w 70 10 15) А по сути, это тот же хендл.. Разве нет? В описании к команде printscreen Цитата 2.14 Добавил команду сохранения копии экрана в файл: 'PrintScreen <handle> <x> <y> <width> <height> <path>' Первым параметром указывается хэндл рабочего окна, либо 0 - весь экран. Если 'width' или 'height' =0 то берется максимально возможное значение.
set #x findwindow (Ultima Online - Admin) printscreen #x 0 0 0 0 c:\full client window.jpg
2.15 Добавил в команду printscreen возможность делать копию экрана рабочего окна, при указании в качестве handle единицы:
printscreen 1 0 0 0 0 c:\client window.jpg Как это должно формулироваться по-правильному?
|
|
|
|
dimоn |
24.5.2015, 14:45
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Цитата(DarkMaster @ 24.5.2015, 14:18)  Вы можете пояснить, как адрес в скобках может являться по сути числом от 0 до 4294967294?
Исходя их синтаксиса скринящей команды Код 'PrintScreen <handle> <x> <y> <width> <height> <path>' и примера из истории развития, при указании единицы, в качестве хендла, будет сохранять в переменной среды path, с адресом c:\client window.bmp. Соответственно, что бы выдернуть оттуда полученный скрин, обращаемся к тому же адресу, с указанием его, в качестве хендла для типа поиска, как и в примере с хендлом, в истории развития имеджа.
|
|
|
|
dimоn |
24.5.2015, 16:25
|

  
Novice
Сообщений: 97
Регистрация: 24.10.2014 Группа: Пользователи Наличность: 0
Пользователь №: 17.079
Возраст: 27

|
Цитата(DarkMaster @ 24.5.2015, 14:18)  Что именно? Вы хотите искать в изображении на винте? Никак, только загружать в какую-то формочку на экране и и его искать уже с экрана.
И я, к бабке не ходи, предположил бы так же, НО... факты-то говорят обратное (IMG: http://c2n.me/3ibsKma.png)
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|