Помощь - Поиск - Пользователи - Календарь
Полная версия: Игровой бот Небеса: уникальная игра!
UoKit.com Форумы > Кликер > UO Pilot > UO Pilot в онлайн играх
Страницы: 1, 2, 3, 4
dimоn
Добрался, наконец-то, все никак руки не доходили...
В общем, появилось немного свободного времени, задался вопросом написания бота, самого обычного, для поиска, выноса мобов и разбора...
Пошарил поиск, видел несколько незаконченных тем, но решил создать новую, потому что работает немного по другой структуре.
Хотелось бы выразить благодарность DarkMaster'у Все-таки, не каждый человек, будет сидеть на каком-то форуме, что бы помочь народу с написанием какой-то, нужной им, лабуды, с целью их умственного развития...
Честно скажу, времени ушло много, но в основном это зависело от наличия свободного и в тот или иной момент, желания.

Не обошлось и без блок-схемы.
Только так смог собрать все посещающие голову мысли в единое целое.

Изображение

Итак, значит бот построен по следующей структуре:


Изображение

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

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

Исходный код
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


Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла

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

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

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

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

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

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

Просьба выложить скрипт в виде кода под спойлером. Шанс того, что аттач отвалится намного выше, чем пост умрет.
dimоn
Цитата(DarkMaster @ 10.2.2015, 18:09) *


Код
 !(3 > 4)

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


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

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

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

Сделал.
dimоn
Тишина, гробовая.. Навязывается вопрос, это вообще кому-нибудь интересно? 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


основной блок тоже немного видоизменился, но еще оттестирован. Кому интересно, попозже тоже могу выкинуть...
cirus
Цитата
Навязывается вопрос, это вообще кому-нибудь интересно?

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

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

Пилот скачивают сотни тысяч раз. Сколько людей при этом пишет? На форуме достаточно много людей, которые просто читают и берут необходимый код. Я сам так года два сидел. По небесам и лички мне прилетали. Так что кому-то точно было нужно smile.gif
dimоn
Цитата(cirus @ 10.4.2015, 2:45) *

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

Почему? Что в ней не так?
dimоn
Цитата(dimоn @ 10.4.2015, 11:09) *

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


А, я понял..

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

Или это не к той строчке?
cirus
Так смысл точки в условии в чём?
Код
if $v >. 0
if $v > 0     //так не будет работать что ли?
dimоn
Не знаю, куда написать, тему создавать, смысла, особо, не вижу, если что перенесите месседж...
Подскажите, а никак нельзя, к примеру в команде findimage, за один прострел проверить две картинки?
cirus
Цитата
Подскажите, а никак нельзя, к примеру в команде findimage, за один прострел проверить две картинки?

Нельзя.
dimоn
Ок, а если сделать скрин и его стрельнуть два раза, на порядок уйдет больше времени? Или так же?
DarkMaster
столько же + время на скрин.
dimоn
Такой вопрос, на сколько и в какую сторону изменяется точность, при указании типа поиска, в переменной среды 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)

с разными показателями значений точности. Совпадений ноль, прострелов из ста.
Но простенькую иконку, с ходом, находит без проблем.
DarkMaster
Откуда в коде два адреса? Откуда после массива адрес взялся?
dimоn
Начал разбираться с командами, и в описании к 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


Как это должно формулироваться по-правильному?
DarkMaster
Цитата
А по сути, это тот же хендл.. Разве нет?

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

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

Что именно? Вы хотите искать в изображении на винте? Никак, только загружать в какую-то формочку на экране и и его искать уже с экрана.
dimоn
Цитата(DarkMaster @ 24.5.2015, 14:18) *

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

Исходя их синтаксиса скринящей команды
Код
'PrintScreen <handle> <x> <y> <width> <height> <path>'

и примера из истории развития, при указании единицы, в качестве хендла, будет сохранять в переменной среды path, с адресом c:\client window.bmp.
Соответственно, что бы выдернуть оттуда полученный скрин, обращаемся к тому же адресу, с указанием его, в качестве хендла для типа поиска, как и в примере с хендлом, в истории развития имеджа.
dimоn
Цитата(DarkMaster @ 24.5.2015, 14:18) *

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


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

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

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

Хенд там указывается в виде хендла, и никак адресом не заменяется.
dimоn
Цитата(DarkMaster @ 24.5.2015, 16:26) *
Цитата
Исходя их синтаксиса скринящей команды
Исходя из синтаксиса там написано "handle". Адрес не является хендлом в принципе. Это разные понятия.

В том то все и дело, что нет.. в случае с ком. printscreen, про сохранение в описании как раз-таки ничего не сказано, описан лишь тег <path> и пример, при чем, в адресе есть пробел - учитывая синтаксис остальных ком. программы, есть основания предположить, что это два параметра.

Вот здесь то я и встал. Отправившись нагуглить очередную справку, вот что нарыл
Цитата
PATH является переменной среды и представляет собой список папок, который используется операционной системой для поиска исполняемых файлов (*.EXE). На практике, если папка добавлена в PATH, исполняемые файлы можно запускать из командной строки без указания полного пути к ним.

Команда PATH
Эта команда добавляет указанные папки в PATH, но изменения действительны только в течении текущей командной сессии (т. е. если вы выполняете эту команду из пакетного файла, добавленные папки будут находиться в PATH только на протяжении его работы).

что позволяет утверждать о истинности версии сохранения в переменной среде.

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

Опять же, спорно...
Цитата
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)

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

И не стал бы я сейчас так распинаться, если бы не факты.. еще раз сакцентирую на том, что простенькую иконку хода он все-таки находит, при чем без проблем и ошибок...
Отсюда и такие предположения. В первый раз, с отладкой точности определения картинки, в связи со сходством, на всей поверхности, только лишь стрелки, я же тоже намучался...
DarkMaster
Цитата
Цитата
Хенд там указывается в виде хендла, и никак адресом не заменяется.

Опять же, спорно...
Цитата
set #w findwindow (test.bmp)
set $a FindImage ( 0 0 1300 1300 (2.bmp) %a workwindow 70 10 15)

Я цитирую кусок про принтскрин и пишу про него, вы же это приплетаете к финдимиджу. Принтскрин и финдимидж это разные вещи и если что-то говорят про одной, это не значит что и про второе тоже.
Цитата
Команда PATH
Эта команда добавляет указанные папки в PATH

Причем тут cmd? Пилот с cmd не связан никак. Для него это просто внешняя программа, такая же, как, например, линейка или вов.
path - это путь. Это не великое уникальное определение определение. То, что в майкрософте так назвали переменную (в переводе "путь"), не делает это слово запретным на весь мир, кроме как в определении этой переменной.
https://translate.google.at/?ie=UTF-8&h...w-ob#en/ru/path
Цитата
<path> и пример, при чем, в адресе есть пробел - учитывая синтаксис остальных ком. программы, есть основания предположить, что это два параметра.

путь и хендл это и есть два разных параметра.
dimоn
Ладно, спорить можно было бы бесконечно duel.gif , но есть победа!!!!! russia.gif

ИзображениеИзображение

И все-таки, не без усилий, я оказался прав!

Хватает на таких параметрах. Один косяк - туго. Надо опускать точность. Разобраться бы теперь как.. laugh.gif
dimоn
Цитата(DarkMaster @ 24.5.2015, 18:59) *

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

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

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

Это не более чем схожие либо связанные по смыслу/применению вещи. Там и ссылка на википедию могла быть smile.gif
В данном случае подразумевалась связь: работа с экраном, подготовка скринов для дальнейшей работы в финдимидже.
Цитата
И все-таки, не без усилий, я оказался прав!

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

А учитывая одной из строк точность 20 а девиэйшином 5, то туда можно почти что угодно засунуть и получить положительный результат.

и причем тут измнение workwindow? Это переменная, которая содержит в себе хендл к которому привязан пилот. Вообще не понятно почему он изменяется.
dimоn
На самом деле, тоже не удивлюсь, если это просто совпадение, уже писал, что по логике, предположил бы точно так же.
Но факт остается фактом)))-

Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла


А это достаточно высокие показатели, по сравнению, с предыдущими вариантами)))
dimоn
Да и фиг бы с ними, с показателями, так, для общего развития.. мозгами тоже иногда пошевелить полезно)))))))
DarkMaster
В частности вы нашли три изображения "verkh". У вас три верха?
workwindow не должен меняться. Это уже не корректная работа. У вас каждый раз меняется окно привязки. При этом отваливается нормальная работа if'ов, кликов, нажатий и т.д.
WKnight
А чего там вообще workwindow в логе делает?
dimоn
Цитата(DarkMaster @ 24.5.2015, 23:00) *

В частности вы нашли три изображения "verkh". У вас три верха?
workwindow не должен меняться. Это уже не корректная работа. У вас каждый раз меняется окно привязки. При этом отваливается нормальная работа if'ов, кликов, нажатий и т.д.

Это тестовые прострелы. Я же сразу пояснил, что загоняю в цикл только эти команды, что бы была возможность проверить работоспособность.. предыдущих вариантах, приходилось бороться с вращением и если одну стрелку схватило, следующая команда, могла поймать ее же, но уже в другом положении, соответственно, дает ненулевой процент на обоих, а это уже сбой.
В данном варианте отпадает необходимость сложных замороченных условий, учитывающих время, за которое стрелка уже два раза могла повернуться))))
И видно, уже нет такого размытого значения, как совпадение на обоих положениях, при чем раньше давало, к примеру, 21% на одном и 16% на другом...
четко дает ноль на вращении, когда принимает начальное положение, так же дает совпадения, довольно отчетливо, в среднем 75-85% противоположное направление, не проскакивает, даже малым процентом)))

Цитата(WKnight @ 25.5.2015, 11:03) *

А чего там вообще workwindow в логе делает?

Не понял вопроса

Цитата(DarkMaster @ 24.5.2015, 23:00) *

workwindow не должен меняться.

Как же не должен? Присувтствует вращение, есть же разница, в каком положепнии поймает стрелки...
veiron
А зачем ждать подсказки игры и искать ход по стрелкам. В этой ТЕМЕ есть почти готовый скрипт. Его нужно или полностью доделать или взять кусок скрипта, прикрутить ифы и будет собирать все имеющиеся ходы, а ты уже сам выберешь что тебе нужно, черепа или ХП или другое.
DarkMaster
Цитата
Как же не должен? Присувтствует вращение, есть же разница, в каком положепнии поймает стрелки...

Ворквиндов - это номер окна. Это не процент совпадения, к точности тоже отношения не имеет. Когда вы нажимаете ctrl+a вы этим задаете именно workwindow. Поэтому совершенно не понятно, что он тут делает и почему изменяется. Это не нормально.
dimоn
Цитата(veiron @ 25.5.2015, 17:49) *

А зачем ждать подсказки игры и искать ход по стрелкам. В этой ТЕМЕ есть почти готовый скрипт. Его нужно или полностью доделать или взять кусок скрипта, прикрутить ифы и будет собирать все имеющиеся ходы, а ты уже сам выберешь что тебе нужно, черепа или ХП или другое.

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


Цитата(DarkMaster @ 25.5.2015, 18:54) *

Ворквиндов - это номер окна. Это не процент совпадения, к точности тоже отношения не имеет. Когда вы нажимаете ctrl+a вы этим задаете именно workwindow. Поэтому совершенно не понятно, что он тут делает и почему изменяется. Это не нормально.

Я не знаю, может это версия клиента, может настройки, ворквиндов - он выдает результат работы команды. Опять же, писал, что бы оттестировать, загнал на цикл, вайл, четыре строчки
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)
и по логу смотрю, как они работают.
После строки самой команды, он мне выдает результат ее работы.
veiron
Цитата(dimоn @ 25.5.2015, 21:46) *

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

Да, я почитал тему.
Вот у тебя выложен скрипт боя:
Код
        if 989, 616 7484429 
                  wait 1000        
                 left 1007, 616      
                 wait 1000
                 left 919, 644
                 wait 1000
         else
                 start_script 2
                 stop_script  
         end_if

Клики в одну точку в этой игре это палево 100%, уже проверено не на одном акке.
Вот ты пишешь что не нужны подсказки, а сам ход определяешь по стрелкам подсказки хода в игре. Это не палево, но полностью отсувствует выбор хода, то что тебе игра подсказала, то ты и нажимаешь.
Тогда уже проще сделать бой с использованием вина и снега, а не выбором хода.
И зачем такие бешенные задержки wait 1000 + random (2500) или wait 3500
dimоn
Цитата(veiron @ 25.5.2015, 23:32) *

Да, я почитал тему.
Вот у тебя выложен скрипт боя:
Код
        if 989, 616 7484429 
                  wait 1000        
                 left 1007, 616      
                 wait 1000
                 left 919, 644
                 wait 1000
         else
                 start_script 2
                 stop_script  
         end_if

Клики в одну точку в этой игре это палево 100%, уже проверено не на одном акке.
Ты понял, что это за клик и в каких случаях он кликает?

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

Цитата
Тогда уже проще сделать бой с использованием вина и снега, а не выбором хода.
В чем же тогда проблема? Где его можно посмотреть???

Цитата
И зачем такие бешенные задержки wait 1000 + random (2500) или wait 3500
Цитата(dimоn @ 10.2.2015, 17:53) *
Народ, скрипт сырой, если появятся какие-то правки, замечания, изменения, не будьте единоличниками, выкладывайте.
veiron
Цитата(dimоn @ 26.5.2015, 3:40) *

В чем же тогда проблема? Где его можно посмотреть???

Самому написать, это не выбор хода, тут все просто. Делай метку
Цитата

:бой
while 1 = 1
if 234 234 674445 // снег 1
gosub снег 1
end_if
if 270 234 457657567 // снег 2
gosub снег 2
end_if
if 657 876 76464564 // бой завершен
goto start
end_if
end_while

:снег 1
.....
return

:снег 2
.....
return

так же и вино добавляешь.
dimоn
Я понят твою мысль, уж эти моменты, действительно, сами пропишут, кому надо.

Но бой состоит не из одного хода. И рюкзак не резиновый, не положешь больше отведенного. А если еще и удача позволяет, кроме квадрата с крестом, вариантов хода не предусмотрено. Как объяснить ему, что надо собрать 3 одинаковых эмблемы? Забивать в массив считанное поле и дальше обрабатывать? На это уйдет очень много времени, да и "овчинка, выделки не стоит"...
На данном этапе, это самое простое, что смог придумать.
veiron
Цитата(dimоn @ 29.5.2015, 3:33) *

Но бой состоит не из одного хода.

У меня просто статы позволяют обходиться с одним ходом.
Цитата(dimоn @ 29.5.2015, 3:33) *

Как объяснить ему, что надо собрать 3 одинаковых эмблемы? Забивать в массив считанное поле и дальше обрабатывать? На это уйдет очень много времени, да и "овчинка, выделки не стоит"...

Вот потому я и говорил что в другой теме есть уже почти готовый скрипт. Там только его дописать нужно. Или взять первую часть кода где все цвета собираются в массив и сделать на ифах. Даже с ифами он работает довольно быстро. И ты получаешь возможность выбирать нужный тебе ход, а не один самый первый ход который предлагает сервер.
dimоn
Цитата(veiron @ 29.5.2015, 10:20) *

У меня просто статы позволяют обходиться с одним ходом.

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


Опять же, это не турнир, это просто бой, если есть доп.мана, основные ходы крестом и квадратом. Если позволяет удача, приходится дохаживать, пофиг чем, лишь бы сходил. Так что, все равно, я не вижу смысла в данном действе.. То есть, проделать такую огромную работу, по описыванию и обработке игрового поля, как массива, тем более на ифах...

Но этот уже, по желанию, если оно есть, почему бы и нет?..
dimоn
Было дело, DarkMaster посоветовал проверить скрипты на наличие статичных координат в координатах найденных объектов. И он оказался прав. Клики были не статичными, но близкими к этому. Т.е. значения отличались на несколько пикселей.

Последния версия скрипта по поиску хода, выглядит так:
Код
set #h workwindow     
set workwindow #h  

  while_not ((((($V > 0) or ($v1 > 0)) xor (($l > 0)) or ($l1 > 0))) and (#x1 > 0)) or  ($kv > 0) or ($kr > 0) or ($d <= 0) or ($g = 0)  
  
printscreen 1 0 0 0 0 c:\client window.bmp
set $v findimage (792, 210 1094, 517 (\verkh.bmp)%up (c:\client window.bmp) 80 30 5)
set $l findimage (792, 210 1094, 517 (\levo.bmp)%lv (c:\client window.bmp) 80 30 5)
set $g findimage (716, 156 920, 330 (\ход.bmp)%p (c:\client window.bmp) 90 1 5)

  if ($v > 0)  
   if_not ($l > 0)  
     if $v > 0
   set #x1 %up[1 1] + random (25)
   set #y1 %up[1 2] + random (25)
   set #x2 %up[1 1] + random (25)
   set #y2 %up[1 2] + 40 + random (25)
     end_if
   end_if
  end_if  
  

  if ($l > 0)
   if_not ($v > 0)
      if $l > 0
   set #x1 %lv[1 1] + random (25)
   set #y1 %lv[1 2] + random (25)
   set #x2 %lv[1 1] + 40 + random (25)
   set #y2 %lv[1 2] + random (25)
      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
DarkMaster
Я надеюсь возвращением к этой теме стал не бан?
dimоn
Нет, по крайней мере у меня все норм.
Хотя, не у всех все так сладко...
Написал тут один, попросил ему помочь со скриптом. объяснил, что полный ноль. Закончилось все, неуспев начаться, как-то так.


учитывая, что он гонял скрипты, типа




рискну предположить, что не удивительно)))


На самом деле, банька, это хорошо, но только когда с веником biggrin.gif
дожидаться я не стал и после последнего разговора, задался целью все-таки проверить эту теорию.
И не зря. В глаза это все не бросается, но при малейшем изучении, даже человек, мало знакомый с компьютерной техникой, особо не напрягая мозг поймет, что если отвести мышку и поставить ее на тоже место, шанс кликнуть в тот же пиксель или хотя бы ближний к нему, так или иначе сводится к нулю.
guetajazz
Тема близка и интересна))) Сам играю и часто пользуюсь пилотом. Но,т.к. я чайник,то и скрипты соответствующие у меня) Было бы хорошо,если бы автор указывал,что именно делает пилот при той или иной команде. Использую пилот для арены,куча лишних тыков,клики в одну и ту же область от не знания большинства команд. Вот пример скрипта- В чем мои косяки ? подскажите


Код

___________________________________________________________________________
// проверка на наличие сундука в луте //

set $boss10 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\сундук2.bmp) %mob 2 50 1)
if $boss10 > 0
wait 300
left 875, 447
wait 1200
left 939, 462  
wait 1200
end_if

// собираем или продаем лут //
set $boss4 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\лоскут.bmp) %mob 2 50 1)
set $boss5 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\развед.bmp) %mob 2 50 1)
set $boss6 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\страж.bmp) %mob 2 50 1)
set $boss44 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец1.bmp) %mob 2 50 1)
set $boss55 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец2.bmp) %mob 2 50 1)
set $boss66 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец3.bmp) %mob 2 50 1)
set $boss77 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец4.bmp) %mob 2 50 1)
set $boss88 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец5.bmp) %mob 2 50 1)
set $boss99 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец6.bmp) %mob 2 50 1)
if $boss4 > 0 or $boss5 > 0 or $boss6 > 0 or $boss44 > 0 or $boss55 > 0 or $boss66 > 0 or $boss77 > 0 or $boss88 > 0 or $boss99 > 0
wait 300
left 875, 447
wait 1200
left 957, 447
left 957, 449
wait 1200
else
left 912, 516
wait 200
left 972, 496
wait 200
left 1254, 521  
end_if

// бьем моба //
set $boss4 findimage (829, 180 902, 235 (C:\Users\123\Desktop\12\я.bmp) %mob 2 50 1)   // бьем моба //
if $boss4 > 0
wait 400
left 694, 662
wait 200
left 1005, 621  
wait 300
left 689, 666
wait 300
left 797, 613
wait 300
left 907, 349
wait 300
left 687, 610
wait 200
left 763, 615
wait 200
left 940, 376
wait 2s
end_if
left 1222, 551
DarkMaster
Первое в чем косяки - это читаемость скрипта:
1) Все переменные с поиском названы boss.
2) Отсутствие отступов внутри условий/циклов, например:
Код
if 1 < 2
    log один
    log меньше
    log двух
end_if

3) Используйте тег code на форуме.

Теперь по коду:
Цитата
%mob 2 50 1)

Очень низкий процент точности. Меньше 80, в крайнем случае 70 я бы не рекомендовал опускать. Возможно стоит задать deviation 1-3, чтобы избежать проблем с точностью определения изображения.

Цитата
set $boss4 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\лоскут.bmp) %mob 2 50 1)
set $boss5 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\развед.bmp) %mob 2 50 1)
set $boss6 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\страж.bmp) %mob 2 50 1)
set $boss44 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец1.bmp) %mob 2 50 1)
set $boss55 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец2.bmp) %mob 2 50 1)
set $boss66 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец3.bmp) %mob 2 50 1)
set $boss77 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец4.bmp) %mob 2 50 1)
set $boss88 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец5.bmp) %mob 2 50 1)
set $boss99 findimage (850, 420 907, 481 (C:\Users\123\Desktop\12\рец6.bmp) %mob 2 50 1)

Все рисунки внести в шапку скрипта в массив. Все эти строки свернуть в for.

Все wait'ы выкинуть заменив на:
while_not x y color // ну либо на while, смотря что детектить.
wait 10
end_while

В шапку поместить задержку между строк равной нулю:
Код
set linedelay 0


Тело скрипта выполнять в блоке:
Код
:start
тело
goto start



Главное не используйте goto кроме как в описании выше.
Из проблемных мест - wait в том виде, как они у вас. Первый лаг и будет сбой.

По придиркам:
Все координаты настоятельно рекомендую выносить в шапку и давать им подробные комментарии. Если придется что-то править, то вы одуреете потом.
dimоn
Цитата(guetajazz @ 28.6.2015, 21:40) *

Было бы хорошо,если бы автор указывал,что именно делает пилот при той или иной команде.


Что именно не понятно?
Все или конкретный кусок?

По скриптам, есть мнение, на мой взгляд довольно правдивое, что статичные клики, сервер без проблем расценит, как работу сторонней программы.
То есть, если поставить курсор в произвольную точку, при нажатии на ктрл+а, программа выдаст текущую позицию.
А теперь отведи мышку и поставь на то же место. Какова вероятность того, что при нажатии на ктрл+а, курсор будет находиться на том же пикселе?
В общем координаты клика постоянно должны отличаться.
При чем, недавно проверили, поиск по картинкам тоже дает координаты, близкие к статичным.


Цитата(DarkMaster @ 28.6.2015, 22:40) *
Все wait'ы выкинуть заменив на:
while_not x y color // ну либо на while, смотря что детектить.
wait 10
end_while


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

Цитата
Все координаты настоятельно рекомендую выносить в шапку и давать им подробные комментарии. Если придется что-то править, то вы одуреете потом.


Вот это, в точку!!!
dimоn
Цитата(guetajazz @ 28.6.2015, 21:40) *

Использую пилот для арены,куча лишних тыков,клики в одну и ту же область от не знания большинства команд. Вот пример скрипта- В чем мои косяки ? подскажите
Код

___________________________________________________________________________

// бьем моба //
set $boss4 findimage (829, 180 902, 235 (C:\Users\123\Desktop\12\я.bmp) %mob 2 50 1)   // бьем моба //



Вот эта команда что делает??

Куча холостых тыков происходит от того, что весь скрипт, по большому счету, это серия кликов, идущих один за другим, без каких-либо условий и ограничений.
То есть, пилот не видит, что происходит на игровом поле, а серия тыков прописана.
Код
if $boss4 > 0
wait 400
left 694, 662
wait 200
left 1005, 621  
wait 300
left 689, 666
wait 300
left 797, 613
wait 300
left 907, 349
wait 300
left 687, 610
wait 200
left 763, 615
wait 200
left 940, 376
wait 2s
end_if
left 1222, 551
guetajazz
В общем- да! Я и не спорю. Сказал об этом сразу,что скрипт на цикле кликов. От того и *тормоза * видимо. Но,хочу сказать СПАСИБО всем откликнувшимся,учту ваши замечания,буду расти над собой.)) Для меня это дремучий лес,нет времени вникать,от того и обратился за помощью

[quote name='dimоn' date='29.6.2015, 22:59' post='214277']
Вот эта команда что делает??

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


Это кусок из старого скрипта видимо)) В этом и заключается суть проблемы,что не знаю как заставить пилот *видеть*. Буду пытаться что-то слепить при помощи ваших примеров,рекомендаций и гугла ))
dimоn
Основные команды, которые для этого могут подойти, это findimage - поиск по картинке, команды условных циклов - while/while_not и условия - if then else

Главное, на самом деле, понимать принцип действия и научиться их применять, а синтаксис, это все второстепенное.

Что не понятно, пиши.
DarkMaster
Цитата
Не вопрос, это быстро, просто, понятно, но не практично и не эффективно.
Со временем перестает работать. При чем, по-разому, может через день, через неделю, а может и через час.

С какого перепугу? Это очень практично и очень эффективно. Подобные конструкции за 8 лет у меня не отвалились ни разу.
Цитата
Все поиски, по максимуму, лучше всего реализовать поиском по картинкам. имхо.

Это не поиск, а ожидание. Делать ожидание на финдимидже? Это даже для меня какой-то нереальный перебор.
Цитата
Сказал об этом сразу,что скрипт на цикле кликов. От того и *тормоза * видимо.

Неа. Клики мгновенные, тормоза от wait'ов. Решается по схеме выше через while.
Цитата
if then else

А вот then в пилоте не пишется и это правильно smile.gif
dimоn
Я, наверное, что-то не так понял..
Можно поподробнее?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.