Автокликер Clickermann :: Форум
		Основной раздел => Общие вопросы => Topic started by: Полуночник on July 30, 2014, 09:34:18 PM
		
			
			- 
				Может конечно что то я в скрипте напортачил. Он работает, но время от времени случаются ошибки выполнения.
 Скрипт для чистки почты в игре Гнев Богов:
 [spoiler]
 // почта
 // Автор: Полуночник
 // Версия: 15.3 (30.07.2014)
 A:
 HINTPOPUP("Чищу почту")
 LCLICK(95,85)
 $r1 = 467
 $r2 = 344
 $r3 = $r1+10
 $r4 = $r2+10
 GOSUB(Per)
 $b1=0
 WHILE($b1=0)
 $r1 = 467
 WAIT(1)
 GOSUB(Per)
 GETSCREEN
 if_pixel_in(870, 300, 900, 550, 1339325)
 LCLICK($_return1+10, $_return2+2)
 WAIT(1)
 GETSCREEN
 if_pixel_in(1045, 555, 1065, 575, 2286590)
 else
 LCLICK(1070, 540)
 $b2=0
 WHILE($b2=0)
 WAITMC(500)
 GETSCREEN
 IF_PIXEL_IN(815,340, 830, 360, 8901117)
 $b2 = 1
 END_IF
 END_CYC
 KEYPRESS(#ENTER)
 WAIT(1)
 GOSUB (Per)
 goto(D)
 end_if
 WHILE($r1<705)
 IF_PIXEL_IN($r1,$r2, $r3,$r4, 3158058)
 $j = $_return1
 $j2 = $_return2
 WAITMS(500)
 LCLICK(925,560)
 LDOWN(920,564)
 WAITMS(RND(700,900))
 MOVE($j,$j2)
 WAITMS(500)
 LUP($j,$j2)
 LCLICK(800,10)
 KEYPRESS(#ENTER)
 GOSUB (Per)
 $r1 = 706
 else
 INC($r1,53)
 INC($r3,53)
 WAITMS(100)
 IF($r1 = 732)
 INC($r2,53)
 INC($r4,53)
 $r1 = 467
 $r3 = $r1+10
 WAITMS(100)
 IF($r2>556)
 $r1 = 706
 $b1=1
 END_IF
 END_IF
 END_IF
 END_CYC
 else
 LCLICK(35,85)
 HINTPOPUP("нет писем")
 halt
 end_if
 D:
 END_CYC
 
 lClick(1399,58)
 waitms(300)
 lClick(131,550)
 waitms(300)
 $b = 0
 WHILE($b = 0)
 WAIT(1)
 GETSCREEN
 if_pixel_in(170, 550, 171, 551, 16053492)
 else
 $b = 1
 END_IF
 END_CYC
 lClick(212,116)
 goto(A)
 
 
 SUB(Per)
 $b = 0
 WHILE($b = 0)
 WAIT(1)
 GETSCREEN
 if_pixel_in(820, 387, 821, 388, 9935251)
 $b = 1
 END_IF
 END_CYC
 END_SUB
 
 
 
[/spoiler]
 
 Ошибки бывают разные. Чаще всего встречается не выполнение участка кода
 [spoiler]
 else
 INC($r1,53)
 INC($r3,53)
 WHILE($r1 = 732)
 INC($r2,53)
 INC($r4,53)
 $r1 = 467
 $r3 = $r1+10
 IF($r2>556)
 $r1 = 706
 $b1=1
 END_IF
 END_CYC
 END_IF
 [/spoiler]
 
 но бывает что скрипт работает норм, а потом с 25 или 46, да неважно с какой строки просто перескакивает на 69 строку, на участок кода
 [spoiler]      LCLICK(35,85)  ---- 69 строка
 HINTPOPUP("нет писем")
 halt
 end_if
 [/spoiler]
 Обьясните плииз в чём может быть заковырка?
- 
				Цикл WHILE($r1 = 732) выполнится только если условие будет верным, в противном случае код будет пропущен. А если он и выполнится внутри цикла сразу же встречается $r1 = 467. То есть больше одной итерации по любому не будет! Вопрос, зачем там вообще цикл?
 
- 
				Цикл WHILE($r1 = 732) выполнится только если условие будет верным, в противном случае код будет пропущен. А если он и выполнится внутри цикла сразу же встречается $r1 = 467. То есть больше одной итерации по любому не будет! Вопрос, зачем там вообще цикл?
 
 Хм..... да... наверное он теперь и не нужен... я его брал из старого скрипта. Сейчас правильнее будет вместо цикла сделать сравнение наверное. Сча покувыряемся))
 
 Покувырялся.... Изменил тот участок кода. WHILE на IF. Праблы остались теже.... или не срабатывает участок кода тот же или так же перескакивает в конец скрипта((((
- 
				Решил сделать запись лога... получилось следующее:
 заданы переменные:
 $r1 = 467
 $r2 = 344
 $r3 = $r1+10
 $r4 = $r2+10
 
 цикл:
 WHILE($r2<556)
 
 действия:
 else
 print("занято, прибавляю")
 print("в начале r1:", $r1)
 INC($r1,53)
 $r3 = $r1+10
 print("сейчас r1:", $r1)
 IF($r1 = 732)
 INC($r2,53)
 $r4 = $r2+10
 print("сейчас r2", $r2)
 $r1 = 467
 END_IF
 
 и вот что в логе нахожу:
 1:22:27 занято, прибавляю
 1:22:27 в начале r1:626
 1:22:27 сейчас r1:679
 1:22:27 занято, прибавляю
 1:22:27 в начале r1:679
 1:22:27 сейчас r1:732
 1:22:27 место свободно тут r1:648 ----- НУ ОТКУДА 648 появилось??????????? если по условиям должен искать в координатах от 626 до 3-636, потом 679*689 а в координатах 648 вообще не должен искать????????
 я в шоке
- 
				Короче я так и не понял что это за глюк был((( порядка 20 раз переделывал скрипт.... сейчас всё вернул как было при глюке.... вот только глюка больше нет..... откуда взялся? как куда пропал? теперь уже не понять....
 
 Рано радовался... глюк не пропал(((( Оставил выполнение скрипта на ночь. Утром проснулся и наблюдал что скрипт стоит в ступоре из -за глюка того же.
 Вот скрипт в каком виде сейчас:
 [spoiler]
 
 // почта
 // Автор: Полуночник
 // Версия: 15.5 (30.07.2014)
 A:
 HINTPOPUP("Чищу почту")
 LCLICK(95,85)
 WAIT(4)
 $r1 = 467
 $r2 = 352
 $r3 = $r1+10
 $r4 = $r2+10
 GOSUB(Per)
 WHILE($r2<564)
 WAITMS(200)
 GOSUB(Per)
 GETSCREEN
 if_pixel_in(870, 300, 900, 550, 1339325)
 LCLICK($_return1+10, $_return2+2)
 WAITMS(300)
 GETSCREEN
 if_pixel_in(1045, 555, 1065, 575, 2286590)
 else
 LCLICK(1070, 540)
 $b2=0
 WHILE($b2=0)
 WAITMC(300)
 GETSCREEN
 IF_PIXEL_IN(815,340, 830, 360, 8901117)
 $b2 = 1
 END_IF
 END_CYC
 KEYPRESS(#ENTER)
 WAITMS(200)
 GOSUB (Per)
 goto(D)
 end_if
 WAITMS(200)
 E:
 IF_PIXEL_IN($r1,$r2, $r3,$r4, 3158058)
 $j = $_return1
 $j2 = $_return2
 WAITMS(300)
 LCLICK(925,560)
 LDOWN(920,564)
 WAITMS(700)
 MOVE($j,$j2)
 WAITMS(500)
 LUP($j,$j2)
 LCLICK(800,10)
 WAITMS(200)
 KEYPRESS(#ENTER)
 GOSUB (Per)
 else
 INC($r1,53)
 $r3 = $r1+10
 WAITMS(100)
 IF($r1 = 732)
 INC($r2,53)
 $r4 = $r2+10
 $r1 = 467
 WAITMS(100)
 END_IF
 IF($r2 = 564)
 goto(D)
 END_IF
 goto(E)
 END_IF
 else
 LCLICK(35,85)
 HINTPOPUP("нет писем")
 halt
 end_if
 D:
 END_CYC
 
 lClick(1399,58)
 waitms(300)
 lClick(131,550)
 waitms(300)
 $b = 0
 WHILE($b = 0)
 WAIT(1)
 GETSCREEN
 if_pixel_in(170, 550, 171, 551, 16053492)
 else
 $b = 1
 END_IF
 END_CYC
 lClick(212,116)
 goto(A)
 
 
 SUB(Per)
 $b = 0
 WHILE($b = 0)
 WAIT(1)
 GETSCREEN
 if_pixel_in(820, 387, 821, 388, 9935251)
 $b = 1
 END_IF
 END_CYC
 END_SUB
 
 
 По прежнему участок кода
 else
 INC($r1,53)
 $r3 = $r1+10
 WAITMS(100)
 IF($r1 = 732)
 INC($r2,53)
 $r4 = $r2+10
 $r1 = 467
 WAITMS(100)
 END_IF
 IF($r2 = 564)
 goto(D)
 END_IF
 goto(E)
 END_IF
 else
 
 даёт сбои и выдаёт непонятные результаты время от времени. Может минут 5 нормально проработать, а может каждые 30 сек лагать((((
- 
				Ты забыл про $r3.
 Где-то 61 строкой должно быть
 $r3 = $r1+10
 Как я понимаю ты двигаешься по рядам сканируя ячейки. Вот при переходе на новую строку ты забываешь про правую границу и начиная со строки 2 он ищет не по ячейкам, а по всей строке. Ну и вероятно пытается обработать больше 1 раза одно место.
 
 И ещё проверь все буквы в строке 26 "WAITMC(300)"
- 
				Ты забыл про $r3.
 Где-то 61 строкой должно быть
 
 Vint спасибо. Ты прав. Из-за отсутствия $r3 в 61 строке все праблы. 1.5 часа после исправления - полёт нормальный))))
 И ещё проверь все буквы в строке 26 "WAITMC(300)"
 
 Не, тут всё норм.
- 
				Не, тут всё норм.
 
 Не нормально. Прочитай по буквам.
- 
				Не, тут всё норм.
 
 Не нормально. Прочитай по буквам.
 
 
 намальна намальна я твая панимать =)
- 
				Да я понял о чём)) Просто сам уже давно исправил))