Что нового

очередная попытка бота в lineage

purke

Новичок
Сообщения
3
Репутация
0
Прошу помощи у бывалых! Сразу оговорюсь, что поиск мну ничего не выдал. (
1. Как возможно задать условие: Если PixelGetColor( 149 , 69 )=0x311F1C то нажимать F8, если PixelGetColor( 171 , 69 )=0x791C11 то прекращать нажимать ?
при попытке что-то не так
Код:
If PixelGetColor( 149 , 69 )=0x311F1C Then 
			Send("{F8}")
			Else
			If PixelGetColor( 171 , 69 )=0x791C11 Then 
			EndIf


2. Есть следующее выражение
Код:
Func BEGIN_Atack()
	WinActivate("Lineage II")
	While 1
		if $DO_STOP Then
			ExitLoop
		EndIf

		If $GETCOLOR Then
			TrayTip("Atack", " Atack!!!", 10, 1)
			FIGHT()
		Else

			Send($target2)
			Sleep(500)
			If	$COLOR_HP_MOB=StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]),6)),1,6) Then
				$GETCOLOR=True
				ContinueLoop
			EndIf

			Send($target3)
			Sleep(500)
			If	$COLOR_HP_MOB=StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]),6)),1,6) Then
				$GETCOLOR=True
				ContinueLoop
			EndIf

			Send($target4)
			Sleep(500)
			If	$COLOR_HP_MOB=StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]),6)),1,6) Then
				$GETCOLOR=True
				ContinueLoop
			EndIf

			Send($target5)
			Sleep(500)
			If	$COLOR_HP_MOB=StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]),6)),1,6) Then
				$GETCOLOR=True
				ContinueLoop
			EndIf
		EndIf
	WEnd
EndFunc


Func GET_MOB_HP_LEN($direction,$check_zero)
	$COLOR_NOT_HP_MOB = $COLOR_HP_MOB
	$POS_NOT_HP_MOB_X = $POS_HP_MOB_X
	$POS_NOT_HP_MOB_Y = $POS_HP_MOB_Y
	While $COLOR_NOT_HP_MOB = $COLOR_HP_MOB
		$POS_NOT_HP_MOB_X = $POS_NOT_HP_MOB_X + $direction
		$COLOR_NOT_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_NOT_HP_MOB_X, $POS_NOT_HP_MOB_Y),6)),1,6)
	WEnd

	$MOB_HP_LEN=1;
 	If $check_zero Then
		$MOB_HP_LEN=$POS_NOT_HP_MOB_X-$POS_HP_MOB_X
 		if $COLOR_HP_MOB <> StringMid(String(Hex(PixelGetColor($POS_HP_MOB_X, $POS_HP_MOB_Y),6)),1,6) Then
 			$MOB_HP_LEN=0
 		EndIf
 	EndIf
EndFunc

Func FIGHT()
	Do
		GET_MOB_HP_LEN(1,True)
		ToolTip("calc mob HP ..." , $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
		If $MOB_HP_LEN=0 Then
			ExitLoop
		EndIf

		Send($Atack)
	Next
		Sleep($Atach_Teack)
	Until $MOB_HP_LEN <= 0
	$GETCOLOR = False
	TrayTip("atack bot", " STOP atack bot", 10, 1)
	ToolTip("STOP atack bot ..." , $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
	Sleep($Atack_Reuse_Time)
EndFunc


необходимо выбор таргета (полоску хп моба), если возможно привязать ко времени, т.е. если в течении например 30 секунд полоска хп стоит на месте, то выполняется что-то типа такого:
Код:
Func getout()
	
	MouseClick("left",519,610)
	Sleep(1000)
	MouseClick("left",155,464)
	Sleep(1000)
	MouseClick("left",490,229)
    Sleep(2000)
	
FIGHT()
EndFunc


как осуществить пока не знаю
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
1
ты запутался с If ElseIf
Код:
If PixelGetColor(149, 69) = 0x311F1C Then
	Send("{F8}")
ElseIf PixelGetColor(171, 69) = 0x791C11 Then
	; тут по идее надо что-то делать если найден пиксель 0x791C11
EndIf
2 как-то так:
Код:
Func BEGIN_Atack()
	WinActivate("Lineage II")
	While 1
		If $DO_STOP Then
			ExitLoop
		EndIf

		If $GETCOLOR Then
			TrayTip("Atack", " Atack!!!", 10, 1)
			FIGHT()
		Else

			Send($target2)
			Sleep(500)
			If $COLOR_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]), 6)), 1, 6) Then
				$GETCOLOR = True
				ContinueLoop
			EndIf

			Send($target3)
			Sleep(500)
			If $COLOR_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]), 6)), 1, 6) Then
				$GETCOLOR = True
				ContinueLoop
			EndIf

			Send($target4)
			Sleep(500)
			If $COLOR_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]), 6)), 1, 6) Then
				$GETCOLOR = True
				ContinueLoop
			EndIf

			Send($target5)
			Sleep(500)
			If $COLOR_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_HP_MOB[0], $POS_HP_MOB[1]), 6)), 1, 6) Then
				$GETCOLOR = True
				ContinueLoop
			EndIf
		EndIf
	WEnd
EndFunc   ;==>BEGIN_Atack

Func FIGHT()
	Local $temp_hp = '' ; хранение ХП моба
	Local $missing_atack_counter = 0 ; счетчик промахов или безрезультатных ударов(когда ХП не изменилось)
	Do
		GET_MOB_HP_LEN(1, True)
		If $MOB_HP_LEN <> $temp_hp Then ; если ХП изменилось или это стартовый замер ХП
			$missing_atack_counter = 0 ; обнуляем счетчик промахов
			$temp_hp ; сохраняем ХП для последующих сравнений
		Else ; если ХП не изменилось
			$missing_atack_counter += 1 ; плюсуем счетчик промахов
		EndIf
		If $missing_atack_counter >= 30 Then ; после 30 промахов ищем новую цель
			ToolTip("mob непробиваемый", $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
			getout()
			ExitLoop ; выход из цикла Do после завершения
		EndIf
		ToolTip("calc mob HP ...", $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
		If $MOB_HP_LEN = 0 Then
			ExitLoop
		EndIf

		Send($Atack)
		; Next
		Sleep($Atach_Teack)
	Until $MOB_HP_LEN <= 0
	$GETCOLOR = False
	TrayTip("atack bot", " STOP atack bot", 10, 1)
	ToolTip("STOP atack bot ...", $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
	Sleep($Atack_Reuse_Time)
EndFunc   ;==>FIGHT

Func GET_MOB_HP_LEN($direction, $check_zero)
	$COLOR_NOT_HP_MOB = $COLOR_HP_MOB
	$POS_NOT_HP_MOB_X = $POS_HP_MOB_X
	$POS_NOT_HP_MOB_Y = $POS_HP_MOB_Y
	While $COLOR_NOT_HP_MOB = $COLOR_HP_MOB
		$POS_NOT_HP_MOB_X = $POS_NOT_HP_MOB_X + $direction
		$COLOR_NOT_HP_MOB = StringMid(String(Hex(PixelGetColor($POS_NOT_HP_MOB_X, $POS_NOT_HP_MOB_Y), 6)), 1, 6)
	WEnd

	$MOB_HP_LEN = 1;
	If $check_zero Then
		$MOB_HP_LEN = $POS_NOT_HP_MOB_X - $POS_HP_MOB_X
		If $COLOR_HP_MOB <> StringMid(String(Hex(PixelGetColor($POS_HP_MOB_X, $POS_HP_MOB_Y), 6)), 1, 6) Then
			$MOB_HP_LEN = 0
		EndIf
	EndIf
EndFunc   ;==>GET_MOB_HP_LEN

Func getout()

	MouseClick("left", 519, 610)
	Sleep(1000)
	MouseClick("left", 155, 464)
	Sleep(1000)
	MouseClick("left", 490, 229)
	Sleep(2000)

	FIGHT()
EndFunc   ;==>getout
 
Автор
P

purke

Новичок
Сообщения
3
Репутация
0
1. если найден пиксель 0x791C11 то необходимо прекратить нажатие F8, как осуществить?

2. в куске ругается, где именно пометил
Код:
Local $temp_hp = '' ; хранение ХП моба
    Local $missing_atack_counter = 0 ; счетчик промахов или безрезультатных ударов(когда ХП не изменилось)
    Do
        GET_MOB_HP_LEN(1, True)
        If $MOB_HP_LEN <> $temp_hp Then ; если ХП изменилось или это стартовый замер ХП
            $missing_atack_counter = 0 ; обнуляем счетчик промахов
            $temp_hp ; ПРОСИТ ПОСТАВИТЬ = чему либо
        Else ; если ХП не изменилось
$missing_atack_counter += 1 ; РУГАЕТСЯ, ВОЗМОЖНО СЛЕДУЕТ ЗАМЕНИТЬ НА $missing_atack_counter=$missing_atack_counter+1
        EndIf
        If $missing_atack_counter=30 Then ; после 30 промахов ищем новую цель
            ToolTip("mob непробиваемый", $POS_HP_MOB[0], $POS_HP_MOB[1] + 33, $MOB_HP_LEN)
            getout()
            ExitLoop ; выход из цикла Do после завершения
        EndIf
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
1. отжать кнопку F8 ? или что значит прекратить нажимать, где она нажимается и удерживается?
в приведенном тобой примере она нажимается раз и все.
отжать так можно:
Код:
Send("{F8 up}")

2. да тут упустил надо так -
Код:
$temp_hp = $MOB_HP_LEN; сохраняем ХП для последующих сравнений

что выдает в ошибке?
$missing_atack_counter += 1 и $missing_atack_counter=$missing_atack_counter+1 это одно и тоже.
 
Автор
P

purke

Новичок
Сообщения
3
Репутация
0
1. Да, чаго-то я совсем запутался, возможно даже не ту функцию использую. Попробую описать задачу еще раз.
Необходимо нажимать F8 если нашелся пиксель PixelGetColor(149, 69) = 0x311F1C до тех пор, пока не нашелся PixelGetColor(171, 69) = 0x791C11 (с интервалом в 12 секунд).

2. Спс огромное работает просто супер.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 592
Репутация
938
Код:
While 1
    PixelSearch(149, 69, 149, 69, 0x311F1C, 5)
    If Not @error Then
        Send("{F8}")
    Else
        PixelSearch(171, 69, 171, 69, 0x791C11, 5)
        If Not @error Then ExitLoop
    EndIf
    sleep(12*1000)
WEnd

PixelGetColor sucks
 
Верх