Author Topic: Разбор ошибок и недочётов (Полезно для начинающих)  (Read 16284 times)

0 Members and 1 Guest are viewing this topic.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
находит всё. при поиске ошибок всегда в условия вставляю запись в лог найденых координат. Но по каким то причинам не происходит цикл, и переходит к клику.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Новая проблемма(( вот часть скрипта, который работает на чистку почты в игре, но мне надо кое что добавить:
Code: [Select]
GETSCREEN
if_pixel_in(800, 230, 1100, 320, 11982062)  //поиск есть ли письма на почте, если есть задаю координаты
   $x2 = $_return1
   $y2 = $_return2
else
   goto(F) // ухожу из почты если писем нет
end_if
GOSUB (PR)
LCLICK(79,17)
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                  //до этого момента запускаю поиск текста в мазиле (ctrl+f работать не хочет, поэтому кликаю)
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   //ну тут задаю нужные координаты и т. д.
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)
WAITMS(115)
LCLICK($x2+20,$y2+256)
GOSUB (WAIT_KN)
WAITMS(10)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
LCLICK($e+10,$e1+2)
WAITMS(RND(600,1000))
LCLICK($x2+170,$y2+237)
WAITMS(300)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)

И нужно бы мне внести проверку на результаты поиска пикселя.
GETSCREEN
IF($y2= 300)
GOTO(L)
Если он найден в одном месте - хорошо, если в другом($y2= 300), то пропускаем несколько строк и переходим ближе к концу скрипта.
Code: [Select]
GETSCREEN
if_pixel_in(800, 230, 1100, 320, 11982062)  //поиск есть ли письма на почте, если есть задаю координаты
   $x2 = $_return1
   $y2 = $_return2
else
   goto(F) // ухожу из почты если писем нет
end_if
GETSCREEN
   IF($y2= 300)    //вот я вставил проверку
   GOTO(L)         //если совпадает, то пропускаем часть команд
END_IF
GOSUB (PR)
LCLICK(79,17)
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                 
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)
WAITMS(115)
LCLICK($x2+20,$y2+256)
GOSUB (WAIT_KN)
WAITMS(10)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
L:                               //переходим сюда если найденные координаты $y2=300
LCLICK($e+10,$e1+2)
WAITMS(RND(600,1000))
LCLICK($x2+170,$y2+237)
WAITMS(300)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
  После того как я добавил эту проверку начинается какафония.... работа скрипта ускоряется раз в 10 и зацикливается на нескольких кликах вызова поиска текста в бразе ("Сервер") находит письмо, но потом не кликает по нужным координатам и тупо снова начинает искать текст.
Code: [Select]
LCLICK(79,17) то.е. зацикливается на этих кликах, отсель
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                 
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)                            и вот до сель
Почему? Я что то не правильно делаю?
« Last Edit: November 05, 2012, 02:57:16 AM by Полуночник »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Проверь скрипт на ошибки (_PIXEL_IN) и на забытые end_if

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Вопрос...
Сравнение if($y2= 300) разве должно менять переменную? в скрипте что привел выше именно так и происходит. Поэтому и происходят глюки в работе.
« Last Edit: November 05, 2012, 09:27:02 AM by Полуночник »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
нет условие переменные не меняет, ошибка в другом

Code: [Select]
$y2 = 100
if($y2 = 300)
//
end_if
print($y2)
halt

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Тогда не пойму ничего.... проверял скрипт десять раз, ошибок не вижу. но как только ставлю это сравнение - идут косяки в работе скрипта(((

yaSanya

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
if (($y2>299)&($y2<301))
  // тело
end_if

так пробовал? работает?
или так:

$y_if=$y2
if ($y_if=300)
  // тело
end_if


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

вот ещё сомнения:

  if (...)
    if (...)
      goto(s1)
    end_if
  else
    if (...)
      goto(s2)
   else
      goto(s3)
   end_if
  end_if

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

Vooj

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Всем привет. не могу разобраться... имеем скрипт

Quote
getscreen

if_picture_in(0,0, $_xmax, $_ymax, "123.bmp", -1,90)
  move($_return1, $_return2)
  wait(1)
end_if
halt

В полноэкранном режиме работает как надо, в оконном тоже, но если привязаться к окну через альт+w - не отрабатывает. Что с этим делать?
Зы тестирую на сайте в хроме.

Alex_nub

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Решил не создавать отдельную тему: проблема тоже с GETSCREEN, и с видимостью картинки для кликера в оконном/полноэкранном режимах.
Сейчас тестирую Кликерман в игре Batlestar Galactica (браузер Опера). И выяснилось, что кликер видит и захватывает картинку ТОЛЬКО в оконном режиме БЕЗ привязки к окну. Во всех остальных вариантах (оконный с привязкой, полноэкранный с/без привязки) - только черный экран (хотя идентификатор окна и размер остаётся тот же, что и в оконном режиме "развёрнутом").
В связи с этим возникло два вопроса:
1) может ли такое быть, что перед основной картинкой в игре, есть ещё второе окно/слой - черное с частичной прозрачностью, типа фильтра? Это предположение тем более вероятно, что вся графика в игре (в космосе) очень тёмная, кто играл наверняка обращал на это внимание. (Причём, если резко вылететь из тени планеты на свет, то мгновенно меняется общая яркость всей картинки, видимо без пересчёта графики, так как освещённость всех обектом меняется за долю секунды, и графика никогда не тормозит в этот момент).
2) и как в данном случае посмотреть все элементы окна, или дополнительные окна/слои, если они там есть.
Где-то на форуме я вроде читал про такую программу для анализа окон, но сейчас не нахожу... (Если это действительно отдельное чёрное окно, то было бы неплохо увеличить его прозрачность, а то в игре местами слишком темно).

(Захват картинки тестировал вот таким скриптом, заодно смотрел как работает COLORMODE)
Code: (clickermann) [Select]
//размер экрана 1680х1050
getscreen
WAITMS(100)
screenshot("aster_z")            //8 бит
WAITMS(50)

getscreen
WAITMS(100)
COLORMODE(4, 80, 100, 1600, 950) //4 бита
screenshot("aster_4")
WAITMS(50)


getscreen
WAITMS(100)
COLORMODE(6, 80, 100, 1600, 950) //2 бита
screenshot("aster_6") 
WAITMS(100)

halt // for single run
« Last Edit: July 03, 2013, 04:49:00 PM by Alex_nub »

Roman

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Всем здравствуйте! Не работает запись. Выдает такую ошибку -
Ошибка записи: не удалось установить перехватчик. Если у вас Vista или Win7, попробуйте отключить UAC.
Какой есть выход?