@@ -6,12 +6,29 @@ SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
66#Persistent
77SetBatchLines , - 1
88
9+ update_log:="
10+ (
11+ Add resolution support below
12+ 新增分辨率支持如下
13+ 1280x720
14+ 1600x900
15+
16+ Tooltip messages are turned off by default , specify debug=1 in setting.ini to turn on
17+ 提示信息默认关闭,在setting.ini中指定debug=1 开启
18+
19+ Add logs, specify log=1 or log=2 in setting.ini to start logs with different levels of detail and save them in the genshinfishing.log file
20+ 增加log,在setting.ini中指定log=1 或log=2 启动不同详细程度的log,保存在genshinfishing.log文件中
21+
22+ You can turn off automatic updates by specifying autoupdate=0 in setting.ini
23+ 在setting.ini中可以指定autoupdate=0 来关闭自动更新
24+ )"
25+
926if A_IsCompiled
1027debug:=0
1128Else
1229debug:=1
1330
14- version:=" 0.0.4 "
31+ version:=" 0.1.0 "
1532if A_Args.Length() > 0
1633{
1734 for n, param in A_Args
@@ -31,23 +48,75 @@ if A_Args.Length() > 0
3148
3249UAC()
3350
51+ IniRead , logLevel, setting.ini, update, log, 0
3452IniRead , lastUpdate, setting.ini, update, last, 0
53+ IniRead , autoUpdate, setting.ini, update, autoupdate, 1
54+ IniRead , debugmode, setting.ini, update, debug, 0
55+ Gosub , log_init
56+ log (" Start at " A_YYYY " -" A_MM " -" A_DD )
3557today:=A_MM . A_DD
36- if (lastUpdate! =today) {
37- MsgBox ,,Update,Getting Update`n获取最新版本,2
38- update()
58+ if (autoUpdate) {
59+ if (lastUpdate! =today) {
60+ log (" Getting Update" ,0 )
61+ MsgBox ,,Update,Getting Update`n获取最新版本,2
62+ update()
63+ } else {
64+ IniRead , version_str, setting.ini, update, ver, " 0"
65+ if (version_str! =version) {
66+ IniWrite , % version, setting.ini, update, ver
67+ MsgBox , % version " `nUpdate log`n更新日志`n`n" update_log
68+ }
69+ ttm(" Genshin Fishing automata Start`nv" version " `n原神钓鱼人偶启动" )
70+ }
3971} else {
40- ; MsgBox, already updated today
41- ttm( " Genshin Fishing automata Start`nv " version " `n原神钓鱼人偶启动 " )
72+ log ( " Update Skiped " , 0 )
73+ MsgBox ,,Update,Update Skiped`n跳过升级`n`nCurrent version`n当前版本`nv%version%, 2
4274}
4375
4476# Include, Gdip_ImageSearch.ahk
4577# Include, Gdip.ahk
4678
4779pToken := Gdip_Startup()
4880
81+ img_list:=Object(" bar" ,Object(" filename" ," bar.png" )
82+ ," casting" ,Object(" filename" ," casting.png" )
83+ ," cur" ,Object(" filename" ," cur.png" )
84+ ," left" ,Object(" filename" ," left.png" )
85+ ," ready" ,Object(" filename" ," ready.png" )
86+ ," reel" ,Object(" filename" ," reel.png" )
87+ ," right" ,Object(" filename" ," right.png" ))
88+ ; for k, v in img_list
89+ ; {
90+ ; pBitmap := Gdip_CreateBitmapFromFile( v.path )
91+ ; v.w:= Gdip_GetImageWidth( pBitmap )
92+ ; v.h:= Gdip_GetImageHeight( pBitmap )
93+ ; Gdip_DisposeImage( pBitmap )
94+ ; msgbox, % k "`n" v.path "`nw[" v.w "]`nh[" v.h "]"
95+ ; }
96+
4997DllCall (" QueryPerformanceFrequency" , " Int64P" , freq)
5098freq/ =1000
99+ CoordMode , Pixel , Client
100+ state:=" unknown"
101+ statePredict:=" unknown"
102+ stateUnknownStart:=0
103+ isResolutionValid:=0
104+ OnExit , exit
105+ SetTimer , main, - 100
106+ Return
107+
108+ log_init :
109+ pLogfile:=FileOpen (" genshinfishing.log" , " a" )
110+ Return
111+
112+ log (txt,level=0 )
113+ {
114+ global logLevel, pLogfile
115+ if (logLevel >= level) {
116+ pLogfile.WriteLine (A_Hour " :" A_Min " :" A_Sec " ." A_MSec " [" level " ]:" txt)
117+ }
118+ }
119+
51120genshin_window_exist()
52121{
53122 genshinHwnd := WinExist (" ahk_exe GenshinImpact.exe" )
@@ -57,12 +126,6 @@ genshin_window_exist()
57126 }
58127 return genshinHwnd
59128}
60- CoordMode , Pixel , Client
61- state:=" unknown"
62- statePredict:=" unknown"
63- stateUnknownStart:=0
64- SetTimer , test, - 100
65- Return
66129
67130ttm(txt, delay=1500 )
68131{
@@ -106,26 +169,38 @@ if(genshin_hwnd)
106169 ; Gdip_SetBitmapToClipboard
107170}
108171
172+ getClientSize(hWnd, ByRef w := "" , ByRef h := "" )
173+ {
174+ VarSetCapacity (rect, 16 , 0 )
175+ DllCall (" GetClientRect" , " ptr" , hWnd, " ptr" , & rect)
176+ w := NumGet (rect, 8 , " int" )
177+ h := NumGet (rect, 12 , " int" )
178+ }
179+
109180getState :
110- ImageSearch , X, Y, winW* 0.825 , winH* 0.875 , winW, winH, * 32 * TransFuchsia assets\ready.png
181+ ; k:=(((winW**2)+(winH**2))**0.5)/(((1920**2)+(1080**2))**0.5)
182+ ImageSearch , X, Y, winW- winH* 0.34 , winH* 0.85 , winW, winH, % " *32 *TransFuchsia ./assets/" winW winH " /" img_list.ready.filename
111183if (! ErrorLevel ){
112184 state:=" ready"
113185 statePredict:=state
114186 stateUnknownStart := 0
187+ log (" state->" statePredict, 1 )
115188 return
116189}
117- ImageSearch , X, Y, winW* 0.825 , winH* 0.875 , winW, winH, * 32 * TransFuchsia assets\ reel.png
190+ ImageSearch , X, Y, winW- winH * 0.34 , winH* 0.85 , winW, winH, % " *32 *TransFuchsia ./ assets/ " winW winH " / " img_list. reel.filename
118191if (! ErrorLevel ){
119192 state:=" reel"
120193 statePredict:=state
121194 stateUnknownStart := 0
195+ log (" state->" statePredict, 1 )
122196 return
123197}
124- ImageSearch , X, Y, winW* 0.825 , winH* 0.875 , winW, winH, * 32 * TransFuchsia assets\ casting.png
198+ ImageSearch , X, Y, winW- winH * 0.34 , winH* 0.85 , winW, winH, % " *32 *TransFuchsia ./ assets/ " winW winH " / " img_list. casting.filename
125199if (! ErrorLevel ){
126200 state:=" casting"
127201 statePredict:=state
128202 stateUnknownStart := 0
203+ log (" state->" statePredict, 1 )
129204 return
130205}
131206state:=" unknown"
@@ -134,49 +209,80 @@ if(stateUnknownStart == 0) {
134209}
135210if (statePredict! =" unknown" && A_TickCount - stateUnknownStart>=2000 ){
136211 statePredict:=" unknown"
137- Click , Up
212+ ; Click, Up
213+ log (" state->" statePredict, 1 )
138214}
139215Return
140216
141- test :
217+ main :
142218genshin_hwnd := genshin_window_exist()
143219if (! genshin_hwnd){
144- SetTimer , test , - 800
220+ SetTimer , main , - 800
145221 Return
146222}
147223if (WinExist (" A" ) ! = genshin_hwnd)
148224{
149- SetTimer , test, - 500
225+ SetTimer , main, - 500
226+ Return
227+ }
228+ getClientSize(genshin_hwnd, winW, winH)
229+
230+ if (oldWinW! =winW || oldWinH! =winH) {
231+ log (" Get dimension=" winW " x" winH,1 )
232+ if (InStr (FileExist (" ./assets/" winW winH), " D" )) {
233+ fileCount:=0
234+ for k, v in img_list
235+ {
236+ if (FileExist (" ./assets/" winW winH " /" v.filename)) {
237+ fileCount + = 1
238+ }
239+ }
240+ if (fileCount < img_list.Count()) {
241+ isResolutionValid:=0
242+ } else {
243+ isResolutionValid:=1
244+ }
245+ } else {
246+ isResolutionValid:=0
247+ }
248+ }
249+ oldWinW:=winW
250+ oldWinH:=winH
251+ if (! isResolutionValid) {
252+ tt(" Unsupported resolution`n不支持的分辨率`n" winW " x" winH)
253+ SetTimer , main, - 800
150254 Return
151255}
152- WinGetPos , _, _, winW, winH, ahk_id %genshin_hwnd%
256+
153257if (statePredict==" unknown" || statePredict==" ready" )
154258{
155259 Gosub , getState
156- if (statePredict! =" unknown" ){
260+ if (statePredict! =" unknown" && debugmode ){
157261 tt(" state = " state " `nstatePredict = " statePredict " `n" winW " ," winH)
158262 }
159263 if (statePredict==" reel" ){
160- SetTimer , test , - 40
264+ SetTimer , main , - 40
161265 } else {
162266 barY := 0
163- SetTimer , test , - 800
267+ SetTimer , main , - 800
164268 }
165269 Return
166270} else if(statePredict==" casting" ) {
167271 Gosub , getState
168- tt(" state = " statePredict)
272+ if (debugmode){
273+ tt(" state = " statePredict)
274+ }
169275 if (statePredict==" reel" ) {
170276 Click , Down
171- SetTimer , test , - 40
277+ SetTimer , main , - 40
172278 } else {
173- SetTimer , test , - 200
279+ SetTimer , main , - 200
174280 }
175281 Return
176282} else if(statePredict==" reel" ) {
177283 DllCall (" QueryPerformanceCounter" , " Int64P" , startTime)
178284 if (! barY) {
179- ImageSearch , _, barY, 0.33 * winW, 0 , 0.66 * winW, 0.3 * winH, * 20 * TransFuchsia assets\ bar.png
285+ ImageSearch , _, barY, 0.33 * winW, 0 , 0.66 * winW, 0.3 * winH, % " *20 *TransFuchsia ./ assets/ " winW winH " / " img_list. bar.filename
180286 if (ErrorLevel ){
181287 barY := 0
182288 } else {
@@ -185,13 +291,14 @@ if(statePredict=="unknown" || statePredict=="ready")
185291 leftX:=0
186292 rightX:=0
187293 curX:=0
294+ log (" get barY=" barY,2 )
188295 }
189296 DllCall (" QueryPerformanceCounter" , " Int64P" , endTime)
190297 } else {
191298 if (leftX > 0 ) {
192- ImageSearch , leftX, leftY, leftX- 25 , barY- 10 , leftX+ 25 + 12 , barY+ 30 , * 16 * TransFuchsia assets\ left .png
299+ ImageSearch , leftX, leftY, leftX- 25 , barY- 10 , leftX+ 25 + 12 , barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. left .filename
193300 } else {
194- ImageSearch , leftX, leftY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , * 16 * TransFuchsia assets\ left .png
301+ ImageSearch , leftX, leftY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. left .filename
195302 }
196303 if (ErrorLevel ){
197304 leftX := 0
@@ -202,9 +309,9 @@ if(statePredict=="unknown" || statePredict=="ready")
202309 }
203310
204311 if (rightX > 0 ) {
205- ImageSearch , rightX, rightY, rightX- 25 , barY- 10 , rightX+ 25 + 12 , barY+ 30 , * 16 * TransFuchsia assets\ right .png
312+ ImageSearch , rightX, rightY, rightX- 25 , barY- 10 , rightX+ 25 + 12 , barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. right .filename
206313 } else {
207- ImageSearch , rightX, rightY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , * 16 * TransFuchsia assets\ right .png
314+ ImageSearch , rightX, rightY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. right .filename
208315 }
209316 if (ErrorLevel ){
210317 rightX := 0
@@ -215,9 +322,9 @@ if(statePredict=="unknown" || statePredict=="ready")
215322 }
216323
217324 if (curX > 0 ) {
218- ImageSearch , curX, curY, curX- 50 , barY- 10 , curX+ 50 + 11 , barY+ 30 , * 16 * TransFuchsia assets\ cur.png
325+ ImageSearch , curX, curY, curX- 50 , barY- 10 , curX+ 50 + 11 , barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. cur.filename
219326 } else {
220- ImageSearch , curX, curY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , * 16 * TransFuchsia assets\ cur.png
327+ ImageSearch , curX, curY, 0.33 * winW, barY- 10 , 0.66 * winW, barY+ 30 , % " *16 *TransFuchsia ./ assets/ " winW winH " / " img_list. cur.filename
221328 }
222329 if (ErrorLevel ){
223330 curX := 0
@@ -255,16 +362,19 @@ if(statePredict=="unknown" || statePredict=="ready")
255362 sum := 0
256363 For index, value in avrDetectTime
257364 sum + = value
258-
365+
259366 avrDetectMs := sum// avrDetectTime.Length()
260367
261- tt(" barY = " barY " `n" " leftX = " leftX " `n" " rightX = " rightX " `n" " curX = " curX " `n" " barMove = " (leftX+ rightX)- (leftXOld+ rightXOld) " `n" state " `n" avrDetectMs " ms" )
368+ log (" dt=" detectTime " ms`tleftX=" leftX " `trightX=" rightX " `t" " curX=" curX " `tleftXpre=" leftPredictX " `trightXpre=" rightPredictX " `tcurXpre=" curPredictX,2 )
369+ if (debugmode){
370+ tt(" barY = " barY " `n" " leftX = " leftX " `n" " rightX = " rightX " `n" " curX = " curX " `n" " barMove = " (leftX+ rightX)- (leftXOld+ rightXOld) " `n" state " `n" avrDetectMs " ms" )
371+ }
262372 }
263373 lastTime:=(endTime- startTime)// freq
264374 if (lastTime>60 ) {
265- SetTimer , test , - 10
375+ SetTimer , main , - 10
266376 } else {
267- SetTimer , test , % lastTime- 70
377+ SetTimer , main , % lastTime- 70
268378 }
269379 Return
270380}
@@ -278,6 +388,7 @@ pages:
278388Run , https:// github.com/ Nigh/ Genshin- fishing
279389Return
280390exit :
391+ pLogfile.Close ()
281392ExitApp
282393donothing :
283394Return
@@ -289,7 +400,7 @@ F6::Reload
289400
290401update (){
291402 global
292- req := ComObjCreate (" Msxml2.XMLHTTP" )
403+ req := ComObjCreate (" Msxml2.XMLHTTP.6.0 " )
293404 ; https://download.fastgit.org/Nigh/Genshin-fishing/releases/latest/download/version.txt
294405 ; https://github.com/Nigh/Genshin-fishing/releases/latest/download/version.txt
295406 req.open(" GET" , " https://download.fastgit.org/Nigh/Genshin-fishing/releases/latest/download/version.txt" , true )
0 commit comments