Что нового

[Archeage] Посадка, полив растений

Obscuro

Новичок
Сообщения
13
Репутация
0
Лирика (можно не читать):
Заранее прошу прощения за нубскую тему. В Autoit познания практически нулевые и самостоятельное изучение вопроса не смогло решить поставленную задачу.
Посему прошу гуру Autoit-а, хотя бы пнуть меня в правильном направлении (которое стоит изучать), ну или по доброте душевной скинуть пример того, что должно получится для выполнения поставленной задачи.

Задача:
Есть площадка 8 на 8 метров, строго ограничена.
Есть схема посадки растений.
Нужно сделать так, чтобы растения сажались в границах площадки по заданной схеме. После каждой посадки её нужно полить.

Система такая: Клик кнопкой 1 на клавиатуре для выбора айтема (растения). Наведение мышкой на нужный участок. Клик ЛКМ для посадки растения.
Опционально: Подойти персонажем к растению. Клик ПКМ для полива.
Схема посадки:
i8T5ghB.png


Я понимаю, что можно делать это и руками, но проблема в их кривизне. Даже имея схему, очень трудно высадить всё по ней, ведь любой сдвиг в сторону - это потеря ценной площади и соответственно отклонение от схемы. А высадка каджого кустика с ювелирной точностью занимает уйму времени.

Заранее спасибо за помощь.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Re: [Мышь, клавиатура] Archeage. Посадка, полив растений

Whited
=\

Obscuro
Как то так, координаты регионов для посадки(кликов) мне не известны, так что задашь сам.
И каким образом происходит управление персонажем?
Код:
HotKeySet( "{F6}", "__Start" )
HotKeySet( "{F8}", "__Exit" )
; ---
Global $aCoords[ 45 ][2] = [ [44], [ x1, y1 ], [ x2, y2 ], [ x3, y3 ], [ x4, y4 ], [ x5, y5 ], ... до x44, y44 ] ;Координаты для кликов
Global $aChain[ 45 ] = [ 44, 2, 5, 1, 4, ... до 44 ] ;В какой последовательности будем кликать (сначала во 2, затем 5 и так далее)


Func __Start()
	Local $iPlant, $Idx
	; ---
	For $Idx = 1 To $aChain[0] Step 1
		Send( клавиша )
		; ---
		$iPlant = $aChain[$Idx]

		MouseClick( 'left', $aCoords[$iPlant][0], $aCoords[$iPlant][1], 1, 1 )
		; ---
		Sleep( 50 )
	Next
EndFunc

Func __Exit()
	Exit
EndFunc
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Re: [Мышь, клавиатура] Archeage. Посадка, полив растений

Управление персонажем стандартно для ММОРПГ. A D - поворот. W S - идти вперёд, назад. Q E - идти влево, вправо.


Координаты для кликов - x1, y1 и т.д. заменить на координаты в пикселях, которым соответствует место клика?
Почему последовательность кликов 2, 5, 1, 4 - это имеет значение или можно проставить по порядку?
Send( клавиша ) - так и должно быть или заменить на кнопку на клавиатуре? В каком формате она должна быть записана?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Re: [Мышь, клавиатура] Archeage. Посадка, полив растений

Obscuro
1) Да.
2) Это для того, что если вы захотите сменить последовательность кликов, вам не придется переписывать весь массив с координатами.
3) Кликните в моем примере на Send, вас перекинет в справку, там указаны коды клавиш и их вариант записи.
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Re: [Мышь, клавиатура] Archeage. Посадка, полив растений

Не срабатывает. Пишет ошибка в строке 3... Но в строке 3 ещё идёт инфа, которая автоматически вставляется при создании проекта.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Re: [Мышь, клавиатура] Archeage. Посадка, полив растений

Obscuro
Приведите код который запускаете.
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Пока получилось определить всего 36 пар координат, так что была попытка запустить хотя бы с ними - неудачная.
Код:
HotKeySet( "{F6}", "__Start" )
HotKeySet( "{F8}", "__Exit" )
; ---
Global $aCoords[ 37 ][2] = [ [36], [ x785, y315 ], [ x855, y315 ], [ x925, y315 ], [ x785, y245 ], [ x855, y245 ], [ x925, y245 ], [ x785, y175], [ x855, y175 ], [ x925, y175 ], [ x1025, y315 ], [ x1095, y315 ], [ x1165, y315 ], [ x1025, y245 ], [ x1095, y245 ], [ x1165, y245 ], [ x1035, y173 ], [ x1095, y175 ], [ x1165, y175 ], [x1175, y725 ], [ x1105, y725 ], [ x1035, y725 ], [ x1175, y655 ], [ x1105, y655 ], [ x1035, y655 ], [ x1175, y585 ], [ x1105, y585 ], [ x1035, y585 ], [ x755, y725 ], [ x825, y725 ], [ x895, y275 ], [ x755, y655 ], [ x825, y655 ], [ x895, y655 ], [ x755, y585 ], [ x825, y585 ], [ x895, y585 ] ;Координаты для кликов
Global $aChain[ 37 ] = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ] ;В какой последовательности будем кликать


Func __Start()
    Local $iPlant, $Idx
    ; ---
    For $Idx = 1 To $aChain[0] Step 1
        Send ("archeage.exe{1}")
        ; ---
        $iPlant = $aChain[$Idx]

        MouseClick( 'left', $aCoords[$iPlant][0], $aCoords[$iPlant][1], 1, 1 )
    Next
EndFunc

Func __Exit()
    Exit
EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Obscuro

Код:
HotKeySet( "{F6}", "__Start" )
HotKeySet( "{F8}", "__Exit" )
; ---
Global $aCoords[ 37 ][2] = [ [36], [ 785, 315 ], [ 855, 315 ], [ 925, 315 ], [ 785, 245 ], [ 855, 245 ], [ 925, 245 ], [ 785, 175], [ 855, 175 ], [ 925, 175 ], _
	[ 1025, 315 ], [ 1095, 315 ], [ 1165, 315 ], [ 1025, 245 ], [ 1095, 245 ], [ 1165, 245 ], [ 1035, 173 ], [ 1095, 175 ], [ 1165, 175 ], [1175, 725 ], _
	[ 1105, 725 ], [ 1035, 725 ], [ 1175, 655 ], [ 1105, 655 ], [ 1035, 655 ], [ 1175, 585 ], [ 1105, 585 ], [ 1035, 585 ], [ 755, 725 ], [ 825, 725 ], _
	[ 895, 275 ], [ 755, 655 ], [ 825, 655 ], [ 895, 655 ], [ 755, 585 ], [ 825, 585 ], [ 895, 585 ] ] ;Координаты для кликов

Global $aChain[ 37 ] = [ 36, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ] ;В какой последовательности будем кликать


Func __Start()
    Local $iPlant, $Idx
    ; ---
    For $Idx = 1 To $aChain[0] Step 1
        ;Send ("archeage.exe{1}") ;А это что за фокус? Send - Эмулирует нажатие клавиш в активном окне
        Send ("{1}")
        ; ---
        $iPlant = $aChain[$Idx]

        MouseClick( 'left', $aCoords[$iPlant][0], $aCoords[$iPlant][1], 1, 1 )
    Next
EndFunc

Func __Exit()
    Exit
EndFunc
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Если в активном - то можно убрать, тогда как будет выглядеть команда?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Obscuro
Никак, окно должно быть активно. Для этого перед нажатием лучше всего сделать активацию окна.

Код:
WinActivate
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Ошибка при запуске пропала, но теперь новая проблема. Скрипт запускается, появляется процесс иии тут же исчезает без каких либо ошибок.
 

nowost

Знающий
Сообщения
178
Репутация
17
OffTopic:
чтото перестал за АА следить, уже РУ Бета доступна ?
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Помоему для новичка как и я, намного проще запустить всё через цикл,
я бы делал так
Код:
Global $Tiple = False  

HotKeySet('{F1}', '_Start')
HotKeySet('{DELETE}', '_Exit') 

While 1
   If $Tiple = True Then
;----------------------------------------------- 1
   Sleep(100)
     Send("{1}")
      Sleep(100)
;     Вместо 500, 400 поставить свои координаты и так 44 раза))
        MouseCLick("Left", 500, 400, 1, 30)
;------------------------------------------------ 2
   Sleep(100)
     Send("{1}")
      Sleep(100)
        MouseCLick("Left", 400, 400, 1, 30)
;------------------------------------------------ 3
   Sleep(100)
     Send("{1}")
      Sleep(100)
        MouseCLick("Left", 300, 400, 1, 30)
;------------------------------------------------- 4
   Sleep(100)
     Send("{1}")
      Sleep(100)
        MouseCLick("Left", 200, 400, 1, 30)
;---------------------------------------------------- 5
   Sleep(100)
     Send("{1}")
      Sleep(100)
        MouseCLick("Left", 100, 400, 1, 30)
;-------------------------------------------------
		ExitLoop
	 Else
		Sleep(10)
     Endif
	 
WEnd



Func _Start()
   $Tiple = True
EndFunc
	  
;-------------- выход----------------
Func _Exit()
   Exit
EndFunc

Канечно скрипт будет ооочень длинный но для новичка понятен
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Ksaan, спасибо, скрипт работает! Вопрос только в том, как определить правильно координаты? Вернее как побороть проблему, что при замерах персонаж стоит в одном месте, при тесте хотя бы на пару пикселей в другом и всё - посадки вылезают за границу. А ставить его каждый раз тютелька в тютельку точно у меня не выходит(((

Вопрос, можно ли сделать так, что бы кликалась цифра 1, тогда выбирается растение и появляются границы для посадки. Потом сканировались пиксели, находились красные "буйки" (см. изображение) и от них отсчитывались относительные координаты?
p30pIrc.png
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Уточнить...а этот скриншот"огород" всегда с верху показан или ты сам так камеру вертишь и скриниш?
 
Автор
Obscuro

Obscuro

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

Ksaan

Знающий
Сообщения
207
Репутация
15
Там в игре вроде есть действия с камерой, можно попытаться с помощью скрипта отредактировать её в нужное положение, чтобы был вид с верху.
 
Автор
Obscuro

Obscuro

Новичок
Сообщения
13
Репутация
0
Как вариант... но я очень плохо представляю, как это сделать.
 

Tyr

Новичок
Сообщения
43
Репутация
4
Obscuro
тютелька в тютельку - забанят... нужно включать элемент случайности например рандомно погрешность на 1-2 пикселя в разных координатах, или несколько схем посадки. Ну не может же человек из раза в раз одинаково сажать.
 
Верх