Автокликер Clickermann :: Форум

Основной раздел => Использование => Topic started by: faser on July 21, 2017, 11:06:48 AM

Title: Gods and glory
Post by: faser on July 21, 2017, 11:06:48 AM
Предлагаю скрипт фарма подзмелий игры Gods and glory
https://vk.com/godsandglory (https://vk.com/godsandglory)

Code: (clickermann) [Select]
//скрипт выполняет майн подземелий  в игре Gods and Glory
// подходит для сбора низкоуроуневых ресурсов для кузни
// останавливает сбор, когда войска начинают гибнуть
// или когда полоска очков подземелья заполняется почти до максимума
// запускать в ноксе, пришвартованном к левому верхнему углу экрана
#name "Слава шахтёрам"

//процедура клика с рандомным отклонением от точки клика на количество точек от 0 до $rc по обеим осям
sub (clkr, $xc,$yc,$rc)
   $nx=$xc+rnd(0-$rc,$rc)
   $ny=$yc+rnd(0-$rc,$rc)
   //   print(" x",$xc," y",$yc," nx",$nx, " ny",$ny)
   $getx=$_xmouse
   $gety=$_ymouse
   MOVE($nx,$ny)
   LDOWN($nx,$ny)
   waitms(80+rnd(0,60))
   LUP($nx,$ny)
   MOVE($getx,$gety)
end_sub

//процедура рандомного ожидания таймер +  1-10%
sub(waitrnd, $t)
   WAIT($t+$t*(1/rnd(1,10)))
end_sub

//main part основная часть
GETSCREEN
COLORMODE(6)
//screenshot

WHILE(pxl(226,185)=4144959)  //проверка по заполненности полоски очков,этот цикл можно поменять, если требуется другое условие для окончания фарма
   
   print("Можно в бой, очки есть куда собирать",pxl(315,500))
   
   //рандомно бьем один из отрядов в списке, можно выбирать только один из 2-х вариантов
   
   // вариант 1: бьем только нижние 4 отряда в подземелье, например, для  защиты от дыхания дракона
   clkr(325,341+76*rnd(0,3),5)
   
   //вариант 2: бьем все 5 отрядов, имеет смысл использовать при отключенной проверке на войска, но при уверенности, что остаток войск вытянет бои со всеми отрядами. иначе скрипт будет часто останавливаться т.к. войска будут дохнуть. ГГ маг вполне норм может фармить
   
   // clkr(325,263+76*rnd(0,4),5)
   waitrnd(1)
   
   //тут проверка на наличие войск в армии по цвету полоски,если войска начинают дохнуть и не пополняются, то  хальт, можно отключить и биться, к пример, только основным героем
   GETSCREEN
   COLORMODE(6)
   IF(pxl(210,230)=4144959)
      print("войска закончились! блеа!!!")
      halt
   END_IF
   
   //начать бой на выборе войск
   clkr(281,589,5)
   waitrnd(2)
   //начать бой на поле
   clkr(199,612,5)
   
   //дальше ждем конца, проверяем наличие  кнопки
   GETSCREEN
   COLORMODE(6)
   print("бой идет",pxl(315,500))
   WHILE(pxl(315,500)!8355711)
      waitrnd(1)
      print("бой идет",pxl(315,500))
      GETSCREEN
      COLORMODE(6)
   end_cyc
   //раздача призов
   
   //выбираем первый приз
   $pp=rnd(0,4)
   clkr(55+66*$pp,444,7)
   waitrnd(0.2)
   clkr(55+66*$pp,444,7)
   waitrnd(0.6)
   // а здесь выбираем второй приз. можно отключить всю эту конструкцию, если можно брать только один приз
   $vp=$pp
   WHILE($vp=$pp)
      $vp=rnd(0,4)
      waitrnd(0.1)
   end_cyc
   clkr(55+66*$vp,444,7)
   waitrnd(0.2)
   clkr(55+66*$vp,444,7)
   waitrnd(1.5)
   
   //после сбора призов можно выходить
   clkr(280,496,10)
   waitrnd(2)
   
   GETSCREEN
   COLORMODE(6)
end_cyc
//конец цикла, если очки набрались
print("мы почти у цели, дальше пили сам")

halt
Title: Re: Gods and glory
Post by: Oraven on July 22, 2017, 08:48:14 AM
Исправил кодировку. А чтоб такого не было нужно, перед копированием в буфер, раскладку языка в редакторе перевести на Ру.
Title: Re: Gods and glory
Post by: faser on July 23, 2017, 09:04:27 PM
спс
Title: Re: Gods and glory
Post by: gsukhado on July 31, 2017, 10:52:59 AM
faser, идея классная, разве что я бы в районе 66-й строки еще добавил проверку на случайное поражение, с соответствующей логикой выхода из нее.
Ну и координаты точек увы не совпадают, надо все равно под свой экран перерабатывать :)

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

upd: еще вспомнил: цели строк 66-67 не понял, у меня достаточно однократного клика на сундук. Соответственно, строки 78-87 без доната не проверял
Title: Re: Gods and glory
Post by: faser on August 07, 2017, 05:05:52 PM
Благодарю за отзыв.
про поражение конечно думал, но не стал заморачиваться, т.к. основная цель скрипта - собрать обычные ресурсы для крафта (экспа - добавочно), поэтому проигрышей не бывает. ГГ обычно сам может бой вывезти.

Про координаты точек я сначала думал привязаться к окну, вымерять размер и указать "относительные точки". Потом чёт заленился и сделал абсолютные точки при том, что нокс подвешен к координатам 0,0 (примерно).
Если запрос будет, подумаю, чтоб переделать по-человечески.

С глюком скриншота не встречался. Возможно от мощности компа зависит.

цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.

78-87 - действительно, для тех, кто может 2 ящика открыть (с донатом), как я там в комментарии написал, если ящик только один, то этот блок можно отключить
Title: Re: Gods and glory
Post by: faser on August 07, 2017, 05:08:05 PM
у меня щас больше голова болит о том, как сделать автофарм шахт по выбранному уровню...
не могу определиться к чему цепять проверку на уровень и свободность шахты.
upd: увидел твоё http://crapware.aidf.org/forum/index.php?topic=88.msg22957#msg22957
буду изучать
Title: Re: Gods and glory
Post by: gsukhado on August 08, 2017, 10:31:15 AM
не могу определиться к чему цепять проверку на уровень и свободность шахты.
Я привязываю в абсолютных пикселях к координатам того фрагмента изображения шахты, по которому ищется сама шахта. Плюс добавляю люфты - учитывая неточность в поиске в размытых текстурах
Title: Re: Gods and glory
Post by: faser on August 08, 2017, 11:17:56 AM
а увеличение карты?
Title: Re: Gods and glory
Post by: faser on August 08, 2017, 04:51:13 PM
Общий вопрос по алгоритму Распознавание чисел 1.5.cms (http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571 )

Для случаев, когда конкретные написания цифр могут достаточно сильно отклоняться от "шаблона", можно ли использовать не конкретные образцы, а их массивы? Например, сделать подпапки "texures\number0\", "texures\number1\", "texures\number2\"... в которые накидывать разные написания одной и той же цифры. А алгоритм бы проверял на совпадение каждому из вариантов цифры в соответствующей подпапке.
А совсем идеально - чтобы если совпадений не найдено (установив высокую точность, например от 95), но скриншот данного кусочка экрана сразу складировался в отдельной папке - из которой потом вручную можно было бы нарезать цифры и добавить в нужную подпапку...

Есть мастера, которые могли бы так доделать алгоритм распознавания? Или тогда комп каждое распознавание будет по полчаса делать?
не, у нас фигня какая-то получается :( даже при "большом" увеличении есть несколько проблем
1) размеры цифр "вверху" и "внизу" экрана разные. внизу больше (типа ближе к наблюдателю). И кстати, это не только цифры, но и все объекты. Потому сложно будет найти шахты (тем  более, что теперь сияние ввели для тех шахт, с которых самоцвет выпадет)
2) при применении colormode вообще "сказка" получается. Даже на увеличенных изображениях отличить 1 от 2 или 7  может быть проблематично, а при увеличении количества цветов - проявляется нежелательный фон за цифрами, которые не позволяет достоверно определить цифры
(https://photos-1.dropbox.com/t/2/AAABMxY6z9SxZMhmEt4rOCWTPvSmWhH9TRLXDQ7xHAWX1Q/12/131524863/png/32x32/1/_/1/2/primer2.png/EPuPiGUYiwwgBygH/M7LZQAX93MjCD2KCNlO4uz8mYn6_frLbv4qYvUq5eDw?size=1280x960&size_mode=3)
(https://photos-3.dropbox.com/t/2/AAAu7jF2wPuyHeiCdrfOvSOznrsn1MFATPVTZDGluE3OEA/12/131524863/png/32x32/1/_/1/2/primer.png/EPuPiGUYigwgBygH/wvBEBAM9G7kBjXei3wMyws79qHTQJWCLqDg92_bgVQo?size=1280x960&size_mode=3)
в общем, надо думать.
Полагаю, что отдельные цифры искать вообще нет смысла. С точки зрения игрового процесса надо искать не отдельные цифры, а прям числа -2-3 уровня от уровня игрока. Т.е. если цита 15, то желательно искать шахты  12,13,14,15. Следовательно искать надо только эти картинки, а не все цифры. Так ИМХО будет быстрее для скрипта и правильнее для игрока.
Title: Re: Gods and glory
Post by: gsukhado on August 08, 2017, 11:42:59 PM
Потому сложно будет найти шахты (тем  более, что теперь сияние ввели для тех шахт, с которых самоцвет выпадет)
...
Полагаю, что отдельные цифры искать вообще нет смысла. С точки зрения игрового процесса надо искать не отдельные цифры, а прям числа -2-3 уровня от уровня игрока. Т.е. если цита 15, то желательно искать шахты  12,13,14,15. Следовательно искать надо только эти картинки, а не все цифры. Так ИМХО будет быстрее для скрипта и правильнее для игрока.
1)У меня получается найти шахты почти все. Некоторые правда он распознает как несколько наложенных экземпляров друг на друга и чуть сдвинутых, но это не проблема для последующей обработки.
До сияния я еще не дорос, поэтому сказать не могу, скрин можешь прислать как выглядит?

2)попробовал, скрины не цифр, а чисел распознает тоже очень хреново, постоянно путает между собой, а если увеличить точность - то никак не распознает ((
Атаковать же вообще все шахты без учета их уровня - будут сплошные сливы на высокоуровневых шахтах... Писать "костыль" для отслеживания шахт на которых убиваешься и изымать их из массива, причем только на определенный срок, учитывая миграции шахт - имхо не лучшее решение, но возможно придется по нему пойти...
Title: Re: Gods and glory
Post by: gsukhado on August 08, 2017, 11:55:15 PM
цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.
Извини, похоже опечатался - имел в виду строки 74 и 76
Title: Re: Gods and glory
Post by: faser on August 09, 2017, 09:29:09 AM
цель 66 просто в лог писать, что бой идет. иногда полезно разбирать зацикливание. можно убрать
67 делаю скрин для проверки - закончился ли бой.
Извини, похоже опечатался - имел в виду строки 74 и 76
А, ну тут все просто. Если один раз нажать, то приз долго крутится на экране, а если сделать двойной клик, то можно сразу идти к следующему шагу.
Поэтому я делаю просто двойной клик.
Title: Re: Gods and glory
Post by: faser on August 09, 2017, 10:18:42 AM
1)У меня получается найти шахты почти все.
можешь тут код выложить с искомыми картинками? хочу понять, что именно ты ищешь и как.
одинаково хорошо ищется и вверху экрана и внизу?

1)
До сияния я еще не дорос, поэтому сказать не могу, скрин можешь прислать как выглядит?
вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Title: Re: Gods and glory
Post by: faser on August 09, 2017, 10:50:58 AM
а вообще, ведь  можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.

Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля  буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и  кликаем на следующий объект в списке найденных
Title: Re: Gods and glory
Post by: gsukhado on August 09, 2017, 03:17:11 PM
одинаково хорошо ищется и вверху экрана и внизу?
Я делаю поиск по нижней половине экрана. Нарезки пока чуть разные (экспериментирую еще с параметрами самого экрана), но размеры стараюсь делать не более 30-40 pxl. Позже могу в личку кинуть

вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Ссылка в дропбоксе не открывается. Даже если залогиниваюсь.  Не сделал ее публичной?
Title: Re: Gods and glory
Post by: gsukhado on August 09, 2017, 03:25:25 PM
а вообще, ведь  можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.

Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля  буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и  кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...
Title: Re: Gods and glory
Post by: faser on August 09, 2017, 04:35:28 PM
одинаково хорошо ищется и вверху экрана и внизу?
Я делаю поиск по нижней половине экрана. Нарезки пока чуть разные (экспериментирую еще с параметрами самого экрана), но размеры стараюсь делать не более 30-40 pxl. Позже могу в личку кинуть

вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Ссылка в дропбоксе не открывается. Даже если залогиниваюсь.  Не сделал ее публичной?
а так:?
(https://photos-6.dropbox.com/t/2/AAD68qYjX6Ey8qED_21Ub2oAhh87o4T6BGNU1vh1QOM_Pw/12/131524863/png/32x32/1/_/1/2/primer3.png/EPuPiGUYjQwgBygH/FjAqmOunl_EsM8cy5_z_r-03V0-aLt9zzf5rE_HODBI?size=1280x960&size_mode=3)
Title: Re: Gods and glory
Post by: faser on August 09, 2017, 04:59:33 PM
а вообще, ведь  можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.

Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля  буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и  кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...
Ну я подход "б" как раз и думал для того, чтобы минимизировать отлов скрипта админами.
"Открывать" объект все-равно надо для атаки, но по крайней мере, при таком анализе "ложных" открытий будет меньше.
Что до мигрирующих замков/лагерей, так это маловолнующий фактор. Новый анализ делается при каждом свайпе карты.
1. проанализировал
2. если есть куда - напал, и гоуту 1
3. сдвинул карту
4. гоуту 1
ну т.е. осуществляется человекоподобная логика поиска жертв.
Тут же можно добавить проверку на наличие ифритов/суккубов с выбором нужного генерала для такой атаки или игнора таких шахт.
алгоритм сдвига можно реализовать псевдо-хаотичный. типа такого:
(https://photos-1.dropbox.com/t/2/AADfASoylasA0pVnUtOhZmB2ncno4fqhXxdgn_2nqVuR0Q/12/131524863/png/32x32/1/_/1/2/%D0%BF%D0%BB%D0%B0%D0%BD%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B9.png/EPuPiGUYjgwgBygH/nvnTvvfm2nw_HFs1qas1svDiOJzDvRxit94ttA2vXq8?size=1280x960&size_mode=3)
высылай свой скрипт на личку
Title: Re: Gods and glory
Post by: gsukhado on November 13, 2017, 11:20:48 PM
Предлагаю скрипт фарма подзмелий игры Gods and glory
https://vk.com/godsandglory (https://vk.com/godsandglory)
Для русскоязычных игроков - группа в фейсбуке https://www.facebook.com/groups/GodsGloryRussia/

А сам код для фарма в подземельях в более универсализированном варианте у меня получился вот такой:
Code: (clickermann) [Select]
// Скрипт для Gods and Glory, фарм подземелий
// По замечаниям и предложениям - пишите на gsukhado@yandex.ru
#name "Фарм подземелий" - для универсального применения на разных компах

#define xmul(:$x_gr+INT((
#define )xmul:-$x_gr)*$x_peresch)
#define ymul(:$y_gr+INT((
#define )ymul:-$y_gr)*$y_peresch)

// задание изменяемых переменных
$avtopodb=0            // если =1 то авторасстановка ("автоподбор") войск включен
$nout=1 // идентификатор компьютера (для выставления координат)
$stavim_zaderhku=0 // если = 1 то срабатывают задержки, если = 2 то в двукратном размере
$proverk_nalichvoisk=1 // если =1 то проверяется наличие фуллки войск
$avto_naim=1            // если =1 то автоматически нанимаем какие-то войска
$dlia_povtorenij=1      // если =1 то цикл по числу повторений, иначе - по заполнению полоски
$chislo_povtorenij=290  // число повторений, только для цикла по числу а не по цвету
$voevat_v_odinochku=1  // если =1 то при утрате войск гг пудет пытаться воевать в одиночку; иначе - запустится найм войск
$vip_status=0 // =1 если есть VIP статус
$berem_uskorenno=1  // = 1 удобно для быстрых компов
$timer_vnachale=0 // если = 1, то запускается вначале таймер чтобы можно было убрать мышку (например если мешает TeamViewer)
$pereproverka_deistvij=1 // если =1 то все действия перепроверяются; важно для слабых компов

$x_mash_ish=442
$y_mash_ish=856
$x_gr=6  // размер неизменяемой границы слева
$y_gr=46  // размер неизменяемой границы сверху

switch($nout)   //  задание размера рабочей области
case(0) // вариант для ноута-1
   $x_mash_stavim=374
   $y_mash_stavim=734
case(1) // вариант для ноута-2
   $x_mash_stavim=442
   $y_mash_stavim=856
case(2) // вариант для стационара
   $x_mash_stavim=518
   $y_mash_stavim=990
case(3) // вариант для виртуалки (малое разрешение)
   $x_mash_stavim=374
   $y_mash_stavim=734
default
   print("Значение $nout какое-то странное = ", $nout)
end_switch

$x_peresch=($x_mash_stavim-2*$x_gr)/($x_mash_ish-2*$x_gr)
$y_peresch=($y_mash_stavim-2*$y_gr)/($y_mash_ish-2*$y_gr)


/////////////////////////////////////////////////////////
//процедура задержки для слабого ноута

sub(zaderhka, $how_long)
   if($stavim_zaderhku=1)
      waitms($how_long+rnd(0,80))
   end_if
   if($stavim_zaderhku=2)
      waitms($how_long+rnd(0,80))
   end_if
end_sub

/////////////////////////////////////////////////////////
//процедура клика с рандомным отклонением от точки клика на количество точек от -$rc до +$rc по обеим осям
sub(ggclick2, $var_in_1, $var_in_2, $var_in_3)
   $rc2=$var_in_3
   $nx2=INT($var_in_1+rnd(0-$rc2,$rc2))
   $ny2=INT($var_in_2+rnd(0-$rc2,$rc2))
   move($nx2,$ny2)
   ldown($nx2,$ny2)
   waitms(130+rnd(0,30))
   zaderhka(100)
   lup($nx2,$ny2)
   zaderhka(200)
end_sub

/////////////////////////////////////////////////////////
//  координаты атак                           /////
/////////////////////////////////////////////////////////
sub(koord_attack)
   // координаты атак: 300, 387, 473, 560, 647. Итого разница в 87 пикселя

   // вариант 1: бьем только верхний конкретный отряд
     ggclick2(xmul(370)xmul, ymul(300)ymul, 5)
   
   // вариант 2: бьем только нижние 4 отряда в подземелье - rnd(-1,3)
//    ggclick2(xmul(370)xmul, INT(ymul(387)ymul+87*rnd(-1,3))*$y_peresch,5)

 
   waitms(900+rnd(0,150))
end_sub

/////////////////////////////////////////////////////////
//       работа с окном                 ////////////////

sub(move_wind)
   
   $hwnd1=0
   $hwnd1 = wndfind("BlueStacks") // получаем HWND окна Блюстака
   if ($hwnd1 > 0)
      print("нашли окно BlueStack = ", $hwnd1)
   else
      print("почему-то найти не смогли")
   end_if
   WNDBUMP ($hwnd1)     // Окно на передний план
   WNDPOS ($hwnd1, 0, 0)  // подвинули окно в левый верхний угол
   
   waitms(1000+rnd(0,200))
   WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
   print("Было окно размером", $tmp_var1, "  ", $tmp_var2, " на ", $tmp_var3, "  ", $tmp_var4)
   
   //   waitms(500+rnd(0,200))
   //   WNDSIZE($hwnd1,$x_mash_stavim,$y_mash_stavim)
   //   print("Изменили")
   //   waitms(700+rnd(0,200))
end_sub

//////////////////////////////////////////////////////////
//     наем войск                  ///
///////////////
sub(naim_voisk_raboch)
   ggclick2(xmul(42)xmul, ymul(774)ymul, 5)
   waitms(3000+rnd(0,500))
   
   getscreen(xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
   colormode(6,xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
   if(pxl(xmul(155)xmul,ymul(95)ymul)=8339263)         // Если синий цвет - значит в поле
      ggclick2(xmul(42)xmul, ymul(774)ymul, 5)  //перешли в город
      waitms(3000+rnd(0,500))
      getscreen(xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
      colormode(6,xmul(78)xmul,ymul(82)ymul,xmul(163)xmul,ymul(108)ymul)
      //               SCREENSHOT(["my_analiz_проверка_поле-город_2"])
      zaderhka(900)
      if(pxl(xmul(144)xmul,ymul(92)ymul)=4145151)         // Если красный цвет - то значит в городе
         print  ("Находимся точно в городе")
      else
         print  ("Находимся НЕПОНЯТНО ГДЕ, ОСТАНОВ")
         halt
      end_if
   end_if
   
   ggclick2(xmul(308)xmul, ymul(690)ymul, 3) //открыли "армия"
   waitms(2500+rnd(0,500))
   zaderhka(1300)
   getscreen(xmul(60)xmul,ymul(595)ymul,xmul(375)xmul,ymul(675)ymul)
   colormode(6,xmul(60)xmul,ymul(595)ymul,xmul(375)xmul,ymul(675)ymul)
   waitms(2000+rnd(0,500))
   zaderhka(1300)
   
   if((pxl(xmul(93)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(123)xmul,ymul(656)ymul)=8339263))
      ggclick2(xmul(108)xmul, ymul(635)ymul, 5) // вошли в казарму-1
      waitms(2500+rnd(0,500))
      //            ggclick2(xmul(197)xmul, ymul(518)ymul, 8) // выбрали воин с молотом (4й сверху)
      ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
     
      waitms(2500+rnd(0,500))
      ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
      waitms(2500+rnd(0,500))
     
      ggclick2(xmul(42)xmul, ymul(774)ymul, 5)  //перешли в город
      waitms(2500+rnd(0,500))
   end_if
   
   if((pxl(xmul(205)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(234)xmul,ymul(656)ymul)=8339263))
      ggclick2(xmul(216)xmul, ymul(635)ymul, 5) // вошли в казарму-2
      waitms(2500+rnd(0,500))
      //            ggclick2(xmul(210)xmul, ymul(384)ymul, 8) // выбрали ифритов (2й сверху)
      //           ggclick2(xmul(210)xmul, ymul(455)ymul, 8) // выбрали клериков (3й сверху)
      ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
      waitms(2500+rnd(0,500))
      ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
      waitms(2500+rnd(0,500))
     
      ggclick2(xmul(42)xmul, ymul(774)ymul, 5)  //перешли в город
      waitms(2500+rnd(0,500))
   end_if
   
   if((pxl(xmul(314)xmul,ymul(623)ymul)=8339263)&(pxl(xmul(344)xmul,ymul(656)ymul)=8339263))
      ggclick2(xmul(327)xmul, ymul(635)ymul, 5) // вошли в казарму-3
      waitms(2500+rnd(0,500))
      ggclick2(xmul(200)xmul, ymul(573)ymul, 4) // выбрали лучников (5й сверху)
      waitms(2500+rnd(0,500))
      ggclick2(xmul(340)xmul, ymul(615)ymul, 3) // нажали кнопку "Нанять"
      waitms(2500+rnd(0,500))
     
     
      ggclick2(xmul(42)xmul, ymul(774)ymul, 5)  // открыли город
      waitms(2500+rnd(0,500))
   end_if
   ggclick2(xmul(123)xmul, ymul(774)ymul, 5)  // перешли в подземелье
   waitms(2500+rnd(0,500))
   
   $time_wait=3
   print("поставили войска строиться, ждем ", $time_wait ," минут")
   wait(60*$time_wait+rnd(0,40))
   
end_sub



/////////////////////////////////////////////////////////
//      Основная подпрограмма

sub(main_farm)
   // ---проверим на наличие войск в армии
   getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
   colormode(6,0,0,xmul(440)xmul,ymul(855)ymul)
   // SCREENSHOT(["my_analiz_проверка_войск_предварит"])
   zaderhka(1500)
   //   $gg_fill_voisk=1
   //   $gg_fill_voisk=pxl(xmul(235)xmul,ymul(263)ymul)
   waitms(900+rnd(0,100))
   
   if($avtopodb=1)
      zaderhka(1000)
      ggclick2(xmul(330)xmul, ymul(275)ymul, 5)  //  это "автоподбор"
      waitms(400+rnd(0,100))
      if($pereproverka_deistvij=1)
         zaderhka(500)
         ggclick2(xmul(330)xmul, ymul(275)ymul, 5)  //  для слабого ноута на всякий случай еще раз "автоподбор"
         zaderhka(500)
      end_if
      waitms(900+rnd(0,100))
      zaderhka(1000)
   end_if
   
   zaderhka(1300)
   
   if($proverk_nalich_voisk=1)
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      // SCREENSHOT(["my_analiz_проверка_войск"])
      $gg_fill_voisk=pxl(xmul(235)xmul,ymul(263)ymul)
      //      if($gg_fill_voisk=4144959)         //- это цвет для colormode-6
      if($gg_fill_voisk=8355711)
         print("войска закончились!!!!")
         waitms(3000+rnd(0,500))
         if ($avto_naim = 1)     // это для автонайма войск
            naim_voisk_raboch()
         else
            print("!!__войск НЕТ и НЕ нанимаем__!!. ОСТАНОВ")
            halt
         end_if
         GOTO(proigrali)
      end_if
   end_if
   
   // ---Кнопка после настройки войск "Начать бой"
   
   zaderhka(1500)
   
   to_begin_boi_2:
   ggclick2(xmul(370)xmul, ymul(663)ymul, 8)
   // print("успешно кликнули-2")
   waitms(950 + rnd(0,140))
   
   
   if($pereproverka_deistvij=1)          // проверка для слабого ноута - что нажали Начать_бой-2 успешно
      zaderhka(800)
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      zaderhka(800)
      if(pxl(xmul(384)xmul,ymul(270)ymul)=8388479)  // это проверили по зелоному в Автоподбор
         print("Не получилось, нажмем НАЧАТЬ БОЙ-2 повторно")
         GOTO(to_begin_boi_2)
      end_if
   end_if
   
   
   zaderhka(1000)
   
   getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
   colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
   //   SCREENSHOT(["my_analiz_подберите_войско"])
   if((pxl(xmul(86)xmul,ymul(63)ymul)=8388479)&(pxl(xmul(309)xmul,ymul(61)ymul)=16777087)&(pxl(xmul(326)xmul,ymul(446)ymul)=16777087))    // ситуация "наберите войско используя автоподбор...или шанс крайне мал..."
      // ресурс лес, ресурс пыль, кнопка назад
     
      if($voevat_v_odinochku=1)  // выбор что гг воюет без войск
         ggclick2(xmul(150)xmul, ymul(445)ymul, 7)
         waitms(2500+rnd(0,500))
      else
         ggclick2(xmul(296)xmul, ymul(445)ymul, 7)
         waitms(2500+rnd(0,500))
         
         naim_voisk()
         GOTO(proigrali)
      end_if
   end_if
   
   // ---Кнопка после появления противника "Начать бой"
   
   to_begin_boi_3:
   zaderhka(1000)
   ggclick2(xmul(220)xmul, ymul(690)ymul, 6)
   // print("успешно кликнули-3 (начали бой)")
   
   zaderhka(1000)
   if($pereproverka_deistvij=1)          // проверка для слабого ноута - что нажали Начать_бой-2 успешно
      zaderhka(500)
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      zaderhka(1200)
      if(pxl(xmul(278)xmul,ymul(689)ymul)=16744319)  // это проверили по синему в кнопке Начать бой
         print("Не получилось, нажмем НАЧАТЬ БОЙ-3 повторно")
         GOTO(to_begin_boi_3)
      end_if
   end_if
   // ---Ожидание конца боя
   
   waitms(1000+rnd(0,200))
   getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
   colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
   //   SCREENSHOT(["my_analiz_начало_боя_7_"])
   zaderhka(1000)
   print("бой идет", pxl(xmul(360)xmul,ymul(565)ymul))
   while(((pxl(xmul(360)xmul,ymul(565)ymul)!8355711)|(pxl(xmul(245)xmul,ymul(565)ymul)!8355711))&(pxl(xmul(295)xmul,ymul(414)ymul)!16744319))
      waitms(3000+rnd(0,300))
      zaderhka(3000)
      // print("бой идет",pxl(xmul(360)xmul,ymul(565)ymul))
     
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      zaderhka(800)
   end_cyc
   
   zaderhka(1000)
   if(pxl(xmul(295)xmul,ymul(414)ymul)=16744319)   //проверка поражения
      print("бой - поражение")
      waitms(200+rnd(0,100))
      ggclick2(xmul(221)xmul, ymul(406)ymul, 7)
     
      to_povtor_porazhenie:
      zaderhka(1000)
      if($pereproverka_deistvij=1)          // проверка для слабого ноута - что нажали успешно
         zaderhka(500)
         getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
         colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
         zaderhka(800)
         if(pxl(xmul(295)xmul,ymul(414)ymul)=16744319)  // это проверили наличие поражения
            print("Не получилось, нажмем после поражения повторно")
            GOTO(to_povtor_porazhenie)
         end_if
      end_if
     
     
      goto(proigrali)
   end_if
   
   zaderhka(1000)
   // ---Выбор сундука; сундуки на 60, 136, 209, 283, 360, т.е. интервал 75
   $sund_num=rnd(1,5)
   ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
   print("Взяли сундук номер ", $sund_num)
   waitms(100 + rnd(0,50))
   zaderhka(1200)
   if ($berem_uskorenno=1)
      ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
      waitms(400 + rnd(0,50))
   else
      waitms(3000 + rnd(0,500))
   end_if
   
   zaderhka(3000)
   
   if ($vip_status=1)
      $sund_num2=rnd(1,5)
      waitms(200 + rnd(0,100))
      zaderhka(300)
      while($sund_num2=$sund_num)
         $sund_num2=rnd(1,5)
      end_cyc
      waitms(200 + rnd(0,100))
      ggclick2((xmul(60)xmul+($sund_num2-1)*75*$x_peresch), ymul(502)ymul, 7)
      print("Взяли сундук номер ", $sund_num2)
      zaderhka(4200)
      waitms(150 + rnd(0,50))
      if ($berem_uskorenno=1)
         ggclick2((xmul(60)xmul+($sund_num-1)*75*$x_peresch), ymul(502)ymul, 7)
         waitms(450 + rnd(0,50))
      else
         waitms(3000 + rnd(0,500))
      end_if
   end_if
   
   zaderhka(5000)
   
   // ---Кнопка "Закрыть"
   
   to_povtor_sunduki:
   waitms(800 + rnd(0,50))
   
   if($pereproverka_deistvij=1)          // проверка для слабого ноута - что взяли сундуки
      zaderhka(500)
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      zaderhka(800)
      if((pxl(xmul(154)xmul,ymul(561)ymul)=8388479)&(pxl(xmul(50)xmul,ymul(556)ymul)=8388479))  // это проверили что слева зеленое "Открыть все"
         
         if(pxl(xmul(256)xmul,ymul(564)ymul)=8355711)  // это проверили что справа "Закрыть" серое
            ggclick2((xmul(60)xmul, ymul(502)ymul, 7)
            waitms(1600+rnd(0,100))
            ggclick2((xmul(136)xmul, ymul(502)ymul, 7)
            waitms(1600+rnd(0,100))
            ggclick2((xmul(209)xmul, ymul(502)ymul, 7)
            waitms(1600+rnd(0,100))
            ggclick2((xmul(283)xmul, ymul(502)ymul, 7)
            waitms(1600+rnd(0,100))
            ggclick2((xmul(360)xmul, ymul(502)ymul, 7)
            waitms(1600+rnd(0,100))
            print("Еще раз попробовали открыть сундуки")
            GOTO(to_povtor_sunduki)
         end_if
         
      end_if
   end_if
   
   
   to_povtor_zakrytie:
   zaderhka(1000)
   ggclick2(xmul(290)xmul, ymul(560)ymul, 7)
   print("Закрыли окно")
   
   if($pereproverka_deistvij=1)          // проверка для слабого ноута - что нажали успешно
      zaderhka(500)
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      zaderhka(800)
     
      if((pxl(xmul(154)xmul,ymul(561)ymul)=8388479)&(pxl(xmul(50)xmul,ymul(556)ymul)=8388479)&(pxl(xmul(245)xmul,ymul(558)ymul)=16744319))  // это проверили что слева "Открыть все" зеленая, а справа "Закрыть" синяя"
         print("Не получилось, нажмем на закрытие повторно")
         GOTO(to_povtor_zakrytie)
end_if
   end_if
   
   
   proigrali:
   waitms(800+rnd(0,100))
end_sub


/////////////////////////////////////////////////////////
//       main part основная часть       ////////////////
////////////////////////////////////////////////////////

if($timer_vnachale=1)
   print("===========================")
   print("таймер убрать мышку")
   $ubrat_mysh_MAX=15
   for($ubrat_mysh=1, $ubrat_mysh<$ubrat_mysh_MAX, 2)
      wait(2)
      print("таймер убрать мышку, осталось=", $ubrat_mysh_MAX-$ubrat_mysh)
   end_cyc
end_if

print("===========================")
print("Начинаем фармить подземелье")

UNDEFINE ($gogs)
DEFINE ($gogs, 1)
move_wind() // подпрограмма чтобы окно сдвинуть в (0,0)

// если надо сделать оперативный скриншот текущего состояния:
// getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
// colormode(6,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_Тест_6_"])
// colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
// SCREENSHOT(["my_analiz_Тест_7_"])
// waitms(2000+rnd(0,200))
// print("ОСТАНОВ")
// halt

getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
zaderhka(1300)

if ($dlia_povtorenij=1)
   print("Вариант для конкретного числ повторений")
   for ($gogs, $gogs < $chislo_povtorenij, 1)
      print("Задали начало цикла, цикл номер= ", $gogs)
      waitms(200+rnd(0,50))
      zaderhka(1300)
      to_koord_attack_povtor:
      koord_attack()
      waitms(200+rnd(0,50)
      if($pereproverka_deistvij=1)
         zaderhka(700)
         getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
         colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
         zaderhka(700)
         if(pxl(xmul(405)xmul,ymul(300)ymul)=8388479)
            print("Не получилось, нажмем НАЧАТЬ БОЙ-1 повторно")
            GOTO(to_koord_attack_povtor)
end_if
      end_if
     
      zaderhka(1300)
      main_farm()
      zaderhka(1300)
      waitms(200+rnd(0,50))
   end_cyc
   
else
   print("Вариант для заполнения полоски")
   while(pxl(xmul(330)xmul,ymul(212)ymul)=8355711)
      $gogs=$gogs+1
      print("Задали начало цикла, цикл номер= ", $gogs-1)
      waitms(1000+rnd(0,200))
     
      koord_attack()
      main_farm()
     
      getscreen(0,0,xmul(440)xmul,ymul(855)ymul)
      colormode(7,0,0,xmul(440)xmul,ymul(855)ymul)
      // SCREENSHOT(["my_analiz_для_продолжения_цикла"])
      print("цвет для продолжение цикла-2 (продолжаем если 8355711)= ", pxl(xmul(330)xmul,ymul(212)ymul))
      waitms(2000+rnd(0,200))
   end_cyc
   
end_if
//конец цикла, если очки набрались
print("мы у цели, дальше самостоятельно")
print("!!____!!")
halt

Title: Re: Gods and glory
Post by: gsukhado on November 17, 2017, 10:39:51 PM
А вот это существенно более сложный алгоритм - уже для фарма наземных шахт. Постарался максимально закомментировать, чтобы было понятно какие настройки за что отвечают
...опс, "Сообщение превышает максимально допустимую длину (20000 знаков)", кодом вставить не получается, поэтому вставляю только начало и прилагается файлом

Code: (clickermann) [Select]
#name "Фарм Наземный - поштучное распознавание"
// Скрипт для Gods and Glory, фарм наземных шахт
// По замечаниям и предложениям - пишите на gsukhado@yandex.ru

#define xmul(:$x_gr_new+INT((
#define )xmul:-$x_gr_ish)*$x_peresch)
#define ymul(:$y_gr+INT((
#define )ymul:-$y_gr)*$y_peresch)

//   Изменяемые переменные
$glob_map_SUMMARNO=50000 // общее число повторений работы по карте
//$glob_map_for_centrirovanie_MAX_1=15 // как часто прыгаем в начало, минимальное значение
//$glob_map_for_centrirovanie_MAX_2=20 // как часто прыгаем в начало, максимальное значение
$max_lvl_shaht=15 // максимальный уровень шахт, которые можем атаковать
$verojatn_proverki_voisk=3 // доля вероятности проверки войск, чем выше - тем реже проверяем
$rezhim_obuchenia=-1 // если =1 то дается больше времени на ввод цифры, если =2 то вообще все смотрим без атак, если = -1 то атакуем все без проверок уровня
$zadania_berem=0 // обычно =1 но на случай если надо сутки не брать задания
$verojatn_zadania_berem=4 // доля вероятности брать задания, чем выше - тем реже проверяем
$menshe_etogo_nabirat_voiska=690
$delaem_poisk_monet=1
$podtv_zavershenie_MAX=2 // количество экранов с уже собранными монетами
$tsentriruem_po_citadel_OR_alians=1 // если =1 то центрирование по цитадели, иначе - по альянсу
$nout=1 // номер компа для задания размеров рабочей области (для выставления координат)

$x_mash_ish=442
$y_mash_ish=856
$x_gr_ish=6  // размер неизменяемой границы слева
if($nout=4)
$x_gr_new=36
else
$x_gr_new=6
end_if
$y_gr=46  // размер неизменяемой границы сверху

switch($nout)
case(0) // вариант для ноута-1
   $x_mash_stavim=374
   $y_mash_stavim=734
case(1) // вариант для ноута-2
   $x_mash_stavim=442
   $y_mash_stavim=856
case(2) // вариант для стационара
   $x_mash_stavim=518
   $y_mash_stavim=990
case(3) // вариант для виртуалки для ноута (малое разрешение)
   $x_mash_stavim=374
   $y_mash_stavim=734
default
   print("Значение $nout какое-то странное = ", $nout)
end_switch

$x_peresch=($x_mash_stavim-2*$x_gr_new)/($x_mash_ish-2*$x_gr_ish)
$y_peresch=($y_mash_stavim-2*$y_gr)/($y_mash_ish-2*$y_gr)

//на случай если надо быстро сделать скрин экрана
//print("Тестовый скрин начали")
//waitms(1700+rnd(0,200))
//getscreen()
//colormode(6)
//SCREENSHOT(["my_analiz-Тестовый__6_"])
//colormode(7)
//SCREENSHOT(["my_analiz-Тестовый__7_"])
//print("Тестовый скрин Завершили. ОСТАНОВ")
/halt

////////////////////////////////////////////////////////////////////////////////
//////////  описание важных подпрограмм                                            ////
////////////////////////////////////////////////////////////////////////////////
//lines($x1_text,$y1_text,$x2_text,$y2_text) // определяет координаты строк
//ответ - массивы   $x1_line_arr,$y1_line_arr,$x2_line_arr,$y2_line_arr
/////////
//pos_size($x1_line,$y1_line,$x2_line,$y2_line) // координаты и количество символов
//ответ - массивы   $x1_char_arr,$y1_char_arr,$x2_char_arr,$y2_char_arr
////////
//shape($x1_char,$y1_char,$x2_char,$y2_char)  //очертание каждого символа
//ответ - строка очертания вида  01110311112042200240~
////////
//reader($shape)  //обучение и распознавание
//если цифра не распознана, то вылезет окно ввода, где нужно вписать нужную цифру, на эту цифру указывает курсор.
//ответ - строка $all_str


////////////////////////////////////////////////////////////////////////////////
//==============================================================================
//процедура клика с рандомным отклонением от точки клика на количество точек от 0 до $rc по обеим осям
//======

sub(ggclick2, $var_in_1, $var_in_2, $var_in_3)
   $rc2=$var_in_3
   $nx2=INT($var_in_1+2*rnd(0-$rc2,$rc2)) //горизонтально двукратное отклонение
   $ny2=INT($var_in_2+rnd(0-$rc2,$rc2))
   // print("Задали значения клика: nx2=", $nx2, "(при вход.=", $var_in_1,") ny2=", $ny2,"(при вход.=", $var_in_2,") rc2=", $rc2)
   move($nx2,$ny2)
   ldown($nx2,$ny2)
   waitms(80+rnd(0,60))
   lup($nx2,$ny2)
end_sub

sub(ggclick1, $var_in_1, $var_in_2, $var_in_3)
   $rc1=$var_in_3
   $nx1=INT($var_in_1+rnd(0-$rc1,$rc1))  //горизонтально однократное отклонение
   $ny1=INT($var_in_2+rnd(0-$rc1,$rc1))
   // print("Задали значения клика: nx2=", $nx2, "(при вход.=", $var_in_1,") ny2=", $ny2,"(при вход.=", $var_in_2,") rc2=", $rc2)
   move($nx1,$ny1)
   //   print("клик на: ", $nx1, " " , $ny1)       //проверка что работаем в нужной точке
   waitms(400+rnd(0,60))
   ldown($nx1,$ny1)
   waitms(80+rnd(0,60))
   lup($nx1,$ny1)
end_sub

/////////////////////////////////////////////////////////
//       работа с окном                 ////////////////

sub(move_wind)
   $hwnd1=0
   $hwnd1 = wndfind("BlueStacks") // получаем HWND окна Блюстака
   if ($hwnd1 > 0)
      print("нашли окно BlueStack = ", $hwnd1)
   else
      print("почему-то найти не смогли")
   end_if
   WNDBUMP ($hwnd1)     // Окно на передний план
   WNDPOS ($hwnd1, 0, 0)  // подвинули окно в левый верхний угол
   
   waitms(1000+rnd(0,200))
   WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
   print("Окно размером", $tmp_var1, "  ", $tmp_var2, " на ", $tmp_var3, "  ", $tmp_var4)
   waitms(600+rnd(0,50))
   WNDSIZE($hwnd1,$x_mash_stavim,$y_mash_stavim)
   
   //WNDSIZE($hwnd1,370,734)
   print("изменили размер окна")
   waitms(200+rnd(0,20))
   //WNDGETINFO ($hwnd1, $tmp_var1, $tmp_var2, $tmp_var3, $tmp_var4)
   //print("окно", $tmp_var1, "  ", $tmp_var2)
   //print("на ", $tmp_var3, "  ", $tmp_var4)
   //halt
   
end_sub
//==============================================================================
////////////////////////////////////////////////////////////////////////////////
/////////разбивает текст на строки//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

SUB(lines,$x1_text,$y1_text,$x2_text,$y2_text)
   UNDEFINE ($x1_line_arr)
   UNDEFINE ($y1_line_arr)
   UNDEFINE ($x2_line_arr)
   UNDEFINE ($y2_line_arr)
   //      print("===>подпрогр Lines")
   
   
   
   IF(PXLCOUNT($x1_text,$y1_text,$x1_text,$y2_text,$char_color)=($y2_text-$y1_text+1))
      print("...(первый столбец забит фоном, НЕ учитывается)")
      while(PXLCOUNT($x1_text,$y1_text,$x1_text,$y2_text,$char_color)=($y2_text-$y1_text+1))
         inc($x1_text)
         //         print("увеличиваем $x1_text= ", $x1_text , " при $x2_text= ", $x2_text)
      END_CYC
      if (($x1_text+3)>$x2_text)   //т.е. вообще везде какие-то помехи
         $uspeh_raspoznav=0
         GOTO(to_end_lines)
      end_if
   END_IF
   
   
   
   IF_PIXEL_IN($x1_text,$y1_text, $x1_text,$y2_text, $char_color)
      print("...(текст не влазит в границы распознавания слева)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
   END_IF
   
   IF_PIXEL_IN($x2_text,$y1_text, $x2_text,$y2_text, $char_color)
      print("...(текст не влазит в границы распознавания справа)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
   END_IF
   
   IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<($x2_text-$x1_text+1))
      print("...(первая строка обрезана, НЕ учитывается)") // в т.ч. скидывает помехи?
      while(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<($x2_text-$x1_text+1))
         inc($y1_text)
         //         print("увеличиваем $y1_text= ", $y1_text , " при $y2_text= ", $y2_text)
      END_CYC
      if (($y1_text+$h_str-2)>$y2_text)   //т.е. вообще везде какие-то помехи
         $uspeh_raspoznav=0
         GOTO(to_end_lines)
      end_if
   END_IF
   
   //   print("начинаем глючный $y1_text= ", $y1_text , " $y2_text= ", $y2_text)
   
   while($y1_text<$y2_text)
      //      print("исходное $y1_text= ", $y1_text, " и $y2_text=", $y2_text)
      while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))&($y1_text<$y2_text))
         inc($y1_text)
         //         print("увеличиваем $y1_text= ", $y1_text , " при $y2_text= ", $y2_text)
      END_CYC
      //            print("взяли для границ цифр $y1_text= ", $y1_text)
      //      SCREENSHOTEX($x1_text,$y1_text,$x2_text,$y2_text, ["my_analiz_кол-во войск_- верхняя граница"])
     
      IF($y1_text<$y2_text)
         arrpush($x1_line_arr, $x1_text)
         arrpush($y1_line_arr, $y1_text)
         
         $h_str_temp=0
         while(($h_str_temp<$h_str)&($y1_text<$y2_text))
            //           print("вошли в цикл $h_str_temp= ", $h_str_temp)
            while(((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color))<($x2_text-$x1_text+1))&($y1_text<$y2_text))
               inc($y1_text)
               inc($h_str_temp)
               
            END_CYC
            //                        print("сюда дошли?_ $h_str_temp=", $h_str_temp, " $h_str=", $h_str, " $y1_text=", $y1_text, " $y2_text=", $y2_text)     
            IF(($h_str_temp<$h_str)&($y1_text<$y2_text))
               
               while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))&($y1_text<$y2_text))
                  inc($y1_text)
                 
               END_CYC
               $h_str_temp = 0
               $del_arr = arrpop($x1_line_arr)
               $del_arr = arrpop($y1_line_arr)
               arrpush($x1_line_arr, $x1_text)
               arrpush($y1_line_arr, $y1_text)
            END_IF
         END_CYC
      END_IF
      //      print("после if ?")
     
      IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=($x2_text-$x1_text+1))
         arrpush($x2_line_arr, $x2_text)
         arrpush($y2_line_arr, $y1_text-1)
      else
         print("...(последняя строка обрезана, НЕ учитывается)")
         $del_arr = arrpop($x1_line_arr)
         $del_arr = arrpop($y1_line_arr)
      END_IF
   END_CYC
   
   //   print("итог Lines- количество строк = ",arrsize($x1_line_arr))
   
   // координаты в лог и скрины
   //FOR($a=0,$a<arrsize($x1_line_arr))
   //      print($x1_line_arr[$a]," ",$y1_line_arr[$a]," ",$x2_line_arr[$a]," ",$y2_line_arr[$a])
   //   SCREENSHOTEX($x1_line_arr[$a],$y1_line_arr[$a],$x2_line_arr[$a],$y2_line_arr[$a], ["подпрогр_Lines_скрин_итога_"])
   //END_CYC
   
   IF(arrsize($x1_line_arr)=0)
      print("...(текста не найдено)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
   END_IF
   
   to_end_lines:
   
END_SUB
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
/////////размер и количество символов в строке//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(pos_size,$x1_line,$y1_line,$x2_line,$y2_line)
   //   print("===>подпрогр pos_size")
   UNDEFINE ($x1_char_arr)
   UNDEFINE ($y1_char_arr)
   UNDEFINE ($x2_char_arr)
   UNDEFINE ($y2_char_arr)
   
   
   FOR($x1_line_temp=$x1_line,$x1_line_temp<$x2_line+1)
      FOR($y1_line_temp=$y1_line,$y1_line_temp<$y2_line+1)
         IF(pxl($x1_line_temp,$y1_line_temp)=$char_color)
            arrpush($x1_char_arr,$x1_line_temp)
            while(PXLCOUNT($x1_line_temp,$y1_line,$x1_line_temp,$y2_line,$back_color)<$y2_line-$y1_line+1)
               inc($x1_line_temp)
            END_CYC
            arrpush($x2_char_arr,$x1_line_temp-1)
         END_IF
      END_CYC
   END_CYC
   
   FOR($i_char=0,$i_char<arrsize($x1_char_arr))
      SCANPXL ($pix_temp,$x1_char_arr[$i_char],$y1_line,$x2_char_arr[$i_char],$y2_line,$char_color)
      arrpush($y1_char_arr,$pix_temp[1])
      arrpush($y2_char_arr,$pix_temp[arrsize($pix_temp)-1])
      UNDEFINE ($pix_temp)
   END_CYC
   
   
   //   print("количество символов в строке - ",arrsize($x1_char_arr))
   
   //скрины каждого символа
   //   FOR($a=0,$a<arrsize($x1_char_arr))
   //      SCREENSHOTEX($x1_char_arr[$a],$y1_char_arr[$a],$x2_char_arr[$a],$y2_char_arr[$a], ["подпр_Pos_size_очертание_символа_"])
   //   END_CYC
   
END_SUB
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
////////////////очертание символов//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(shape,$x1_char,$y1_char,$x2_char,$y2_char)
   //   print("===>подпрогр shape")
   UNDEFINE($left_1)
   UNDEFINE($left_2)
   UNDEFINE($left_3)
   UNDEFINE($left_4)
   UNDEFINE($left_5)
   UNDEFINE($right_1)
   UNDEFINE($right_2)
   UNDEFINE($right_3)
   UNDEFINE($right_4)
   UNDEFINE($right_5)
   UNDEFINE($up_1)
   UNDEFINE($up_2)
   UNDEFINE($up_3)
   UNDEFINE($up_4)
   UNDEFINE($up_5)
   UNDEFINE($down_1)
   UNDEFINE($down_2)
   UNDEFINE($down_3)
   UNDEFINE($down_4)
   UNDEFINE($down_5)
   
   //лево
   FOR($temp=$x1_char,(pxl($temp,$y2_char)!$char_color)&($temp<$x2_char))
      inc($left_1)
   END_CYC
   $left_1 = ROUND($left_1/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_1 > 9)
      $left_1 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
      inc($left_2)
   END_CYC
   $left_2 = ROUND($left_2/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_2 > 9)
      $left_2 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp<$x2_char))
      inc($left_3)
   END_CYC
   $left_3 = ROUND($left_3/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_3 > 9)
      $left_3 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
      inc($left_4)
   END_CYC
   $left_4 = ROUND($left_4/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_4 > 9)
      $left_4 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y1_char)!$char_color)&($temp<$x2_char))
      inc($left_5)
   END_CYC
   $left_5 = ROUND($left_5/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_5 > 9)
      $left_5 = 9
   END_IF
   
   //право
   FOR($temp=$x2_char,(pxl($temp,$y2_char)!$char_color)&($temp>$x1_char),-1)
      inc($right_1)
   END_CYC
   $right_1 = $right_1 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_1 = ROUND($right_1/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_1 > 9)
      $right_1 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_2)
   END_CYC
   $right_2 = $right_2 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_2 = ROUND($right_2/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_2 > 9)
      $right_2 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_3)
   END_CYC
   $right_3 = $right_3 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_3 = ROUND($right_3/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_3 > 9)
      $right_3 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_4)
   END_CYC
   $right_4 = $right_4 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_4 = ROUND($right_4/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_4 > 9)
      $right_4 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y1_char)!$char_color)&($temp>$x1_char),-1)
      inc($right_5)
   END_CYC
   $right_5 = $right_5 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_5 = ROUND($right_5/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_5 > 9)
      $right_5 = 9
   END_IF
   
   //верх
   FOR($temp=$y1_char,(pxl($x1_char,$temp)!$char_color)&($temp<$y2_char))
      inc($up_1)
   END_CYC
   $up_1 = ROUND($up_1/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_1 > 9)
      $up_1 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_2)
   END_CYC
   $up_2 = ROUND($up_2/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_2 > 9)
      $up_2 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_3)
   END_CYC
   $up_3 = ROUND($up_3/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_3 > 9)
      $up_3 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_4)
   END_CYC
   $up_4 = ROUND($up_4/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_4 > 9)
      $up_4 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x2_char,$temp)!$char_color)&($temp<$y2_char))
      inc($up_5)
   END_CYC
   $up_5 = ROUND($up_5/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_5 > 9)
      $up_5 = 9
   END_IF
   
   //низ
   FOR($temp=$y2_char,(pxl($x1_char,$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_1)
   END_CYC
   $down_1 = ROUND($down_1/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_1 > 9)
      $down_1 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_2)
   END_CYC
   $down_2 = ROUND($down_2/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_2 > 9)
      $down_2 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_3)
   END_CYC
   $down_3 = ROUND($down_3/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_3 > 9)
      $down_3 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_4)
   END_CYC
   $down_4 = ROUND($down_4/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_4 > 9)
      $down_4 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x2_char,$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_5)
   END_CYC
   $down_5 = ROUND($down_5/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_5 > 9)
      $down_5 = 9
   END_IF
   
   
   //   print($left_1," ",$left_2," ",$left_3," ",$left_4," ",$left_5)
   //   print($right_1," ",$right_2," ",$right_3," ",$right_4," ",$right_5)
   //   print($up_1," ",$up_2," ",$up_3," ",$up_4," ",$up_5)
   //   print($down_1," ",$down_2," ",$down_3," ",$down_4," ",$down_5)
   
   $shape_str=STRCONCAT($left_1,$left_2,$left_3,$left_4,$left_5,$right_1,$right_2,$right_3,$right_4,$right_5,$up_1,$up_2,$up_3,$up_4,$up_5,$down_1,$down_2,$down_3,$down_4,$down_5,"~")
   
   //print($shape_str)
   
END_SUB

Title: Re: Gods and glory
Post by: Kpekep on November 19, 2017, 02:20:18 PM
Вылезает ошибка !
Title: Re: Gods and glory
Post by: gsukhado on November 22, 2017, 05:19:14 PM
Вылезает ошибка !
1.Алгоритм не рассчитан на одиночного игрока, нужна территория альянса. Которую задать в соответствующих переменных, описанных в примечаниях к коду
2.Нужно взять скриншоты шахт для поиска, и в программе прописать к ним локальный путь
Title: Re: Gods and glory
Post by: gsukhado on November 22, 2017, 05:32:46 PM
Но другая останется. Все версии BlueStacks отображаются несколько по разному и чтоб всё отображалось как у автора вам потребуется использовать его версию эмулятора.
У меня 3.50.50.1647. С твиком на запрет обновления версии и запрет показа рекламы.
Но в общем тот кто захочет применить для себя данный алгоритм - все равно должен будет хотя бы в основах Кликермана разобраться, чтобы что-то под себя обновлять и "допиливать" - например, какие именно войска нанимать для фарма, это полностью индивидуально...
Title: Re: Gods and glory
Post by: gsukhado on January 13, 2018, 03:49:10 PM
Чуть обновил код для фарма в подземельях
Title: Re: Gods and glory
Post by: Kpekep on January 15, 2018, 09:04:18 PM
Чуть обновил код для фарма в подземельях
Привет, как нибудь  полегче бы фарм шахт сделал , чисто фарм, без всякого найма войск и тому подобного .
P.S. За подземку отдельное спасибо !
Title: Re: Gods and glory
Post by: whonix on January 19, 2018, 09:48:27 AM
Поддерживаю вариант с облегченной версией скрипта- только для фарма наземных шахт без найма юнитов и т.д.
Title: Re: Gods and glory
Post by: ounce on January 19, 2018, 10:11:30 PM
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??
Title: Re: Gods and glory
Post by: ounce on January 20, 2018, 10:02:39 PM
Не правильно понимаете, от слова совсем.
И? Есть реализация или нет?  :)
Title: Re: Gods and glory
Post by: angelpsix on January 31, 2018, 10:03:37 PM
Возвращаясь к программированию бота ддя Gods and Glory:
1) касательно подземелий, лучше делать клик не с паузой времени (хоть и рандомной), а снимок экрана + поиск нужной кнопки. Поясню почему, интернет может забарахлить, из игры может выкинуть (тех работы), ПК может лагануть и пропустить нужный цикл и выйдет бред. А вот с картинками очень да же круто выходит, глаз еще да же картинку не увидел, а кликер уже нажал (это без задержек) и нажал куда нужно ! Добавляя к этому рандомную паузу мы делаем более реалистичными наши действия и приближенными к реалям (когда бьешь одну и ту же шахту час в живую, там практически нет задержки по времени).
2) касательно шахт. После обновления в 2017м году (где то в начале года) фон номера шахты значительно затемнили и это нам большой плюс в распозновании.
Вопрос как понять что у шахты откат это первый вопрос.
Как отсеивать те шахты которые не попадают в наш радиус обзора (территория имеет форму шестиугольника, а у нас угол обзора Квадрат). как вариант сравнивать координаты открытой шахты, но это палевно слишком, так же как и открывать шахту на которую напали и у нее откат.
Title: Re: Gods and glory
Post by: gsukhado on February 16, 2018, 06:00:06 PM
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??
А в чем идея свайпа? для чего в G&G хотите использовать?
Title: Re: Gods and glory
Post by: Maisto on August 08, 2018, 07:25:22 PM
Приветствую
А наглостью будет просить необходимые скриншоты ?
при запуске выдаёт ошибку по строкам 5,6,7,8 ввиду того что я использую Nox и не совпадают координаты и разрешение ?
(https://image.ibb.co/d546Ve/Error.jpg)
Грызу мат часть чтобы понять, что за что отвечает,но некоторые комментарии вызывают еще больше вопросов

Up
Первая проблема решилась изменением
syntax_check = 0 в config.ini
Title: Re: Gods and glory
Post by: Qwerry on August 08, 2018, 07:44:22 PM
Здравствуйте.
Вопрос трудности использования строчек #define с разным (и неправильным с т.з. программы) количеством открывающих и закрывающих скобок в версии Clickermann v4.13 уже как-то обсуждался.
Для решения проблемы надо поменять настройки конфигурации, убрав проверку синтаксиса  (Clickermann v4.13 x32\data\config.ini):

есть такое. варианты обхода:

1) config.ini:
Code: [Select]
[core]
...
; Проверка синтаксиса
syntax_check = 0


Либо можно использовать чуть более раннюю версию Clickermann v4.12, где нет проверки на скобки.
Title: Re: Gods and glory
Post by: gsukhado on August 20, 2018, 04:13:38 PM
Приветствую
А наглостью будет просить необходимые скриншоты ?
при запуске выдаёт ошибку по строкам 5,6,7,8 ввиду того что я использую Nox и не совпадают координаты и разрешение ?
Пробовал в какой-то момент пересчитывать на Нокс, но оказалось проще подобрать экран Нокса так, чтобы размер видимой части совпал с Блюстаковым, под который все и писалось. Но особо направление "под Нокс" не развивал.
Либо все точки перепроверять. Тем более что все равно разрабы понемногу игру меняют, и изображение сдвигается, т.е. надо все время отслеживать изменения.
Title: Re: Gods and glory
Post by: zalmanoff on August 22, 2018, 09:49:07 AM
Здравствуйте.
Сначала попытался разобраться в логике представленного скрипта, забросил... Начал с нуля, столкнулся с проблемой распознавания. Не мог бы автор скрипта выложить пару изображений по которым идет проверка шахт.
Тестовые фрагменты и статичные изображения определяются легко, а как только фон или размер немного меняется, все затык. Дело в том, что размер изображений шахт и вообще любых объектов на карте изменяется, снизу они больше и постепенно уменьшаются в верхней части. Для успешного поиска придется использовать только одну линию, пока я пришел к такому выводу.
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 06:24:08 PM
После запуска такого бота прилетело предупреждение о использовании бота
и удалили мне все материалы в кузне
может поможет кто реализовать как то подругому что бы бан не словить )

// 02.09.2018
COLORMODE(8, 32,365,719,100)
//заход в магазин
GETSCREEN
IF(PXL(295,640) = 65867)
   LCLICK(295,640)
   WAIT(2)
END_IF
//СБОР
GETSCREEN
IF(PXL(256,214) = 12546118)
   LCLICK(256,214)
   WAIT(2)
END_IF
//ПЕРЕХОД В ЗАДАНИЯ
GETSCREEN
IF(PXL(250,217) = 8158332)
   LCLICK(170,639)
   WAIT(2)
END_IF
//ВЫПОЛНЕНИЕ ЗАДАНИЯ
GETSCREEN
IF(PXL(262,241) = 12097129)
   LCLICK(262,241)
   WAIT(2)
END_IF
//сбор подарка за задания
GETSCREEN
IF(PXL(271,148) = 2269797)
   LCLICK(271,148)
   WAIT(2)
END_IF
//переход в подземелье ЕСЛИ ЗАДАНИЙ НЕТ
GETSCREEN
IF(PXL(263,243) = 2336103)
   LCLICK(105,645)
   WAIT(2)
END_IF
//начать бой
GETSCREEN
IF(PXL(277,243) = 2069849)
   LCLICK(277,243)
   WAIT(2)
END_IF
//начать бой с медведем
GETSCREEN
IF(PXL(325,549) = 2402407)
   LCLICK(325,549)
   WAIT(2)
END_IF
//синяя кнопка начать бой
GETSCREEN
IF(PXL(98,565) = 8013869)
   LCLICK(188,578)
   WAIT(2)
END_IF
//снудук 1
GETSCREEN
IF(PXL(180,448) = 1134790)
   DBLCLICK(180,448)
   WAIT(2)
END_IF
 //снудук 2
GETSCREEN
IF(PXL(243,446) = 670455)
   DBLCLICK(243,446)
   WAIT(2)
END_IF
//закрыть
GETSCREEN
IF(PXL(181,365) = 4747910)
   LCLICK(268,511)
   WAIT(2)
END_IF
//собрать опыт
GETSCREEN
IF(PXL(220,171) = 2148465)
   LCLICK(303,174)
   WAIT(2)
END_IF
//переход в магазин если подзем собран
GETSCREEN
IF(PXL(285,169) = 6579300)
   LCLICK(36,636)
   WAIT(2)
END_IF
//переход в магазин после подзема
GETSCREEN
IF(PXL(296,639) = 723799)
   LCLICK(296,639)
   WAIT(2)
END_IF
//ТЕХ.РАБОТЫ
GETSCREEN
IF_PIXEL_IN(38,218,184,395,13860944)
   LCLICK(90,367)
   WAIT(2)
END_IF
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 06:40:22 PM
сделайте рандом по допустимому месту клика и времени после клика.
Если это сделаю то будет ли шанс поражения в бан ?
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 06:51:24 PM
А чем они вообще выслеживают кликера?
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 07:04:00 PM
У меня 3 акк за это бан не прилетал уже пол года сижу да и правилах игры количество акк не оговаривается
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 07:28:19 PM
Баг не давали за этот код ?
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 08:12:28 PM
Я просто всего пару дней изучаю программу
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 09:19:10 PM
код котрый вы переписали не работает
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 09:36:16 PM
после первого действия заход в магазин встает в ступор и всё
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 09:41:02 PM
щас дело пошло лучше но не всегда поподает по нужным кнопкам, надо разобраться как то в вашем коде, просто спеременными не знаком ещё
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 09:46:05 PM
переменные ещё вроде как более мение понятно а вот тег sub не понятен как оно работает
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 10:02:09 PM
а вы знакомы с игрой gods and glory ?
Title: Re: Gods and glory
Post by: dokkolyan312 on September 04, 2018, 10:11:39 PM
вот собственно для чего пишу
Title: Re: Gods and glory
Post by: dokkolyan312 on September 05, 2018, 10:18:12 AM
Кстати там игра не браузерная, она есть только на андроид и ios а на первую установлена через андроид эмулятор
, кроме вебвизора может быть что то ?
Title: Re: Gods and glory
Post by: gsukhado on September 16, 2018, 08:28:51 PM
После запуска такого бота прилетело предупреждение о использовании бота
и удалили мне все материалы в кузне
может поможет кто реализовать как то подругому что бы бан не словить )
1.Количество времени работы бота должно быть аналогично времени фарма человеком. Иначе действительно в кузне все зачищается, вплоть до бож.материалов, не имеющих отношения к подземке...
2.Имхо первичный вариант с равномерным рандомом или кликом в одной и той же области тоже не верен. У людей что-то более близкое к распределению гаусса. Соответственно, изложенные выше скрипты - надо брать за основу, но не как готовый инструмент.
3.Судя по некоторым признакам, представители игры в курсе про Кликерман и данную тему. Поэтому концепты обсуждать можно, но окончательную реализацию я бы тут не выкладывал...
Title: Re: Gods and glory
Post by: gsukhado on September 16, 2018, 08:31:15 PM
Здравствуйте.
Сначала попытался разобраться в логике представленного скрипта, забросил... Начал с нуля, столкнулся с проблемой распознавания. Не мог бы автор скрипта выложить пару изображений по которым идет проверка шахт.
Подбирается похоже индивидуально, под конкретный комп и разрешение. Не факт что заработает на ином компе, поэтому хотя вначале пытался сделать с пересчетом размеров на иные разрешения - потом эту идею забросил
Title: Re: Gods and glory
Post by: gsukhado on September 16, 2018, 08:33:18 PM
У меня 3 акк за это бан не прилетал уже пол года сижу да и правилах игры количество акк не оговаривается
Против твиноводства в GG не возражают, скорее даже поддерживают - чтобы с каждого твина что-то покупали...
Title: Re: Gods and glory
Post by: Сумо on September 27, 2018, 10:02:54 AM
А вот это существенно более сложный алгоритм - уже для фарма наземных шахт. Постарался максимально закомментировать, чтобы было понятно какие настройки за что отвечают
...

Подскажи пожалуйста, вот такая ошибка лезет, что изменить?
Title: Re: Gods and glory
Post by: Vint on September 27, 2018, 10:12:41 AM
Подскажи пожалуйста, вот такая ошибка лезет, что изменить?
Откуда там квадратные скобки?
Title: Re: Gods and glory
Post by: Сумо on October 01, 2018, 09:06:03 AM
Да они там везде.
Title: Re: Gods and glory
Post by: Vint on October 01, 2018, 10:08:14 AM
Да они там везде.
— Алло, дорогая, только что по радио передали, что один псих едет по встречке. Будь осторожнее.
— Один??? Да их тут тысячи!
Title: Re: Gods and glory
Post by: Сумо on October 01, 2018, 01:04:20 PM
Нужно убрать? Всех со встречки?
Title: Re: Gods and glory
Post by: Vint on October 01, 2018, 01:07:49 PM
Нужно. Это кто-то "опытный" тупо переписал синтаксис из справки, где квадратными скобками обозначены НЕОБЯЗАТЕЛЬНЫЕ параметры.
В синтаксисе кликера квадратные скобки пишутся только при указании индекса массива. Там удалять не нужно.
Title: Re: Gods and glory
Post by: gsukhado on October 09, 2018, 11:11:49 PM
Нужно. Это кто-то "опытный" тупо переписал синтаксис из справки, где квадратными скобками обозначены НЕОБЯЗАТЕЛЬНЫЕ параметры.
В синтаксисе кликера квадратные скобки пишутся только при указании индекса массива. Там удалять не нужно.
Камень в мой огород, причем полностью оправданный: моя первая проба пера была, а раз на той версии Кликермана работала и ошибок не выдавала - значит все нормально ))
Title: Re: Gods and glory
Post by: gsukhado on October 09, 2018, 11:20:42 PM
Нужно убрать? Всех со встречки?

И намного удобней для анализа оказался не SCREENSHOT, а примерно вот такое сохранение:
$papka= "d:\_tmp_screens\"
SCREENSHOTFIX(0,0,440,820,STRCONCAT($papka,"\","название_файла_с описанием_что_и_для_чего_",$_date_d,"-",$_time_h , "-", $_time_m, "-", $_time_s ,".bmp"))
Title: Re: Gods and glory
Post by: Vint on October 10, 2018, 08:36:10 AM
Камень в мой огород, причем полностью оправданный: моя первая проба пера была, а раз на той версии Кликермана работала и ошибок не выдавала - значит все нормально ))
Да я и не смотрел кто там изначальный автор. Иногда сюда тянут код и из других мест.
Ну раз ты здесь и не потерялся, то можешь ведь поправить старый код, чтоб народ не спотыкался.
А лучше даже выложить более новую версию с исправлениями и доработками.
Title: Re: Gods and glory
Post by: gsukhado on October 14, 2018, 08:08:51 PM
Ну раз ты здесь и не потерялся, то можешь ведь поправить старый код, чтоб народ не спотыкался.
А лучше даже выложить более новую версию с исправлениями и доработками.
Сама игрушка постоянно разрабами меняется, поэтому к ней не получится сделать комфортный "мерседес", которым мог бы пользоваться любой желающих. Приходится использовать "ведро с болтами", и использующий должен уметь самостоятельно допиливать его под себя. Даже примитивно под используемое у себя разрешение экрана и эмулятор. Иначе, увы, не заработает...