Author Topic: Помогите новичку довести до ума код  (Read 3517 times)

0 Members and 3 Guests are viewing this topic.

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Написал я бота, который в одной игре может пинать одного моба.
Суть такова :
1. Бот перед боем проверяет здоровье персонажа и дракона (при необходимости восстанавливает здоровье)
2. Ищет моба и атакует его (если не найдет проверяет на наличие ошибок и выскакивающих окон)
3. Проводит бой (если бой не начался  после атаки моба, проверяет на наличие ошибок и выскакивающих окон)
4. При завершении боя проверяет победа или поражение

Код получился большой и безобразный, прошу помочь довести его до ума. Или дайте правильную конструкцию, я готов переписать его заново, лишь бы он был нормальней.
Code: (clickermann) [Select]
LOGSHOW (1, 950,600)

SUB (hppers)
   //Проверка на хп персонажа
   GETSCREEN
   COLORMODE(6,$xtop+100, $ytop+35, $xtop+130, $ytop+42)
   IF_PICTURE_IN ($xtop+100, $ytop+35, $xtop+130, $ytop+42, "hp.bmp", -1, 90)
      LOGWRITE ("Персонаж Голоден")
      WAITMS(100)
      MOVE($xeda+16, $yeda+19)
      WAITMS(100)
      LDOWN($xeda+16, $yeda+19)
      WAITMS(100)
      LUP($xeda+16, $yeda+19)
      WAITMS(200)
      MOVE($xeda+16, $yeda+100)
      WAITMS(800)
   else
     
      LOGWRITE ("Персонаж сыт")
   END_IF
END_SUB


SUB (stat)
   //проверка на наличие выскакивающего окна статистика
   LOGWRITE ("статистика ?")
   WAITMS(100)
   GETSCREEN
   
   COLORMODE(6, $xtop+880, $ytop-5, $xtop+930, $ytop+38)
   IF_PICTURE_IN ($xtop+880, $ytop-5, $xtop+930, $ytop+38, "sta.bmp", -1, 90)
      LOGWRITE ("да, стат")
      WAITMS(100)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      WAITMS(200)
     
      MOVE($xtop+50, $ytop+100)
      WAITMS(100)
     
   Else
      LOGWRITE ("Нет")
   END_IF
END_SUB

SUB (bonus)
   //Проверка на наличие выскакивающего окна бонусов
   LOGWRITE ("бонусы?")
   WAITMS(100)
   GETSCREEN
   
   COLORMODE(6, $xtop+400, $ytop+300, $xtop+700, $ytop+480)
   IF_PICTURE_IN ($xtop+400, $ytop+300, $xtop+700, $ytop+480, "bonus.bmp", -1, 90)
      LOGWRITE ("да, бонус")
      WAITMS(100)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      WAITMS(200)
     
      MOVE($xtop+50, $ytop+100)
      WAITMS(100)
     
   Else
      LOGWRITE ("Нет бонусов")
   END_IF
END_SUB

SUB (sliv)
   //Проверка на проигрыш в бою
   GETSCREEN
   COLORMODE(6,$xtop+266, $ytop+150, $xtop+1025, $ytop+450)
   IF_PICTURE_IN ($xtop+266, $ytop+150, $xtop+1025, $ytop+450, "sliv.bmp", -1, 90)
      LOGWRITE ("СЛИЛИ")
      //Если проиграли в бою нажимаем на кнопку закрыть игру и прерываем сценарий
      WAITMS(100)
      LDOWN($xtop+1006, $ytop-35)
      WAITMS(100)
      LUP($xtop+1006, $ytop-35)
      WAITMS(200)
      HALT
   else
      LOGWRITE ("Победа")
   END_IF
END_SUB

SUB (atak)
   //Сам процесс боя
   $atak = 0
   while ($atak =0)
      //Нажатие на кнопку призыва дракона (если она активна)
      GETSCREEN
      COLORMODE(6, $xtop, $ytop+60, $xtop+40, $ytop+72)
      IF_PICTURE_IN ($xtop, $ytop+60, $xtop+40, $ytop+72, "prizv.bmp", -1, 90)
         
         LDOWN($_return1+5, $_return2+3)
         wAITMS(100)
         LUP($_return1+5, $_return2+3)
         
         WAITMS(50)
         LOGWRITE ("зовем драка")
         WAITMS(500)
         MOVE($xtop+50, $ytop+100)
         
         
      Else
         //Если кнопка удара не активна, то нажмем на нее
         GETSCREEN
         COLORMODE(6, $xtop+455,$ytop+430, $xtop+900,$ytop+465)
         IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "an2.bmp", -1, 100)
            LCLICK($_return1+30, $_return2)
            WAITMS(50)
            LOGWRITE ("атака1")
            MOVE($xtop+50, $ytop+100)
           
            WAIT(2)
           
         Else
            //Если кнопка удара нстала активной, то нажмем на нее
            GETSCREEN
            COLORMODE(6, $xtop+455,$ytop+430, $xtop+900,$ytop+465)
            IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "aa2.bmp", -1, 100)
               LCLICK($_return1+30, $_return2)
               WAITMS(50)
               LOGWRITE ("атака2")
               MOVE($xtop+50, $ytop+100)
               WAIT(2)
               
            Else
               
               
               
               GETSCREEN
               //  Проверка на наличие кнопки закрыть бой (если противник или наш герой повержен)
               IF_PICTURE_IN ($xtop+400,$ytop+300, $xtop+1000,$ytop+500, "zak2.bmp", -1, 90)
                  WAITMS(800)
                 
                  //проверяем проиграли мы или победили
                  sliv ()
                  //Закрываем бой
                  WAITMS(200)
                  LDOWN($_return1, $_return2)
                  WAITMS(200)
                  LUP($_return1, $_return2)
                  WAITMS(200)
                  MOVE($xtop+50, $ytop+100)
                 
                  LOGWRITE ("бойзак")
                 
                  $atak = 1
                  WAIT(1)
               END_IF
            END_IF
         END_IF
      END_IF
   end_cyc
   
   //boiend()
   WAITMS(100)
END_SUB

SUB (rec)
   //Проверка на выскакивающее окно с ошибкой реконект
   LOGWRITE ("реконект?")
   WAIT(2)
   GETSCREEN
   COLORMODE(6, $xtop, $ytop+80, $xtop+1240, $ytop+502)
   IF_PICTURE_IN ($xtop, $ytop+80, $xtop+1240, $ytop+502, "rec.bmp", -1, 90)
      LOGWRITE ("дА")
      // Если окно найдено закрываем его
      wAITMS(200)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      // И посылаем команду боя
      wAITMS(200)
      atak ()
     
   Else
      LOGWRITE ("Нет")
   END_IF
END_SUB

SUB (boi)
   //Проверяем бой начался или нет  (определяется по кнопке призыва дракона, которая появляется во время боя)
   LOGWRITE ("бой нач-ся?")
   WAIT(2)
   GETSCREEN
   COLORMODE(6)
   COLORMODE(6, $xtop, $ytop+60, $xtop+40, $ytop+72)
   IF_PICTURE_IN ($xtop, $ytop+60, $xtop+40, $ytop+72, "prizv.bmp", -1, 90)
      LOGWRITE ("дА")
      // отправляем команду начать бой
      atak ()
     
   Else
      LOGWRITE ("Нет")
     
      //Не начался бой. уменьшаем счетчик убитых мобов на 1
      INC($mob,-1)
   END_IF
END_SUB

SUB (boii)
   GETSCREEN
   COLORMODE(6, $xtop+455,$ytop+430, $xtop+500,$ytop+465)
   IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+500,$ytop+465, "an2.bmp", -1, 90)
      atak ()
   Else
      LOGWRITE ("Бой начался")
   END_IF
END_SUB

//Проведение проверок
SUB (prover)
   
   //На наличие окна с реконектом
   rec ()
   //Начался ли бой (но дракон еще не призван)
   boi ()
   //Начался ли бой ( дракон уже призван)
   boii ()
   //На наличие окна с бонусами
   bonus ()
   //на наличие окна со статистикой
   stat ()
   
   //проверка вдруг бой уже закончился
   GETSCREEN
   COLORMODE(6, $xtop+400,$ytop+300, $xtop+1000,$ytop+500)
   IF_PICTURE_IN ($xtop+400,$ytop+300, $xtop+1000,$ytop+500, "zak.bmp", -1, 90)
      WAITMS(1000)
      // если бой закончился проверяем проиграли или нет
      sliv ()
     
      WAITMS(200)
      LDOWN($_return1+20, $_return2)
      WAITMS(200)
      LUP($_return1+20, $_return2)
      WAITMS(200)
      MOVE($xtop+50, $ytop+100)
      LOGWRITE ("бойзак")
     
      $atak = 1
      WAIT(1)
   END_IF
END_SUB

SUB (poisk)
   
   $prov = 0
   $poiskm = 0
   
   // количество попыток найти моба (они перемещаются и могут быть не сразу найдены)
   while ($poiskm <19)
     
      INC($prov,1)
      LOGWRITE ("поиск моба ",$prov )
      //Ищем моба
      GETSCREEN
      COLORMODE(6, $xtop+209, $ytop+212, $xtop+240, $ytop+227)
      IF_PICTURE_IN ($xtop+209, $ytop+212, $xtop+240, $ytop+227, "31.bmp", -1, 100)
         //  моб найден. заканчиваем поиски моба
         $poiskm = 20
         $prov = 0
         //Нажимаем на картинку моба
         DBLCLICK($_return1, $_return2-15)
         WAITMS(50)
         INC($mob,1)
         LOGWRITE ("бой номер ", $mob)
         LOGWRITE ("Бъем верхнего")
         WAITMS(300)
         //Отправляем команду на проверку начался бой или нет
         boi()
         
         WAIT(1)
         
         
      Else
         WAITMS(400)
         INC($poiskm,1)
         if ($prov > 18)
           
            prover ()
           
         END_IF
      END_IF
   END_CYC
END_SUB


SUB (drakhp)
   //Проверка здоровья дракона
   GETSCREEN
   COLORMODE(6)
   IF_PIXEL_IN ($xtop-3, $ytop+78, $xtop, $ytop+81, 4144959)
     
      //низкое здоровье нажимаем на иконку еды (находится с небольшим смещением от еды персонажа)
      LOGWRITE ("ДРАК Голод")
      WAITMS(100)
      MOVE($xeda+70, $yeda+19)
      WAITMS(100)
      LDOWN($xeda+70, $yeda+19)
      WAITMS(100)
      LUP($xeda+70, $yeda+19)
      WAITMS(200)
      MOVE($xeda+70, $yeda+100)
      WAITMS(800)
   else
      //полоса здоровья нормальная для боя
      LOGWRITE ("ДРАК сыт")
   END_IF
END_SUB


GETSCREEN
COLORMODE(6)
// Расположение ОРИЕНТИРА по отношению к которой будем искать те или иные предметы.
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "xy.bmp", -1, 90)
   $xtop = $_return1
   $ytop = $_return2
   
   LOGWRITE("X: ", $xtop," Y: ", $ytop)
   // поиск предмета на карте, захватив который мы смещаем карту в нужное положение по отношению к ориентиру
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ornt.bmp", -1, 90)
      $xor = $_return1
      $yor = $_return2
     
     
      WAITMS(100)
     
      LDOWN($xor,$yor)
      WAITMS(50)
      MOVE($xtop+258, $ytop+359)
      WAITMS(50)
      LUP($xtop+258, $ytop+359)
      WAITMS(100)
     
      //Поиск картинки с едой
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "eda.bmp", -1, 90)
         $xeda = $_return1
         $yeda = $_return2
         LOGWRITE ("еда найдена")
         
         
         $mob = 0
         while ($mob <2000)
           
            WAITMS(200)
            //прверки на выскакивающие окна и на сытость песонажа и дракона
            //Проверка на ежедневный бонус
            bonus ()
            //Проверка на ошибку реконект
            rec ()
            //Проверка на  хп персонажа
            hppers ()
            //Проверка на хп дракона
            drakhp ()
            //Поиск моба
            poisk ()
           
           
         END_CYC   
         END_IF
     
   END_IF
   
   WAITMS(100)
   LDOWN($xtop+1006, $ytop-35)
   WAITMS(100)
   LUP($xtop+1006, $ytop-35)
   WAITMS(200)
   
END_IF



HALT
« Last Edit: November 23, 2016, 12:41:08 AM by m0rv1n »

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #1 on: November 22, 2016, 09:33:36 PM »
Меня смущает большое количество подпрограмм которые ссылаются на другие подпрограммы.
Но как реализовать это проще или рациональнее не догоняю.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #2 on: November 22, 2016, 09:56:09 PM »
При беглом взгляде нашел ошибку. Строки 366 и 367 перепутаны окончания. Поменяй строки местами.

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #3 on: November 22, 2016, 10:06:14 PM »
При беглом взгляде нашел ошибку. Строки 366 и 367 перепутаны окончания. Поменяй строки местами.
Спасибо большое, исправил.
Можете подсказать, есть ли более компактные конструкции, чтоб не использовать такое количество подпрограмм?
Если что я готов читать и учиться, только направьте, ибо мозги пухнут.
PS: Конструкция работает, но меня беспокоит плохо ли то, что в коде так много подпрограмм, при том, они ссылаются на другие подпрограммы и должны влиять на изменение одной переменной?

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #4 on: November 22, 2016, 10:16:49 PM »
И еще просьба  ::)
Вот код боя в котором проверяется активность кнопок удара и нажатие по ним, можно ли сделать чтоб параллельно шла проверка на количество ХП персонажа ( шла проверка на наличие определенных пикселей и нажатие по значку еды).
Code: (clickermann) [Select]
SUB (atak)
   //Сам процесс боя
   $atak = 0
   while ($atak =0)
      //Нажатие на кнопку призыва дракона (если она активна)
      GETSCREEN
      COLORMODE(6, $xtop, $ytop+60, $xtop+40, $ytop+72)
      IF_PICTURE_IN ($xtop, $ytop+60, $xtop+40, $ytop+72, "prizv.bmp", -1, 90)
         
         LDOWN($_return1+5, $_return2+3)
         wAITMS(100)
         LUP($_return1+5, $_return2+3)
         
         WAITMS(50)
         LOGWRITE ("зовем драка")
         WAITMS(500)
         MOVE($xtop+50, $ytop+100)
         
         
      Else
         //Если кнопка удара не активна, то нажмем на нее
         GETSCREEN
         COLORMODE(6, $xtop+455,$ytop+430, $xtop+900,$ytop+465)
         IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "an2.bmp", -1, 100)
            LCLICK($_return1+30, $_return2)
            WAITMS(50)
            LOGWRITE ("атака1")
            MOVE($xtop+50, $ytop+100)
           
            WAIT(2)
           
         Else
            //Если кнопка удара нстала активной, то нажмем на нее
            GETSCREEN
            COLORMODE(6, $xtop+455,$ytop+430, $xtop+900,$ytop+465)
            IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "aa2.bmp", -1, 100)
               LCLICK($_return1+30, $_return2)
               WAITMS(50)
               LOGWRITE ("атака2")
               MOVE($xtop+50, $ytop+100)
               WAIT(2)
               
            Else
               
               
               
               GETSCREEN
               //  Проверка на наличие кнопки закрыть бой (если противник или наш герой повержен)
               IF_PICTURE_IN ($xtop+400,$ytop+300, $xtop+1000,$ytop+500, "zak2.bmp", -1, 90)
                  WAITMS(800)
                 
                  //проверяем проиграли мы или победили
                  sliv ()
                  //Закрываем бой
                  WAITMS(200)
                  LDOWN($_return1, $_return2)
                  WAITMS(200)
                  LUP($_return1, $_return2)
                  WAITMS(200)
                  MOVE($xtop+50, $ytop+100)
                 
                  LOGWRITE ("бойзак")
                 
                  $atak = 1
                  WAIT(1)
               END_IF
            END_IF
         END_IF
      END_IF
   end_cyc
   
   //boiend()
   WAITMS(100)
END_SUB
« Last Edit: November 22, 2016, 10:19:24 PM by m0rv1n »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #5 on: November 24, 2016, 10:04:38 AM »
И еще просьба  ::)
Вот код боя в котором проверяется активность кнопок удара и нажатие по ним, можно ли сделать чтоб параллельно шла проверка на количество ХП персонажа ( шла проверка на наличие определенных пикселей и нажатие по значку еды).

А зачем параллельно? Просто вставь вызов подпрограммы перед условиями.
Наличия большого количества подпрограмм совсем не плохо. плохо будет когда ты решишь выпрыгивать из них через ГОТО. Но такого у тебя нет так что все в пределах нормы.

У тебя пишутся ограничения областей коррекции, в дополнение к этому, тогда уж, ограничь и зону снимка.
Из цикла while ($atak = 0) убрал у тебя лишние снимки.

Code: (clickermann) [Select]
LOGSHOW (1, 950,600)

SUB (hppers)
   //Проверка на хп персонажа
   GETSCREEN($xtop+100, $ytop+35, $xtop+130, $ytop+42)
   COLORMODE(6,$xtop+100, $ytop+35, $xtop+130, $ytop+42)
   IF_PICTURE_IN ($xtop+100, $ytop+35, $xtop+130, $ytop+42, "hp.bmp", -1, 90)
      LOGWRITE ("Персонаж Голоден")
      WAITMS(100)
      MOVE($xeda+16, $yeda+19)
      WAITMS(100)
      LDOWN($xeda+16, $yeda+19)
      WAITMS(100)
      LUP($xeda+16, $yeda+19)
      WAITMS(200)
      MOVE($xeda+16, $yeda+100)
      WAITMS(800)
   else
      LOGWRITE ("Персонаж сыт")
      WAITMS(50)
   END_IF
END_SUB


SUB (stat)
   //проверка на наличие выскакивающего окна статистика
   LOGWRITE ("статистика ?")
   WAITMS(100)
   GETSCREEN($xtop+880, $ytop-5, $xtop+930, $ytop+38)
   COLORMODE(6,$xtop+880, $ytop-5, $xtop+930, $ytop+38)
   IF_PICTURE_IN ($xtop+880, $ytop-5, $xtop+930, $ytop+38, "sta.bmp", -1, 90)
      LOGWRITE ("да, стат")
      WAITMS(100)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      WAITMS(200)
     
      MOVE($xtop+50, $ytop+100)
      WAITMS(100)
     
   Else
      LOGWRITE ("Нет")
      WAITMS(50)
   END_IF
END_SUB

SUB (bonus)
   //Проверка на наличие выскакивающего окна бонусов
   LOGWRITE ("бонусы?")
   WAITMS(100)
   GETSCREEN($xtop+400, $ytop+300, $xtop+700, $ytop+480)
   COLORMODE(6,$xtop+400, $ytop+300, $xtop+700, $ytop+480)
   IF_PICTURE_IN ($xtop+400, $ytop+300, $xtop+700, $ytop+480, "bonus.bmp", -1, 90)
      LOGWRITE ("да, бонус")
      WAITMS(100)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      WAITMS(200)
     
      MOVE($xtop+50, $ytop+100)
      WAITMS(100)
     
   Else
      LOGWRITE ("Нет бонусов")
      WAITMS(50)
   END_IF
END_SUB

SUB (sliv)
   //Проверка на проигрыш в бою
   GETSCREEN($xtop+266, $ytop+150, $xtop+1025, $ytop+450)
   COLORMODE(6,$xtop+266, $ytop+150, $xtop+1025, $ytop+450)
   IF_PICTURE_IN ($xtop+266, $ytop+150, $xtop+1025, $ytop+450, "sliv.bmp", -1, 90)
      LOGWRITE ("СЛИЛИ")
      //Если проиграли в бою нажимаем на кнопку закрыть игру и прерываем сценарий
      WAITMS(100)
      LDOWN($xtop+1006, $ytop-35)
      WAITMS(100)
      LUP($xtop+1006, $ytop-35)
      WAITMS(200)
      HALT
   else
      LOGWRITE ("Победа")
      WAITMS(50)
   END_IF
END_SUB

SUB (atak)
   //Сам процесс боя
   $atak = 0
   while ($atak = 0)
      //Нажатие на кнопку призыва дракона (если она активна)
      hppers ()  //Проверка на  хп персонажа
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN ($xtop, $ytop+60, $xtop+40, $ytop+72, "prizv.bmp", -1, 90)
         
         LDOWN($_return1+5, $_return2+3)
         wAITMS(100)
         LUP($_return1+5, $_return2+3)
         
         WAITMS(50)
         LOGWRITE ("зовем драка")
         WAITMS(500)
         MOVE($xtop+50, $ytop+100)
      ELSE
         //Если кнопка удара не активна, то нажмем на нее
         IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "an2.bmp", -1, 100)
            LCLICK($_return1+30, $_return2)
            WAITMS(50)
            LOGWRITE ("атака1")
            MOVE($xtop+50, $ytop+100)
           
            WAIT(2)
         ELSE
            //Если кнопка удара нстала активной, то нажмем на нее
            IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+900,$ytop+465, "aa2.bmp", -1, 100)
               LCLICK($_return1+30, $_return2)
               WAITMS(50)
               LOGWRITE ("атака2")
               MOVE($xtop+50, $ytop+100)
               WAIT(2)
            ELSE
               //  Проверка на наличие кнопки закрыть бой (если противник или наш герой повержен)
               GETSCREEN($xtop+400,$ytop+300, $xtop+1000,$ytop+500)
               IF_PICTURE_IN ($xtop+400,$ytop+300, $xtop+1000,$ytop+500, "zak2.bmp", -1, 90)
                  WAITMS(800)
                 
                  //проверяем проиграли мы или победили
                  sliv ()
                  //Закрываем бой
                  WAITMS(200)
                  LDOWN($_return1, $_return2)
                  WAITMS(200)
                  LUP($_return1, $_return2)
                  WAITMS(200)
                  MOVE($xtop+50, $ytop+100)
                 
                  LOGWRITE ("бойзак")
                 
                  $atak = 1
                  WAIT(1)
               ELSE
                  WAITMS(50)
               END_IF
            END_IF
         END_IF
      END_IF
   end_cyc
   
   //boiend()
   WAITMS(100)
END_SUB

SUB (rec)
   //Проверка на выскакивающее окно с ошибкой реконект
   LOGWRITE ("реконект?")
   WAIT(2)
   GETSCREEN($xtop, $ytop+80, $xtop+1240, $ytop+502)
   COLORMODE(6,$xtop, $ytop+80, $xtop+1240, $ytop+502)
   IF_PICTURE_IN ($xtop, $ytop+80, $xtop+1240, $ytop+502, "rec.bmp", -1, 90)
      LOGWRITE ("дА")
      // Если окно найдено закрываем его
      wAITMS(200)
      LDOWN($_return1, $_return2)
      wAITMS(100)
      LUP($_return1, $_return2)
      // И посылаем команду боя
      wAITMS(200)
      atak ()
   Else
      LOGWRITE ("Нет")
   END_IF
END_SUB

SUB (boi)
   //Проверяем бой начался или нет  (определяется по кнопке призыва дракона, которая появляется во время боя)
   LOGWRITE ("бой нач-ся?")
   WAIT(2)
   GETSCREEN($xtop, $ytop+60, $xtop+40, $ytop+72)
   COLORMODE(6,$xtop, $ytop+60, $xtop+40, $ytop+72)
   IF_PICTURE_IN ($xtop, $ytop+60, $xtop+40, $ytop+72, "prizv.bmp", -1, 90)
      LOGWRITE ("дА")
      // отправляем команду начать бой
      atak ()
   Else
      LOGWRITE ("Нет")
      //Не начался бой. уменьшаем счетчик убитых мобов на 1
      INC($mob,-1)
   END_IF
END_SUB

SUB (boii)
   GETSCREEN($xtop+455,$ytop+430, $xtop+500,$ytop+465)
   COLORMODE(6,$xtop+455,$ytop+430, $xtop+500,$ytop+465)
   IF_PICTURE_IN ($xtop+455,$ytop+430, $xtop+500,$ytop+465, "an2.bmp", -1, 90)
      atak ()
   Else
      LOGWRITE ("Бой начался")
   END_IF
END_SUB

//Проведение проверок
SUB (prover)
   
   //На наличие окна с реконектом
   rec ()
   //Начался ли бой (но дракон еще не призван)
   boi ()
   //Начался ли бой ( дракон уже призван)
   boii ()
   //На наличие окна с бонусами
   bonus ()
   //на наличие окна со статистикой
   stat ()
   
   //проверка вдруг бой уже закончился
   GETSCREEN($xtop+400,$ytop+300, $xtop+1000,$ytop+500)
   COLORMODE(6,$xtop+400,$ytop+300, $xtop+1000,$ytop+500)
   IF_PICTURE_IN ($xtop+400,$ytop+300, $xtop+1000,$ytop+500, "zak.bmp", -1, 90)
      WAITMS(1000)
      // если бой закончился проверяем проиграли или нет
      sliv ()
     
      WAITMS(200)
      LDOWN($_return1+20, $_return2)
      WAITMS(200)
      LUP($_return1+20, $_return2)
      WAITMS(200)
      MOVE($xtop+50, $ytop+100)
      LOGWRITE ("бойзак")
      WAIT(1)
   END_IF
END_SUB

SUB (poisk)
   
   $prov = 0
   $poiskm = 0
   
   // количество попыток найти моба (они перемещаются и могут быть не сразу найдены)
   while ($poiskm <19)
     
      INC($prov,1)
      LOGWRITE ("поиск моба ", $prov)
      //Ищем моба
      GETSCREEN($xtop+209, $ytop+212, $xtop+240, $ytop+227)
      COLORMODE(6,$xtop+209, $ytop+212, $xtop+240, $ytop+227)
      IF_PICTURE_IN ($xtop+209, $ytop+212, $xtop+240, $ytop+227, "31.bmp", -1, 100)
         //  моб найден. заканчиваем поиски моба
         $poiskm = 20
         $prov = 0
         //Нажимаем на картинку моба
         DBLCLICK($_return1, $_return2-15)
         WAITMS(50)
         INC($mob,1)
         LOGWRITE ("бой номер ", $mob)
         LOGWRITE ("Бъем верхнего")
         WAITMS(300)
         //Отправляем команду на проверку начался бой или нет
         boi()
         WAIT(1)
         
      Else
         WAITMS(400)
         INC($poiskm,1)
         if ($prov > 18)
           
            prover ()
           
         END_IF
      END_IF
   END_CYC
END_SUB


SUB (drakhp)
   //Проверка здоровья дракона
   GETSCREEN($xtop-3, $ytop+78, $xtop, $ytop+81)
   COLORMODE(6,$xtop-3, $ytop+78, $xtop, $ytop+81)
   IF_PIXEL_IN ($xtop-3, $ytop+78, $xtop, $ytop+81, 4144959)
     
      //низкое здоровье нажимаем на иконку еды (находится с небольшим смещением от еды персонажа)
      LOGWRITE ("ДРАК Голод")
      WAITMS(100)
      MOVE($xeda+70, $yeda+19)
      WAITMS(100)
      LDOWN($xeda+70, $yeda+19)
      WAITMS(100)
      LUP($xeda+70, $yeda+19)
      WAITMS(200)
      MOVE($xeda+70, $yeda+100)
      WAITMS(800)
   else
      //полоса здоровья нормальная для боя
      LOGWRITE ("ДРАК сыт")
   END_IF
END_SUB


GETSCREEN
COLORMODE(6)
// Расположение ОРИЕНТИРА по отношению к которой будем искать те или иные предметы.
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "xy.bmp", -1, 90)
   $xtop = $_return1
   $ytop = $_return2
   
   LOGWRITE("X: ", $xtop," Y: ", $ytop)
   // поиск предмета на карте, захватив который мы смещаем карту в нужное положение по отношению к ориентиру
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ornt.bmp", -1, 90)
      $xor = $_return1
      $yor = $_return2
     
     
      WAITMS(100)
     
      LDOWN($xor,$yor)
      WAITMS(50)
      MOVE($xtop+258, $ytop+359)
      WAITMS(50)
      LUP($xtop+258, $ytop+359)
      WAITMS(100)
     
      //Поиск картинки с едой
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "eda.bmp", -1, 90)
         $xeda = $_return1
         $yeda = $_return2
         LOGWRITE ("еда найдена")
         
         
         $mob = 0
         while ($mob <2000)
           
            WAITMS(200)
            //прверки на выскакивающие окна и на сытость песонажа и дракона
            //Проверка на ежедневный бонус
            bonus ()
            //Проверка на ошибку реконект
            rec ()
            //Проверка на  хп персонажа
            hppers ()
            //Проверка на хп дракона
            drakhp ()
            //Поиск моба
            poisk ()
           
         END_CYC
      END_IF
     
   END_IF
   
   WAITMS(100)
   LDOWN($xtop+1006, $ytop-35)
   WAITMS(100)
   LUP($xtop+1006, $ytop-35)
   WAITMS(200)
   
END_IF

HALT

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #6 on: November 24, 2016, 12:23:00 PM »

А зачем параллельно? Просто вставь вызов подпрограммы перед условиями.
Наличия большого количества подпрограмм совсем не плохо. плохо будет когда ты решишь выпрыгивать из них через ГОТО. Но такого у тебя нет так что все в пределах нормы.

У тебя пишутся ограничения областей коррекции, в дополнение к этому, тогда уж, ограничь и зону снимка.
Из цикла while ($atak = 0) убрал у тебя лишние снимки.


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

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Помогите новичку довести до ума код
« Reply #7 on: November 24, 2016, 01:09:17 PM »
...жаль плюсиков нет. Спасибо большое!!!
а вот они плюсики!!!        +    +       +   +       +     ++   +     +      +++  +     
а вот  оно какое  Спасибо    бооольшое!!!  ;D
« Last Edit: November 24, 2016, 01:13:22 PM by Золотой »