Что нового

не срабатывает условие выхода из цикла

stormovik

Новичок
Сообщения
58
Репутация
1
только начал разбираться в программе и столкнулся о следующей проблемой:
Бот должен убивать непись по овервью.
Код:
$x = 1 
WinActivate ("EVE") ;активация окна

For $x = 1 to 5
	Send("{F1 down}"); - Нажать клавишу F1 и удерживать
	sleep(100)
	Send("{F1 up}"); - Освободить клавишу F1 ; активация группы пушек
	MouseClick("left",1040,220); наведение орудий на цель - первая строчка в оверью

 	Do
		PixelSearch(929, 148, 976, 149, 0x9d0b0e, 1); проверка убитости структуры    
	Until @error=0 ; по идее, этот цикл должен проверять целостность структуры цели фрегата, и как только она подходит к концу, прекращать цикл

	sleep(5000); за оставшиеся пять секунд он умирает
	$x += 1
Next ; но продолжаться не хочет ((
Exit


Проверял работоспособность условия для цикла Do...Until вот этим:
Код:
PixelSearch(929, 148, 976, 149, 0x9d0b0e, 1); проверка убитости структуры   statements  
if @error = 0 Then
	MsgBox(0, "Tutorial", "Hello World!")
EndIf


и этим
Код:
Do
	PixelSearch(929, 148, 976, 149, 0x9d0b0e, 1); проверка убитости структуры    
Until @error=0
MsgBox(0, "Tutorial", "Hello World!")

и сообщение исправно выходит.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... думаю может не работать только если убить слишком быстро... т.е. была бронь и 1 залп убил оставшуюся бронь и структуру... :smile:
 
Автор
S

stormovik

Новичок
Сообщения
58
Репутация
1
1 залп убил оставшуюся бронь и структуру... :smile:
Увы, нет (, прогрызаю я их понемногу

Правильно ли я понимаю, что если PixelSearch находит пиксель заданного цвета на заданной площади, то результатом @error будет ноль, так как ошибки нет?

изменил проверку работы следующим образом:
Код:
Do
	PixelSearch(929, 146,948,149 , 0x474744, 1); проверка недобитости структуры    
	MsgBox(0, "Tutorial", "живой")
Until @error=1
MsgBox(0, "Tutorial", "щас умрет!")
sleep(5000)

табличка "живой" бодро появлялась даже в случае анлока целей, хотя @error уж точно должен быть равен 1 (
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Код:
Do
    PixelSearch(929, 146,948,149 , 0x474744, 1); проверка недобитости структуры    
    MsgBox(0, "Tutorial", "живой")
Until @error=1

в этом коде появление таблички никак не зависит от результатов поиска
и @error уже не к пиксельсерчу относится, а к MsgBox

ЗЫ спустя минут несколько
Код:
Do
        PixelSearch(929, 148, 976, 149, 0x9d0b0e, 1); проверка убитости структуры    
Until @error=0 ; по идее, этот цикл должен проверять целостность структуры цели фрегата, и как только она подходит к концу, прекращать цикл

проверил, вот этот кусок работает хотя и не мешалобы добавить sleep(100) чтоб не загружать процессор
 

spider_xr

Знающий
Сообщения
14
Репутация
7
не устраевает той цикл попробуй вот этот
Код:
While 1
	PixelSearch(929, 148, 976, 149, 0x9d0b0e, 1)    
	if Not @error Then ExitLoop
WEnd


есть пара замечаний, зачем тебе "$x += 1" в теле цикла for/next при этом цикл выполняется не 5 раз а 3 и я бы добавил
Код:
MsgBox(0, "Tutorial", "щас умрет!")

после поиска пикселя и проверил не бывает ли ложных решений о смерти противника так как при таком раскладе цикл успеет завершить свою работу за убийство одного противника.
 

hikki

Продвинутый
Сообщения
233
Репутация
99
И вообще, в корне неправильный поход. Зачем зажимать, ждать 100мс, потом отпускать F1? Не срабатывает изза краткости нажатия кнопка, увеличь время ее удержания через
Код:
Opt("SendKeyDownDelay", 50)

Зачем эта странная конструкция с ожиданием красного цвета на структуре, спаузой и нажатием ф1 снова? чтонибудь может лагануть и будет интересно наблюдать за бесконечным цыклом ожидания. Сделай проверку работы оружия, есть несколько реализаций на форуме, и пока существует цель оружие пусть будет включено.
ну и почему 5 циклов? Тоесть расчитано на 5 неписей в белте? их вообщето может быть 6

в общем добропожаловать чуть чуть поглубже, в раздел Eve http://autoit-script.ru/index.php?board=19.0
 
Верх