Skip to content

Commit a8ba1d0

Browse files
authored
Merge pull request #780 from runhey/dev
Automated PR 2025.03.20
2 parents 43d435c + 81fa381 commit a8ba1d0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+605
-196
lines changed

module/config/config_manual.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class ConfigManual:
1111
Restart > SoulsTidy
1212
> KekkaiUtilize > KekkaiActivation > DemonEncounter
1313
> AreaBoss > GoldYoukai > ExperienceYoukai > Nian > Tako > RealmRaid > RyouToppa > DailyTrifles > Exploration
14-
> Dokan > AbyssShadows > Hunt > GuildBanquet
14+
> Dokan > AbyssShadows > Hunt > GuildBanquet > DemonRetreat
1515
> Orochi > OrochiMoans > OrochiJudgement > Sougenbi > FallenSun > EternitySea > SixRealms
1616
> ActivityShikigami > WantedQuests
1717
> BondlingFairyland > EvoZone > GoryouRealm > HeroTest

module/config/config_menu.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(self) -> None:
3636
]
3737
# 阴阳寮
3838
self.menu["Guild"] = ['KekkaiUtilize', 'KekkaiActivation', 'RealmRaid', 'RyouToppa', 'Dokan', 'CollectiveMissions',
39-
'Hunt' , 'AbyssShadows', 'GuildBanquet']
39+
'Hunt' , 'AbyssShadows', 'GuildBanquet', 'DemonRetreat']
4040
# 每周任务
4141
self.menu["Weekly Task"] = ['TrueOrochi', 'RichMan', 'Secret', 'WeeklyTrifles', 'MysteryShop', 'Duel']
4242
# 活动的任务

module/config/config_model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from tasks.Hunt.config import Hunt
4848
from tasks.AbyssShadows.config import AbyssShadows
4949
from tasks.GuildBanquet.config import GuildBanquet
50+
from tasks.DemonRetreat.config import DemonRetreat
5051

5152
# 这一部分是活动的配置-----------------------------------------------------------------------------------------------------
5253
from tasks.ActivityShikigami.config import ActivityShikigami
@@ -139,6 +140,7 @@ class ConfigModel(ConfigBase):
139140
dokan: Dokan = Field(default_factory=Dokan)
140141
abyss_shadows: AbyssShadows = Field(default_factory=AbyssShadows)
141142
guild_banquet: GuildBanquet = Field(default_factory=GuildBanquet)
143+
demon_retreat: DemonRetreat = Field(default_factory=DemonRetreat)
142144

143145
def __init__(self, config_name: str=None) -> None:
144146
"""

module/device/platform2/platform_windows.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -315,15 +315,22 @@ def show_package(m):
315315
# All check passed
316316
break
317317

318-
if new_window != 0 and new_window != current_window:
319-
logger.info(f'Minimize new window: {new_window}')
320-
minimize_window(new_window)
321-
if current_window:
322-
logger.info(f'De-flash current window: {current_window}')
323-
flash_window(current_window, flash=False)
324-
if new_window:
325-
logger.info(f'Flash new window: {new_window}')
326-
flash_window(new_window, flash=True)
318+
emulator_window_minimize = self.config.script.device.emulator_window_minimize
319+
logger.info(f'Minimize new emulator window: {emulator_window_minimize}')
320+
if emulator_window_minimize:
321+
if new_window != 0 and new_window != current_window:
322+
# 如果有新窗口且新窗口不是当前窗口,最小化新窗口
323+
logger.info(f'Minimize new window: {new_window}')
324+
minimize_window(new_window)
325+
if current_window:
326+
# 如果有当前窗口,取消当前窗口的闪烁
327+
logger.info(f'De-flash current window: {current_window}')
328+
flash_window(current_window, flash=False)
329+
if new_window:
330+
# 如果有新窗口,使新窗口闪烁
331+
logger.info(f'Flash new window: {new_window}')
332+
flash_window(new_window, flash=True)
333+
327334
logger.info('Emulator start completed')
328335
return True
329336

tasks/AreaBoss/assets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class AreaBossAssets:
101101
I_AB_JI_FLOOR_TEN = RuleImage(roi_front=(390,370,60,40), roi_back=(390,370,60,40), threshold=0.8, method="Template matching", file="./tasks/AreaBoss/res/ab_ji_floor_ten.png")
102102
# 小组内未取得名次
103103
I_AB_GROUP_RANK_NONE = RuleImage(roi_front=(890,415,95,85), roi_back=(890,415,95,85), threshold=0.8, method="Template matching", file="./tasks/AreaBoss/res/ab_rank_none.png")
104-
# 挑战数进度条
104+
# 挑战数进度条
105105
I_AB_NUM_CHALLENGE_RAIL = RuleImage(roi_front=(895,639,14,27), roi_back=(895,639,14,27), threshold=0.8, method="Template matching", file="./tasks/AreaBoss/res/ab_num_challenge_rail.png")
106106

107107

tasks/Component/Costume/costume_base.py

Lines changed: 24 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -12,64 +12,18 @@
1212
from tasks.Component.CostumeBattle.assets import CostumeBattleAssets
1313

1414
# 庭院皮肤
15+
# 主界面皮肤(使用字典推导式动态生成)
1516
main_costume_model = {
16-
MainType.COSTUME_MAIN_1: {'I_CHECK_MAIN': 'I_CHECK_MAIN_1',
17-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_1',
18-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_1',
19-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_1',
20-
'I_PET_HOUSE': 'I_PET_HOUSE_1', },
21-
MainType.COSTUME_MAIN_2: {'I_CHECK_MAIN': 'I_CHECK_MAIN_2',
22-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_2',
23-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_2',
24-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_2',
25-
'I_PET_HOUSE': 'I_PET_HOUSE_2', },
26-
MainType.COSTUME_MAIN_3: {'I_CHECK_MAIN': 'I_CHECK_MAIN_3',
27-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_3',
28-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_3',
29-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_3',
30-
'I_PET_HOUSE': 'I_PET_HOUSE_3', },
31-
MainType.COSTUME_MAIN_4: {'I_CHECK_MAIN': 'I_CHECK_MAIN_4',
32-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_4',
33-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_4',
34-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_4',
35-
'I_PET_HOUSE': 'I_PET_HOUSE_4', },
36-
MainType.COSTUME_MAIN_5: {'I_CHECK_MAIN': 'I_CHECK_MAIN_5',
37-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_5',
38-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_5',
39-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_5',
40-
'I_PET_HOUSE': 'I_PET_HOUSE_5', },
41-
MainType.COSTUME_MAIN_6: {'I_CHECK_MAIN': 'I_CHECK_MAIN_6',
42-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_6',
43-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_6',
44-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_6',
45-
'I_PET_HOUSE': 'I_PET_HOUSE_6', },
46-
MainType.COSTUME_MAIN_7: {'I_CHECK_MAIN': 'I_CHECK_MAIN_7',
47-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_7',
48-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_7',
49-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_7',
50-
'I_PET_HOUSE': 'I_PET_HOUSE_7', },
51-
MainType.COSTUME_MAIN_8: {'I_CHECK_MAIN': 'I_CHECK_MAIN_8',
52-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_8',
53-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_8',
54-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_8',
55-
'I_PET_HOUSE': 'I_PET_HOUSE_8', },
56-
MainType.COSTUME_MAIN_9: {'I_CHECK_MAIN': 'I_CHECK_MAIN_9',
57-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_9',
58-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_9',
59-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_9',
60-
'I_PET_HOUSE': 'I_PET_HOUSE_9', },
61-
MainType.COSTUME_MAIN_10: {'I_CHECK_MAIN': 'I_CHECK_MAIN_10',
62-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_10',
63-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_10',
64-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_10',
65-
'I_PET_HOUSE': 'I_PET_HOUSE_10', },
66-
MainType.COSTUME_MAIN_11: {'I_CHECK_MAIN': 'I_CHECK_MAIN_11',
67-
'I_MAIN_GOTO_EXPLORATION': 'I_MAIN_GOTO_EXPLORATION_11',
68-
'I_MAIN_GOTO_SUMMON': 'I_MAIN_GOTO_SUMMON_11',
69-
'I_MAIN_GOTO_TOWN': 'I_MAIN_GOTO_TOWN_11',
70-
'I_PET_HOUSE': 'I_PET_HOUSE_11', },
17+
getattr(MainType, f"COSTUME_MAIN_{i}"): {
18+
'I_CHECK_MAIN': f'I_CHECK_MAIN_{i}',
19+
'I_MAIN_GOTO_EXPLORATION': f'I_MAIN_GOTO_EXPLORATION_{i}',
20+
'I_MAIN_GOTO_SUMMON': f'I_MAIN_GOTO_SUMMON_{i}',
21+
'I_MAIN_GOTO_TOWN': f'I_MAIN_GOTO_TOWN_{i}',
22+
'I_PET_HOUSE': f'I_PET_HOUSE_{i}'
23+
} for i in range(1, 12)
7124
}
7225

26+
7327
# 结界皮肤
7428
realm_costume_model = {
7529
RealmType.COSTUME_REALM_1: {'I_SHI_CARD': 'I_SHI_CARD_1',
@@ -81,62 +35,21 @@
8135
'I_BOX_EXP': 'I_BOX_EXP_2'},
8236
}
8337

84-
# 战斗主题
85-
battle_theme_model = {
86-
BattleType.COSTUME_BATTLE_1: {
87-
'I_LOCAL': 'I_LOCAL_1',
88-
'I_EXIT': 'I_EXIT_1',
89-
'I_FRIENDS': 'I_FRIENDS_1',
90-
},
91-
BattleType.COSTUME_BATTLE_2: {
92-
'I_LOCAL': 'I_LOCAL_2',
93-
'I_EXIT': 'I_EXIT_2',
94-
'I_FRIENDS': 'I_FRIENDS_2',
95-
},
96-
BattleType.COSTUME_BATTLE_3: {
97-
'I_LOCAL': 'I_LOCAL_3',
98-
'I_EXIT': 'I_EXIT_3',
99-
'I_FRIENDS': 'I_FRIENDS_3',
100-
},
101-
BattleType.COSTUME_BATTLE_4: {
102-
'I_LOCAL': 'I_LOCAL_4',
103-
'I_EXIT': 'I_EXIT_4',
104-
'I_FRIENDS': 'I_FRIENDS_4',
105-
},
106-
BattleType.COSTUME_BATTLE_5: {
107-
'I_LOCAL': 'I_LOCAL_5',
108-
'I_EXIT': 'I_EXIT_5',
109-
'I_FRIENDS': 'I_FRIENDS_5',
110-
},
111-
BattleType.COSTUME_BATTLE_6: {
112-
'I_LOCAL': 'I_LOCAL_6',
113-
'I_EXIT': 'I_EXIT_6',
114-
'I_FRIENDS': 'I_FRIENDS_6',
115-
},
116-
BattleType.COSTUME_BATTLE_7: {
117-
'I_LOCAL': 'I_LOCAL_7',
118-
'I_EXIT': 'I_EXIT_7',
119-
'I_FRIENDS': 'I_FRIENDS_7',
120-
},
121-
BattleType.COSTUME_BATTLE_8: {
122-
'I_LOCAL': 'I_LOCAL_8',
123-
'I_EXIT': 'I_EXIT_8',
124-
'I_FRIENDS': 'I_FRIENDS_8',
125-
'I_WIN': 'I_WIN_8',
126-
'I_DE_WIN': 'I_DE_WIN_8',
127-
'I_FALSE': 'I_FALSE_8',
128-
},
129-
BattleType.COSTUME_BATTLE_9: {
130-
'I_LOCAL': 'I_LOCAL_9',
131-
'I_EXIT': 'I_EXIT_9',
132-
'I_FRIENDS': 'I_FRIENDS_9',
133-
},
134-
BattleType.COSTUME_BATTLE_10: {
135-
'I_LOCAL': 'I_LOCAL_10',
136-
'I_EXIT': 'I_EXIT_10',
137-
'I_FRIENDS': 'I_FRIENDS_10',
138-
},
139-
}
38+
# 战斗主题(使用循环处理常规情况 + 特例处理)
39+
battle_theme_model = {}
40+
for i in range(1, 11):
41+
entry = {
42+
'I_LOCAL': f'I_LOCAL_{i}',
43+
'I_EXIT': f'I_EXIT_{i}',
44+
'I_FRIENDS': f'I_FRIENDS_{i}',
45+
}
46+
if i == 8: # 特殊处理第8项
47+
entry.update({
48+
'I_WIN': 'I_WIN_8',
49+
'I_DE_WIN': 'I_DE_WIN_8',
50+
'I_FALSE': 'I_FALSE_8'
51+
})
52+
battle_theme_model[getattr(BattleType, f"COSTUME_BATTLE_{i}")] = entry
14053

14154

14255
class CostumeBase:

tasks/Component/GeneralBattle/assets.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ class GeneralBattleAssets:
121121
I_GREEN_MARKER_LEFT_TOP = RuleImage(roi_front=(0,0,1280,720), roi_back=(0,0,1280,720), threshold=0.8, method="Template matching", file="./tasks/Component/GeneralBattle/gb/gb_green_marker_left_top.png")
122122
# 绿标-下半部分
123123
I_GREEN_MARKER_BOTTOM = RuleImage(roi_front=(0,0,1280,720), roi_back=(0,0,1280,720), threshold=0.8, method="Template matching", file="./tasks/Component/GeneralBattle/gb/gb_green_marker_bottom.png")
124+
# 新版本的预设图案带数字
125+
I_PRESET_WIT_NUMBER = RuleImage(roi_front=(40,655,37,37), roi_back=(9,636,100,74), threshold=0.8, method="Template matching", file="./tasks/Component/GeneralBattle/gb/gb_preset_wit_number.png")
124126

125127

126128
# Image Rule Assets
3.17 KB
Loading

tasks/Component/GeneralBattle/gb/image.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,5 +241,14 @@
241241
"method": "Template matching",
242242
"threshold": 0.8,
243243
"description": "绿标-下半部分"
244+
},
245+
{
246+
"itemName": "preset_wit_number",
247+
"imageName": "gb_preset_wit_number.png",
248+
"roiFront": "40,655,37,37",
249+
"roiBack": "9,636,100,74",
250+
"method": "Template matching",
251+
"threshold": 0.8,
252+
"description": "新版本的预设图案带数字"
244253
}
245254
]

tasks/Component/GeneralBattle/general_battle.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def run_general_battle_back(self, config: GeneralBattleConfig = None, exit_four:
8787
self.screenshot()
8888
if self.appear_then_click(self.I_PREPARE_HIGHLIGHT, interval=1.5):
8989
continue
90-
if not self.appear(self.I_PRESET):
90+
if not (self.appear(self.I_PRESET) or self.appear(self.I_PRESET_WIT_NUMBER)):
9191
break
9292
logger.info(f"Click {self.I_PREPARE_HIGHLIGHT.name}")
9393

@@ -297,6 +297,8 @@ def switch_preset_team(self, enable: bool = False, preset_group: int = 1, preset
297297
break
298298
if self.appear_then_click(self.I_PRESET, threshold=0.8, interval=1):
299299
continue
300+
if self.appear_then_click(self.I_PRESET_WIT_NUMBER, threshold=0.8, interval=1):
301+
continue
300302
if self.ocr_appear(self.O_PRESET):
301303
self.click(self.O_PRESET, interval=1)
302304
continue
@@ -417,7 +419,7 @@ def is_in_prepare(self, is_screenshot: bool = True) -> bool:
417419
return True
418420
elif self.appear(self.I_PREPARE_DARK):
419421
return True
420-
elif self.appear(self.I_PRESET):
422+
elif self.appear(self.I_PRESET) or self.appear(self.I_PRESET_WIT_NUMBER):
421423
return True
422424
else:
423425
return False

0 commit comments

Comments
 (0)