@@ -53,6 +53,10 @@ MP_START_X = 1520
5353MP_START_Y = 976
5454MP_START_COLOR_NORMAL = 0x12FBC3
5555MP_START_COLOR_DARK = 0x2B402F
56+ ; 多人段位检测
57+ MP_LEVEL_DETECT_X = 1682
58+ MP_LEVEL_DETECT_Y = 530
59+ MP_LEVEL_COLORS := {0x6184DA : 1 , 0xC09F8C : 2 , 0x30C8F2 : 3 , 0xF86492 : 4 , 0xA2E1F5 : 5 }
5660; 多人首页误触
5761MP_START_MISTAKE_X = 1761
5862MP_START_MISTAKE_Y = 163
@@ -94,8 +98,8 @@ EURO_RACE_Y = 640
9498EURO_RACE_Y_DEVIATION = 65
9599EURO_RACE_COLOR = 0x12FBC3
96100; A9运行检测
97- GAME_RUNNING_CHECK_X = 637
98- GAME_RUNNING_CHECK_Y = 53
101+ GAME_RUNNING_CHECK_X = 686
102+ GAME_RUNNING_CHECK_Y = 23
99103GAME_RUNNING_CHECK_COLOR_DARK = 0x191919
100104GAME_RUNNING_CHECK_COLOR_GRAY = 0x343434
101105GAME_RUNNING_CHECK_COLOR_NORMAL = 0xFFFFFF
@@ -117,7 +121,8 @@ CAR_FIRST_OIL_X = 630
117121CAR_UPPER_OIL_Y = 633
118122CAR_LOWER_OIL_Y = 993
119123CAR_MP_X_DEVIATION = 150
120- CAR_MP_Y_DEVIATION = - 10
124+ CAR_MP_UPPER_Y_DEVIATION = - 10
125+ CAR_MP_LOWER_Y_DEVIATION = - 20
121126CAR_GAP_W = 514
122127CAR_RUNABLE_COLOR_MIN = 0x12260C
123128CAR_RUNABLE_COLOR_MAX = 0x39FBC3
@@ -248,12 +253,18 @@ OpenApp() ; 启动A9
248253Restart() ; 重置,不会影响票数计时器
249254{
250255 global BACK_X, BACK_Y, BACK_COLOR, GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_NORMAL, GAME_RUNNING_CHECK_COLOR_CROSS_1, GAME_RUNNING_CHECK_COLOR_CROSS_2, GAME_RUNNING_CHECK_X_2, GAME_RUNNING_CHECK_Y_2, GAME_RUNNING_CHECK_COLOR_2, lastRestartTime, enableDebug
251- ; 60秒内重置过,或者检测不到菜单页特征值
252- if (lastRestartTime ! = "" && lastRestartTime + 60000 > A_TickCount
253- || ! (CheckPixel(BACK_X, BACK_Y, BACK_COLOR) && (CheckPixelWithDeviation(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_CROSS_1) || CheckPixelWithDeviation(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_CROSS_2))
254- || CheckPixel(GAME_RUNNING_CHECK_X_2, GAME_RUNNING_CHECK_Y_2, GAME_RUNNING_CHECK_COLOR_2) && CheckPixel(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_NORMAL)))
256+ CheckTime()
257+ forceRestart := lastRestartTime ! = "" && lastRestartTime + 60000 > A_TickCount
258+ hasBack := CheckPixel(BACK_X, BACK_Y, BACK_COLOR)
259+ mainCross := CheckPixelWithDeviation(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_CROSS_1) || CheckPixelWithDeviation(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_CROSS_2)
260+ mainNormal := CheckPixel(GAME_RUNNING_CHECK_X, GAME_RUNNING_CHECK_Y, GAME_RUNNING_CHECK_COLOR_NORMAL)
261+ secondNormal := CheckPixel(GAME_RUNNING_CHECK_X_2, GAME_RUNNING_CHECK_Y_2, GAME_RUNNING_CHECK_COLOR_2)
262+ if (forceRestart || ! (hasBack && mainCross || mainNormal && secondNormal)) ; 60秒内重置过,或者检测不到菜单页特征值
255263 {
256- Debug(" Restarting" )
264+ if (enableDebug)
265+ {
266+ Debug(" Restarting." , " forceRestart: " . forceRestart, " hasBack: " . hasBack, " mainCross: " . mainCross, " mainNormal: " . mainNormal, " secondNormal: " . secondNormal)
267+ }
257268 if (! enableDebug)
258269 CloseApp()
259270 OpenApp()
@@ -432,20 +443,24 @@ RunMultiPlayerRace() ; 从A9首页打开并开始多人赛事
432443 if (A_Index > 10 )
433444 return
434445 }
446+ local finish := false
447+ local maxLevel = 0
448+ for k, v in MP_LEVEL_COLORS ; 检测段位,青铜~传奇 分别对应 1~5
449+ if CheckPixel(MP_LEVEL_DETECT_X, MP_LEVEL_DETECT_Y, k)
450+ maxLevel := v
451+ Debug(" 段位:" . maxLevel)
435452 RandomClick(MP_START_X, MP_START_Y, , DELAY_MIDDLE)
436453 WaitColor(BACK_X, BACK_Y, BACK_COLOR)
437- local finish := false
438- local maxLevel := 3 ; 这里先固定最高使用黄金段位车辆,后面有时间再加检测
439454 Loop %maxLevel%
440455 {
441456 local levelX := MP_LEVEL_X + MP_LEVEL_GAP * (maxLevel - A_Index )
442457 RandomClick(levelX, MP_LEVEL_Y, , DELAY_MIDDLE)
443- Loop 4
458+ Loop %MP_MAX_CARS_PER_LEVEL%
444459 {
445460 local relativePos := A_Index
446461 ToolTip 正在检查第%relativePos%辆车
447462 local carX := (relativePos - 1 ) // 2 * CAR_GAP_W + CAR_FIRST_OIL_X + CAR_MP_X_DEVIATION
448- local carY := ( relativePos & 1 = 0 ? CAR_LOWER_OIL_Y : CAR_UPPER_OIL_Y) + CAR_MP_Y_DEVIATION
463+ local carY := relativePos & 1 = 0 ? ( CAR_LOWER_OIL_Y + CAR_MP_LOWER_Y_DEVIATION) : ( CAR_UPPER_OIL_Y + CAR_MP_UPPER_Y_DEVIATION)
449464 local oilColor := GetPixel(carX, carY)
450465 local oilR := oilColor & 0xFF
451466 local oilG := (oilColor & 0xFF00 ) >> 8
0 commit comments