Что нового

Определение в космосе корабль или на станции

McSkull

Знающий
Сообщения
66
Репутация
6
Будет такая конструкция работать?
Функция запускается 1 раз после автологина.
Ищет желтую кнопку в доке.
Если она есть то завершение функции.

Если её нет то ищет кнопку Овервива.
Если находит то Варпает на станцию Разгружается и завершает функцию.

Если не нашел нечего то начинает поиск с начала.

Код:
Func StatusKorablya()
$i = 0
Do
	Sleep(1000)
	PixelSearch($DokButonX, $DokButonY, $DokButonX+1, $DokButonY+1, 0xFFDB42, 10 )
	If @error Then
    Sleep(1000)
		PixelSearch($OwervivButonX, $OwervivButonY, $OwervivButonX+1, $OwervivButonY+1, 0xD0D0D0, 10 )
    If not @error Then
       WarpStantion()
	   Sleep(500)
	   Razgruzka()
	   Sleep(500)
	   $i = 1
    Else
       $i = 1
    EndIf
	Else
   $i = 0
	EndIf
	Until $i = 1
	ToolTip("Нахожусь на станции. Перехожу в нормальный режим работы.")
	Sleep(2000)
	EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Хоспаде, оформляй свой код полит корректно ибо читать не возможно же, и комменть ключевые моменты ибо втыкать в него долго в противном случае.
Код:
Func StatusKorablya()
	$i = 0
	Do
		Sleep(1000)
		PixelSearch($DokButonX, $DokButonY, $DokButonX+1, $DokButonY+1, 0xFFDB42, 10 );ищу кнопка дока
		If @error Then;если ошибка
			Sleep(1000)
			PixelSearch($OwervivButonX, $OwervivButonY, $OwervivButonX+1, $OwervivButonY+1, 0xD0D0D0, 10);ищу меню овервью
			If not @error Then;если НЕ ошибка
				WarpStantion()
				Sleep(500)
				Razgruzka()
				Sleep(500)
				$i = 1
			Else
				$i = 1
			EndIf
		Else
			$i = 0
		EndIf
	Until $i = 1
	ToolTip("Нахожусь на станции. Перехожу в нормальный режим работы.")
	Sleep(2000)
EndFunc

Код насквозь дырявый, например если стартуешь на станции никогда не выйдешь из цикла
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Belfigor сказал(а):
Хоспаде, оформляй свой код полит корректно ибо читать не возможно же, и комменть ключевые моменты ибо втыкать в него долго в противном случае.

Код насквозь дырявый, например если стартуешь на станции никогда не выйдешь из цикла
По поводу оформления учту...

Код:
Func StatusKorablya()
	........................
				Razgruzka()
				Sleep(500)
				$i = 1
			Else
				$i = 1  ; Я думал что если находит кнопку Дока то присваивает $i значение 1 и тем самым завершает цыкл так как Until $i = 1
			EndIf
		Else
			$i = 0 ; Если по какой то причине не нашел не одной из кнопок то цыкл начнется сначала...
		EndIf
	Until $i = 1

EndFunc

С вложениями не совсем разобрался просто... :(
Не подскажете как правильно функцию написать... Или какие выражения использовать, чтобы получить желаемый результат?


Добавлено:
Сообщение автоматически объединено:


Вот такой вариант получился.

Код:
Func vozvratvdok()
    $i = StatusKorablya()
    If $i = 1 Then ;если функция StatusKorablya() = 1 то
        WarpStantion()
        Sleep(500)
        Razgruzka()
    EndIf
EndFunc 

Func StatusKorablya()
    PixelSearch($OwervivButonX, $OwervivButonY, $OwervivButonX+1, $OwervivButonY+1, 0xD0D0D0, 10 ) ;Ищет кнопку Овервива
    If not @error Then ; если НЕ ошибка
        Return 1 ;Корабль находится в космосе
    Else 
        Return 0 ;Корабль стоит в Доке
    EndIf
EndFunc


При возврате StatusKorablya() = 0 значить мы в Доке и никуда лететь не нужно.

Я все правильно написал?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Да, про statuskorablya понял правильно.

Можно так же использовать не
$i = Func()
If $i = 1 Then
...

а вот это:
If Func() = 1 Then
...

Или же если ретурнам ты присвоишь не числовые значения а значения True или False то так:
If Func() Then
...
Про первую часть твоего постав вопрос еще актуален? Если да то могу переписать твою функцию так как я бы ее оформил изначально.
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Belfigor сказал(а):
а вот это:
If Func() = 1 Then
...
Сенкс я даже не думал, что и так можно строить выражение. :smile:

Belfigor сказал(а):
Про первую часть твоего постав вопрос еще актуален? Если да то могу переписать твою функцию так как я бы ее оформил изначально.
Если разговор идет об этом...

"Ищет желтую кнопку в доке.
Если она есть то завершение функции.

Если её нет то ищет кнопку Овервива.
Если находит то Варпает на станцию Разгружается и завершает функцию."

То был бы очень благодарен... :smile:
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Собственно вот окончательный вариант моих умственных потуг... ;D


Код:
; -----------------Статус корабля---------------------------

Func StatusKosmos()
    $i = StatusKorablya()
    If $i = 1 Then ;если функция StatusKorablya() = 1 то
		 ToolTip("Лечу на базу", 440, 160)
		Sleep(500)
        WarpStantion()
        Sleep(500)
        Razgruzka()
    EndIf
EndFunc

Func StatusDok()
    $i = StatusKorablya()
    If $i = 0 Then ;если функция StatusKorablya() = 0 то
		ToolTip("Я на базе", 440, 160)
		Sleep(500)
        Razgruzka()
    EndIf
EndFunc

Func StatusKorablya()
    PixelSearch($OwervivButonX, $OwervivButonY, $OwervivButonX+1, $OwervivButonY+1, 0xD0D0D0, 10 ) ;Ищет кнопку Овервива
    If not @error Then ; если НЕ ошибка
        Return 1 ;Корабль находится в космосе
    Else
        Return 0 ;Корабль стоит в Доке
    EndIf
EndFunc
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Столкнулся с проблемкой которую не получается решить... (немогу придумать как к ней подойти)

Когда корабль находится в космосе (возле станции) в меню пропадает кнопка "Варп к станции в 0"...
И Бот промахивается по кнопке "Войти в док"...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Ну например можешь проверить сколько строк в выпавшем меню и принять решение исходя из этого :smile:
 

DJ_Tommy

Продвинутый
Сообщения
234
Репутация
57
McSkull сказал(а):
Столкнулся с проблемкой которую не получается решить... (немогу придумать как к ней подойти)

Когда корабль находится в космосе (возле станции) в меню пропадает кнопка "Варп к станции в 0"...
И Бот промахивается по кнопке "Войти в док"...
А есть еще и кнопочки Алигн-Варп ту- Док ... и прочие ... смотри по расстоянию до базы и можно ее нажимать
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
DJ_Tommy сказал(а):
А есть еще и кнопочки Алигн-Варп ту- Док ... и прочие ... смотри по расстоянию до базы и можно ее нажимать
Натолкнули меня на мысль...
А можно как-то научить бота определять геометрические фигуры?

Что бы он мог определить квадрат (станция) в Овервиве или нет?


Добавлено:
Сообщение автоматически объединено:

Belfigor сказал(а):
Ну например можешь проверить сколько строк в выпавшем меню и принять решение исходя из этого :smile:
Пока, что не пробовал разобраться в вашем модуле Майн-Меню... (у меня просто по координатам мыш ползает и кликает)

Пошел смотреть в ваш код и пробовать понять как он работает. :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Конечно можно, терки на эту тему ты можешь найти тут: http://autoit-script.ru/index.php/topic,261.0.html
Пришли к выводу что такое каждый разрабатывает сам для себя и без посторонней помощи :smile:
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Хм...
Теоретически проверку на квадратик можно сделать в одной строчке if ....... the буду пробовать :smile:


Добавлено:
Сообщение автоматически объединено:

Ошибок в синтаксисе нет?

Код:
If $var1 = 0 AND $var2 = 0 Then ; Если $var1 = 0 И $var2 = 0 ТО
ToolTip("Начинаю запрос на стыковку", 440, 160)
..............
..............		
EndIf
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
нет нету :smile:
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
По цвету 2-х точек определяю квадрат в овервиве...
Работает но со сбоями пришел к выводу, что вместо AND лучше использовать OR так как из-за положения камеры цвет пикселя сильно меняется и 2 совпадения довольно затруднительны... С 1-м совпадением из 2-х работ более стабильно...
Код:
If $var1 = 0 OR $var2 = 0 Then ; Если $var1 = 0 И $var2 = 0 ТО
ToolTip("Начинаю запрос на стыковку", 440, 160)
..............
..............     
EndIf


Но когда камера направленна на станцию и так не срабатывает.

PixelSerch (., ., ., ., цвет, 10) если поставить расхождение цвета 15 то это поможет? Или будет неправильно срабатывать?
Какое расхождение цвета не приводит к ложному срабатыванию?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
К ложному срабатыванию не приведет ничего ибо треугольники меню, овервью, худа, не водвержены влиянию солнца, а так в принципе сделай весь интерфейс черным и включи как минимум вайд скрин, я дак вобще убираю все и оставляю только чорный фон, так кашернее всего
 
Верх