-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWOTV.FFBE.Functions.au3
160 lines (136 loc) · 6.98 KB
/
WOTV.FFBE.Functions.au3
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#cs -----------------------------------------------------------------------------------
Script Version: 0.2.1
AutoIt Version: 3.3.14.5
Author: holoc
Platform: Windows 10 running Memu(Android 7.1, 64bit)
Memu System Settings
Engine
Performance: Preset settings - Top (CPU:2, RAM:2048MB)
Render mode: OpenGL
Root mode: ON
GPU memory optimization: OFF
Display
Resolution: Tablet [1280*720 (240dpi)]
Frame rate: 30 FPS
Anti-Flickering: ON
Window layout (found under Multiple Instance Manager window -> Layout button)
Window size - Customize - Width 960, Height 540
Script Function:
This script contains the functions required for this WOTV AutoIT script to work.
#ce -----------------------------------------------------------------------------------
#include <Constants.au3>
#include <Process.au3> ; Needed for _RunDOS()
#include <WinAPI.au3>
#include <WOTV.FFBE.Config.au3>
Func _Terminate()
Exit
EndFunc ;==>_Terminate
Func PixelCheckColor($xCoordToCheck = 0, $yCoordToCheck = 0, $decPixelColorToSearch = 0x000000, $xCoordToMouseClick = $xCoordToCheck, _
$yCoordToMouseClick = $yCoordToCheck, $delayTimeInMSec = 250, _
$x2CoordToCheck = 0, $y2CoordToCheck = 0, $dec2PixelColorToSearch = 0x000000, $x2CoordToMouseClick = 0, $y2CoordToMouseClick = 0)
; Second parameters are for pop-up screens
; Check specified pixels until there is a color match
Do
Sleep($delayTimeInMSec)
Local $pixelColorCurrentValue = StringTrimRight(PixelGetColor($xCoordToCheck, $yCoordToCheck), 3)
Local $pixelColorCurrentValue2 = StringTrimRight(PixelGetColor($x2CoordToCheck, $y2CoordToCheck), 3) ; there's probably an easier way to evaluate multiple conditions...but this will have to do
Until $pixelColorCurrentValue == StringTrimRight($decPixelColorToSearch,3) Or $pixelColorCurrentValue2 == StringTrimRight($dec2PixelColorToSearch,3)
; Once a color match is found, left-mouse click at specified xy coord location
Do
If $pixelColorCurrentValue2 == StringTrimRight($dec2PixelColorToSearch, 3) Then
Sleep($delayTimeInMSec*2)
MouseClick("left", $x2CoordToMouseClick, $y2CoordToMouseClick)
Sleep($delayTimeInMSec)
$pixelColorCurrentValue2 = StringTrimRight(PixelGetColor($x2CoordToCheck, $y2CoordToCheck), 3)
; Followed by first set of parameters
Sleep($delayTimeInMSec*2)
MouseClick("left", $xCoordToMouseClick, $yCoordToMouseClick)
Sleep($delayTimeInMSec)
$pixelColorCurrentValue = StringTrimRight(PixelGetColor($xCoordToCheck, $yCoordToCheck), 3)
ElseIf $pixelColorCurrentValue == StringTrimRight($decPixelColorToSearch, 3) Then
Sleep($delayTimeInMSec*2)
MouseClick("left", $xCoordToMouseClick, $yCoordToMouseClick)
Sleep($delayTimeInMSec)
$pixelColorCurrentValue = StringTrimRight(PixelGetColor($xCoordToCheck, $yCoordToCheck), 3)
EndIf
Until $pixelColorCurrentValue <> StringTrimRight($decPixelColorToSearch, 3) Or $pixelColorCurrentValue2 <> StringTrimRight($dec2PixelColorToSearch, 3)
EndFunc
Func PixelCheckColorBool_PixelGetColor($xCoordToCheck = 0, $yCoordToCheck = 0, $decPixelColorToSearch = 0x000000)
; Old method based on PixelGetColor(), which required the window to be active in order for the script to work.
Sleep(250)
Local $pixelColorCurrentValue = PixelGetColor($xCoordToCheck, $yCoordToCheck)
If $pixelColorCurrentValue == $decPixelColorToSearch Then
Return True
Else
Return False
EndIf
EndFunc
Func PixelCheckColorInArea($xLeftCoordToCheck = 0, $yTopCoordToCheck = 0, $xRightCoordToCheck = 0, $yBottomCoordToCheck = 0, $decPixelColorToSearch = 0x000000, $shadeVariation = 0, _
$xCoordToMouseClick = ($xRightCoordToCheck + $xLeftCoordToCheck) / 2, $yCoordToMouseClick = ($yTopCoordToCheck + $yBottomCoordToCheck) / 2, $delayTimeInMSec = 250)
Do
Sleep($delayTimeInMSec)
Local $TouchToStart = PixelSearch($xLeftCoordToCheck, $yTopCoordToCheck, $xRightCoordToCheck, $yBottomCoordToCheck, $decPixelColorToSearch, $shadeVariation)
Until Not @error
MouseClick("left", $xCoordToMouseClick, $yCoordToMouseClick)
EndFunc
Func GetRoomNumber($xCoordToCheck = 0, $yCoordToCheck = 0, $decPixelColorToSearch = 0x000000, $delayTimeInMSec = 250, _
$xLeftCoordToScanNumber = 0, $yTopCoordToScanNumber = 0, $xRightCoordToScanNumber = 0, $yBottomCoordToScanNumber = 0, $mouseClickDragSpeed = 1)
Do
Sleep($delayTimeInMSec)
Local $buttonColorValue = PixelGetColor($xCoordToCheck, $yCoordToCheck)
Until $buttonColorValue == $decPixelColorToSearch
Sleep($delayTimeInMSec)
; Sends hotkey Ctrl+D (need to configure this in preferences) to activate Capture2Text [https://sourceforge.net/projects/capture2text/]
; Mouse highlights rectangular box over area with room number code to create screenshot in Capture2Text
;WinActivate($hostWindowName)
Opt("MouseCoordMode", 0)
Sleep($delayTimeInMSec)
MouseMove( $xLeftCoordToScanNumber, $yTopCoordToScanNumber)
Send("#{q}")
Sleep($delayTimeInMSec)
MouseMove( $xRightCoordToScanNumber, $yBottomCoordToScanNumber)
MouseClick("left")
WinActivate("Capture2Text")
Send("!{F4}")
Sleep($delayTimeInMSec)
Local $roomNumberCode = ClipGet()
Return $roomNumberCode
EndFunc
Func MemoryReadPixel($x, $y, $handle)
; Function Reference: https://www.autoitscript.com/forum/topic/136347-solved-pixelgetcolor-in-a-background-window/?do=findComment&comment=953351
; MemoryReadPixel() Function replaces PixelGetColor() as does not require the target window to be active in order to gather pixel information.
; This function is also much faster than PixelGetColor() when using the test case in above reference.
Local $hDC
Local $iColor
Local $sColor
$hDC = _WinAPI_GetWindowDC($handle)
$iColor = DllCall("gdi32.dll", "int", "GetPixel", "int", $hDC, "int", $x, "int", $y)
$sColor = Hex($iColor[0], 6)
_WinAPI_ReleaseDC($handle, $hDC)
Return Hex("0x" & StringRight($sColor, 2) & StringMid($sColor, 3, 2) & StringLeft($sColor, 2))
EndFunc
Func PixelCheckColorBool($xCoordToCheck = 0, $yCoordToCheck = 0, $decPixelColorToSearch = 0x000000)
Sleep(250)
Local $pixelColorCurrentValue = MemoryReadPixel($xCoordToCheck, $yCoordToCheck, $windowHandle)
If $pixelColorCurrentValue == hex($decPixelColorToSearch) Then
Return True
Else
Return False
EndIf
EndFunc
Func SendInputTap($xCoord, $yCoord, $MemuVMSInstance = $hostMemuVMSInstance)
; Use this function in place of AutoIt's MouseClick() function as it directly sends Input Tap commands to the Memu Emulator Instance, which
; means that the target window does not have to be actively selected for sent touch commands to work.
Local $sDOSEXEFilePath = '"C:\Program Files\Microvirt\MEmu\memuc.exe" -i ' & $MemuVMSInstance & ' adb shell input tap ' & $xCoord & ' ' & $yCoord & @CRLF
Run($sDOSEXEFilePath,"",@SW_HIDE)
;Run($sDOSEXEFilePath,"",@SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
ConsoleWrite ( "input tap" & ' ' & $xCoord & ' ' & $yCoord & @CRLF)
EndFunc
; Screen: 'Date Change - A new day has begun' Popup
; Trigger Condition: Blue color of 'Return to Title Screen' button
; Action: Click 'Return to Title Screen' button
;TODO
;If PixelCheckColorBool(450, 400, 0x140446) Then
; SendInputTap(620, 520)
; Sleep(1500)
;EndIf