Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ Игровой бот Небеса: уникальная игра!

Автор: dimоn 10.2.2015, 17:53

Добрался, наконец-то, все никак руки не доходили...
В общем, появилось немного свободного времени, задался вопросом написания бота, самого обычного, для поиска, выноса мобов и разбора...
Пошарил поиск, видел несколько незаконченных тем, но решил создать новую, потому что работает немного по другой структуре.
Хотелось бы выразить благодарность 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


Прикрепленный файл  лево.bmp ( 3,33 килобайт ) Кол-во скачиваний: 8416
Прикрепленный файл  верх.bmp ( 2,27 килобайт ) Кол-во скачиваний: 8073


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

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

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

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


Прикрепленные файлы
Прикрепленный файл  бой.txt ( 1,63 килобайт ) Кол-во скачиваний: 29894
Прикрепленный файл  ход.txt ( 697 байт ) Кол-во скачиваний: 6363

Автор: DarkMaster 10.2.2015, 18:09

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

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

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

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

Автор: dimоn 10.2.2015, 18:27

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


Код
 !(3 > 4)

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


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

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

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

Сделал.

Автор: dimоn 9.4.2015, 17:21

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

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

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

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

Автор: DarkMaster 10.4.2015, 8:01

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

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

Автор: dimоn 10.4.2015, 11:09

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

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

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

Автор: dimоn 10.4.2015, 11:30

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

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


А, я понял..

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

Или это не к той строчке?

Автор: cirus 10.4.2015, 12:03

Так смысл точки в условии в чём?

Код
if $v >. 0
if $v > 0     //так не будет работать что ли?

Автор: dimоn 16.5.2015, 5:30

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

Автор: cirus 16.5.2015, 11:35

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

Нельзя.

Автор: dimоn 16.5.2015, 16:24

Ок, а если сделать скрин и его стрельнуть два раза, на порядок уйдет больше времени? Или так же?

Автор: DarkMaster 16.5.2015, 16:30

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

Автор: dimоn 24.5.2015, 13:18

Такой вопрос, на сколько и в какую сторону изменяется точность, при указании типа поиска, в переменной среды 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 24.5.2015, 13:58

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

Автор: dimоn 24.5.2015, 14:17

Начал разбираться с командами, и в описании к 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 24.5.2015, 14:18

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

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

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

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

Автор: dimоn 24.5.2015, 14:45

Цитата(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

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

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


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

Изображение

Автор: DarkMaster 24.5.2015, 16:26

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

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

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

Автор: dimоn 24.5.2015, 18:19

Цитата(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 24.5.2015, 18:59

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

Опять же, спорно...
Цитата
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&hl=ru&client=tw-ob#en/ru/path
Цитата
<path> и пример, при чем, в адресе есть пробел - учитывая синтаксис остальных ком. программы, есть основания предположить, что это два параметра.

путь и хендл это и есть два разных параметра.

Автор: dimоn 24.5.2015, 19:14

Ладно, спорить можно было бы бесконечно duel.gif , но есть победа!!!!! russia.gif

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

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

Хватает на таких параметрах. Один косяк - туго. Надо опускать точность. Разобраться бы теперь как.. laugh.gif

Автор: dimоn 24.5.2015, 21:42

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

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

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

Изображение

Автор: DarkMaster 24.5.2015, 22:10

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

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

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

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

и причем тут измнение workwindow? Это переменная, которая содержит в себе хендл к которому привязан пилот. Вообще не понятно почему он изменяется.

Автор: dimоn 24.5.2015, 22:39

На самом деле, тоже не удивлюсь, если это просто совпадение, уже писал, что по логике, предположил бы точно так же.
Но факт остается фактом)))-

Прикрепленное изображениеПрикрепленное изображение


А это достаточно высокие показатели, по сравнению, с предыдущими вариантами)))

Автор: dimоn 24.5.2015, 22:50

Да и фиг бы с ними, с показателями, так, для общего развития.. мозгами тоже иногда пошевелить полезно)))))))

Автор: DarkMaster 24.5.2015, 23:00

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

Автор: WKnight 25.5.2015, 11:03

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

Автор: dimоn 25.5.2015, 14:31

Цитата(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 25.5.2015, 17:49

А зачем ждать подсказки игры и искать ход по стрелкам. В этой https://forum.uokit.com/index.php?showtopic=26456 есть почти готовый скрипт. Его нужно или полностью доделать или взять кусок скрипта, прикрутить ифы и будет собирать все имеющиеся ходы, а ты уже сам выберешь что тебе нужно, черепа или ХП или другое.

Автор: DarkMaster 25.5.2015, 18:54

Цитата
Как же не должен? Присувтствует вращение, есть же разница, в каком положепнии поймает стрелки...

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

Автор: dimоn 25.5.2015, 21:46

Цитата(veiron @ 25.5.2015, 17:49) *

А зачем ждать подсказки игры и искать ход по стрелкам. В этой https://forum.uokit.com/index.php?showtopic=26456 есть почти готовый скрипт. Его нужно или полностью доделать или взять кусок скрипта, прикрутить ифы и будет собирать все имеющиеся ходы, а ты уже сам выберешь что тебе нужно, черепа или ХП или другое.

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


Цитата(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 25.5.2015, 23:32

Цитата(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 26.5.2015, 3:40

Цитата(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 28.5.2015, 10:41

Цитата(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 29.5.2015, 3:33

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

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

Автор: veiron 29.5.2015, 10:20

Цитата(dimоn @ 29.5.2015, 3:33) *

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

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

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

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

Автор: dimоn 30.5.2015, 14:17

Цитата(veiron @ 29.5.2015, 10:20) *

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

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


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

Но этот уже, по желанию, если оно есть, почему бы и нет?..

Автор: dimоn 18.6.2015, 14:19

Было дело, 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 18.6.2015, 15:30

Я надеюсь возвращением к этой теме стал не бан?

Автор: dimоn 19.6.2015, 0:36

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


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




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


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

Автор: guetajazz 28.6.2015, 21:40

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


Код

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

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 28.6.2015, 22:40

Первое в чем косяки - это читаемость скрипта:
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 29.6.2015, 19:21

Цитата(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 29.6.2015, 21:59

Цитата(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 29.6.2015, 23:46

В общем- да! Я и не спорю. Сказал об этом сразу,что скрипт на цикле кликов. От того и *тормоза * видимо. Но,хочу сказать СПАСИБО всем откликнувшимся,учту ваши замечания,буду расти над собой.)) Для меня это дремучий лес,нет времени вникать,от того и обратился за помощью

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

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


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

Автор: dimоn 30.6.2015, 0:17

Основные команды, которые для этого могут подойти, это findimage - поиск по картинке, команды условных циклов - while/while_not и условия - if then else

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

Что не понятно, пиши.

Автор: DarkMaster 30.6.2015, 3:50

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

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

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

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

А вот then в пилоте не пишется и это правильно smile.gif

Автор: dimоn 30.6.2015, 4:53

Я, наверное, что-то не так понял..
Можно поподробнее?

Автор: DarkMaster 30.6.2015, 5:08

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

Код
left 1 1
wait 500
left 2 2

Минус подобного подхода в том, что мы не контролируем фактическое появление выпадающего меню. Мы просто надеемся, что лага не будет или не он будет меньше 500мс. А если будет больше? Сбой? Чтобы повысить стабильность необходимо будет увеличивать данную задержку. А если таких кликов много? Каждый раз ждать неоправданно большое количество времени и иметь тормозной скрипт?
Чтобы не ждать вслепую проще заставить пилот проверять появление этой менюшки либо обнаруживать исчезновение фона(перекрытие менюшкой). Соответственно конструкция становится следующей:
Код
left 1 1
while_not x y c // Пока не появится менюшка
    wait 10
end_while
left 2 2

// Или
left 1 1
while x y c // Пока фон не изменился
    wait 10
end_while
left 2 2


Подобными конструкциями стараюсь заменить все wait'ы. Исключение разве что составляют лишь какие-то жесткие конструкции с явными задержками между парой событий. Либо случаи, когда необходимо выжать очень большую скорость работы и while с использованием цвета, занимающий 30мс, является слишком большой роскошью.

Автор: veiron 30.6.2015, 8:41

Цитата(DarkMaster @ 30.6.2015, 5:08) *

left 1 1
while_not x y c // Пока не появится менюшка
wait 10
end_while
left 2 2

// Или
left 1 1
while x y c // Пока фон не изменился
wait 10
end_while
left 2 2[/code]

А если в этот момент произошел разрыв с сервером, в этой игре это довольно частое явление. Или еще может игра слететь и будет только фон игры. Получается на этом while_not игра будет висеть вечно.

Автор: cirus 30.6.2015, 10:59

Цитата
А если в этот момент произошел разрыв с сервером, в этой игре это довольно частое явление. Или еще может игра слететь и будет только фон игры. Получается на этом while_not игра будет висеть вечно.

Для этого в условие добавляется таймер.

Автор: veiron 30.6.2015, 11:14

Цитата(cirus @ 30.6.2015, 10:59) *

Для этого в условие добавляется таймер.

Код
while_not x y c // Пока не появится менюшка
wait 10
end_while

И получится из 3 строк кода, код вырастит как минимум до 8. А если вайтов 100. Потом нужно будет обновить страницу с игрой и каким-то образом вернуться заново к этому действию.

Автор: dimоn 30.6.2015, 14:27

Цитата(veiron @ 30.6.2015, 8:41) *

А если в этот момент произошел разрыв с сервером, в этой игре это довольно частое явление. Или еще может игра слететь и будет только фон игры. Получается на этом while_not игра будет висеть вечно.

Значит while_not заменяется на while
Код
while x y color // цвет фона, до открытия менюшки.


Цитата(veiron @ 30.6.2015, 11:14) *

И получится из 3 строк кода, код вырастит как минимум до 8. А если вайтов 100. Потом нужно будет обновить страницу с игрой и каким-то образом вернуться заново к этому действию.

Если требуется много задержек, что бы уйли от вайла, я пошел другим путем - решил прблему, увеличением общего межстрочного интервала.

Автор: veiron 30.6.2015, 18:05

Цитата(dimоn @ 30.6.2015, 14:27) *

Значит while_not заменяется на while

Не вариант, пробовал такое.
Цитата(dimоn @ 30.6.2015, 14:27) *

Код
while x y color // цвет фона, до открытия менюшки.


И такое пробовал. Если делать на while это каждый ход получается с кучей проверок, игра довольна глючная.
Я делал блоками, потом в каждом блоке если превышает интервал времени, обновлял браузер и возвращался в самое начало.
Цитата(dimоn @ 30.6.2015, 14:27) *

Если требуется много задержек, что бы уйли от вайла, я пошел другим путем - решил прблему, увеличением общего межстрочного интервала.

А я еще проще поступил, нашел универсального бота который написан на каком-то программном языке и прикрутил его в пару с пилотом. И теперь все хорошо работает) Вот не могу понять, тот бот работает четко без сбоев, а вот пилот так написать не получается(

Автор: DarkMaster 30.6.2015, 18:33

Цитата
Если требуется много задержек, что бы уйли от вайла, я пошел другим путем - решил прблему, увеличением общего межстрочного интервала.

И чем это отличается от wait'ов которые в самом обычном виде добавляли? Тем, что мы не просто ждем вслепую в проблемных местах, но еще и в тех местах, где ждать вообще не надо?

Цитата
Для этого в условие добавляется таймер.

Именно так.

Цитата
И получится из 3 строк кода, код вырастит как минимум до 8. А если вайтов 100.

То делается подпрограмма и в нее передается набор координат и цвет. Подпрограмма отрабатывает и при необходимости все перезапускает.

Цитата
Потом нужно будет обновить страницу с игрой и каким-то образом вернуться заново к этому действию.

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

Автор: veiron 30.6.2015, 18:56

Цитата(DarkMaster @ 30.6.2015, 18:33) *

То делается подпрограмма и в нее передается набор координат и цвет. Подпрограмма отрабатывает и при необходимости все перезапускает.

То есть пучается на каждый ход подпрограмма? Открыл меня - 1 попдпрограмма. Тыкнул в меню 2 подпрограмма, закрыл меню это 3 поппрограмма. Я правильно понял?

Автор: DarkMaster 30.6.2015, 20:16

Подпрограмма которая выполняет функцию ожидания и используется вместо wait..

Автор: dimоn 1.7.2015, 9:58

Цитата(DarkMaster @ 30.6.2015, 18:33) *

И чем это отличается от wait'ов которые в самом обычном виде добавляли? Тем, что мы не просто ждем вслепую в проблемных местах, но еще и в тех местах, где ждать вообще не надо?

Значительным уменьшением объема скрипта. Потерял на этих задержках, от силы, секунд 5-6 (на те места, где ждать не надо). Но объем уменьшился в 2-4 раза.
Тормоза соответственно.

Автор: DarkMaster 1.7.2015, 10:27

Цитата
Но объем уменьшился в 2-4 раза.

Т.е. у вас на 1 строку приходится 1-3 строки wait'ов? shok.gif

Цитата
Тормоза соответственно.

Тормоза, простите, чего? От подобных действий скорость работы может только упасть. Размер скрипта имеет значение только при объеме скрипта более 2-3к строк и то не шибко сильно.

Автор: dimоn 1.7.2015, 13:27

Цитата(DarkMaster @ 1.7.2015, 10:27) *

Т.е. у вас на 1 строку приходится 1-3 строки wait'ов? shok.gif


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

сколько это дополнительных строк?

Автор: DarkMaster 1.7.2015, 14:55

Цитата
сколько это дополнительных строк?

Вам виднее. Из того, что вы написали выше (размер стал меньше в 2-4 раза), то у вас на каждый оператор в среднем приходится 1-3 wait'a. Если же у вас эти задержки были только после кликов, а клики занимают, например, 25% скрипта, то у вас непосредственно после каждого клика идет 4-12 строк из одних wait'ов.

Автор: dimоn 2.7.2015, 1:25

в 4 раза он уменьшится, если использовать вариант задержек к вайлом.
из учета на строку клика, 3 строки вайла.

Автор: DarkMaster 2.7.2015, 7:50

Цитата
в 4 раза он уменьшится, если использовать вариант задержек к вайлом.
из учета на строку клика, 3 строки вайла.

В скрипте нет ни одной строки кроме кликов что ли?

// Примитивная подпрограмма на ожидание будет 5 строк, вызов будет занимать 2 строки.
// Процедура 5 строк, вызов 1 строка.

Автор: dimоn 2.7.2015, 10:45

Цитата(DarkMaster @ 2.7.2015, 7:50) *

В скрипте нет ни одной строки кроме кликов что ли?



Ну почему нет то?
Я же пояснил - скрипт блока разбора дропа после боя.

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

при чем, все это еще и с кликом на вызов доп. менюшки.

Автор: dimоn 2.7.2015, 10:55

Цитата(DarkMaster @ 2.7.2015, 7:50) *

// Примитивная подпрограмма на ожидание будет 5 строк, вызов будет занимать 2 строки.
// Процедура 5 строк, вызов 1 строка.


Все это хорошо, но один момент - в варианте, вида while_not x y color
параметр color разве будет постоянным???

Автор: DarkMaster 2.7.2015, 11:01

Цитата
если в луте "одно"

Это уже не клик, а условие. Соответственно оно потянет за собой как минимум end_if.
Цитата
если "другое"

аналогично
Цитата
если "третье"

аналогично

Цитата
Все это хорошо, но один момент - в варианте, вида while_not x y color
параметр color разве будет постоянным???

Что мешает передавать параметр?

Автор: dimоn 2.7.2015, 11:52

Цитата(DarkMaster @ 2.7.2015, 11:01) *
Цитата
если в луте "одно"

Это уже не клик, а условие. Соответственно оно потянет за собой как минимум end_if.
Цитата
если "другое"

аналогично
Цитата
если "третье"

аналогично


А-а-а viking.gif russian_roulette.gif ))))) crazy.gif

То ли я никак не могу доходчиво донести, о чем пытаюсь пояснить... то ли все всё поняли и цепляются до слов?..

типичный вариант куска скрипта
Код

if ***
   left x y
         left  x y  
          if ***
            left  x y
            left  x y
            left  x y
            left  x y
            left  x y
          end_if
                       if $rb > 0
            left  x y
            left  x y
            left  x y
            left  x y
                           else
         left  x y
         left  x y
         left  x y
            left  x y
            left  x y
         end_if
                           end_if
           left  x y     //bez1
  
      
       if (***) or (***)
          left  x y
          left  x y
            left  x y
            left  x y
        left  x y
         left  x y
          left  x y
       end_if
      
       left  x y
            left  x y
            left  x y
       left  x y   //prodat
        left  x y
            left  x y
            left  x y
        wait 1000
       left  x y
       left  x y    //noviy boy
                          start_script 1
                          stop_script
        left  x y
        left  x y
            left  x y
            left  x y
            left  x y
            left  x y
        wait 1000      //разобран
        left  x y
        left  x y
            left  x y
            left  x y
        left  x y
        left  x y
  end_if


Что я пытаюсь сказать - сопостовление строк с условиями и с кликами. Преобладание очевидно.
Если добавить еще и ожидание, после клика на обработку его сервером, объем вырастет в 2-4 раза.
Поступил по другому, решил вопрос увеличением межстрочного интервала.

Вот biggrin.gif biggrin.gif biggrin.gif


Цитата(DarkMaster @ 2.7.2015, 11:01) *

Что мешает передавать параметр?


хм.. его изменение.. Т.е. если менюха должна вылезти в одном месте, он параметр в заданной точке один. Если в другой, то и, соответственно, + изменение координат
+ их определение.

Или я опять пошел не по тому пути?

Автор: DarkMaster 2.7.2015, 12:07

Цитата
то ли все всё поняли и цепляются до слов?..

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

Ну вы же кликаете? Значит координаты известны.
Кстати можно и вовсе создать подпрограмму-комбайн либо несколько подпрограмм, которые будут друг друга вызывать. При этом сохранится весь функционал, объем и вовсе может не изменится за исключением добавления самих подпрограмм. А если координаты из серии кликов завернуть в массив и for, то тело скрипта и вовсе может уменьшится(шапка правда увеличится соразмерно).
Мы же можем передать любой набор параметров, включая координаты клика, координаты и цвет контрольной точки. Т.е. передав 5 параметров нам и кликать то в скрипте не надо будет - это сделает подпрограмма.

Автор: dimоn 2.7.2015, 14:08

Цитата(DarkMaster @ 2.7.2015, 12:07) *

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


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




Массив...
i0 j0 i1 j1

x y
    [i0] x(нач) последовательность координат операций по х
    [j0]у(нач) -//-//-
    [i1]х(кон) -//-//-
    [j1]у(кон) -//-//-
for i=[начало серии кликов] to [конец серии]
for j=[коорд.по х(нач)] to [у(кон)]
х(нач) + random ([разница между нач. и кон.])
y(нач) + random ([разница между нач. и кон.])

Автор: DarkMaster 2.7.2015, 14:40

Цитата
То есть, у нас есть точка клика, вернее ее координаты, каким нибудь геткалором, мы берем ее цвет и отправляем на цикл вайла, до его изменения?

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

// Образец вызова с произвольными данными.
init_arr %a 1 2 0 3 4 5 // clickX; clickY; while|not(>0|0); checkX; chekY; checkColor.
gosub clickAndWait
stop_script


:clickAndWait
    left %a [ 1 ] %a [ 2 ]
    if  %a [ 3 ] > 0
        while %a [ 4 ] %a [ 5 ] %a [ 6 ]
            wait 10
        end_while
    else
        while_not %a [ 4 ] %a [ 5 ] %a [ 6 ]
            wait 10
        end_while
    end_if
return

Вызов с произвольными данными можно легко завернуть в for, двуразмерный массив и т.д.

Автор: sefi 14.7.2015, 9:29

Прочитал данную дискуссию ... увидел, что автор делает СИСТЕМНУЮ ОШИБКУ !!!
Впрочем это чисто мое мнение - и если что, то можно наплевать на него :-)
Сейчас попробую объяснить его:
Наверное это быстро смогут понять те кто программирует промышленные контроллеры ..
Дело в том, что вы делаете скрипт - как классический программист ... то есть программа стартует, что то считает и потом выдает результат. Да же не первой странице нарисовали красивые картинки в виде графов, как это считается. Обсуждаете что надо использовать while что бы дождаться появления менюшки, ну и так далее.
На самом деле - надо сломать себе мозг ... и понять что СКРИПТ СУЩЕСТВУЕТ (ВЫПОЛНЯЕТСЯ) ВСЕГДА !!!
И на самом деле - одно действие можно выполнять на одном цикле, а другое например на следующем.
ТО есть - если появился зеленый цвет в определенной области экрана - значит твой ход, надо брать манну и бить ... и квадратом и крестом!!! Если на одном цикле ударило квадратом, на следующем ударит крестом.
Если в каком то месте экрана появился фон менюшки - значит нажимаем в такую то точку, что бы забрать в рюкзак, или продать.
Возможно не понятно объяснил ... извиняюсь но поверьте - таким образом получаются короткие, надежные и быстро работающие скрипты.
:-)
Удачи

Автор: dimоn 14.7.2015, 13:01

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

Или есть какие-то предложения, по изменению строения или принципа работы?

Автор: DarkMaster 14.7.2015, 19:39

Цитата
Прочитал данную дискуссию ... увидел, что автор делает СИСТЕМНУЮ ОШИБКУ !!!
Впрочем это чисто мое мнение - и если что, то можно наплевать на него :-)
Сейчас попробую объяснить его:
Наверное это быстро смогут понять те кто программирует промышленные контроллеры ..
Дело в том, что вы делаете скрипт - как классический программист ... то есть программа стартует, что то считает и потом выдает результат. Да же не первой странице нарисовали красивые картинки в виде графов, как это считается. Обсуждаете что надо использовать while что бы дождаться появления менюшки, ну и так далее.
На самом деле - надо сломать себе мозг ... и понять что СКРИПТ СУЩЕСТВУЕТ (ВЫПОЛНЯЕТСЯ) ВСЕГДА !!!
И на самом деле - одно действие можно выполнять на одном цикле, а другое например на следующем.
ТО есть - если появился зеленый цвет в определенной области экрана - значит твой ход, надо брать манну и бить ... и квадратом и крестом!!! Если на одном цикле ударило квадратом, на следующем ударит крестом.
Если в каком то месте экрана появился фон менюшки - значит нажимаем в такую то точку, что бы забрать в рюкзак, или продать.
Возможно не понятно объяснил ... извиняюсь но поверьте - таким образом получаются короткие, надежные и быстро работающие скрипты.
:-)

В этом есть смысл, но в плане скриптов и объемных скриптов получается ужас. Поэтому я где-то выше рекомендовал (вроде в этой теме) делать несколько "стандартных" положений и приходить к ним при старте скрипта.
Я делал описанную вами конструкцию в чуть измененном виде - по сути это был набор вложенных ифов в обратном порядке. Т.е. если есть возможность сделать конечный ход, то он делается, иначе проверяется возможность перейти к конечному ходу, если есть возможность перейти к конечному ходу то переходим, иначе проверяем возможность перейти к предконечному ходу и т.д.
В реалиях - это очень запутанный и неудобный ход, возможны очень большие проблемы с производительностью, если требуется хорошая реакция.
По факту в реалиях проще делать контролирующий скрипт сателит, который проверяет счетчик успешных законченных действий, в случае проблем идет перезапуск скрипта и приход к стандартному положению. При этом полностью сохраняется адекватный читаемый вид скрипта, стабильность на практике не сильно страдает и при средне отработанном скрипте кпд страдает на 1-2% при одинаковом времени выполнения. У меня был скрипт который за минимальное количество времени (4-8 секунд обычно) должен был проработать по менюшкам и перейти к началу. Переход к схеме со скриптом сателитом дал выигрыш по скорости работы примерно в 40%, обернулось это перезапуском скрипта 2-3 раза в сутки, т.е. потерей в 2-3 минуты (так был настроен датчик подвисания) в сутки, что просто не серьезно. При этом часть проблем по факту была единичными случаями которые просто невозможно было предвидеть, например, краш сервера с никогда ранее не возникавшей ошибкой. Сателиту же при этом не составляло труда перезапустить основной скрипт, который успешно стартовал заново приложение и цеплялся к серверу.
В целом идейно ваше мнение очень правильное, но зачастую приводящее к очень большим проблемам при объемных скриптах, которые необходимо редактировать.
Цитата
Или есть какие-то предложения, по изменению строения или принципа работы?

Об этом и речь. Человек предлагает не иметь глобальной логике в скрипте. По большому счету предлагается сделать набор координат+цвет со всеми использующимися действиями и перебирать их постоянно. Т.е. весь скрипт в таком случае будет выглядеть примерно так:
Код
:start
if  x1 y1 c1
    left x1 y1
end_if
if  x2 y2 c2
    left x2 y2
end_if
if  x3 y3 c3
    left x3 y3
end_if
goto start

Автор: Triniti 26.7.2015, 23:05

Всем утро/день/вечер/другое (нужное подчеркнуть) blink.gif
Собсна тема всё ещё актуальна, и хотелось бы увидеть варианты упрощения сего скрипта:

Код

move 607, 437 abs // окно игра справа    
set #win windowfromcursor
set workwindow #win
set #t 200 + random (400) // быстрый клик
set #w 2200 + random (800) // переход
set #d 4000 + random (800) // дракон
set #o 600 + random (500) // клик
set #q 1300 + random (400) // сбор

set $path C:\острова\
// мобы
set %mobs[1] глад
set %mobs[2] джига
set %mobs[3] курл
set %mobs[4] матаз

// кнопки
set %button[1] напасть
set %button[2] обед
set %button[3] продать
set %button[4] отдать
set %button[4] забрать

// элики (исп-ся в этом порядке)
set %elik[1] култ
set %elik[2] зелмана
set %elik[3] вино
set %elik[4] крест
set %elik[5] молния
set %elik[6] наручи
set %elik[7] куб

// остальное
set %etc[1] ход
set %etc[2] ворота
set %etc[3] победа

set #koll 0 // убито мобов  
GOTO poisk

:select
move 607, 437 abs // мышь на игру
set #win windowfromcursor
set workwindow #win
set #koll 0 // убито после обновления
set $ostrov findimage (0 0 320 490 ($path%etc[2].bmp) %crds workwindow)
if $ostrov > 0 // ворота найдены
wait #w
else
wait #d
end_if

:poisk // мобы
// в цикле ищем любого моба из списка
for #mob 1 size(%mobs)
set $mob findimage (0 0 200 600 ($path%mobs[#mob].bmp) %crds workwindow)
if $mob > 0
  left %crds[1 1] %crds[1 2] // клик на моба
  wait 400
  GOTO ataka   // атакуем
end_if
end_for
   GOTO next // идём дальше

:next
left 673, 262 // след остров
wait #w
GOTO poisk // ищем

:ataka
left 89,477
wait #t
set $vboy findimage (0 0 600 420 ($path%button[1].bmp) %crds workwindow)
if $vboy > 0 // напасть
left %crds[1 1] %crds[1 2]
   else
   wait 100
   GOTO ataka // пробуем снова
end_if


set #time 0
while #time < 30
:xod // ждём переход хода к нам
set $xod findimage (0 0 400 130 ($path%etc[1].bmp) %crds workwindow)
if $xod > 0
gosub bitva // если ход наш, атакуем
    else
    wait 1000
    set #time #time + 1
    hint ([42] (ждём #time с))
      if #time = 30 // если зависло
      alarm
      alarm
      GOTO reboot  // обновляемся
      end_if
    GOTO xod
end_if
end_while  
    
:bitva
wait 150
// в цикле ищем любой доступный закл
for #zakl 1 size(%elik)
set $elik findimage (0 0 710 600 ($path%elik[#zakl].bmp) %crds workwindow)
if $elik > 0
  left %crds[1 1] %crds[1 2] // элик
  wait 400
if %elik[#zakl ] = крест            
                  Call Rand
            end_if
            
if %elik[#zakl ] = куб          
                  Call Rand
            end_if
end_if
end_for

Proc Rand
     :Rand
     set $rand Random(10)

     if $rand < 1
        Goto Rand
     end_if

     set %r[1] 304, 148 //1.2
     set %r[2] 432, 357 //5.6
     set %r[3] 461, 262 //6.4
     set %r[4] 348, 228 //3.3
     set %r[5] 341, 307 //3.5
     set %r[6] 343, 354 //3.6
     set %r[7] 426, 267 //5.4  
     set %r[8] 299, 272 //2.4  
     set %r[9] 345, 266 //3.4
     set %r[10] 383, 347 //4.6
    
     left %r[$rand]
     wait 10s // после удара фигурой ждём 10 сек

End_Proc

set $trof findimage (0 0 500 400 ($path%etc[3].bmp) %crds workwindow)
if $trof > 0 // поле пропало
GOTO drop_okno
else
GOTO xod // повторяем ход
end_if

:drop_okno // ждём пока поле пропадёт
set #time 0
while #time < 30
set #trof findimage (0 0 500 400 ($path%etc[3].bmp) %crds workwindow)
if #trof > 0 // поле пропало
GOTO drop_sbor
else
  wait 200
  set #time #time + 1
  hint ([42] (#time))
    if #time = 40  
    alarm
    alarm
    GOTO reboot // обновляемся
    end_if
end_if
end_while

:drop_sbor
wait #q
// тут если надо собираем дроп, иначе продаём
GOTO prodat


:prodat
wait #t
left 330, 379 // продать всё
wait #o
set $proda findimage (0 0 670 680 ($path%button[3].bmp) %crds workwindow)
if $proda > 0
left %crds[1 1] %crds[1 2] // продать
else
   set $otdat findimage (0 0 670 680 ($path%button[4].bmp) %crds workwindow)
   if $otdat > 0
   left %crds[1 1] %crds[1 2] // отдать
   end_if
end_if
wait #w
left 414, 382 // выйти
wait #o

:end_attack // после манипуляций с дропом
set #koll #koll + 1
hint ([42] (убито #koll)) // убито
if #koll > 50
  GOTO reboot
   else
   GOTO next
end_if

:reboot // перезагрузка страницы
left 1682, 68 abs
wait 20s
GOTO select


Исходные картинки http://vk.cc/41Y6qX (drive.google)
Запутался всё читать, потому спрошу так: решен ли вопрос с движением камней на поле для завершения хода?
И совсем странный вопрос: каковы могут быть причины неработоспособности скрипта? На виртуальной машине (Win XP) работает корректно, на реальном ПК (Win 8.1 pro VL) отказывается искать картинки в plugin-container'e, хотя у других работает (но тоже не у всех). Flash при этом у всех последний, браузеры FF/Seamonkey.

Автор: cirus 27.7.2015, 0:10

Цитата
И совсем странный вопрос: каковы могут быть причины неработоспособности скрипта? На виртуальной машине (Win XP) работает корректно, на реальном ПК (Win 8.1 pro VL) отказывается искать картинки в plugin-container'e, хотя у других работает (но тоже не у всех). Flash при этом у всех последний, браузеры FF/Seamonkey.

Причин может быть множество. Зависит от того в каком месте перестает работать.
Картинки сделанные на разных компьютерах могут отличатся. Соответственно картинки сделанные на одном компьютере могут не находится на другом. Так что не удивительно что не у всех работает.
Работает ли поиск картинок в 8.1 в вообще? Имеется ввиду в других браузерах или приложениях? При поиске workwindow привязка должна быть к родительскому окну.

Автор: DarkMaster 27.7.2015, 0:25

Цитата
Собсна тема всё ещё актуальна, и хотелось бы увидеть варианты упрощения сего скрипта:

Выкинуть к чертям собачьим ВСЕ goto, кроме зацикливания тела скрипта (все, что после объявления переменных, массивов и т.д. в шапке). Построить всю логику на gosub.
В процедуре рандома ошибка:
Код
set #a random (10)

вернет значение от 0 до 9. Там уже прилеплен костыль, чтобы не было вылетов при обращении к несуществующей нулевой ячейке массивов. Так же 10 ячейка никогда не будет использована в текущей реализации кода. ,Для фикса достаточно сделать:
Код
set #a random (10) + 1

Так же абсолютно не понятно зачем при каждом вызове процедуры рандома каждый раз заново объявляется массив %r. Место таким объявлениям в шапке скрипта.

Автор: Triniti 27.7.2015, 0:25

Цитата(cirus @ 27.7.2015, 2:10) *

Причин может быть множество. Зависит от того в каком месте перестает работать.
Картинки сделанные на разных компьютерах могут отличатся. Соответственно картинки сделанные на одном компьютере могут не находится на другом. Так что не удивительно что не у всех работает.
Работает ли поиск картинок в 8.1 в вообще? Имеется ввиду в других браузерах или приложениях? При поиске workwindow привязка должна быть к родительскому окну.

В 8.1 не работает именно в plugin-container вообще (ни в одном браузере), картинки сделаны на компе, до зимы кстати всё работало (и привязывал всегда именно к контейнеру, при привязке к firefox.exe работать ясно-понятно не будет; на виртуалке также к контейнеру привязывается и работает как часы). В других приложениях поиск на 8.1 работает.
На компе работают только клики, т.е. если даже в poisk есть совпадения на экране, пилот их не видит и просто идёт на next и зацикливается poisk-next-poisk...

Автор: DarkMaster 27.7.2015, 0:29

А зачем вы привязываетесь к конейнеру? Это фактически песочница для плагинов в которой запускается песочница флэша в которой запускается флэш. И через все эти песочницы идет проброс в браузер. Песочницы сделаны для того, чтобы как раз невозможно было общаться напрямую с фэшем и другими плагинами с целью безопасности и изоляции от системы. Привязывайтесь к браузеру. Уже пару лет как и хендлов то отдельных нет под флэш.

Автор: dimоn 27.7.2015, 0:33

Цитата(Triniti @ 26.7.2015, 23:05) *

Всем утро/день/вечер/другое (нужное подчеркнуть) blink.gif

Запутался всё читать, потому спрошу так: решен ли вопрос с движением камней на поле для завершения хода?

В смысле, с движением стрелок?
Да, работает пратически безотказно, изредка дает осечки, по неопознанным причинам..(предположительно, рандом диапазона координаты клика поподает между клетками игрового поля.)

Код

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 (15)
   set #y1 %up[1 2] + random (15)
   set #x2 %up[1 1] + random (15)
   set #y2 %up[1 2] + 40 + random (15)
     end_if
   end_if
  end_if  
  

  if ($l > 0)
   if_not ($v > 0)
      if $l > 0
   set #x1 %lv[1 1] + random (15)
   set #y1 %lv[1 2] + random (15)
   set #x2 %lv[1 1] + 40 + random (15)
   set #y2 %lv[1 2] + random (15)
      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 (1000)
     left #x2 #y2
     left #x2 #y2
     wait 1500
   end_if

start_script 1      
stop_script


Используемые скрины для поиска.
Прикрепленный файл  Uo.zip ( 12,31 килобайт ) Кол-во скачиваний: 554

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

Цитата

И совсем странный вопрос: каковы могут быть причины неработоспособности скрипта? На виртуальной машине (Win XP) работает корректно, на реальном ПК (Win 8.1 pro VL) отказывается искать картинки в plugin-container'e, хотя у других работает (но тоже не у всех). Flash при этом у всех последний, браузеры FF/Seamonkey.

А на лог возможно взглянуть? //к налоговой инспекции отношения не имею laugh.gif
На вскидку, могу предположить, что причина состоит в версии по и plugin-container в 8.1проВЛ находится в другом месте (т.е. другой путь обращения).
Точнее сказать не могу - у самого 10-ка.

Автор: Triniti 27.7.2015, 0:35

Цитата(DarkMaster @ 27.7.2015, 2:29) *

А зачем вы привязываетесь к конейнеру?

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

Автор: DarkMaster 27.7.2015, 0:48

у вас версия браузера которой пара лет? Вообще вы по ctrl+A даже хендла то не увидите никакого кроме, как браузера.

Цитата
move 607, 437 abs // окно игра справа
set #win windowfromcursor
set workwindow #win

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

Автор: Triniti 27.7.2015, 0:50

Цитата(dimоn @ 27.7.2015, 2:33) *

А на лог возможно взглянуть? //к налоговой инспекции отношения не имею laugh.gif

Лог поиска на 8.1 http://f5.s.qip.ru/Lq7YxrZr.jpg
Лог поиска на (виртуалке) XP http://ssmaker.ru/34f56784.jpg

Цитата(DarkMaster @ 27.7.2015, 2:48) *

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

Все браузеры последних версий О_о
Т.е. у вас при привязке не к процессу флэша всё работает? blink.gif
frompoint - ни разу не видел\слышал нигде про это.

Автор: DarkMaster 27.7.2015, 0:59

Цитата
frompint

опечатался, исправил. frompoint. Справка должна содержать сведения.
Цитата
Т.е. у вас при привязке не к процессу флэша всё работает?

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

Автор: Triniti 27.7.2015, 1:06

Цитата(DarkMaster @ 27.7.2015, 2:59) *

опечатался, исправил. frompoint. Справка должна содержать сведения.

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

Вот как видит окно флэша InqSoft Window Scanner http://ssmaker.ru/b100fdd9.jpg (в мозилле также)
http://f5.s.qip.ru/Lq7YxrZy.jpg

windowfrompoint - неопознанная команда (uopilot v2.35).

Автор: DarkMaster 27.7.2015, 1:26

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

Вообще даже если все это действительно так, то тем более не стоит привязывать подобными варварскими способами окно. Ну сделайте findwindow браузера и через getwindow пробегитесь до нужного окна. Ну либо скриптом готовым воспользуйтесь для поиска дочерних окон (есть в полезных советах).

Цитата
windowfrompoint - неопознанная команда (uopilot v2.35).

а это потому что в справку не читали. Даю подсказу, оно точно так же напишет и на findcolor, findimage.

А в справке коряво написано smile.gif
Это функция. Результат откуда забирать будете?

Автор: Triniti 27.7.2015, 1:34

Цитата(DarkMaster @ 27.7.2015, 3:26) *

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

Код
set #ownerHandle findwindow (Небеса: уникальная игра! - Игра - SeaMonkey)
set #tmp1 getwindow (#ownerHandle child)
set #tmp2 getwindow (#tmp1 next)
set #tmp3 getwindow (#tmp2 child)
set #childHandle getwindow (#tmp3 child)
set workwindow #childHandle

В итоге привязался к нужному окну (на 8.1), ура, но поиск по картинкам всё также не пашет.
С frompoint щас поковыряюсь попробую.

Автор: dimоn 27.7.2015, 1:36

Цитата(Triniti @ 27.7.2015, 0:50) *

Лог поиска на 8.1 http://f5.s.qip.ru/Lq7YxrZr.jpg
Лог поиска на (виртуалке) XP http://ssmaker.ru/34f56784.jpg



Разрешение экрана на 8-ке?

У тебя стоит поиск на квадрате 0 0 200 600
Это левый верхний угол..

Автор: DarkMaster 27.7.2015, 1:40

Цитата
С frompoint щас поковыряюсь попробую.

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

А зачем циферки в переменных подставили?

Автор: Triniti 27.7.2015, 1:48

Цитата(dimоn @ 27.7.2015, 3:36) *

Разрешение экрана на 8-ке?

У тебя стоит поиск на квадрате 0 0 200 600
Это левый верхний угол..

И там (виртуалка) и тут 1920х1080. Поиск же идёт от верхнего левого угла флэша, а не браузера (они идут разными процессами). Или я чего-то не понимаю?
На виртуалке всё находит, на 8ке - нет.


______________________________________________
DarkMaster, http://f6.s.qip.ru/Lq7YxrZC.jpg видно pid'ы процесса браузера (там искать картинки бессмысленно) и флэш-контейнера, где и надо искать картинки. Поэтому привязывал я к процессу флэша.
Цитата(DarkMaster @ 27.7.2015, 3:40) *

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

А зачем циферки в переменных подставили?

Разобрался для себя) Циферки для удобства на первый раз.

Автор: DarkMaster 27.7.2015, 1:56

Цитата
Поиск же идёт от верхнего левого угла флэша, а не браузера (они идут разными процессами)

Процессы пофиг. Главное хендлы. Хэндл в вашем случае отдельный так, что вы правы.

Автор: dimоn 27.7.2015, 1:59

Цитата(Triniti @ 27.7.2015, 1:48) *

И там (виртуалка) и тут 1920х1080. Поиск же идёт от верхнего левого угла флэша, а не браузера (они идут разными процессами). Или я чего-то не понимаю?
На виртуалке всё находит, на 8ке - нет.

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

У тебя в скрипте, где-то видел приписку к координатам абс - это отсчет по всему экрану.
Даже так1920х1080 - 200х600 - кусочек нерабочей части экрана, все равно, очень маленький диапазон.

Автор: Triniti 27.7.2015, 1:59

Цитата(DarkMaster @ 27.7.2015, 3:56) *

Процессы пофиг. Главное хендлы. Хэндл в вашем случае отдельный так, что вы правы.

Ну в мозилле\симанки скольким людям скрипты настраивал, они у всех были "отдельно" rolleyes.gif
Остаётся теперь всё же понять, почему не ищет у меня и ещё пары человек, а у остальных как часы... уже и браузеры сносил и обратно ставил, и флэш, толку 0 sad.gif

Цитата(dimоn @ 27.7.2015, 3:59) *

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

Никто ведь не запрещает свернуть WMWare, верно? wink.gif
Абс координаты у меня только для привязки к окну, и то "были" теперь.
В процессе флэша 200 600 - избыточны, всё что нужно находится где-то на 150 550.

Автор: dimоn 27.7.2015, 2:05

Если поставишь вот эту галочку
Изображение
при нажатии на ктрл+а будет давать текущую позицию.
Вот и измерь размеры рабочей части экрана для пилота в окне игры...

Автор: DarkMaster 27.7.2015, 2:08

Цитата
почему не ищет у меня и ещё пары человек

Остался не отвеченным вопрос cirus'a, о том в каком именно местре скрипта возникают проблемы. Это ключевой вопрос кстати.

Автор: dimоn 27.7.2015, 2:12

Цитата(Triniti @ 27.7.2015, 1:59) *

В процессе флэша 200 600 - избыточны, всё что нужно находится где-то на 150 550.

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

Может у тебя флэш какой особенный?..

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

Автор: dimоn 27.7.2015, 2:30

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

Автор: Triniti 27.7.2015, 14:31

Цитата(DarkMaster @ 27.7.2015, 4:08) *

Остался не отвеченным вопрос cirus'a, о том в каком именно местре скрипта возникают проблемы. Это ключевой вопрос кстати.

Цитата(Triniti @ 27.7.2015, 2:25) *

На компе работают только клики, т.е. если даже в poisk есть совпадения на экране, пилот их не видит и просто идёт на next и зацикливается poisk-next-poisk...

Там выше ещё были скрины, где у 1 моба (гладыша) на виртуалке 98% совпадения, на компе в том же браузере с той же версией флэша - 0. Картинки естественно делались для виртуалки там, для компа здесь (про несовместимость некоторых уже знал, потому не парился с этим).

Цитата(dimоn @ 27.7.2015, 4:12) *

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

http://f5.s.qip.ru/Lq7YxrZy.jpg размеры окна, специально с ними захватил. Это размеры всей рабочей области, в пределах которой возможен поиск. Скрипт от мозиллы в хроме работать не будет, как ни старайтесь, и наоборот, потому и координаты за 1000 выходят у тебя, а у меня правый нижний угол (избранные) это 805, 832.

___________________
UPD 14:44 MSK
http://ssmaker.ru/c4357f98.png с версиями - VM (Win XP), где всё находится прекрасно.
http://ssmaker.ru/69097302.png с версиями - ПК (Win 8.1), где поиск по картинкам в контейнере тупо не работает.

Автор: dimоn 27.7.2015, 15:24

Цитата(Triniti @ 27.7.2015, 14:31) *

а у меня правый нижний угол (избранные) это 805, 832.

А левый нижний?

Автор: DarkMaster 27.7.2015, 17:13

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

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

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

Автор: Triniti 27.7.2015, 17:37

Цитата(dimоn @ 27.7.2015, 17:24) *

А левый нижний?

спросонья писал.. правый нижний (значок избранных) 720, 798, левый нижний соотв-но 1, 798 (http://SSMaker.ru/96ae92c3.png)
Цитата(DarkMaster @ 27.7.2015, 19:13) *

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

И вновь попрошу попробовать wink.gif, ни одна координата для left'a не подойдёт 100% (проверено опытным путём и не одним мной), насчёт картинок и области поиска не знаю, но думается мне что тоже. В хроме отсчёт идёт с левого угла сразу под адресной строкой, и флэш без отдельного хэндла, а в фф\симанки не так, потому лефты и не подойдут, как и области в findimag'e. Иначе зачем привязывать в фф\симе к контейнеру флэша?
С погрешностью\точностью играл, картинки вырезаю +\- одни и те же.

Автор: DarkMaster 27.7.2015, 18:46

Цитата
флэш без отдельного хэндла

Вы мне сколько доказывали со скринами, что отдельный хендл у него?

Цитата
С погрешностью\точностью играл, картинки вырезаю +\- одни и те же.

не те же либо координаты не те. Тут вариантов нет. В смысле вообще нет.

Автор: Triniti 27.7.2015, 19:03

Цитата(DarkMaster @ 27.7.2015, 20:46) *

Вы мне сколько доказывали со скринами, что отдельный хендл у него?

В мозилле\симанки да, в хроме - нет, но т.к. хром в плане флэша был некоторое время нестабилен, окончательно ушёл на мозиллу\сим. + если кому-то скрипт ставить то не надо париться с не совпадающими координатами.
Ну раз вариантов нет, значит нет. Не судьба.

Автор: DarkMaster 27.7.2015, 20:10

Хром решается галками, вам уже 2 человека написали.

Цитата
Ну раз вариантов нет, значит нет. Не судьба.

Значит не желания слушать то, что вам говорят. За 5 или 6 лет существования операторов findcolor и findimage друх причин еще не было ни разу. Зато было очень много случаев, как кричали и рвали тельняшку, что изображения одинаковые и координаты правильные, а потом оказывалось, что изображения искажены, когда открывали через paint в том виде, как я говорил.

Автор: Triniti 27.7.2015, 20:22

Не знаю, должно ли быть так, но вот... http://f5.s.qip.ru/Lq7YxrZU.jpg
Если брать рабочим окном http://ssmaker.ru/edde489f.jpg - нет совпадений, если брать рабочим окном средство просмотра фото http://ssmaker.ru/a4629ea0.png - нет совпадений, если захватывать рабочее окно http://ssmaker.ru/cf6e487a.png - совпадения есть blink.gif
Сейчас сидел 3 раза разные элементы скринил и пробовал - безрезультатно искать во флеше. Хром использовать не хочу. stop.gif

Автор: DarkMaster 27.7.2015, 20:35

Цитата
Не знаю, должно ли быть так, но вот...

читайте то, что вам пишут, и делайте то, что вам рекомендовали, чтобы не писать потом такого. Просмотрщик изображений конвертирует при просмотре в jpg и полностью искажает изображение. Откройте в ПЭИНТЕ. Скрины вставлять в него же, сохранять им же, изображения 24 бита bmp.

Автор: dimоn 27.7.2015, 22:26

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

Автор: Triniti 27.7.2015, 22:31

Цитата(DarkMaster @ 27.7.2015, 22:35) *

читайте то, что вам пишут, и делайте то, что вам рекомендовали, чтобы не писать потом такого. Просмотрщик изображений конвертирует при просмотре в jpg и полностью искажает изображение. Откройте в ПЭИНТЕ. Скрины вставлять в него же, сохранять им же, изображения 24 бита bmp.

про конвертацию в жпг не знал, а сохраняю так
___
в паинте совпадения для всех 100%

Автор: dimоn 27.7.2015, 22:36

Triniti, на какой платформе играешь, через какой браузер, с каким масштабом, и какой масштаб указан в параметрах экрана?
Не поленюсь, сейчас, запущу на тех же параметрах и посмотрю изменения.
DarkMaster прав. Если бы вопрос стоял в том, что неправильно указан путь к картинке, в логе бы выдавало не 0, а -4.
А если для тебя представляется ПРИНЦИПИАЛЬНО-невозможным увеличить диапазон поиска, бей себя в грудь дальше.

Автор: DarkMaster 27.7.2015, 22:39

а теперь сделайте скрин флэша, вставьте в пэинт и попробуйте найти изображение вашими заготовленными findimage'ами.

Цитата
А если для тебя представляется ПРИНЦИПИАЛЬНО-невозможным увеличить диапазон поиска, бей себя в грудь дальше.

один из первых шагов - сделать диапазон поиска 0 0 1920 1080(ну или сколько у вас разрешение).

Цитата
А разве это корректное определение хендла? Допускается хендл не присваивать численной переменной, что бы определить его, как число?

workwindow и так является числовой переменной.

Автор: dimоn 27.7.2015, 22:51

Понял, спасибо.

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

Автор: DarkMaster 27.7.2015, 22:54

Цитата
На досуге думал про массив координат и в голову пришла такая мысль.. что, если не в ручную создавать этот массив, а отдельной шапкой, один раз. финдимеджом прострелить поле на клетки ячеек, это уже 36 координат + клетки заклов и элексиров. То есть, при запуске он сразу будет определять все необходимые ему координаты, а в процессе лишь обращаться к этому массиву..?

https://forum.uokit.com/index.php?showtopic=26456&st=0
штудируй =)

Автор: dimоn 27.7.2015, 23:19

Мысль состоит немного в другом.
Координатами задать ему рамки диапазона, который ему нужен. Иначе говоря, если ему нужен квадрат, он его не ищет, а берет диапазон клика из массива ит.д.
Если он догнал, что стрелка в определенной ячейке, он не использует координаты найденного изображения, а обращается к диапазону в который попали эти координаты.

Автор: DarkMaster 27.7.2015, 23:33

Цитата
если ему нужен квадрат, он его не ищет, а берет диапазон клика из массива ит.д.

а вот так делать не стоит и причин этому много:
куча лишней писанины
ухудшение читаемости
при больших объемах - снижение производительности

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

Автор: cirus 28.7.2015, 2:41

Цитата
безрезультатно искать во флеше

В нём и не надо искать. Я же сразу написал привязка должна быть к родительскому окну.
https://forum.uokit.com/index.php?s=&showtopic=28487&view=findpost&p=214803
Цитата
если захватывать рабочее окно за рамку - совпадения есть blink.gif

Конечно есть, рамка имеет тот же хендл что и родительское окно.

Автор: Triniti 28.7.2015, 14:17

Цитата(cirus @ 28.7.2015, 4:41) *

В нём и не надо искать. Я же сразу написал привязка должна быть к родительскому окну.
https://forum.uokit.com/index.php?s=&showtopic=28487&view=findpost&p=214803

Конечно есть, рамка имеет тот же хендл что и родительское окно.

Цитата(DarkMaster @ 27.7.2015, 3:56) *

Процессы пофиг. Главное хендлы. Хэндл в вашем случае отдельный так, что вы правы.

Хэндл браузера и флэша НЕ одинаковы, потому при привязке к хэндлу браузера (http://f6.s.qip.ru/Lq7YxrZC.jpg 2163342) поиск не даст результатов ну никак, потому что хэндл нужного окна 789132. Привязка должна быть к дочернему окну vertag.gif, цитату DarkMaster'a не зря привёл. Так он хоть кликает где надо, а если к хэндлу браузера, то вообще ничего не происходит.

Цитата(dimоn @ 28.7.2015, 0:36) *

Triniti, на какой платформе играешь, через какой браузер, с каким масштабом, и какой масштаб указан в параметрах экрана?
Не поленюсь, сейчас, запущу на тех же параметрах и посмотрю изменения.
А если для тебя представляется ПРИНЦИПИАЛЬНО-невозможным увеличить диапазон поиска, бей себя в грудь дальше.

Оф, Firefox/Seamonkey, 100% масштаб.
Я увеличил диапазон поиска с 200 600 до 700 700 (при размерах окна с игрой 730х800, помним скрин InqSoft'a) и результатов это не дало.
И повторюсь сразу, у других людей на той же винде, с теми же версиями флэша\браузеров РАБОТАЕТ. Только у меня и одной подруги нет.

Автор: cirus 28.7.2015, 15:42

Цитата
потому при привязке к хэндлу браузера (здесь 2163342) поиск не даст результатов ну никак, потому что хэндл нужного окна 789132. Привязка должна быть к дочернему окну

Может так будет понятнее будет.
https://www.youtube.com/watch?v=iRf121gq8AY&feature=youtu.be
Цитата
Так он хоть кликает где надо, а если к хэндлу браузера, то вообще ничего не происходит.

Не надо путать поиск и клики. Поиск и клик по найденному изображению делаются с привязкой к родительскому окну. А остальные клики делайте с привязкой к флешу.

Автор: DarkMaster 28.7.2015, 17:48

Цитата
а теперь сделайте скрин флэша, вставьте в пэинт и попробуйте найти изображение вашими заготовленными findimage'ами.

Автор: DarkMaster 28.7.2015, 18:23

Стоп. А поиск нужен в перекрытом окне?

Автор: dimоn 28.7.2015, 18:28

Цитата(Triniti @ 28.7.2015, 14:17) *

Оф, Firefox/Seamonkey, 100% масштаб.


После незначительных манипуляций с координатами диапазона поиска.

Изображение


Переустанови браузер с флешами, в конце концов. Или в другом загрузи.

Автор: Triniti 29.7.2015, 5:50

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

Цитата(dimоn @ 28.7.2015, 20:28) *

Переустанови браузер с флешами, в конце концов. Или в другом загрузи.

На XP всё работает, у других работает, тот же код в тех же версиях у меня не работает.
И в начале я писал, что браузеры\флэш сносил полностью и это результата не дало. Юзаю принципиально только FF/Seamonkey.

Автор: DarkMaster 29.7.2015, 6:12

Цитата
Поиск желательно в перекрытом бы.

К родительскому. На данный момент именно так.

Автор: Triniti 30.7.2015, 17:53

Цитата(DarkMaster @ 29.7.2015, 8:12) *

К родительскому. На данный момент именно так.

Перед переходом на 10ку короче просто убрал workwindow из типа поиска - заработало.
Сейчас на 10ке также без явного указания типа поиска работает, с "2" работает, а с #handle или workwindow - нет. Может проблема в пипоте?
И это с привязкой не к родительскому окну, с ним ваще никак не работает ни поиск, ни клики.

Автор: DarkMaster 30.7.2015, 21:25

Цитата
Сейчас на 10ке также без явного указания типа поиска работает, с "2" работает, а с #handle или workwindow - нет.

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

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

Автор: Triniti 30.7.2015, 22:55

Цитата(DarkMaster @ 30.7.2015, 23:25) *

Это разные методы снятия изображения. Совсем разные. Совсем разные коррекции положения окон. Там все разное на этапе забора изображения, расчета смещений и т.д. Общего только непосредственно сам алгоритм разбора готового изображения.

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

Ну вот я написал, что с 2 работает, а иначе - нет.
И координаты для поиска я сделал 0 0 1000 1000 - всё равно результата никакого.
Какое окно в данном случае считать "родителем"?
Код
set #ownerHandle findwindow (Небеса: уникальная игра! - Игра - SeaMonkey)
set #tmp getwindow (#ownerHandle child)
set #tmp getwindow (#tmp next)
set #tmp getwindow (#tmp child)
set #childHandle getwindow (#tmp child) // песочница

Иногда, кстати, скрипт генерации не выдаёт
Код
set #tmp getwindow (#tmp next)

Автор: DarkMaster 30.7.2015, 23:03

Цитата
Иногда, кстати, скрипт генерации не выдаёт

В некоторых приложениях путь к окну может меняться. Это бывает не часто, но бывает.
Цитата
Какое окно в данном случае считать "родителем"?

Первое.

Автор: Triniti 30.7.2015, 23:15

Цитата(DarkMaster @ 31.7.2015, 1:03) *

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

Первое.

Ну, сделал привязку к первому... лефты не работают, поменял на абсы передвинув окно к левой половине экрана (без abs правда, потому что мышку жалко sad.gif, знаю что глупо biggrin.gif ), толку 0... findimage так и не заработал crazy.gif
______
P.s. сделал через команду printscreen скрин окна флэша - просто чернота, эм...

Автор: DarkMaster 30.7.2015, 23:53

Учитывая привязку к другому хендлу, то left и не заработает. Только kleft.

Автор: Triniti 31.7.2015, 14:19

Цитата(DarkMaster @ 31.7.2015, 1:53) *

Учитывая привязку к другому хендлу, то left и не заработает. Только kleft.

Как-то по-человечьи есть способ заставить его работать (как на ХР)?
kleft не тру, да ещё и перекрывать нельзя... почему у других-то можно и не надо к род-му окну привязывать??? russian_roulette.gif beg.gif

Автор: Ph3nix 31.7.2015, 20:09

Выложу здесь. Может кому пригодится, может кто, до ума доведёт smile.gif
Работает хорошо, но надо добавить условий если вдруг флеш навернётся или игра заглючит! Стартовые условия можно смело убрать из каждой подпрограммы.
И раз тут спор про хендлы, то сразу упомяну, привязка здесь к флешу, браузер фф, разрешение 1280Х1024... И, сильно не пинать, только учусь smile.gif

Код


set %SearchA[1] \Image\Search.bmp
set %SearchA[2] \Image\UfO.bmp
set %MonstersA[1] \Image\Monsters\1lvl\HeavenlySpirit.bmp
set %MonstersA[2] \Image\Monsters\1lvl\ShadowWarrior.bmp
set %MonstersA[3] \Image\Monsters\2lvl\GhostWarrior.bmp
set %MonstersA[4] \Image\Monsters\2lvl\RestlessGhost.bmp
set %MonstersA[5] \Image\Monsters\3lvl\Bagessa.bmp
set %MonstersA[6] \Image\Monsters\3lvl\Bagg.bmp
set %MonstersA[7] \Image\Monsters\3lvl\Lag.bmp
set %MonstersA[8] \Image\Monsters\3lvl\Lagga.bmp
set %MonstersA[9] \Image\Monsters\3lvl\ShadowSpearmen.bmp
set %MonstersA[10] \Image\Monsters\3lvl\WanderingSpirit.bmp
set %MonstersA[11] \Image\Monsters\4lvl\Bagessa.bmp
set %MonstersA[12] \Image\Monsters\4lvl\Bagg.bmp
set %MonstersA[13] \Image\Monsters\4lvl\HowlingSpirit.bmp
set %MonstersA[14] \Image\Monsters\4lvl\Lag.bmp
set %MonstersA[15] \Image\Monsters\4lvl\Lagga.bmp
set %MonstersA[16] \Image\Monsters\4lvl\PhantomSwordsman.bmp
set $NoEnergy \Image\NoEnergy.bmp
set $Attack \Image\Attack.bmp
set %MagicA[1] \Image\Spell\MagicSquare.bmp
set %MagicA[2] \Image\Spell\MagicCross.bmp
set $Horizon \Image\Horizon.bmp
set $Vertical \Image\Vertical.bmp
set $EmptySlot \Image\Analysis\EmptySlot.bmp
set %ExclusionA[1] \Image\Analysis\Emeralds.bmp
set %ExclusionA[2] \Image\Analysis\HeavenlyDust.bmp
set %ExclusionA[3] \Image\Analysis\LapisLazuli.bmp
set %ExclusionA[4] \Image\Analysis\Zircon.bmp
set %ExclusionA[5] \Image\Analysis\GreenRecipe.bmp
set %ExclusionA[6] \Image\Analysis\GreyRecipe.bmp
set %ExclusionA[7] \Image\Analysis\OrangeRecipe.bmp
set %ExclusionA[8] \Image\Analysis\RedRecipe.bmp
set $DeCo \Image\Analysis\DeCo.bmp
set %StTaA[1] \Image\Analysis\Study.bmp
set %StTaA[2] \Image\Analysis\Take.bmp
set $Study \Image\Study.bmp
set %DiSeA[1] \Image\Analysis\Disassemble.bmp
set %DiSeA[2] \Image\Analysis\Sell.bmp
set %ConfirmationA[1] \Image\Disassemble.bmp
set %ConfirmationA[2] \Image\Sell.bmp
set %ConfirmationA[3] \Image\Fine.bmp
set %UniteA[1] \Image\Analysis\Emeralds.bmp
set %UniteA[2] \Image\Analysis\HeavenlyDust.bmp
set %UniteA[3] \Image\Analysis\LapisLazuli.bmp
set %UniteA[4] \Image\Analysis\Zircon.bmp
set $Unite \Image\Analysis\Unite.bmp
set $Exit \Image\Exit.bmp

:Start

if (127, 145 4578815 and 300, 315 2858389) or (127, 145 4578815 and 300, 315 13344164 14135992)
  gosub Search
end_if
if (300, 315 2858389 and 340, 90 2778524) or (300, 315 13344164 14135992 and 340, 90 2778524)
  gosub Monsters
end_if
if 520, 450 9095149 and 670, 360 8694234
  gosub Attack
end_if
if 365, 45 3560041 and 365, 380 9754359
  gosub Fight
end_if
if 85, 350 81199 and 365, 285 6924243
  if_not 285, 315 1715023 or 285, 315 1716563
   gosub Victory
  end_if
end_if
if 85, 350 70505 and 365, 285 6924243
  gosub Exit
end_if
if ($ExclusionF > 0)
  gosub StTa
end_if
if 365, 45 2176330 and 590, 265 9885179
  gosub Study
end_if
if ($DeCoF > 0) or ($NotStudied = 1)
  gosub DiSe
end_if
if 365, 45 2176330 and 590, 265 12904700
  gosub Confirmation
end_if
if (#Unite = 1)
  gosub Unite
end_if
if 420, 500 11855103 or 470, 500 11855103 or 520, 500 11855103
  gosub UniteYes
end_if
if (#Exit = 1) or ($UniteYesF > 0)
  gosub Exit
end_if

goto Start

:Search

while 1 = 1
  wait 10
  for #SearchN 1 2
   set $SearchF findimage (610, 225 710, 295 (%SearchA[#SearchN]) %SearchXY 2 80 1 5)
   if ($SearchF > 0)
    set #x1 %SearchXY[1 1] + random (20)
    set #y1 %searchXY[1 2] + random (20)
    wait 500 + random (500)
    left #x1 #y1
    while 300, 315 2858389 or 300, 315 13939639
     wait 10
    end_while
    while_not (300, 315 2858389 and 340, 90 2778524) or (300, 315 13344164 14135992 and 340, 90 2778524)
     wait 10
    end_while
    break
   end_if
  end_for
  if ($SearchF > 0)
   return
  end_if
end_while

:Monsters

while 1 = 1
  wait 10
  if 15, 565 3420261
   return
  end_if
  if_not (300, 315 2858389 and 340, 90 2778524) or (300, 315 13344164 14135992 and 340, 90 2778524)
   return
  end_if
  for #MonstersN 1 16
   set $MonstersF findimage (0, 350 200, 600 (%MonstersA[#MonstersN]) %MonstersXY 2 80 1 1)
   if ($MonstersF > 0)
    set #x1 %MonstersXY[1 1] + random (20)
    set #y1 %MonstersXY[1 2] + random (20)
    wait 500 + random (500)
    left #x1 #y1
    while_not 520, 450 9095149 and 670, 360 8694234
     wait 10
    end_while
    break
   end_if
  end_for
  set $SearchF 0
  return
end_while

:Attack

while 1 = 1
  wait 10
  if_not 520, 450 9095149 and 670, 360 8694234
   return
  end_if
  set $NoEnergyF findimage (335, 120 635, 400 ($NoEnergy) %NoEnergyXY 2 80 1 10)
  if ($NoEnergyF > 0)
   wait 5m
  end_if
  set $AttackF findimage (335, 120 635, 400 ($Attack) %AttackXY 2 80 1 1)
  if ($AttackF > 0)
   set #x1 %AttackXY[1 1] - 20 + random (60)
   set #y1 %AttackXY[1 2] + 5 + random (10)
   wait 500 + random (500)
   left #x1 #y1
   while_not 365, 45 3560041 and 365, 380 9754359
    wait 10
   end_while
   return
  end_if
end_while

:Fight

while 1 = 1
  wait 10
  if_not 365, 45 3560041 and 365, 380 9754359
   return
  end_if
  while_not 260, 90 936748
   wait 10
  end_while
  for #MagicN 1 2
   set $MagicF findimage (55, 460 355, 580 (%MagicA[#MagicN]) %MagicXY 2 80 1 1)
   if ($MagicF > 0)
    set #x1 %MagicXY[1 1] + random (20)
    set #y1 %MagicXY[1 2] + random (20)
    set #x2 300 + random (130)
    set #y2 180 + random (130)
    wait 500 + random (500)
    left #x1 #y1
    wait 500 + random (500)
    left #x2 #y2
    break
   end_if
  end_for
  while 260, 90 936748
   set $HorizonF findimage (230, 110 500, 380 ($Horizon) %HorizonXY 2 80 1 25)
   if ($HorizonF > 0)
    set #x1 %HorizonXY[1 1] - 16
    set #y1 %HorizonXY[1 2] - 10
    set #x2 #x1 + 10 + random (20)
    set #y2 #y1 + 10 + random (20)
    set #x3 #x1 + 51 + random (20)
    set #y3 #y1 + 10 + random (20)
    wait 500 + random (500)
    left #x2 #y2
    wait 500 + random (500)
    left #x3 #y3
   end_if
   set $VerticalF findimage (230, 110 500, 380 ($Vertical) %VerticalXY 2 80 1 25)
   if ($VerticalF > 0)
    set #x1 %VerticalXY[1 1] - 14
    set #y1 %VerticalXY[1 2] - 14
    set #x2 #x1 + 10 + random (20)
    set #y2 #y1 + 10 + random (20)
    set #x3 #x1 + 10 + random (20)
    set #y3 #y1 + 51 + random (20)
    wait 500 + random (500)
    left #x2 #y2
    wait 500 + random (500)
    left #x3 #y3
   end_if
  end_while
  if (85, 350 81199 and 365, 285 6924243) or (85, 350 70505 and 365, 285 6924243)
   return
  end_if
end_while

:Victory

while 1 = 1
  wait 10
  if_not 85, 350 81199 and 365, 285 6924243
   return
  end_if
  set $EmptySlotF findimage (330, 450 630, 580 ($EmptySlot) %EmptySlotXY 2 80 -1 1)
  if ($EmptySlotF > 0)
   set #EmptySlotX %EmptySlotXY[1 1] + 10
   set #EmptySlotY %EmptySlotXY[1 2] + 10
  end_if
  for #ExclusionN 1 8
   set $ExclusionF findimage (250, 280 480, 350 (%ExclusionA[#ExclusionN]) %ExclusionXY 2 80 1 1)
   if ($ExclusionF > 0)
    set #ExclusionX %ExclusionXY[1 1] + random (20)
    set #ExclusionY %ExclusionXY[1 2] + random (20)
    wait 500 + random (500)
    left #ExclusionX #ExclusionY
    wait 500
    if_not 280, 370 12368986
     wait 500 + random (500)
     left #ExclusionX #ExclusionY
    end_if
    while_not 85, 350 81199 and 385, 275 11855103
     wait 10
    end_while
    break
   end_if
  end_for
  if ($ExclusionF > 0)
   return
  end_if
  set $DeCoF findimage (210, 240 270, 300 ($DeCo) %DeCoXY 2 80 1 1)
  if ($DeCoF > 0)
   set #x1 %DeCoXY[1 1] + 37 + random (20)
   set #y1 %DeCoXY[1 2] + 40 + random (20)
   wait 500 + random (500)
   left #x1 #y1
   wait 500
   if_not 280, 370 12368986
    wait 500 + random (500)
    left #x1 #y1
   end_if
   while_not 85, 350 81199 and 385, 275 11855103
    wait 10
   end_while
   return
  end_if
end_while

:StTa

while 1 = 1
  wait 10
  if_not 85, 350 81199 and 385, 275 11855103
   return
  end_if
  for #StTaN 1 2
   set $StTaF findimage (230, 230 500, 420 (%StTaA[#StTaN]) %StTaXY 2 80 1 1)
   if ($StTaF > 0)
    set #x1 %StTaXY[1 1] + 10 + random (80)
    set #y1 %StTaXY[1 2] + 2 + random (8)
    set $ExclusionF 0
    wait 500 + random (500)
    left #x1 #y1
    if (#StTaN = 1)
     while_not 365, 45 2176330 and 590, 265 9885179
      wait 10
     end_while
    end_if
    if (#StTaN = 2)
     set #Unite 1
     while_not 285, 315 1715023 or 285, 315 1716563
      wait 10
     end_while
    end_if
    break
   end_if
  end_for
  if ($StTaF > 0)
   return
  end_if
end_while

:Study

while 1 = 1
  wait 10
  if_not 365, 45 2176330 and 590, 265 9885179
   return
  end_if
  set $StudyF findimage (275, 400 465, 450 ($Study) %StudyXY 2 80 1 1)
  if ($StudyF > 0)
   set #x1 %StudyXY[1 1] - 40 + random (100)
   set #y1 %StudyXY[1 2] + 5 + random (10)
   wait 500 + random (500)
   left #x1 #y1
   while_not 365, 45 2176330 and 590, 265 12904700
    wait 10
   end_while
  else
   set $NotStudied 1
   wait 500 + random (500)
   send {Escape}
   wait 500 + random (500)
   left #ExclusionX #ExclusionY
   wait 500
   if_not 280, 370 12368986
    wait 500 + random (500)
    left #ExclusionX #ExclusionY
   end_if
   while_not 85, 350 81199 and 385, 275 11855103
    wait 10
   end_while
  end_if
  return
end_while

:DiSe

while 1 = 1
  wait 10
  if_not 85, 350 81199 and 385, 275 11855103
   return
  end_if
  for #DiSeN 1 2
   set $DiSeF findimage (230, 230 500, 420 (%DiSeA[#DiSeN]) %DiSeXY 2 80 1 1)
   if ($DiSeF > 0)
    set #x1 %DiSeXY[1 1] + 10 + random (80)
    set #y1 %DiSeXY[1 2] + 2 + random (8)
    set $DeCoF 0
    set $NotStudied 0
    if (#DiSeN = 1)
     set #Unite 1
    end_if
    if (#DiSeN = 2)
     set #Exit 1
    end_if
    wait 500 + random (500)
    left #x1 #y1
    while_not 365, 45 2176330 and 590, 265 12904700
     wait 10
    end_while
    break
   end_if
  end_for
  if ($DiSeF > 0)
   return
  end_if
end_while

:Confirmation

while 1 = 1
  wait 10
  if_not 365, 45 2176330 and 590, 265 12904700
   return
  end_if
  for #ConfirmationN 1 3
   set $ConfirmationF findimage (340, 250 640, 450 (%ConfirmationA[#ConfirmationN]) %ConfirmationXY 2 80 1 1)
   if ($ConfirmationF > 0)
    set #x1 %ConfirmationXY[1 1] - 45 + random (110)
    set #y1 %ConfirmationXY[1 2] + 5 + random (10)
    if (#ConfirmationN = 1)
     set #Unite 1
    end_if
    if (#ConfirmationN > 1)
     set #Exit 1
    end_if
    wait 500 + random (500)
    left #x1 #y1
    while 285, 315 1715023 or 285, 315 1716563
     wait 10
    end_while
    while_not 285, 315 1715023 or 285, 315 1716563
     wait 10
    end_while
    break
   end_if
  end_for
  if ($ConfirmationF > 0)
   return
  end_if
end_while

:Unite

while 1 = 1
  wait 10
  if_not 285, 315 1715023 or 285, 315 1716563
   return
  end_if
  if_not #EmptySlotX, #EmptySlotY 2508390
   for #UniteN 1 4
    set $UniteF findimage (330, 450 630, 580 (%UniteA[#UniteN]) %UniteXY 2 80 2 1)
    if ($UniteF = 2)
     set #x1 %UniteXY[1 1] + random (20)
     set #y1 %UniteXY[1 2] + random (20)
     set #Unite 0
     wait 500 + random (500)
     left #x1 #y1
     while_not 420, 500 11855103 or 470, 500 11855103 or 520, 500 11855103
      wait 10
     end_while
     break
    end_if
   end_for
   if ($UniteF != 2)
    set #Exit 1
   end_if
   return
  end_if
end_while

:UniteYes

while 1 = 1
  wait 10
  if_not 420, 500 11855103 or 470, 500 11855103 or 520, 500 11855103
   return
  end_if
  set $UniteYesF findimage (330, 430 680, 630 ($Unite) %UniteYesXY 2 80 1 1)
  if ($UniteYesF > 0)
   set #x1 %UniteYesXY[1 1] + 10 + random (80)
   set #y1 %UniteYesXY[1 2] + 2 + random (8)
   wait 500 + random (500)
   left #x1 #y1
   while 420, 500 11855103 or 470, 500 11855103 or 520, 500 11855103
    wait 10
   end_while
   return
  end_if
end_while

:Exit

while 1 = 1
  wait 10
  set $ExitF findimage (230, 300 500, 420 ($Exit) %ExitXY 2 80 1 1)
  if ($ExitF > 0)
   set #Exit 0
   set $UniteYesF 0
   set #x1 %ExitXY[1 1] - 20 + random (60)
   set #y1 %ExitXY[1 2] + 5 + random (10)
   wait 500 + random (500)
   left #x1 #y1
  end_if
  while_not 127, 145 4578815
   wait 10
  end_while
  return
end_while



Прикрепленные файлы
Прикрепленный файл  Image.rar ( 67,98 килобайт ) Кол-во скачиваний: 260

Автор: DarkMaster 31.7.2015, 22:01

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

Автор: Ph3nix 31.7.2015, 23:01

Цитата(DarkMaster @ 31.7.2015, 22:01) *

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

Я помню ваш совет!!! smile.gif Просто пока не закончил его, лень комментировать, сам помню, что за что отвечает! Так что, как только, так сразу!!!

Автор: Triniti 1.8.2015, 0:53

Ph3nix, честно говоря немного удивился, что при таком кол-ве картинок столько условий на проверку цвета в точках ohmy.gif
Про комментарии уже сказали..
А, вот, если привязка к флешу, то там разрешение роли не играет, т.к. контейнер с игрой всегда 730х800.

Автор: Ph3nix 1.8.2015, 11:07

Цитата(Triniti @ 1.8.2015, 0:53) *

Ph3nix, честно говоря немного удивился, что при таком кол-ве картинок столько условий на проверку цвета в точках ohmy.gif
Про комментарии уже сказали..
А, вот, если привязка к флешу, то там разрешение роли не играет, т.к. контейнер с игрой всегда 730х800.

Игра лагает, приходиться под неё подстраиваться. Пока так, а там посмотрим! smile.gif А про привязку, буду знать, спасибо!

Автор: Морзянка 20.2.2016, 10:24

всем привет. Помогите научиться писать скрипт, хочу попробовать написать нападение через чат

Автор: DarkMaster 20.2.2016, 10:47

пробуйте, начинайте, пишите - поможем.
Из базовой информации можно почитать тут: https://forum.uokit.com/index.php?showtopic=20548

Автор: dimоn 3.3.2016, 13:40

Цитата(Морзянка @ 20.2.2016, 10:24) *

всем привет. Помогите научиться писать скрипт, хочу попробовать написать нападение через чат

все тоже самое)))
если брать за основу эти варианты скриптов, то, в пилоте открываетя 4 вкладки, первая, на поиск и нападение, после того, как персонаж напал, запуск 2-3, это уже на сам бой, как раз, то, что можно скопипастить отсюда.
И по завершении боя, уходит на 4 вкладку, уже с разбором дропа. либо можно ее совместить с первой.

Автор: dimоn 15.3.2016, 1:19

Всех приветствую
На днях слегка тряханул бота.
По многочисленным просьбам, даже подписал... biggrin.gif
Выкладываю последнюю версию + пикчи к нему

1.бой

Исходный код

set #h workwindow
set workwindow #h

:boy
set $vy findimage (1109, 417 1273, 559 (\proigrysh.bmp)%vy 2 50 1 10)
set $pr findimage (607, 414 802, 565 (\proigrysh.bmp)%pr 2 50 1 10)
while_not ($pr > 0) or ($vy > 0)
//proigrysh? //proigrysh

set $d 0
while_not ($d > 0) //ярлычок хода

wait 500

set $z findimage (1004, 118 1354, 477 (\zakryt.bmp)%vyk 2 0 1 5) //krest okna


.
end_if
set $rzr findimage (745, 307 1175, 531 (\rzrb.bmp)%p 2 50 50 5)//razryv
set $pr findimage (577, 561 1092, 874 (\profy.bmp)%p 2 70 50 5)//profraboty
set $lb findimage (1092, 710 1434, 871 (\label.bmp)%lb 2 50 50 5)//profraboty
if $pr > 0 or $lb > 0 or $rzr > 0

left 76, 43 abs // reload
wait 15000
end_if


set $vy findimage (1109, 417 1273, 559 (\proigrysh.bmp)%vy 2 50 1 10)
set $pr findimage (607, 414 802, 565 (\proigrysh.bmp)%pr 2 50 1 10)
set $kanc findimage (620, 170 858, 383 (\kanc.bmp)%kanc 2 50 80 15)
if ($pr > 0) or ($kanc > 0) or ($vy > 0)
gosub boy_okonchen
end_if
set $d findimage (716, 156 920, 380 (\ход.bmp)%p 2 90 1 5)
end_while
// osnovnaya chast`



gosub kult

set $kv findimage (598, 548 968, 760 (\квадрат.bmp)%pkv 2 90 1 5) //ищет горящие квадрат и крест
set $kr findimage (598, 548 968, 760 (\крест.bmp)%pkr 2 90 1 5)

if ($kv > 0 ) or ($kr > 0 ) //если не использован
if $kv > 0
gosub kvadrat
goto boy
end_if
if $kr > 0
gosub krest
goto boy
end_if
else //если использовано и то и то, запуск скрипта поиска хода по стрелкам

start_script 2
stop_script
end_if
end_if
else

end_if

end_while
start_script 3
end_script
:kvadrat
set #xkv %pkv[1 1] + random (25)
set #ykv %pkv[1 2] + random (25)
left #xkv #ykv
wait 1000 + random (2500)
set #x 841 + random (210)
set #y 263 + random (200)
left #x #y //рандомный диапазон поля
return
:krest
set #xkr %pkr[1 1] + random (25)
set #ykr %pkr[1 2] + random (25)
left #xkr #ykr
wait 1000 + random (2500)
set #x 841 + random (210)
set #y 263 + random (200)
left #x #y
return
:kult
set $pl findimage (536, 445 1066, 979 (\plunut.bmp)%pl 2 90 50 15) //культовые
if ($pl > 2)
set #x %pl[1 1] + random (25)
set #y %pl[1 2] + random (25)
left #x #y
end_if

set $pe findimage (536, 445 1066, 979 (\pechat.bmp)%pe 2 90 70 15)
if ($pe > 2)
set #x %pe[1 1] + random (25)
set #y %pe[1 2] + random (25)
left #x #y
end_if

set $uk findimage (536, 445 1066, 979 (\ukus.bmp)%uk 2 90 30 15)
if ($uk > 2)
set #x %uk[1 1] + random (25)
set #y %uk[1 2] + random (25)
left #x #y
end_if
return
:boy_okonchen
if ($pr > 0) or (679, 341 918036 ) or (723, 462 2365464 ) //proigrych
set $new findimage (1099, 490 1275, 601 (\new.bmp)%new 2 50 50 5)
set #x %new[1 1] + random (50)
set #y %new[1 2] + 5 + random (10)
left #x #y
return
end_if

if $kanc > 0 or 721, 228 11796222 //neb kanc
set #x 955 + random (50)
set #y 480 + random (30)
left #x #y
wait 800 + random (300)
set #x 1100 + random (30)
set #y 560 + random (20)
left #x #y //новая арена
return
end_if

start_script 12

stop_script


2.ход

Исходный код

set #h workwindow
set workwindow #h

while_not ((#x1 > 0) and (#y1 > 0)) or ($g = 0)

printscreen 1 0 0 0 0 c:\client window.bmp //скрин экрана
set $v findimage (797, 148 1095, 434 (\verkh.bmp)%up (c:\client window.bmp) 80 30 5) //поиск на сделаном скрине
set $l findimage (797, 148 1095, 434 (\levo.bmp)%lv (c:\client window.bmp) 80 30 5)
set $g findimage (813, 94 923, 165 (\ход.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 (15)
set #y1 %up[1 2] + random (15)
set #x2 %up[1 1] + random (15)
set #y2 %up[1 2] + 40 + random (15)
end_if
end_if
end_if


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


//set $kv findimage (598, 548 968, 710 (\квадрат.bmp)%p (c:\client window.bmp) 90 1 5)
//set $kr findimage (598, 548 968, 710 (\крест.bmp)%p (c:\client window.bmp) 90 1 5)

end_while

if (#x1 > 0)
wait 500
left #x1 #y1
wait 500 + random (500)
left #x2 #y2
left #x2 #y2
wait 1500
end_if

start_script 1
stop_script

Прикрепленный файл  Uo_.zip ( 82,68 килобайт ) Кол-во скачиваний: 275

Автор: veiron 15.3.2016, 8:00

Цитата
set $l findimage (797, 224 1114, 541 (\levo.bmp)%lv (c:\client window.bmp) 80 30 5)

А что это за конструкция такая хитрая и что она делает?

Автор: DarkMaster 15.3.2016, 14:36

Цитата
что она делает?

Скорее всего ошибку она делает smile.gif

Автор: veiron 15.3.2016, 15:08

Цитата(DarkMaster @ 15.3.2016, 14:36) *

Скорее всего ошибку она делает smile.gif

Нет, ошибку она не делает, а просто тупо ищет по первому скрину smile.gif Я уже подумал что теперь за один ход, можно искать сразу 2 изображения, либо сравнивать одно с другим.

Автор: dimоn 15.3.2016, 15:17

Код
printscreen 1 0 0 0 0 c:\client window.bmp                                            
set $v findimage (797, 224 1114, 541    (\verkh.bmp)%up (c:\client window.bmp) 80 30 5)  
set $l findimage (797, 224 1114, 541   (\levo.bmp)%lv (c:\client window.bmp) 80 30 5)


здесь printscreen делает скрин экрана, а тип поиска (c:\client window.bmp) обращается к этому скрину. При чем, к одному скрину обращается сразу двумя поисками.
Получается, отпадает необходимость бороться с вращением, когда, поймав одну стрелку, второй поиск мог зацепить еще и вторую, но уже повернувшуюся, за время обработки первого.
veiron, в точку goodpost.gif

Цитата(DarkMaster @ 15.3.2016, 14:36) *

Скорее всего ошибку она делает smile.gif

Сейчас посмотрел, прошел почти год, как я юзаю эту конструкцию. Ошибок она не делает. Работает четко и уверенно.

Автор: dimоn 15.3.2016, 16:28

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

Автор: veiron 15.3.2016, 17:02

Цитата(dimоn @ 15.3.2016, 15:17) *

При чем, к одному скрину обращается сразу двумя поисками.

Вот только интересно как работает второй поиск, если хэндл скрина картинки совсем другой. Я попробовал эту конструкцию, если открыто окно с игрой оно ищет 100% картинку. А как с хэндлом игры можно в скрине найти что-то, я немного не понимаю. Не проще сделать скрин и просто поиск по скрину не вращающихся стрелок.

Код
printscreen 1 0 0 0 0 c:\client window.bmp 
set $v findimage (797, 224 1114, 541 (\verkh.bmp)%up (c:\client window.bmp) 2 80 1 5)

Попробовал так, в логе найдено 2.
Код
printscreen 1 0 0 0 0 c:\client window.bmp 
set $v findimage (797, 224 1114, 541 (\verkh.bmp)%up 2 80 1 5)

Так найдено 100%.
Код
set $v findimage (797, 224 1114, 541    (\verkh.bmp)%up 2 80 1 5)

Убрал printscreen, но конструкцию не изменял, а вот картинку скрина с папки удалил и все равно находит 2, не пойму в чем прикол.

Автор: Cockney 15.3.2016, 17:21

недокументированные возможности,хех

Автор: veiron 15.3.2016, 17:28

Цитата(Cockney @ 15.3.2016, 17:21) *

недокументированные возможности,хех

Можно спросить какие:
1. Если поиск по скрину, то у него будет другой хэндл и Ф.имедж ни чего не найдет.
2. Зачем делать скрин окна игры, если там ничего не ищется.
3. Смысл данной конструкции, если переменная и массив один, и смысл тогда второй картинки.

Автор: dimоn 15.3.2016, 17:41

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

Это не хендл, а, указанный, как тип поиска, путь к пикче.

Автор: veiron 15.3.2016, 17:48

Цитата(dimоn @ 15.3.2016, 17:41) *

Стоп.
Скрин сделать и просто поиск по скрину - не проще. Сколько за бой будет сохранено скринов? грязь и мусор, в общем.

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

Цитата(dimоn @ 15.3.2016, 17:41) *

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

Я удалил прежнею сохраненную картинку

Цитата(dimоn @ 15.3.2016, 17:41) *

Это не хендл, а, указанный, как тип поиска, путь к пикче.

Что за пикча?
Тогда смысл этого скрина окна игры, если там не ищется?

Автор: dimоn 15.3.2016, 17:48

Изображение

Код
(c:\client window.bmp) 80 35 5)

работает на таких вот параметрах.

Автор: veiron 15.3.2016, 17:55

Цитата(dimоn @ 15.3.2016, 17:48) *

Код
(c:\client window.bmp) 80 35 5)

работает на таких вот параметрах.

Это скрин окна с игрой, что и в какой области тут ищется?

Автор: dimоn 15.3.2016, 18:04

Изображение

Каждый новый цикл пересоздает скрин, а после по новому скрину делает поиск еще раз.

Автор: veiron 15.3.2016, 18:05

Окно с игрой в этот момент открыто? Если открыто то поиск идет по окну, а не скрину. После принтскрина сделай сворачивание окна с игрой и ни чего не будет найдено.

printscreen 1 0 0 0 0 c:\client window.bmp
// свернуть окно
set $v findimage (\verkh.bmp)%up (c:\client window.bmp)
В логе найдено 0, где поиск по скрину? В папке старый скрин лежит.


Вопрос К ДаркМастеру, разве пилот может выполнить поиск по отскриненой картинке просто лежащей в папке?

Автор: DarkMaster 15.3.2016, 18:34

Цитата
Вопрос К ДаркМастеру, разве пилот может выполнить поиск по отскриненой картинке просто лежащей в папке?

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

Автор: dimоn 15.3.2016, 22:08

С прискорбием хочу заметить, что ком. printscreen отказалась работать вообще.
Либо ничего не сохраняет, либо только черное окно, без изображения.

Автор: veiron 15.3.2016, 22:10

Цитата(dimоn @ 15.3.2016, 22:08) *

С прискорбием хочу заметить, что ком. printscreen отказалась работать вообще.
Либо ничего не сохраняет, либо только черное окно, без изображения.

У меня работает, только что 231 скрин сделал в избранных за минуту.

Автор: dimоn 15.3.2016, 22:17

У меня тоже раньше работала, а сейчас начал проверять
Изображение
Пробовал более ранние версии,, та же история

Автор: veiron 15.3.2016, 22:21

Цитата(dimоn @ 15.3.2016, 22:17) *

У меня тоже раньше работала, а сейчас начал проверять
Пробовал более ранние версии,, та же история

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

Автор: veiron 16.3.2016, 2:27

Цитата(dimоn @ 15.3.2016, 22:17) *

У меня тоже раньше работала, а сейчас начал проверять

Код
set #handle findwindow  (Игра)
set #handle GetWindow (#handle CHILD)
set workwindow #handle
printscreen #handle 0 0 60 8 c:\skrin.bmp

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

P.S Вопрос к ДаркМастеру, так и должно быть? Правильный хэндл именно с CHILD или принтскрин должен работать только от родительского окна?

Автор: cirus 16.3.2016, 2:44

Цитата
принтскрин должен работать только от родительского окна?

Как должен не знаю, но сейчас работает именно так. Это же, часто, относится к findimage и findcolor.

Что касается придуманного поиска по скрину, поверю что он работает когда findimage найдёт картинку без запущенной игры smile.gif

Автор: veiron 16.3.2016, 8:16

Цитата(cirus @ 16.3.2016, 2:44) *

Что касается придуманного поиска по скрину, поверю что он работает когда findimage найдёт картинку без запущенной игры smile.gif

Так ни кто и не спорит что не работает. Было бы не плохо так картинки сравнивать. Я вчера пробовал без видимости первой картинки не работает, а тогда смысл второй картинки в findimage, а если видит первую то и отрабатывает по ней. Как это на практике сделать?

Автор: dimоn 17.3.2016, 6:48

Сорри, оффтоп, к этому вернемся позже..

А закончили ли скрипт, по обработке игрового поля, для боев гладиаторов?
Помнится, там было все на ифах?
Чет я, вдруг, неожиданно, то ли вспомнил, то ли допер, как это все обработать, на уровне матрицы..
Мы формируем двумерный массив, к примеру %pole[6;6], далее, забиваем это все, значениями того, что на игровом поле.
Далее, загоняем в циклы for и после этого, проверяем возможность смещения камня, на соседнюю линию. Если в результате смещения образуется что-то путное, считаем, что получилось. в итоге получаем массив с результатами возможных действий

for i=1 to 6 //вертикаль
for j=1 to 6//горизонталь
set %polenew[i;j] %pole[i+1;j]
set %polenew[i+1;j] %pole[i;j]
if %polenew[i;j] = %polenew[i + 1;j] аnd %polenew[i +1;j] = %polenew[i+2;j]
... и т.д.
Казнить:-D

set %polenew[i;j] 0
set %polenew[i +1;j] 0
set %polenew[i+2;j] 0
end_if
if %polenew[i;j] = %polenew[i;j+1] аnd %polenew[i ;j+1] = %polenew[i;j+2]... и т.д.
set %polenew[i;j] 0
set %polenew[i ;j+1] 0
set %polenew[i;j+2] 0
end_if

end_for
end_for

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

for i=1 to 6
for j=1 to 6
if %pole(i;j) = 0
//если пусто
set %pole(i;j) %pole (i;j-1)// значение равно значению, ячейки с тем же номером, но на соседней линии
else //иначе
set %pole(i;j) %pole(i;j)// значение равно своему значению, то есть, не изменяется

Проверка всех элементов массива, а по сути, формирование нового, где, если оказывается пустое место, берется с той же ячейки, только с соседнего j-ряда
Мы получаем новый массив. Его опять проверяем на предмет рядом стоящих камней и т.д. В итоге получаем образовавшееся поле, после возможного хода, количество выбывших камней и результат сложения значения номиналов этих камней, которые образуют массив результатов действий, %rez[x;y]// к примеру, х - значение маны, y - значение урона. и т.д.

Выполняем алгоритм упорядочивания, по убыванию и берем первый элемент образовавшегося массива.

в итоге получаем наилучший ход.

Автор: DarkMaster 17.3.2016, 8:24

Цитата
for i=1 to 6
for j=1 to 6
if %pole(i;j) = 0//если пусто
then //тогда
set %pole(i;j) %pole (i;j-1)// значение равно значению, ячейки с тем же номером, но на соседней линии
else[ //иначе
set %pole(i;j) %pole(i;j)// значение равно своему значению, то есть, не изменяется

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

Автор: dimоn 17.3.2016, 9:30

Цитата(DarkMaster @ 17.3.2016, 8:24) *

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

Сорри, все в одно смешал))) Это наброски, в принципе.. То что в голову влезло.. Это все еще надо перевести в полномасштабную версию.. Я к тому, что, может, мысль кто-нибудь подредактирует/продолжит/подправит?..

Автор: dimоn 17.3.2016, 13:25

К сожалению, тоже, не работал с массивами, уже, наверное, лет 7.. и, вроде, что-то вспоминается, но туговато..
Я хотя бы на правильном пути?

Автор: DarkMaster 17.3.2016, 14:50

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

Автор: dimоn 8.4.2016, 20:05

Со временем сейчас беда..(((
Но все-таки кое какие наброски есть .
Вот только задумался, здесь выкидывать или создать отдельную тему, по алгоритмам решения mаtch 3? Вкратце, боюсь, не получится)))
На сколько бы странным это не было, но даже порывшись в сети, нет ничего, по подобному. Обсуждаются вопросы создания самой игры, но вот решением подобного никто не озадачивался, либо никто не делился))))

Автор: DarkMaster 9.4.2016, 4:32

Вообще можно в отдельную тему. Поход к этому варианту решения уже был https://forum.uokit.com/index.php?showtopic=26456. Там очень много писанины, думаю, станет логичным новую тему создать ибо потом не найдешь где одна реализация в другую начала перетекать.

Автор: dimоn 9.4.2016, 11:16

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

Тогда еще один вопросик.. какой командой можно вывести массив на экран?

Автор: DarkMaster 9.4.2016, 11:49

Цитата
Чем скрипт проще, тем эффективнее))

Неа...
Цитата
попытки обработать массивы на ифах, заканчиваются, правильно подмечено, огромных размеров, писаниной,

Неа. Массивы при правильном использовании очень сильно уменьшают количество кода.
Цитата
медленной и нестабильной работой...

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

Код
set #sizeArr size (%arr)
for #i 1 #sizeArr
    log %arr [#i] // Для двумерного массива добавить второй индекс по необходимости.
end_for


Писанины там было очень много из-за количества наставлений на путь истинный smile.gif

Автор: veiron 9.4.2016, 15:37

Цитата(dimоn @ 9.4.2016, 11:16) *

И скорее всего, фишки будет убирать только в одном направлении - либо вертикаль, либо горизонталь))))

Почему только так. У меня прекрасно отрабатывает и другие позиции. Если делать if + массив довольно быстро работает, код конечно получается длинный.

Автор: dimоn 9.4.2016, 16:05

Не спорю, я лишь предположил.

Да и не про конкретный скрипт, это, в общем, так сказать наблюдения)))

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

Автор: veiron 9.4.2016, 18:36

Цитата(dimоn @ 9.4.2016, 16:05) *

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

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

Автор: vlad2525 4.4.2018, 12:31

что делать с этим[attachmentid=2719]

что делать с этим[attachmentid=2719]

Автор: cirus 4.4.2018, 12:42

Написано же 'Set key' - 'Задайте клавишу'. Вообще лучше скрипты писать. Смотрите примеры: http://uopilot.tati.pro/index.php?title=Список_функций

Автор: serik9029 28.11.2018, 8:17

привет скрипт для uopilot небеса для пещеры можешь скинуть?(( чтобы нажимал рандомно обыск и бил определенных монстров? мое мыло serik9029@mail.ru если есть еще какие поделись пжл)) спасибо

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)