Здравствуйте, гость ( Вход | Регистрация )

9 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Игровой бот Небеса: уникальная игра!
dimоn
сообщение 10.2.2015, 17:53
Сообщение #1


***

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 килобайт ) Кол-во скачиваний: 8414
Прикрепленный файл  верх.bmp ( 2,27 килобайт ) Кол-во скачиваний: 8071


Долго мучался со стрелками, их вращением и считыванием именно той, которой нужно.
Так вроде работает.
Скрипт_0 - поиск, нападение, 1 - бой, 2 - ход, 3 - дроп, разбор, с него уходим "resume_script 1"

Народ, скрипт сырой, если появятся какие-то правки, замечания, изменения, не будьте единоличниками, выкладывайте.

Так же, выкладываю все на безвозмездной основе, попытки продать, как бота - это, как минимум свинство и того не стоит.

Что не понравилось, с сохранением у пилота, какая-то беда, и в настройках указал, сохранять при выходе: то, писал что-то, возьмет, не сохранит, то возьмет заменит чем-нибудь.. В общем беда.
Так же не понравилось и добавило объема - в пилоте, почему то, нет ф-ции отрицания... т.е. есть if_not, while_not, но нет not_and, not_or и пр. а это дополнительные проверки...
По крайней мере не нашел ни описания, к ним, ни синтаксиса.


Прикрепленные файлы
Прикрепленный файл  бой.txt ( 1,63 килобайт ) Кол-во скачиваний: 28362
Прикрепленный файл  ход.txt ( 697 байт ) Кол-во скачиваний: 6353
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 10.2.2015, 18:09
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
not_and, not_or и пр. а это дополнительные проверки...

это я так понимаю подразумевается отрицание условия? В нормальном виде это должно было бы выглядеть примерно так:
Код
if (1 > 2) and !(3 > 4)

истинность второго выражения при этом должна была бы измениться на противоположность, в пилоте этого действительно не хватает.

Просьба выложить скрипт в виде кода под спойлером. Шанс того, что аттач отвалится намного выше, чем пост умрет.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 10.2.2015, 18:27
Сообщение #3


***

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



Цитата(DarkMaster @ 10.2.2015, 18:09) *


Код
 !(3 > 4)

истинность второго выражения при этом должна была бы измениться на противоположность


Да, именно про это!

Цитата(DarkMaster @ 10.2.2015, 18:09) *

Просьба выложить скрипт в виде кода под спойлером. Шанс того, что аттач отвалится намного выше, чем пост умрет.

Сделал.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 9.4.2015, 17:21
Сообщение #4


***

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


основной блок тоже немного видоизменился, но еще оттестирован. Кому интересно, попозже тоже могу выкинуть...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.4.2015, 2:45
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Навязывается вопрос, это вообще кому-нибудь интересно?

Может кому-то и пригодится когда-нибудь.
Цитата
if $v >. 0

Точка явно лишняя.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 10.4.2015, 8:01
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Навязывается вопрос, это вообще кому-нибудь интересно?

Пилот скачивают сотни тысяч раз. Сколько людей при этом пишет? На форуме достаточно много людей, которые просто читают и берут необходимый код. Я сам так года два сидел. По небесам и лички мне прилетали. Так что кому-то точно было нужно (IMG:style_emoticons/default/smile.gif)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 10.4.2015, 11:09
Сообщение #7


***

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



Цитата(cirus @ 10.4.2015, 2:45) *

Точка явно лишняя.

Почему? Что в ней не так?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 10.4.2015, 11:30
Сообщение #8


***

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



Цитата(dimоn @ 10.4.2015, 11:09) *

Почему? Что в ней не так?


А, я понял..

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

Или это не к той строчке?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.4.2015, 12:03
Сообщение #9


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Так смысл точки в условии в чём?
Код
if $v >. 0
if $v > 0     //так не будет работать что ли?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 16.5.2015, 5:30
Сообщение #10


***

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



Не знаю, куда написать, тему создавать, смысла, особо, не вижу, если что перенесите месседж...
Подскажите, а никак нельзя, к примеру в команде findimage, за один прострел проверить две картинки?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.5.2015, 11:35
Сообщение #11


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Подскажите, а никак нельзя, к примеру в команде findimage, за один прострел проверить две картинки?

Нельзя.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 16.5.2015, 16:24
Сообщение #12


***

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



Ок, а если сделать скрин и его стрельнуть два раза, на порядок уйдет больше времени? Или так же?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 16.5.2015, 16:30
Сообщение #13


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



столько же + время на скрин.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 24.5.2015, 13:18
Сообщение #14


***

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)

с разными показателями значений точности. Совпадений ноль, прострелов из ста.
Но простенькую иконку, с ходом, находит без проблем.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.5.2015, 13:58
Сообщение #15


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Откуда в коде два адреса? Откуда после массива адрес взялся?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 24.5.2015, 14:17
Сообщение #16


***

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


Как это должно формулироваться по-правильному?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.5.2015, 14:18
Сообщение #17


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
А по сути, это тот же хендл.. Разве нет?

Вы можете пояснить, как адрес в скобках может являться по сути числом от 0 до 4294967294?

Цитата
А как это должно формулироваться по-правильному?

Что именно? Вы хотите искать в изображении на винте? Никак, только загружать в какую-то формочку на экране и и его искать уже с экрана.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 24.5.2015, 14:45
Сообщение #18


***

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.
Соответственно, что бы выдернуть оттуда полученный скрин, обращаемся к тому же адресу, с указанием его, в качестве хендла для типа поиска, как и в примере с хендлом, в истории развития имеджа.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dimоn
сообщение 24.5.2015, 16:25
Сообщение #19


***

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



Цитата(DarkMaster @ 24.5.2015, 14:18) *

Что именно? Вы хотите искать в изображении на винте? Никак, только загружать в какую-то формочку на экране и и его искать уже с экрана.


И я, к бабке не ходи, предположил бы так же, НО...
факты-то говорят обратное

(IMG:http://c2n.me/3ibsKma.png)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.5.2015, 16:26
Сообщение #20


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Исходя их синтаксиса скринящей команды

Исходя из синтаксиса там написано "handle". Адрес не является хендлом в принципе. Это разные понятия.
Цитата
и примера из истории развития, при указании единицы, в качестве хендла

Хенд там указывается в виде хендла, и никак адресом не заменяется.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

9 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 0:08
Designed by Nickostyle