Что нового

GetLocation модуль

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Текущая версия: 2.1
В связи с очередным пополнением раздела полезным контентом был переписан и выложен в свет этот модуль. Модуль призван облегчить процесс анализа положения и состояния корабля. Использует 5 контрольных проверок. Кнопка андока, кнопка меню игры, первая строка овервью - колонка иконок (для определения наличия в овервью станции), первая строка овервью - колонка имен (для определения наличия букв в первой строке), сообщение о варпе. Код оптимизирован таким образом, что моуль не проверяет наличие станции или астероида или процесс варпа если она в доке, так же он не проверяет ничего если не видит кнопки меню. Так же он не определяет станцию и астероид если он в варпе.
Принцип работы: Считывается информация с экрана, минимум 1 максимум 5 точек, далее исходя из этого делается вывод где мы находимся.
Настраивать координаты и цвета - будете сами :smile:
Код:
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt("MustDeclareVars", 1) ;Форсируем задачу переменных. Тоесть после задания этой опции перед тем как нам использовать какую-либо переменную нам надо обозначить ее.
Global $Location

Func Location()
	#Region - Настройки функции проверки положения и состояния корабля
	Local $LogicState = "Location: "
	If Not IsArray($Location) Then
		Dim $Location[5][7]=[[62,46,62,46,0xE7E7E7,0,"Menu Button Col"],[19,720,19,720,0xFFDE42,5,"Undock Button Col"],[436,536,436,536,0xBDBDBD,10,"Warp Message Col"],[770,169,770,180,0xFFFFFF,2,"Station Icon Col"],[868,175,878,175,0xB6B6B6,50,"Asteroid Name Col"]];0 = Undock, 1 = MenuButton, 2 = OverviewStation, 3 = Asteroid
	EndIf
	#EndRegion - Настройки функции проверки положения и состояния корабля
	For $i = 0 To UBound($Location, 1)-1 Step 1
		PixelSearch($Location[$i][0],$Location[$i][1],$Location[$i][2],$Location[$i][3],$Location[$i][4],$Location[$i][5])
		If Not @error Then
			If $Location[$i][6] = "Warp Message Col" Then Return "Нахожусь в варпе"
			$LogicState &= $Location[$i][6]&": Found | "
		Else
			If $Location[$i][6] = "Menu Button Col" Then Return "Идет загрузка..." ;Ситуацию когда идет загрузка мы обрабатываем даже не доходя до финального распознавания ситуации, ибо работа остальных датчиков этого модуля в момент загрузки бессмысленна.
			If $Location[$i][6] = "Warp Message Col" Then ContinueLoop
			$LogicState &= $Location[$i][6]&": NOT Found | "
		EndIf
	Next
	Select
		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: NOT Found | Station Icon Col: Found | Asteroid Name Col: Found | "
			Return "Космос - вижу станцию"

		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: Found | Station Icon Col: NOT Found | Asteroid Name Col: NOT Found | "
			Return "Станция"

		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: NOT Found | Station Icon Col: NOT Found | Asteroid Name Col: Found | "
			Return "Космос - вижу астероиды"

		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: NOT Found | Station Icon Col: Found | Asteroid Name Col: NOT Found | "
			SetError(1)
			Return "Космос - Вижу станцию"
			#cs - Описание пресета
				Вижу иконку станции но невижу в колонке с названием серого цвета. Мы находимся в космосе и видим станцию.
				Возможно курсор мыши наведен на вторую строку овервью и всплывший внутриигровой тултип закрыл собой в первой
				строке колонку Name. Надо более аккуратно учить бота работать мышью, а лечить эту ситуацию смещением мыши в
				другое место от ее текущего положения. Так же эта ситуация может быть вызвана тотальным сбоем настроек, например
				окно трюма заползло на окно овервью.
			#ce - Описание пресета

		Case $LogicState = "Location: Undock Button Col: NOT Found | Menu Button Col: Found | Station Icon Col: NOT Found | Asteroid Name Col: NOT Found | "
			SetError(2)
			Return "Работа невозможна: Я ничего не вижу кроме треугольника игрового меню"
			#cs - Описание пресета
				Вижу только кнопку меню, остальные проверки на цвета - дали отрицательный результат,
				несуществующая для человека ситуация. Рекомендуется подождать и провести проверку снова.
				Данная ситуация как правило встречается в момент андока когда экран игры плавно затемняется.
				Далее после нажатия кнопки ABORT он начинает плавно светлеть и в конце этого процесса датчики
				сбиваются и выдают тот пресет к которому комментарием идет эта строка.
			#ce - Описание пресета

		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: NOT Found | Station Icon Col: NOT Found | Asteroid Name Col: NOT Found | "
			SetError(3)
			Return "Работа невозможна: Я ничего не вижу в овервью"
			#cs - Описание пресета
				Ситуация в которой бот видит кнопку игрового меню и не видит ни станцию ни астероиды в овервью мы будем считать нерабочей.
				Так же такая ситуация можнт возникнуть при прокручивании овервью вниз или вверх. При проверки по одной точке или же горизонтальной
				линии пикселей рано или поздно наступит такой момент когда при смещении овервью вверх или вниз по нашим координатам чками будет только
				черный фон овервью. Лечится расширением области проверки на несколько пикселей по высоте.
			#ce - Описание пресета

		Case $LogicState = "Location: Menu Button Col: Found | Undock Button Col: Found | Station Icon Col: Found | Asteroid Name Col: Found | "
			SetError(4)
			Return "Работа невозможна: Все проверки прошли успешно о_О"
			#cs - Описание пресета
				Ситуация когда бот видит кнопку меню, кнопку андока, и данные с овервю одновременно. Ситуация возможна во время доккинга.
				Нужно подождать и снова запустить проверку.
			#ce - Описание пресета
		Case Else
			ClipPut('Case $LogicState = "'&$LogicState&'"')
			MsgBox(0,"Неописанная ситуация",$LogicState)
			Sleep(100)
	EndSelect
EndFunc
 

Enemy

Знающий
Сообщения
42
Репутация
7
все настроил, не показывает окном где находится... что в нем может не так быть?
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Не так может быть в том, что когда писался скрипт, в менюшках использовались треугольники, и он ищет их. А сейчас вместо треугольников набор полосок, и скрипт их не находит.
Вдобавок перед сменой треугольников на полоски в одном из патчей был сдвиг треугольников.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Enemy сказал(а):
все настроил, не показывает окном где находится... что в нем может не так быть?
В текущих скриптах уже давно нет смысла искать работоспособность, только использовать их как пример для написания своих алгоритмов.
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Belfigor сказал(а):
В текущих скриптах уже давно нет смысла искать работоспособность, только использовать их как пример для написания своих алгоритмов.
Поспорю! Мой http://autoit-script.ru/index.php?topic=62.0 работаёт всё так же исправно, вне зависимости от патчей. Видимо потому что он просто не зависит от них. ;D
И модуль лазеров работает, если подправить координаты HUD-а.

А в готовых ботах - да, искать полную работоспособность - занятие неблагодарное. Редко выходит патч, после которого бота не приходится обрабатывать напильником, чтобы он к патчу подошёл и продолжил работу.
 
Верх