Что нового

[Автоматизация] Использование в боте if...else...endif

Vandam

Новичок
Сообщения
12
Репутация
0
Пишу бот для онлайн игры, суть в том что бы зарегистрироваться на арену с минимальной разницей во времени, иначе зарегистрируется кто-то другой вместо второго моего персонажа. Сначала нужно открыть окна регистрации, после чего появляются окна подтверждения,в которых бот ищет определенный цвет.Но при запуске выдает ошибку, ссылаясь на последнюю строку скрипта-несоответствие If-Endif. Ткните пальцем на ошибку, так как в Autoit я новичок (раньше немного пользовался Autohotkey).
Код:
Sleep(2000)
MouseClick("right", 1095, 255) ;выделение правого окна
Sleep(200)
MouseClick("left", 760, 573) ; выбор окна арены
Sleep(500)
MouseClick("left", 760, 610) ; регистрация на арену
Sleep(1000)
$coord = PixelSearch(801, 455, 863, 431, 0xDBC08E) ; проверяем цвет пикселя в координате появляющегося окна
if Not @error Then ; если кто-то другой зарегистрирован (найден цвет), отменяем регистрацию
   MouseClick("left", 830, 443)
 Elseif @error Then ; если больше никто не зарегистрирован, активируем левое окно
 MouseClick("right", 117, 275)
 Sleep(500)
 MouseClick("left", 236, 613) ; открываем окно арены левого окна
 Sleep(400)
 MouseClick("left", 236, 613) ; регистрируемся на арену
 Sleep(100)
 $coord = PixelSearch(132, 455, 199, 431, 0xDBC08E) ; проверяем цвет пикселя в координате появляющегося окна
 If Not @error Then ; если цвет найден
    MouseClick("right", 1095, 255) ; активируем обратно правое окно для подтверждения регистрации
	$coord = PixelSearch(654, 457, 722, 429, 0xDBC08E) ; проверяем цвет пикселя для проверки регистрации
	If Not @error Then ; если цвет найден, регистрируемся на арену
	   MouseClick("left", 686, 444); подтверждаем регистрацию
	   Sleep(100)
	   MouseClick("right", 165, 442) ; активируем левое окно для подтверждения регистрации
	   Sleep(200)
	   MouseClick("left", 165, 442)
Endif
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
[Автоматизация] Re: [Автоматизация] Проблема с if...else...endif

Не помагает, ту же ошибку выдает.
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
Re: [Автоматизация] Проблема с if...else...endif

Vandam
У вас три раза If и только один раз EndIf. Нужно ещё два добавить
Код:
EndIf
  EndIf
EndIf
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
Re: [Автоматизация] Проблема с if...else...endif

Код:
$coord = PixelSearch(132, 455, 199, 431, 0xDBC08E) ; проверяем цвет пикселя в координате появляющегося окна
 If Not @error Then ; если цвет найден
    MouseClick("right", 1095, 255) ; активируем обратно правое окно для подтверждения регистрации
    $coord = PixelSearch(654, 457, 722, 429, 0xDBC08E) ; проверяем цвет пикселя для проверки регистрации
 Endif
    If Not @error Then ; если цвет найден, регистрируемся на арену
       MouseClick("left", 686, 444); подтверждаем регистрацию
       Sleep(100)
       MouseClick("right", 165, 442) ; активируем левое окно для подтверждения регистрации
       Sleep(200)
       MouseClick("left", 165, 442)
	Endif
Endif

добавил, скрипт работает, но перестает выполнятся с данного момента, до этого куска все работает правильно
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: [Автоматизация] Проблема с if...else...endif

Посчитайте и сравните количество If и Endif в Вашем коде.
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
Re: [Автоматизация] Проблема с if...else...endif

вот немного переделал, но проблема осталась
Код:
Sleep(2000)
MouseClick("right", 1095, 255) ;выделение правого окна
Sleep(200)
MouseClick("left", 760, 573) ; выбор окна арены
Sleep(500)
MouseClick("left", 760, 610) ; регистрация на арену
Sleep(1000)
$coord = PixelSearch(801, 455, 863, 431, 0xDBC08E) ; проверяем цвет пикселя в координате появляющегося окна
if Not @error Then ;(найден цвет)если кто-то другой зарегистрирован, отменяем регистрацию
   MouseClick("left", 830, 443); отмена регистрации
Else ; если больше никто не зарегистрирован, активируем левое окно
 MouseClick("right", 117, 275)
 Sleep(100)
 MouseClick("left", 237, 568) ; открываем окно арены левого окна
 Sleep(100)
 MouseClick("left", 236, 613) ; регистрируемся на арену
 Sleep(100)
 $coord = PixelSearch(272, 460, 344, 426, 0xDBC08E) ; проверяем цвет пикселя в координате появляющегося окна
    If Not @error Then ; если цвет найден
    MouseClick("right", 1095, 255) ; активируем обратно правое окно для подтверждения регистрации
    Endif
Endif
$coord = PixelSearch(654, 457, 722, 429, 0xDBC08E) ; проверяем цвет пикселя для проверки регистрации
If Not @error Then ; если цвет найден, регистрируемся на арену
	   MouseClick("left", 686, 444); подтверждаем регистрацию
	   Sleep(100)
	   MouseClick("right", 165, 442) ; активируем левое окно для подтверждения регистрации
	   Sleep(200)
	   MouseClick("left", 165, 442)
Endif
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
Re: [Автоматизация] Проблема с if...else...endif

Vandam
проблема осталась
Скрипт всего лишь реализует придуманный вами алгоритм с применением указанных вами данных. Значит проблема либо в ошибочной логике, либо в некорректных координатах, либо в цвете.
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
Re: [Автоматизация] Проблема с if...else...endif

InnI сказал(а):
проблема либо в ошибочной логике, либо в некорректных координатах, либо в цвете.
Координаты и цвет проверялись отдельно до написания скрипта,тем более цвет не меняется, скорее всего дело в логике. Немного поэкспериментировав, кое-что стало получатся, буду дальше пробовать.
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
После всех моих извращений получился вот такой скрипт
Код:
Do
Sleep(1000)
MouseClick("right", 1095, 255, 1, 5) ;выделение правого окна
Sleep(200)
MouseClick("left", 760, 573, 1, 5) ; выбор окна арены
Sleep(500)
MouseClick("left", 760, 610, 1, 5) ; регистрация на арену
Sleep(500)
$coord = PixelSearch(801, 455, 863, 431, 0xDBC08E) ; чекаем цвет пикселя в координате появляющегося окна
if Not @error Then ;(найден цвет)если кто-то другой зарегистрирован, отменяем регистрацию
   MouseClick("left", 830, 443, 1, 5); отмена регистрации
Elseif @error Then ; если больше никто не зарегестрирован, активируем левое окно
 MouseClick("right", 117, 275, 1, 5); активируем левое окно
 Sleep(100)
 MouseClick("left", 237, 568, 1, 5) ; открываем окно арены левого окна
 Sleep(100)
 MouseClick("left", 236, 613, 1, 5) ; регистрируемся на арену
 Sleep(500) ; ДЛЯ ПРОВЕРКИ ЦВЕТА В ЛЕВОМ ОКНЕ!!!!
 $coord = PixelSearch(272, 460, 344, 426, 0xDBC08E) ; чекаем цвет пикселя в координате появляющегося окна
 If Not @error Then ; если цвет найден, подтверждаем регистрацию
  MouseClick("right", 1095, 255, 1, 5) ; активируем обратно правое окно для подтверждения регистрации
  Sleep(50)
  $coord = PixelSearch(654, 457, 722, 429, 0xDBC08E) ; чекаем цвет пикселя для проверки регистрации
       If Not @error Then ; если цвет найден, подтверждаем регистрацию
	   MouseClick("left", 686, 444, 1, 5); подтверждаем регистрацию в правом окне
	   Sleep(50)
	   MouseClick("right", 165, 442, 1, 5) ; активируем левое окно для подтверждения регистрациИ
	   Sleep(50)
	   MouseClick("left", 165, 442, 1, 5) ; подтверждение регистрации
       Endif
	    If @error Then ; если (цвет не найден) не прошел регистрацию, отменяем регистрацию в ПРАВОМ ОКНЕ !!!!!!!
	   MouseClick("right", 1095, 255, 1, 5) ; активация правого окна
       Sleep(100)
	   MouseClick("left", 760, 610, 1, 5) ; отмена регистрации в правом окне
       Sleep(100)
	   $coord = PixelSearch(801, 455, 863, 431, 0xDBC08E) ; чекаем цвет пикселя для проверки отмены регистрации
        If Not @error Then ;
		   MouseClick("left", 830, 443, 1, 5) ; отмена регистрации в правом окне
	    Endif
 If @error Then ; если (цвет не найден) не прошел регистрацию, отменяем регистрацию в ЛЕВОМ ОКНЕ !!!!!!!!!
	   MouseClick("right", 236, 613, 1, 5) ; активация левого окна
       Sleep(100)
	   MouseClick("left", 236, 613, 1, 5) ; отмена регистрации в левом окне
       Sleep(100)
	   $coord = PixelSearch(275, 454, 346, 427, 0xDBC08E) ; чекаем цвет пикселя для проверки отмены регистрации
        If Not @error Then ;
		   MouseClick("left", 307, 442, 1, 5) ; отмена регистрации в левом окне
	    Endif
   EndIf
Endif
 Endif
  Endif
Until $coord = PixelSearch(411, 745, 947, 690, 0xAB4C29)

В принципе все работает, но почему-то после удачной регистрации скрипт(или часть) выполняется по второму кругу(это не проблема, решил уменьшением таймингов).И еще не могу установить горячие клавиши для паузы и остановки скрипта. Перечитал справку и форум, пробовал разные варианты, скачивал какой-то скрипт, но ничего не работает. Подскажите, как мне это справить.
 
Автор
V

Vandam

Новичок
Сообщения
12
Репутация
0
Нашел вот такой пример на форуме
Код:
; Нажимайте Esc, чтобы завершить скрипт, и Pause/Break, чтобы приостановить

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d для вызова сообщения

MsgBox(4096, 'Сообщение', 'Нажмите горячую клавишу Pause/Break,' & @CRLF & 'чтобы увидеть как это работает.')

;=== Тело программы должно находится здесь ;===
While 1
    Sleep(100)
WEnd
;===

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
EndFunc

Func Terminate()
    Exit 0
EndFunc

Func ShowMessage()
    MsgBox(4096, "", "Это сообщение.")
EndFunc

все заработало как нужно)))
Всем спасибо за помощь, дальше сам разберусь. Тему можно закрывать.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] Использование в боте if...else...endif" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Верх