Показать сообщение отдельно
Старый 14.05.2015, 09:39   #1
al_bond
Пользователь
Аватар для al_bond
OFFLINE
Регистрация: 25.02.2015
Сообщений: 20
Благодарностей:
0 всего
Репутация: 1

[AutoIt] Скрипт для автопосадки


Нашел скрипт на просторах интернета решил поделится. Сам пользуюсь вроде не жалуюсь.
Скрипт позволяет ровно засаживать растения на пугалах или просто в горах. Писал для себя. Скрипт написан на AutoIt. Тестировался с разрешением экрана 1366x768(у меня работает на 1920х1080).
После компиляции скрипта запускаем его от имени администратора.

Выставляем семена в ячейку "Shift+1", выставляем камеру в положение на персонажем и определяем начальную позицию посадки.Дистанция между посадками в ряду и столбце зависит от размера растения.
Для риса и азалии я использовал значение 63, можно и меньше, тестируйте.
Время движения персонажа в сек - это время, которое персонаж будет двигаться назад, чтобы урегулировать камеру для посадки новых рядов.

Для засадки БП я использовал значения, которые приведены в примере скрипта, хотя можно посадить и компактнее, все зависит от ровности поверхности.

Код:
Global $stat_y
Global $i[100]
Global $j
Global $n = 2
Global $count = 2
Global $countrow = 1

$slp = InputBox("Старт бота","Через сколько сек после нажатия F11 активировать бота (Пример: 5)")
$crow = InputBox("Введите кол-во посадок","Введите количество растений в одном ряду (Пример: 4)")
$ccol = InputBox("Введите кол-во рядов","Введите кол-во рядов (Пример: 5)")
$rrow = InputBox("Интервал между посадками в ряду","Интервал между посадками в ряду  (Пример: 63)")
$rcol = InputBox("Интервал между рядами","Интервал между рядами (Пример: 62)")
$rtime = InputBox("Время движения персонажа","Время движения персонажа в сек между интервалом рядов (Пример: 2)")
$footer = InputBox("Передвижение персонажа","Через сколько рядов передвигать персонажа (для урегулирования камеры) (Пример: 2)")

Global $AA_TITLE = "- ArcheAge " ;
_WinWaitActivate($AA_TITLE ,"")
Global $hWnd = WinActive($AA_TITLE ,"")

Do
Sleep(1000)
Until $STOP = False

If $STOP = False Then

	$slp = $slp * 1000
	Sleep($slp)
	
	$rtime = $rtime * 1000
	
	$pos = MouseGetPos()
	$x = $pos[0]
	$y = $pos[1]
	$stat_y = $pos[1]

	If $ccol > $footer And Mod($ccol,$footer) == 0 Then
		$countf = $ccol / $footer - 1
	Else
		$countf = Int($ccol/$footer)
	EndIf
	
	For $j = 0 to $ccol Step 1
		$i[$j] = 0
	Next
	
	$countf = $countf + 2
	
	For $j = 3 to $countf Step 1
		$i[$j-1] = $j-2
	Next
	
	While ($countrow <= $crow)
		Main()
	WEnd
	
	While ($count <= $ccol)
 
		$y = $y + $rcol
		Sleep(2000)
		MouseMove($x,$y)
		$countrow = 1
		While ($countrow <= $crow)
			Main()
		WEnd
		
		cnt($count)
		
		$count = $count + 1

	WEnd
	

	
Else
	Sleep(100)
EndIf

Func Main()

	$pos = MouseGetPos() 
	$ones = True
	
	If $STOP = False Then

	If $ones = True Then
		Send("{! 1}")
		MouseClick("left", $pos[0], $pos[1])
		Sleep(3000)
		$ones = False
	EndIf

		Send("{! 1}")  
		MouseClick("left", $pos[0]+$rrow, $pos[1])
		Sleep(3000)

		$countrow = $countrow + 1

	Else
		Sleep(100)
	EndIf
	
EndFunc

Func cnt($count)
	
	While ($n <= $countf)
		If $count = $i[$n]*$footer Then
			Send("{DOWN down}")
			Sleep ($rtime)
			Send("{DOWN up}")
			$y = $stat_y
		Else
			return 0
		EndIf
		$n = $n + 1
	WEnd

EndFunc

Func foot()

	$rtime = $rtime * 1000
	If $STOP = False Then
		Send("{DOWN down}")
		Sleep ($rtime)
		Send("{DOWN up}")
	Else
		Sleep(100)
	EndIf

EndFunc

Func StartOrStop()
If $STOP = True Then
$STOP = False
Else
$STOP = True
EndIf
EndFunc
 
Ответить с цитированием