Author Topic: Gods and glory  (Read 23380 times)

0 Members and 1 Guest are viewing this topic.

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #15 on: August 09, 2017, 03:25:25 PM »
а вообще, ведь  можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.

Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля  буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и  кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...

faser

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Gods and glory
« Reply #16 on: August 09, 2017, 04:35:28 PM »
одинаково хорошо ищется и вверху экрана и внизу?
Я делаю поиск по нижней половине экрана. Нарезки пока чуть разные (экспериментирую еще с параметрами самого экрана), но размеры стараюсь делать не более 30-40 pxl. Позже могу в личку кинуть

вспышки на шахте анимированные, т.е. движутся (снизу вверх), меняясь при этом в размере

Ссылка в дропбоксе не открывается. Даже если залогиниваюсь.  Не сделал ее публичной?
а так:?

faser

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Gods and glory
« Reply #17 on: August 09, 2017, 04:59:33 PM »
а вообще, ведь  можно каждую найденную шахту просто открывать и делать проверку на уровень (там цифры большие в окне будут) и занятость. Так не проще?
не знаю только, на сколько такой подход будет удобен админам для анализа факта на ботоводство.

Еще можно сделать виртуальную "карту" экрана, т.е. определить сетку клеток с возможным содержанием (пусто,замок,шахта,лагерь), я предполагаю сделать это по первому найденному строению в верхнем левом углу, определить координаты всех полей, а далее остальные клетки поля  буду проверять на возможное наличие там полезных объектов(т.е. картинку искать не во всём поле, а в выделенной клетке). далее, среди найденных объектов можно выбирать наиболее вероятный для атаки и делать его дополнительную проверку после открытия окна объекта. Если не подходит, то назад и  кликаем на следующий объект в списке найденных
(а)По отлавливанию ботоводов не знаю.
(б)Сама идея с сеткой любопытна. Но проблема в том что и замки тоже иногда по карте мигрируют. И лагеря своих и противников появляются... Т.е. алгоритмы проверок надо делать достаточно комплексные... И все равно упираемся в (а) с необходимостью открытия объекта для его детального изучения...
Ну я подход "б" как раз и думал для того, чтобы минимизировать отлов скрипта админами.
"Открывать" объект все-равно надо для атаки, но по крайней мере, при таком анализе "ложных" открытий будет меньше.
Что до мигрирующих замков/лагерей, так это маловолнующий фактор. Новый анализ делается при каждом свайпе карты.
1. проанализировал
2. если есть куда - напал, и гоуту 1
3. сдвинул карту
4. гоуту 1
ну т.е. осуществляется человекоподобная логика поиска жертв.
Тут же можно добавить проверку на наличие ифритов/суккубов с выбором нужного генерала для такой атаки или игнора таких шахт.
алгоритм сдвига можно реализовать псевдо-хаотичный. типа такого:

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

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #18 on: November 13, 2017, 11:20:48 PM »
Предлагаю скрипт фарма подзмелий игры Gods and glory
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

« Last Edit: November 13, 2017, 11:36:48 PM by gsukhado »

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #19 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


Kpekep

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Gods and glory
« Reply #20 on: November 19, 2017, 02:20:18 PM »
Вылезает ошибка !

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #21 on: November 22, 2017, 05:19:14 PM »
Вылезает ошибка !
1.Алгоритм не рассчитан на одиночного игрока, нужна территория альянса. Которую задать в соответствующих переменных, описанных в примечаниях к коду
2.Нужно взять скриншоты шахт для поиска, и в программе прописать к ним локальный путь

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #22 on: November 22, 2017, 05:32:46 PM »
Но другая останется. Все версии BlueStacks отображаются несколько по разному и чтоб всё отображалось как у автора вам потребуется использовать его версию эмулятора.
У меня 3.50.50.1647. С твиком на запрет обновления версии и запрет показа рекламы.
Но в общем тот кто захочет применить для себя данный алгоритм - все равно должен будет хотя бы в основах Кликермана разобраться, чтобы что-то под себя обновлять и "допиливать" - например, какие именно войска нанимать для фарма, это полностью индивидуально...

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #23 on: January 13, 2018, 03:49:10 PM »
Чуть обновил код для фарма в подземельях

Kpekep

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Gods and glory
« Reply #24 on: January 15, 2018, 09:04:18 PM »
Чуть обновил код для фарма в подземельях
Привет, как нибудь  полегче бы фарм шахт сделал , чисто фарм, без всякого найма войск и тому подобного .
P.S. За подземку отдельное спасибо !

whonix

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Re: Gods and glory
« Reply #25 on: January 19, 2018, 09:48:27 AM »
Поддерживаю вариант с облегченной версией скрипта- только для фарма наземных шахт без найма юнитов и т.д.

ounce

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Gods and glory
« Reply #26 on: January 19, 2018, 10:11:30 PM »
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??

ounce

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Gods and glory
« Reply #27 on: January 20, 2018, 10:02:39 PM »
Не правильно понимаете, от слова совсем.
И? Есть реализация или нет?  :)

angelpsix

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Re: Gods and glory
« Reply #28 on: January 31, 2018, 10:03:37 PM »
Возвращаясь к программированию бота ддя Gods and Glory:
1) касательно подземелий, лучше делать клик не с паузой времени (хоть и рандомной), а снимок экрана + поиск нужной кнопки. Поясню почему, интернет может забарахлить, из игры может выкинуть (тех работы), ПК может лагануть и пропустить нужный цикл и выйдет бред. А вот с картинками очень да же круто выходит, глаз еще да же картинку не увидел, а кликер уже нажал (это без задержек) и нажал куда нужно ! Добавляя к этому рандомную паузу мы делаем более реалистичными наши действия и приближенными к реалям (когда бьешь одну и ту же шахту час в живую, там практически нет задержки по времени).
2) касательно шахт. После обновления в 2017м году (где то в начале года) фон номера шахты значительно затемнили и это нам большой плюс в распозновании.
Вопрос как понять что у шахты откат это первый вопрос.
Как отсеивать те шахты которые не попадают в наш радиус обзора (территория имеет форму шестиугольника, а у нас угол обзора Квадрат). как вариант сравнивать координаты открытой шахты, но это палевно слишком, так же как и открывать шахту на которую напали и у нее откат.

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Gods and glory
« Reply #29 on: February 16, 2018, 06:00:06 PM »
Свайп я так понимаю ни у кого не получилось средствами кликера реализовать? Только скриптом эмулятора получается делать??
А в чем идея свайпа? для чего в G&G хотите использовать?