Author Topic: Подбор соперника по параметрам в игре Jungle Heat  (Read 5422 times)

0 Members and 2 Guests are viewing this topic.

keepsv

  • Освоившийся
  • **
  • Posts: 34
    • View Profile
Доброго времени суток. Прошу помощи у профи. Есть потребность в сценарии который подбирал бы базу соперника по параметрам а точнее по количеству золота. Вот ссылка на небольшое видео процесса. https://drive.google.com/file/d/0B3X-rzXVPqneZVJfcGUxcjNPMms/view?usp=sharing Задача такая: листать  базы пока не найдем соперника с количеством золота от 500 000. Как нашли развернуть окно, отсигналить и остановить процесс поиска. У меня ни знаний ни  мозгов не хватает для написания такого сценария. ) Поэтому прошу наставить на путь истинный. Вот что написал я:
Code: (clickermann) [Select]
//ищем  и жмем кнопку "Атака"
WAIT(1)
 GETSCREEN (0,0, 800,800)
  COLORMODE(7)
IF_PICTURE_IN (0,0, 760,670, "a.bmp", -1, 80)
LCLICK($_return1, $_return2)
     WAIT(1)
    GETSCREEN (0,0, 800,800)//ищем и жмем кнопку "Найти"
   COLORMODE(7)
  IF_PICTURE_IN (0,0, 760,670, "b.bmp", -1, 80)
 LCLICK($_return1, $_return2)
poisk: //метка нужна для возврвта если "6.bmp" не найдена (под вопросом) 
$time = $_time_t + 5
 WHILE($time > $_time_t)
  GETSCREEN (635,41, 650,58) // не знаю правильно ли но решил реализовать поиск по золоту взяв первую цифру поэтому такой маленький скрин
   COLORMODE(7)
    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 80)
     $time = 0    // НАШЛИ, ОБНУЛЯЕМ ТАЙМЕР, ПРЕРЫВАЕМ ЦИКЛ
      GETSCREEN (0,0, 800,800)  // нашли. разворачиваем  на весь экран
       COLORMODE(7)
        IF_PICTURE_IN (0,0, $_xmax,$_ymax, "f.bmp", -1, 80) 
         LCLICK($_return1, $_return2)
          WAITMS(100)
SOUND("sirenhilo.wav")
           WAITMS(500)
           HALT
         ELSE  //не нашли жмем кнопку "следующий"
        GETSCREEN (0,0, 800,800)
       COLORMODE(7)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "s.bmp", -1, 80)
     WAITMS(500)
    END_IF
   END_CYC
    IF($time ! 0) 
     GOTO (poisk)  // тут наверно это лишнее.
      END_IF
  // в итоге по этому сценарию базы не находит-жмет сразу "развернуть на весь экран"
Во вложении скрин цифры для поиска...
Очень надеюсь на вашу помощь и совет.
« Last Edit: June 18, 2015, 10:36:07 AM by keepsv »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Нажми на автовыравнивание в редакторе, видишь как скрипт перекосило? Это потому что не хватает END_ это как точки в предложениях, чтобы кликер смог понять где кончаются условия, циклы, подпрограммы и тд.

Code: (clickermann) [Select]
//ищем  и жмем кнопку "Атака"
WAIT(1)
GETSCREEN (0,0, 800,800)
COLORMODE(7)
IF_PICTURE_IN (0,0, 760,670, "a.bmp", -1, 80)
   LCLICK($_return1, $_return2)
   WAIT(1)
   GETSCREEN (0,0, 800,800)//ищем и жмем кнопку "Найти"
   COLORMODE(7)
   IF_PICTURE_IN (0,0, 760,670, "b.bmp", -1, 80)
      LCLICK($_return1, $_return2)
      poisk: //метка нужна для возврвта если "6.bmp" не найдена (под вопросом)
      $time = $_time_t + 5
      WHILE($time > $_time_t)
         GETSCREEN (635,41, 650,58) // не знаю правильно ли но решил реализовать поиск по золоту взяв первую цифру поэтому такой маленький скрин
         COLORMODE(7)
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 80)
            $time = 0    // НАШЛИ, ОБНУЛЯЕМ ТАЙМЕР, ПРЕРЫВАЕМ ЦИКЛ
            GETSCREEN (0,0, 800,800)  // нашли. разворачиваем  на весь экран
            COLORMODE(7)
            IF_PICTURE_IN (0,0, $_xmax,$_ymax, "f.bmp", -1, 80)
               LCLICK($_return1, $_return2)
               WAITMS(100)
               SOUND("sirenhilo.wav")
               WAITMS(500)
               HALT
            ELSE  //не нашли жмем кнопку "следующий"
               GETSCREEN (0,0, 800,800)
               COLORMODE(7)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "s.bmp", -1, 80)
                  WAITMS(500)
               END_IF
            END_CYC
            IF($time ! 0)
               GOTO (poisk)  // тут наверно это лишнее.
            END_IF
            // в итоге по этому сценарию базы не находит-жмет сразу "развернуть на весь экран"

keepsv

  • Освоившийся
  • **
  • Posts: 34
    • View Profile
Благодарю, так действительно приятнее работать с скриптом. ) После добавления  END_IF в конце скрипта, ничего не изменилось, на кнопку "следующий"  кликер не тыкает, всегда разворачивает окно и HALT . Вот видео процесса https://drive.google.com/open?id=0B3X-rzXVPqnedXhnTG9UbWk0WWs&authuser=0
Как по Вашему что не так?
« Last Edit: June 18, 2015, 12:10:11 PM by keepsv »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А при чём здесь конец скрипта? В скрипте не хватает четырёх END_IF
2 из которых перед 33 строкой.
2 остальных... может и в конце, смотря какая логика строится.


Если добавляешь область в GETSCREEN, добавляй уже и к COLORMODE, она самая медленная.

Если в GETSCREEN задана область, как здесь:
Code: (clickermann) [Select]
         GETSCREEN (635,41, 650,58) // не знаю правильно ли но решил реализовать поиск по золоту взяв первую цифру поэтому такой маленький скрин
         COLORMODE(7)
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 80)

В прилегающем поиске IF_PICTURE_IN нужно обычно указывать область не больше заданной.
А здесь получается, сохранили в буфер (635,41, 650,58), а ищем по всему экрану (0,0, $_xmax,$_ymax)
что оно там может найти в необновляемых частях, мусор какой давности, неизвестно.


keepsv

  • Освоившийся
  • **
  • Posts: 34
    • View Profile
Vint, я ж говорю мозгов не хватает. )) Спасибо что не прошли мимо.
 
Code: (clickermann) [Select]
$time = $_time_t + 5
WHILE($time > $_time_t)
   GETSCREEN (620,40, 655,60) // не знаю правильно ли но решил реализовать поиск по золоту взяв первую цифру поэтому такой маленький скрин
   COLORMODE(7, 620,40, 655,60)
   IF_PICTURE_IN (620,40, 655,60, "4.bmp", -1, 80)
      $time = 0    // НАШЛИ, ОБНУЛЯЕМ ТАЙМЕР, ПРЕРЫВАЕМ ЦИКЛ
      GETSCREEN (0,0, 800,800)  // нашли. разворачиваем  на весь экран
      COLORMODE(7, 0,0, 800,800)
      IF_PICTURE_IN (0,0, 800,800, "f.bmp", -1, 80)
         LCLICK($_return1+5, $_return2+3)
         WAITMS(3000)
         SOUND("sirenhilo.wav")
         WAITMS(500)
         HINTPOPUP("Найдено")
         HALT
      ELSE  //не нашли жмем кнопку "следующий"
         GETSCREEN (0,0, 800,800)
         COLORMODE(7, 0,0, 800,800)
         IF_PICTURE_IN (0,0, 800,800, "s.bmp", -1, 80)
            WAITMS(500)
         END_IF
      END_IF
   END_IF
END_CYC
IF($time ! 0)
   GOTO (poisk)  // тут наверно это лишнее.
END_IF
Помогите расставить правильно это "точки". У меня сейчас не получается добиться листания баз если не найден "4.bmp". Если "4.bmp" попадается сразу, то кликер делает что нужно, разворачивает на весь экран и издает сигнал. Может вы как то по другому видите реализацию данной задачи?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Помогите расставить правильно это "точки". У меня сейчас не получается добиться листания баз если не найден "4.bmp".

Всё просто, у тебя вообще НЕТ листания. Ну вот нет и всё. Клик такой не прописан.
Code: (clickermann) [Select]
GETSCREEN (0,0, 800,800)
COLORMODE(7, 0,0, 800,800)
IF_PICTURE_IN (620,40, 655,60, "4.bmp", -1, 80)
   IF_PICTURE_IN (0,0, 800,800, "f.bmp", -1, 80)
      LCLICK($_return1+5, $_return2+3)
      WAITMS(3000)
   END_IF
   SOUND("sirenhilo.wav")
   WAITMS(500)
   HINTPOPUP("Найдено")
   HALT
END_IF

// жмем кнопку "следующий"
IF_PICTURE_IN (0,0, 800,800, "s.bmp", -1, 80)
   LCLICK($_return1+5, $_return2+4)
   WAITMS(450)
END_IF
WAITMS(50)

И почему ты ищешь цифру "4", да ещё и на такой территории?
В задаче ведь "от 500 000".


keepsv

  • Освоившийся
  • **
  • Posts: 34
    • View Profile
Ну как бы вот эта кнопка на которую нужно нажать если не нашли "4.bmp"
Code: (clickermann) [Select]
// жмем кнопку "следующий"
IF_PICTURE_IN (0,0, 800,800, "s.bmp", -1, 80)
   LCLICK($_return1+5, $_return2+4)
   WAITMS(450)
END_IF
WAITMS(50)

Ищу 4 т.к. таких баз больше, для тестирования в общем... Условие "от 500 000" снизилось до 400 000. ))) Ну это я думаю не принципиально. По задумке таких цифр будет несколько, когда нужна пожирнее и есть время ждать, можно и 8 подставить. ))  А на территории такой... ну я х.з. если на всем экране искать, комп задумывается, я оставляю небольшое окно флешки в углу экрана. А "IF_PICTURE_IN (620,40, 655,60, "4.bmp", -1, 80)" т.к. пытаюсь ограничить этими рамками зону поиска т.к. такую цифру кликер может найти в другом месте, например слева там где мои ресурсы отображаются (вложение). Может это не очень правильно?
И еще, в предыдущем ответе Вы написали исправленный скрипт, мне его куда вставить? Он же без "$time = $_time_t". В общем малёха запутался я чет.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну как бы вот эта кнопка на которую нужно нажать если не нашли "4.bmp"
Ну так это я прописал нажатие. У тебя нажатия нет, только поиск и всё.

А на территории такой... ну я х.з. если на всем экране искать, комп задумывается, я оставляю небольшое окно флешки в углу экрана. А "IF_PICTURE_IN (620,40, 655,60, "4.bmp", -1, 80)" т.к. пытаюсь ограничить этими рамками зону поиска т.к. такую цифру кликер может найти в другом месте, например слева там где мои ресурсы отображаются (вложение). Может это не очень правильно?
Всё нормально, я не на те координаты глянул.

И еще, в предыдущем ответе Вы написали исправленный скрипт, мне его куда вставить? Он же без "$time = $_time_t". В общем малёха запутался я чет.

Можно так:
Code: (clickermann) [Select]
LOGCLEAR
//ищем  и жмем кнопку "Атака"
WAIT(1)
GETSCREEN (0,0, 761,671)
COLORMODE(7, 0,0, 760,670)
IF_PICTURE_IN (0,0,760,670, "a.bmp", -1, 80)
   LCLICK($_return1, $_return2)
   WAITMS(500)
ELSE
   LOGWRITE ("Не нашли -Атака-")
   HALT
END_IF

$time = $_time_t + 15
WHILE($time > $_time_t)
   GETSCREEN (0,0, 761,671)
   COLORMODE(7, 0,0, 760,670)
   IF_PICTURE_IN (0,0, 760,670, "b.bmp", -1, 80)
      LCLICK($_return1, $_return2)
      $time = 0
      WAITMS(500)
   END_IF
   WAITMS(50)
END_CYC

IF($time ! 0)
   LOGWRITE ("Не нашли -Найти-")
   HALT
END_IF

WHILE(1)
   GETSCREEN (0,0, 800,800)
   COLORMODE(7, 0,0, 800,800)
   IF_PICTURE_IN (620,40, 655,60, "4.bmp", -1, 80)
      IF_PICTURE_IN (0,0, 800,800, "f.bmp", -1, 80)
         LCLICK($_return1+5, $_return2+3)
         WAITMS(3000)
      END_IF
      SOUND("sirenhilo.wav")
      WAITMS(500)
      HINTPOPUP("Найдено")
      HALT
   END_IF
   
   // жмем кнопку "следующий"
   IF_PICTURE_IN (0,0, 800,800, "s.bmp", -1, 80)
      LCLICK($_return1+5, $_return2+4)
      WAITMS(450)
   END_IF
   WAITMS(50)
END_CYC

Ну, "до 400 000" это и 300 000 и 72 000.
Тогда уж в задании нужно писать 300000-400000
« Last Edit: June 18, 2015, 04:49:03 PM by Vint »


keepsv

  • Освоившийся
  • **
  • Posts: 34
    • View Profile
Vint, отдуши. Всё работает. Но есть 2 вопроса.
1. Как сделать чтоб можно было свернуть окошко "флешки" чтоб процесс не мешал работе на ПК. Я так понимаю включить привязку к окну, тогда координаты будут не актуальны. Я вот не знаю если вместо (0,0, 800,800) прописать (0,0, $_xmax,$_ymax,) кликер будет весь экран скринить или только окно к которому привязан?
2. Схема с циферками не идеальна т.к. выставив например 4 (для поиска от 400 000 до 499 999) пролистываются базы с 500 000+. Может можно как то задать несколько параметров поиска указав на картинки с цифрами 5,6,7 чтоб поиск был от 400 000 до 799 999? Возможно есть иной способ это реализовать, и я мыслю ограниченно в силу своих скудных познания Clickermannа...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
1. Можно, но там много нюансов нужно пробовать.
Координаты нужно переделывать на локальные.
гетскрин будет не на всём экране, а только в окне.

2. Я про то и говорю.
"чтоб поиск был от 400 000 до 799 999"   нужно в определённой позиции искать цифры 4 или 5 или 6 или 7