Показать сообщение отдельно
Старый 25.05.2014, 17:36   #1
uckatejlb
Освоившийся
Аватар для uckatejlb
OFFLINE
Регистрация: 03.03.2014
Возраст: 36
Сообщений: 60
Благодарностей:
23 всего
Мнения: + 69
Репутация: 70

[AutoIt] Автозасадка в ArcheAge


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

Выставляем семена в ячейку "Shift+1", выставляем камеру в положение на персонажем и определяем начальную позицию посадки, как показано на скрине ниже:


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

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

Код:
; Автозасадка в ArcheAge by Rulleks
Func _WinWaitActivate($title,$text,$timeout=0)
WinWait($title,$text,$timeout)
If Not WinActive($title,$text) Then WinActivate($title,$text)
WinWaitActive($title,$text,$timeout)
EndFunc

HotKeySet("{F11}","StartOrStop")
Global $STOP = True
Global $slp = 5 ; через сколько начнет работать прога (в сек) после активации F11
Global $crow = 3 ; кол-во посадок в ряду
Global $ccol = 5 ; кол-во рядов
Global $rrow = 63 ; дистанция между посадками в ряду
Global $rcol = 62 ; дистанция между посадками в столбце
Global $rtime = 1 ; время движения персонажа в сек
Global $footer = 2 ; через сколько рядов двигать персонажа вниз (для урегулирования камеры)
Global $countf ; кол-во сдвигов персонажа после расчетов

Global $x 
Global $y
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
 
Ответить с цитированием
Сказали спасибо:
Жидорептилоид (11.04.2017), Pornochanchada (15.01.2017), Host1337 (17.12.2016), Andreyka174 (31.03.2015), Недоступно (23.01.2015), Недоступно (08.12.2014), Недоступно (16.10.2014), Недоступно (29.09.2014), Недоступно (07.09.2014), Недоступно (21.08.2014), Недоступно (14.08.2014), Недоступно (06.08.2014), VlaPaTr (26.07.2014), Недоступно (04.07.2014), Недоступно (29.06.2014), Pank (23.06.2014), фуриос (15.06.2014), Medvedkovo (04.06.2014), Недоступно (01.06.2014), Тимбо (27.05.2014), razor112 (25.05.2014)