Skip to content

Commit 1769de9

Browse files
authored
Merge pull request #10 from Nigh/res_add
增加分辨率适配
2 parents d02ebaf + fa7ab54 commit 1769de9

28 files changed

+172
-45
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
*.ini
22
*.exe
3-
dist
3+
dist
4+
*.log

GenshinFishing.ahk

Lines changed: 149 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,29 @@ SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
66
#Persistent
77
SetBatchLines, -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+
926
if A_IsCompiled
1027
debug:=0
1128
Else
1229
debug:=1
1330

14-
version:="0.0.4"
31+
version:="0.1.0"
1532
if A_Args.Length() > 0
1633
{
1734
for n, param in A_Args
@@ -31,23 +48,75 @@ if A_Args.Length() > 0
3148

3249
UAC()
3350

51+
IniRead, logLevel, setting.ini, update, log, 0
3452
IniRead, 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)
3557
today:=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

4779
pToken := 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+
4997
DllCall("QueryPerformanceFrequency", "Int64P", freq)
5098
freq/=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+
51120
genshin_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

67130
ttm(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+
109180
getState:
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
111183
if(!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
118191
if(!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
125199
if(!ErrorLevel){
126200
state:="casting"
127201
statePredict:=state
128202
stateUnknownStart := 0
203+
log("state->" statePredict, 1)
129204
return
130205
}
131206
state:="unknown"
@@ -134,49 +209,80 @@ if(stateUnknownStart == 0) {
134209
}
135210
if(statePredict!="unknown" && A_TickCount - stateUnknownStart>=2000){
136211
statePredict:="unknown"
137-
Click, Up
212+
; Click, Up
213+
log("state->" statePredict, 1)
138214
}
139215
Return
140216

141-
test:
217+
main:
142218
genshin_hwnd := genshin_window_exist()
143219
if(!genshin_hwnd){
144-
SetTimer, test, -800
220+
SetTimer, main, -800
145221
Return
146222
}
147223
if(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+
153257
if(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:
278388
Run, https://github.com/Nigh/Genshin-fishing
279389
Return
280390
exit:
391+
pLogfile.Close()
281392
ExitApp
282393
donothing:
283394
Return
@@ -289,7 +400,7 @@ F6::Reload
289400

290401
update(){
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)

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
default: dist
1010

1111
GenshinFishing.exe:
12-
ahk2exe.exe /in GenshinFishing.ahk /out GenshinFishing.exe /icon icon.ico /mpress 1
12+
ahk2exe.exe /in GenshinFishing.ahk /out GenshinFishing.exe /icon icon.ico /compress 1
1313
version.txt:
1414
autohotkey.exe .\GenshinFishing.ahk --out=version
1515

0 commit comments

Comments
 (0)