diff --git a/assets/cn/coalition/HORROR_COALITION_CHECK.png b/assets/cn/coalition/HORROR_COALITION_CHECK.png new file mode 100644 index 000000000..88e462e02 Binary files /dev/null and b/assets/cn/coalition/HORROR_COALITION_CHECK.png differ diff --git a/assets/cn/coalition/HORROR_EASY.png b/assets/cn/coalition/HORROR_EASY.png new file mode 100644 index 000000000..9f1b0eb7f Binary files /dev/null and b/assets/cn/coalition/HORROR_EASY.png differ diff --git a/assets/cn/coalition/HORROR_EX.png b/assets/cn/coalition/HORROR_EX.png new file mode 100644 index 000000000..86a03f032 Binary files /dev/null and b/assets/cn/coalition/HORROR_EX.png differ diff --git a/assets/cn/coalition/HORROR_FLEET_PREPARATION.png b/assets/cn/coalition/HORROR_FLEET_PREPARATION.png new file mode 100644 index 000000000..5fc8d950d Binary files /dev/null and b/assets/cn/coalition/HORROR_FLEET_PREPARATION.png differ diff --git a/assets/cn/coalition/HORROR_HARD.png b/assets/cn/coalition/HORROR_HARD.png new file mode 100644 index 000000000..ae24cd254 Binary files /dev/null and b/assets/cn/coalition/HORROR_HARD.png differ diff --git a/assets/cn/coalition/HORROR_MODE_BATTLE.png b/assets/cn/coalition/HORROR_MODE_BATTLE.png new file mode 100644 index 000000000..9a2142ed3 Binary files /dev/null and b/assets/cn/coalition/HORROR_MODE_BATTLE.png differ diff --git a/assets/cn/coalition/HORROR_MODE_STORY.png b/assets/cn/coalition/HORROR_MODE_STORY.png new file mode 100644 index 000000000..f378fee73 Binary files /dev/null and b/assets/cn/coalition/HORROR_MODE_STORY.png differ diff --git a/assets/cn/coalition/HORROR_NORMAL.png b/assets/cn/coalition/HORROR_NORMAL.png new file mode 100644 index 000000000..fd6528ee4 Binary files /dev/null and b/assets/cn/coalition/HORROR_NORMAL.png differ diff --git a/assets/cn/coalition/HORROR_PT_OCR.png b/assets/cn/coalition/HORROR_PT_OCR.png new file mode 100644 index 000000000..609da8e2a Binary files /dev/null and b/assets/cn/coalition/HORROR_PT_OCR.png differ diff --git a/assets/cn/coalition/HORROR_SP.png b/assets/cn/coalition/HORROR_SP.png new file mode 100644 index 000000000..fe49c9913 Binary files /dev/null and b/assets/cn/coalition/HORROR_SP.png differ diff --git a/assets/cn/coalition/HORROR_SWITCH_MULTI.png b/assets/cn/coalition/HORROR_SWITCH_MULTI.png new file mode 100644 index 000000000..02d5a0edd Binary files /dev/null and b/assets/cn/coalition/HORROR_SWITCH_MULTI.png differ diff --git a/assets/cn/coalition/HORROR_SWITCH_SINGLE.png b/assets/cn/coalition/HORROR_SWITCH_SINGLE.png new file mode 100644 index 000000000..b048ba47f Binary files /dev/null and b/assets/cn/coalition/HORROR_SWITCH_SINGLE.png differ diff --git a/assets/en/coalition/HORROR_COALITION_CHECK.png b/assets/en/coalition/HORROR_COALITION_CHECK.png new file mode 100644 index 000000000..7d9220af2 Binary files /dev/null and b/assets/en/coalition/HORROR_COALITION_CHECK.png differ diff --git a/assets/en/coalition/HORROR_FLEET_PREPARATION.png b/assets/en/coalition/HORROR_FLEET_PREPARATION.png new file mode 100644 index 000000000..5328e0955 Binary files /dev/null and b/assets/en/coalition/HORROR_FLEET_PREPARATION.png differ diff --git a/assets/en/coalition/HORROR_MODE_BATTLE.png b/assets/en/coalition/HORROR_MODE_BATTLE.png new file mode 100644 index 000000000..8589f0300 Binary files /dev/null and b/assets/en/coalition/HORROR_MODE_BATTLE.png differ diff --git a/assets/en/coalition/HORROR_MODE_STORY.png b/assets/en/coalition/HORROR_MODE_STORY.png new file mode 100644 index 000000000..8cd3d3fe6 Binary files /dev/null and b/assets/en/coalition/HORROR_MODE_STORY.png differ diff --git a/assets/en/coalition/HORROR_PT_OCR.png b/assets/en/coalition/HORROR_PT_OCR.png new file mode 100644 index 000000000..b6846e28d Binary files /dev/null and b/assets/en/coalition/HORROR_PT_OCR.png differ diff --git a/assets/en/coalition/HORROR_SWITCH_MULTI.png b/assets/en/coalition/HORROR_SWITCH_MULTI.png new file mode 100644 index 000000000..34972bf60 Binary files /dev/null and b/assets/en/coalition/HORROR_SWITCH_MULTI.png differ diff --git a/assets/en/coalition/HORROR_SWITCH_SINGLE.png b/assets/en/coalition/HORROR_SWITCH_SINGLE.png new file mode 100644 index 000000000..533d843ef Binary files /dev/null and b/assets/en/coalition/HORROR_SWITCH_SINGLE.png differ diff --git a/assets/jp/coalition/HORROR_COALITION_CHECK.png b/assets/jp/coalition/HORROR_COALITION_CHECK.png new file mode 100644 index 000000000..371b23c3e Binary files /dev/null and b/assets/jp/coalition/HORROR_COALITION_CHECK.png differ diff --git a/assets/jp/coalition/HORROR_FLEET_PREPARATION.png b/assets/jp/coalition/HORROR_FLEET_PREPARATION.png new file mode 100644 index 000000000..56465eb7b Binary files /dev/null and b/assets/jp/coalition/HORROR_FLEET_PREPARATION.png differ diff --git a/assets/jp/coalition/HORROR_HARD.png b/assets/jp/coalition/HORROR_HARD.png new file mode 100644 index 000000000..676787587 Binary files /dev/null and b/assets/jp/coalition/HORROR_HARD.png differ diff --git a/assets/jp/coalition/HORROR_MODE_BATTLE.png b/assets/jp/coalition/HORROR_MODE_BATTLE.png new file mode 100644 index 000000000..50e9cb093 Binary files /dev/null and b/assets/jp/coalition/HORROR_MODE_BATTLE.png differ diff --git a/assets/jp/coalition/HORROR_MODE_STORY.png b/assets/jp/coalition/HORROR_MODE_STORY.png new file mode 100644 index 000000000..f76846ac8 Binary files /dev/null and b/assets/jp/coalition/HORROR_MODE_STORY.png differ diff --git a/assets/jp/coalition/HORROR_SWITCH_MULTI.png b/assets/jp/coalition/HORROR_SWITCH_MULTI.png new file mode 100644 index 000000000..a4645705f Binary files /dev/null and b/assets/jp/coalition/HORROR_SWITCH_MULTI.png differ diff --git a/assets/jp/coalition/HORROR_SWITCH_SINGLE.png b/assets/jp/coalition/HORROR_SWITCH_SINGLE.png new file mode 100644 index 000000000..549729bfd Binary files /dev/null and b/assets/jp/coalition/HORROR_SWITCH_SINGLE.png differ diff --git a/assets/shop/core/SuperHeavyShell.png b/assets/shop/core/SuperHeavyShell.png new file mode 100644 index 000000000..32358418b Binary files /dev/null and b/assets/shop/core/SuperHeavyShell.png differ diff --git a/assets/shop/core/Type1ArmorPiercingShell.png b/assets/shop/core/Type1ArmorPiercingShell.png new file mode 100644 index 000000000..1750073dc Binary files /dev/null and b/assets/shop/core/Type1ArmorPiercingShell.png differ diff --git a/assets/shop/core/Type93PureOxygenTorpedo.png b/assets/shop/core/Type93PureOxygenTorpedo.png new file mode 100644 index 000000000..455a5bdf9 Binary files /dev/null and b/assets/shop/core/Type93PureOxygenTorpedo.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index 5bfb5c8bb..76874c9ed 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -306,3 +306,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20260625 | event 20260625 cn | Miracle by Midnight | 美梦巡演奇妙夜 | Miracle by Midnight | 幻夢のカヴァルカード | - | | 20260703 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | | 20260709 | event 20260625 cn | Miracle by Midnight | - | - | - | 美夢巡演奇秒夜 | +| 20260723 | coalition 20260723 | Authentic Horror Story | 怪谈纪实 | Authentic Horror Story | 怪談実録 | - | diff --git a/config/template.json b/config/template.json index 9cc3be3be..421a8402a 100644 --- a/config/template.json +++ b/config/template.json @@ -498,6 +498,57 @@ "Storage": {} } }, + "Coalition": { + "Scheduler": { + "Enable": false, + "NextRun": "2020-01-01 00:00:00", + "Command": "Coalition", + "SuccessInterval": 30, + "FailureInterval": 30, + "ServerUpdate": "00:00" + }, + "Campaign": { + "Name": "dynamic", + "Event": "campaign_main", + "Mode": "normal", + "UseClearMode": true, + "UseFleetLock": true, + "UseAutoSearch": false, + "Use2xBook": false, + "AmbushEvade": true, + "ClearAfterSinking": false + }, + "Coalition": { + "Mode": "hard", + "Fleet": "single" + }, + "StopCondition": { + "OilLimit": 1000, + "RunCount": 0, + "MapAchievement": "non_stop", + "StageIncrease": false, + "GetNewShip": false, + "ReachLevel": 0 + }, + "Emotion": { + "Mode": "calculate", + "Fleet1Value": 119, + "Fleet1Record": "2020-01-01 00:00:00", + "Fleet1Control": "prevent_green_face", + "Fleet1Recover": "not_in_dormitory", + "Fleet1Oath": false, + "Fleet1Onsen": false, + "Fleet2Value": 119, + "Fleet2Record": "2020-01-01 00:00:00", + "Fleet2Control": "prevent_yellow_face", + "Fleet2Recover": "not_in_dormitory", + "Fleet2Oath": false, + "Fleet2Onsen": false + }, + "Storage": { + "Storage": {} + } + }, "Event": { "Scheduler": { "Enable": false, @@ -748,57 +799,6 @@ "Storage": {} } }, - "Coalition": { - "Scheduler": { - "Enable": false, - "NextRun": "2020-01-01 00:00:00", - "Command": "Coalition", - "SuccessInterval": 30, - "FailureInterval": 30, - "ServerUpdate": "00:00" - }, - "Campaign": { - "Name": "dynamic", - "Event": "campaign_main", - "Mode": "normal", - "UseClearMode": true, - "UseFleetLock": true, - "UseAutoSearch": false, - "Use2xBook": false, - "AmbushEvade": true, - "ClearAfterSinking": false - }, - "Coalition": { - "Mode": "tc3", - "Fleet": "single" - }, - "StopCondition": { - "OilLimit": 1000, - "RunCount": 0, - "MapAchievement": "non_stop", - "StageIncrease": false, - "GetNewShip": false, - "ReachLevel": 0 - }, - "Emotion": { - "Mode": "calculate", - "Fleet1Value": 119, - "Fleet1Record": "2020-01-01 00:00:00", - "Fleet1Control": "prevent_green_face", - "Fleet1Recover": "not_in_dormitory", - "Fleet1Oath": false, - "Fleet1Onsen": false, - "Fleet2Value": 119, - "Fleet2Record": "2020-01-01 00:00:00", - "Fleet2Control": "prevent_yellow_face", - "Fleet2Recover": "not_in_dormitory", - "Fleet2Oath": false, - "Fleet2Onsen": false - }, - "Storage": { - "Storage": {} - } - }, "MaritimeEscort": { "Scheduler": { "Enable": false, @@ -898,6 +898,57 @@ "Storage": {} } }, + "CoalitionSp": { + "Scheduler": { + "Enable": false, + "NextRun": "2020-01-01 00:00:00", + "Command": "CoalitionSp", + "SuccessInterval": 30, + "FailureInterval": 30, + "ServerUpdate": "00:00" + }, + "Campaign": { + "Name": "sp", + "Event": "campaign_main", + "Mode": "normal", + "UseClearMode": true, + "UseFleetLock": true, + "UseAutoSearch": false, + "Use2xBook": false, + "AmbushEvade": true, + "ClearAfterSinking": false + }, + "Coalition": { + "Mode": "sp", + "Fleet": "single" + }, + "StopCondition": { + "OilLimit": 1000, + "RunCount": 0, + "MapAchievement": "non_stop", + "StageIncrease": false, + "GetNewShip": false, + "ReachLevel": 0 + }, + "Emotion": { + "Mode": "calculate", + "Fleet1Value": 119, + "Fleet1Record": "2020-01-01 00:00:00", + "Fleet1Control": "prevent_green_face", + "Fleet1Recover": "not_in_dormitory", + "Fleet1Oath": false, + "Fleet1Onsen": false, + "Fleet2Value": 119, + "Fleet2Record": "2020-01-01 00:00:00", + "Fleet2Control": "prevent_yellow_face", + "Fleet2Recover": "not_in_dormitory", + "Fleet2Oath": false, + "Fleet2Onsen": false + }, + "Storage": { + "Storage": {} + } + }, "EventA": { "Scheduler": { "Enable": false, @@ -1364,57 +1415,6 @@ "Storage": {} } }, - "CoalitionSp": { - "Scheduler": { - "Enable": false, - "NextRun": "2020-01-01 00:00:00", - "Command": "CoalitionSp", - "SuccessInterval": 30, - "FailureInterval": 30, - "ServerUpdate": "00:00" - }, - "Campaign": { - "Name": "sp", - "Event": "campaign_main", - "Mode": "normal", - "UseClearMode": true, - "UseFleetLock": true, - "UseAutoSearch": false, - "Use2xBook": false, - "AmbushEvade": true, - "ClearAfterSinking": false - }, - "Coalition": { - "Mode": "sp", - "Fleet": "single" - }, - "StopCondition": { - "OilLimit": 1000, - "RunCount": 0, - "MapAchievement": "non_stop", - "StageIncrease": false, - "GetNewShip": false, - "ReachLevel": 0 - }, - "Emotion": { - "Mode": "calculate", - "Fleet1Value": 119, - "Fleet1Record": "2020-01-01 00:00:00", - "Fleet1Control": "prevent_green_face", - "Fleet1Recover": "not_in_dormitory", - "Fleet1Oath": false, - "Fleet1Onsen": false, - "Fleet2Value": 119, - "Fleet2Record": "2020-01-01 00:00:00", - "Fleet2Control": "prevent_yellow_face", - "Fleet2Recover": "not_in_dormitory", - "Fleet2Oath": false, - "Fleet2Onsen": false - }, - "Storage": { - "Storage": {} - } - }, "Commission": { "Scheduler": { "Enable": false, diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 9f5435ef0..dff7e1917 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -594,7 +594,7 @@ class GemsFarming(CampaignRun, Dock): mount_button = globals()[f'FLEET_{self.fleet_to_attack}_VANGUARD_3'] if self.appear(unmount_button, offset=(20, 20)): - logger.info('No flagship to unmount, skip unmounting.') + logger.info('No vanguard to unmount, skip unmounting.') else: self.ui_enter_ship(unmount_button, long_click=False) self.ui_click(DOCK_UNMOUNT, check_button=FLEET_PREPARATION, appear_button=DOCK_CHECK, diff --git a/module/coalition/assets.py b/module/coalition/assets.py index 890b25525..21702250a 100644 --- a/module/coalition/assets.py +++ b/module/coalition/assets.py @@ -60,6 +60,18 @@ FROSTFALL_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968, FROSTFALL_TC1 = Button(area={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, color={'cn': (204, 162, 254), 'en': (204, 162, 254), 'jp': (204, 162, 254), 'tw': (188, 137, 254)}, button={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC1.png', 'en': './assets/en/coalition/FROSTFALL_TC1.png', 'jp': './assets/jp/coalition/FROSTFALL_TC1.png', 'tw': './assets/tw/coalition/FROSTFALL_TC1.png'}) FROSTFALL_TC2 = Button(area={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (631, 160, 658, 173)}, color={'cn': (186, 136, 252), 'en': (186, 136, 252), 'jp': (186, 136, 252), 'tw': (186, 136, 252)}, button={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (631, 160, 658, 173)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC2.png', 'en': './assets/en/coalition/FROSTFALL_TC2.png', 'jp': './assets/jp/coalition/FROSTFALL_TC2.png', 'tw': './assets/tw/coalition/FROSTFALL_TC2.png'}) FROSTFALL_TC3 = Button(area={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (810, 362, 835, 373)}, color={'cn': (197, 153, 255), 'en': (197, 153, 255), 'jp': (197, 153, 255), 'tw': (197, 153, 255)}, button={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (810, 362, 835, 373)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC3.png', 'en': './assets/en/coalition/FROSTFALL_TC3.png', 'jp': './assets/jp/coalition/FROSTFALL_TC3.png', 'tw': './assets/tw/coalition/FROSTFALL_TC3.png'}) +HORROR_COALITION_CHECK = Button(area={'cn': (204, 49, 250, 70), 'en': (182, 40, 238, 65), 'jp': (204, 50, 250, 67), 'tw': (204, 49, 250, 70)}, color={'cn': (142, 142, 164), 'en': (161, 158, 163), 'jp': (136, 137, 159), 'tw': (142, 142, 164)}, button={'cn': (204, 49, 250, 70), 'en': (182, 40, 238, 65), 'jp': (204, 50, 250, 67), 'tw': (204, 49, 250, 70)}, file={'cn': './assets/cn/coalition/HORROR_COALITION_CHECK.png', 'en': './assets/en/coalition/HORROR_COALITION_CHECK.png', 'jp': './assets/jp/coalition/HORROR_COALITION_CHECK.png', 'tw': './assets/cn/coalition/HORROR_COALITION_CHECK.png'}) +HORROR_EASY = Button(area={'cn': (863, 425, 890, 464), 'en': (863, 425, 890, 464), 'jp': (863, 425, 890, 464), 'tw': (863, 425, 890, 464)}, color={'cn': (76, 76, 96), 'en': (76, 76, 96), 'jp': (76, 76, 96), 'tw': (76, 76, 96)}, button={'cn': (863, 425, 890, 464), 'en': (863, 425, 890, 464), 'jp': (863, 425, 890, 464), 'tw': (863, 425, 890, 464)}, file={'cn': './assets/cn/coalition/HORROR_EASY.png', 'en': './assets/cn/coalition/HORROR_EASY.png', 'jp': './assets/cn/coalition/HORROR_EASY.png', 'tw': './assets/cn/coalition/HORROR_EASY.png'}) +HORROR_EX = Button(area={'cn': (172, 410, 200, 448), 'en': (172, 410, 200, 448), 'jp': (172, 410, 200, 448), 'tw': (172, 410, 200, 448)}, color={'cn': (150, 101, 105), 'en': (150, 101, 105), 'jp': (150, 101, 105), 'tw': (150, 101, 105)}, button={'cn': (172, 410, 200, 448), 'en': (172, 410, 200, 448), 'jp': (172, 410, 200, 448), 'tw': (172, 410, 200, 448)}, file={'cn': './assets/cn/coalition/HORROR_EX.png', 'en': './assets/cn/coalition/HORROR_EX.png', 'jp': './assets/cn/coalition/HORROR_EX.png', 'tw': './assets/cn/coalition/HORROR_EX.png'}) +HORROR_FLEET_PREPARATION = Button(area={'cn': (1026, 514, 1139, 542), 'en': (1039, 516, 1125, 538), 'jp': (1042, 514, 1124, 542), 'tw': (1026, 514, 1139, 542)}, color={'cn': (146, 132, 183), 'en': (158, 149, 194), 'jp': (135, 117, 173), 'tw': (146, 132, 183)}, button={'cn': (1026, 514, 1139, 542), 'en': (1039, 516, 1125, 538), 'jp': (1042, 514, 1124, 542), 'tw': (1026, 514, 1139, 542)}, file={'cn': './assets/cn/coalition/HORROR_FLEET_PREPARATION.png', 'en': './assets/en/coalition/HORROR_FLEET_PREPARATION.png', 'jp': './assets/jp/coalition/HORROR_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/HORROR_FLEET_PREPARATION.png'}) +HORROR_HARD = Button(area={'cn': (659, 343, 687, 382), 'en': (659, 343, 687, 382), 'jp': (659, 344, 688, 382), 'tw': (659, 343, 687, 382)}, color={'cn': (73, 74, 94), 'en': (73, 74, 94), 'jp': (80, 82, 100), 'tw': (73, 74, 94)}, button={'cn': (659, 343, 687, 382), 'en': (659, 343, 687, 382), 'jp': (659, 344, 688, 382), 'tw': (659, 343, 687, 382)}, file={'cn': './assets/cn/coalition/HORROR_HARD.png', 'en': './assets/cn/coalition/HORROR_HARD.png', 'jp': './assets/jp/coalition/HORROR_HARD.png', 'tw': './assets/cn/coalition/HORROR_HARD.png'}) +HORROR_MODE_BATTLE = Button(area={'cn': (76, 625, 115, 664), 'en': (45, 637, 107, 662), 'jp': (76, 625, 114, 663), 'tw': (76, 625, 115, 664)}, color={'cn': (146, 140, 156), 'en': (154, 162, 171), 'jp': (143, 138, 168), 'tw': (146, 140, 156)}, button={'cn': (76, 625, 115, 664), 'en': (45, 637, 107, 662), 'jp': (76, 625, 114, 663), 'tw': (76, 625, 115, 664)}, file={'cn': './assets/cn/coalition/HORROR_MODE_BATTLE.png', 'en': './assets/en/coalition/HORROR_MODE_BATTLE.png', 'jp': './assets/jp/coalition/HORROR_MODE_BATTLE.png', 'tw': './assets/cn/coalition/HORROR_MODE_BATTLE.png'}) +HORROR_MODE_STORY = Button(area={'cn': (292, 626, 329, 665), 'en': (262, 631, 301, 662), 'jp': (291, 626, 329, 663), 'tw': (292, 626, 329, 665)}, color={'cn': (165, 155, 167), 'en': (160, 128, 173), 'jp': (150, 137, 166), 'tw': (165, 155, 167)}, button={'cn': (292, 626, 329, 665), 'en': (262, 631, 301, 662), 'jp': (291, 626, 329, 663), 'tw': (292, 626, 329, 665)}, file={'cn': './assets/cn/coalition/HORROR_MODE_STORY.png', 'en': './assets/en/coalition/HORROR_MODE_STORY.png', 'jp': './assets/jp/coalition/HORROR_MODE_STORY.png', 'tw': './assets/cn/coalition/HORROR_MODE_STORY.png'}) +HORROR_NORMAL = Button(area={'cn': (765, 127, 793, 166), 'en': (765, 127, 793, 166), 'jp': (765, 127, 793, 166), 'tw': (765, 127, 793, 166)}, color={'cn': (75, 75, 92), 'en': (75, 75, 92), 'jp': (75, 75, 92), 'tw': (75, 75, 92)}, button={'cn': (765, 127, 793, 166), 'en': (765, 127, 793, 166), 'jp': (765, 127, 793, 166), 'tw': (765, 127, 793, 166)}, file={'cn': './assets/cn/coalition/HORROR_NORMAL.png', 'en': './assets/cn/coalition/HORROR_NORMAL.png', 'jp': './assets/cn/coalition/HORROR_NORMAL.png', 'tw': './assets/cn/coalition/HORROR_NORMAL.png'}) +HORROR_PT_OCR = Button(area={'cn': (1196, 339, 1276, 357), 'en': (1205, 342, 1275, 360), 'jp': (1196, 339, 1276, 357), 'tw': (1196, 339, 1276, 357)}, color={'cn': (62, 52, 54), 'en': (78, 69, 72), 'jp': (62, 52, 54), 'tw': (62, 52, 54)}, button={'cn': (1196, 339, 1276, 357), 'en': (1205, 342, 1275, 360), 'jp': (1196, 339, 1276, 357), 'tw': (1196, 339, 1276, 357)}, file={'cn': './assets/cn/coalition/HORROR_PT_OCR.png', 'en': './assets/en/coalition/HORROR_PT_OCR.png', 'jp': './assets/cn/coalition/HORROR_PT_OCR.png', 'tw': './assets/cn/coalition/HORROR_PT_OCR.png'}) +HORROR_SP = Button(area={'cn': (430, 130, 458, 168), 'en': (430, 130, 458, 168), 'jp': (430, 130, 458, 168), 'tw': (430, 130, 458, 168)}, color={'cn': (161, 110, 112), 'en': (161, 110, 112), 'jp': (161, 110, 112), 'tw': (161, 110, 112)}, button={'cn': (430, 130, 458, 168), 'en': (430, 130, 458, 168), 'jp': (430, 130, 458, 168), 'tw': (430, 130, 458, 168)}, file={'cn': './assets/cn/coalition/HORROR_SP.png', 'en': './assets/cn/coalition/HORROR_SP.png', 'jp': './assets/cn/coalition/HORROR_SP.png', 'tw': './assets/cn/coalition/HORROR_SP.png'}) +HORROR_SWITCH_MULTI = Button(area={'cn': (1078, 458, 1208, 487), 'en': (1078, 458, 1208, 487), 'jp': (1078, 458, 1208, 487), 'tw': (1078, 458, 1208, 487)}, color={'cn': (229, 173, 59), 'en': (195, 147, 51), 'jp': (222, 168, 57), 'tw': (229, 173, 59)}, button={'cn': (1078, 458, 1208, 487), 'en': (1078, 458, 1208, 487), 'jp': (1078, 458, 1208, 487), 'tw': (1078, 458, 1208, 487)}, file={'cn': './assets/cn/coalition/HORROR_SWITCH_MULTI.png', 'en': './assets/en/coalition/HORROR_SWITCH_MULTI.png', 'jp': './assets/jp/coalition/HORROR_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/HORROR_SWITCH_MULTI.png'}) +HORROR_SWITCH_SINGLE = Button(area={'cn': (939, 458, 1070, 487), 'en': (939, 458, 1070, 487), 'jp': (939, 458, 1069, 487), 'tw': (939, 458, 1070, 487)}, color={'cn': (227, 171, 59), 'en': (197, 149, 51), 'jp': (222, 168, 57), 'tw': (227, 171, 59)}, button={'cn': (939, 458, 1070, 487), 'en': (939, 458, 1070, 487), 'jp': (939, 458, 1069, 487), 'tw': (939, 458, 1070, 487)}, file={'cn': './assets/cn/coalition/HORROR_SWITCH_SINGLE.png', 'en': './assets/en/coalition/HORROR_SWITCH_SINGLE.png', 'jp': './assets/jp/coalition/HORROR_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/HORROR_SWITCH_SINGLE.png'}) NEONCITY_COALITION_CHECK = Button(area={'cn': (230, 36, 276, 82), 'en': (179, 30, 276, 68), 'jp': (122, 30, 250, 86), 'tw': (230, 36, 276, 82)}, color={'cn': (136, 139, 142), 'en': (95, 98, 101), 'jp': (71, 86, 101), 'tw': (136, 139, 142)}, button={'cn': (230, 36, 276, 82), 'en': (179, 30, 276, 68), 'jp': (122, 30, 250, 86), 'tw': (230, 36, 276, 82)}, file={'cn': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png', 'en': './assets/en/coalition/NEONCITY_COALITION_CHECK.png', 'jp': './assets/jp/coalition/NEONCITY_COALITION_CHECK.png', 'tw': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png'}) NEONCITY_EASY = Button(area={'cn': (255, 252, 308, 270), 'en': (306, 208, 349, 229), 'jp': (245, 250, 320, 273), 'tw': (304, 207, 350, 228)}, color={'cn': (131, 132, 135), 'en': (115, 124, 154), 'jp': (130, 130, 134), 'tw': (118, 128, 158)}, button={'cn': (255, 252, 308, 270), 'en': (306, 208, 349, 229), 'jp': (245, 250, 320, 273), 'tw': (304, 207, 350, 228)}, file={'cn': './assets/cn/coalition/NEONCITY_EASY.png', 'en': './assets/en/coalition/NEONCITY_EASY.png', 'jp': './assets/jp/coalition/NEONCITY_EASY.png', 'tw': './assets/tw/coalition/NEONCITY_EASY.png'}) NEONCITY_EX = Button(area={'cn': (655, 353, 708, 370), 'en': (714, 308, 741, 328), 'jp': (643, 350, 720, 373), 'tw': (709, 308, 746, 328)}, color={'cn': (151, 150, 151), 'en': (162, 100, 99), 'jp': (137, 136, 137), 'tw': (157, 92, 93)}, button={'cn': (655, 353, 708, 370), 'en': (714, 308, 741, 328), 'jp': (643, 350, 720, 373), 'tw': (709, 308, 746, 328)}, file={'cn': './assets/cn/coalition/NEONCITY_EX.png', 'en': './assets/en/coalition/NEONCITY_EX.png', 'jp': './assets/jp/coalition/NEONCITY_EX.png', 'tw': './assets/tw/coalition/NEONCITY_EX.png'}) diff --git a/module/coalition/coalition.py b/module/coalition/coalition.py index bee8a7568..6d11b1742 100644 --- a/module/coalition/coalition.py +++ b/module/coalition/coalition.py @@ -63,6 +63,8 @@ class Coalition(CoalitionCombat, CampaignEvent): ocr = DALPtOcr(DAL_PT_OCR, name='OCR_PT', letter=(255, 213, 69), threshold=128) elif event == 'coalition_20260122': ocr = Digit(FASHION_PT_OCR, name='OCR_PT', letter=(41, 40, 40), threshold=128) + elif event == 'coalition_20260723': + ocr = Digit(HORROR_PT_OCR, name='OCR_PT', lang='cnocr', letter=(228, 230, 237), threshold=256) else: logger.error(f'ocr object is not defined in event {event}') raise ScriptError @@ -105,6 +107,8 @@ class Coalition(CoalitionCombat, CampaignEvent): """ if self.config.Campaign_Event == 'coalition_20260122': return False + if self.config.Campaign_Event == 'coalition_20260723': + return False return True def triggered_stop_condition(self, oil_check=False, pt_check=False): @@ -247,5 +251,6 @@ class Coalition(CoalitionCombat, CampaignEvent): if __name__ == '__main__': self = Coalition('alas5', task='Coalition') - self.device.screenshot() + self.image_file = r'' + # self.device.screenshot() self.get_event_pt() diff --git a/module/coalition/combat.py b/module/coalition/combat.py index feab3c93b..ee446a55f 100644 --- a/module/coalition/combat.py +++ b/module/coalition/combat.py @@ -19,7 +19,7 @@ class CoalitionCombat(CoalitionUI, CampaignBase): logger.info('Coalition combat re-enter') status_clicked = False click_timer = Timer(0.3) - click_last = Timer(2) + click_last = Timer(1, count=3) while 1: if skip_first_screenshot: skip_first_screenshot = False diff --git a/module/coalition/ui.py b/module/coalition/ui.py index a439c6644..42ecfa1b5 100644 --- a/module/coalition/ui.py +++ b/module/coalition/ui.py @@ -19,6 +19,13 @@ class NeoncitySwitch(Switch): return 'unknown' +class HorrorSwitch(Switch): + def handle_additional(self, main): + if main.handle_story_skip(): + return True + return super().handle_additional(main) + + class CoalitionUI(Combat): def in_coalition(self): # The same as raid @@ -61,6 +68,11 @@ class CoalitionUI(Combat): mode_switch = Switch('CoalitionMode', offset=(20, 20)) mode_switch.add_state('story', FASHION_MODE_STORY) mode_switch.add_state('battle', FASHION_MODE_BATTLE) + elif event == 'coalition_20260723': + # HORROR mode has appear animation so enlarge search area + mode_switch = HorrorSwitch('CoalitionMode', offset=(50, 20)) + mode_switch.add_state('story', HORROR_MODE_STORY) + mode_switch.add_state('battle', HORROR_MODE_BATTLE) else: logger.error(f'MODE_SWITCH is not defined in event {event}') raise ScriptError @@ -100,6 +112,9 @@ class CoalitionUI(Combat): elif event == 'coalition_20260122': fleet_switch.add_state('single', FASHION_SWITCH_SINGLE) fleet_switch.add_state('multi', FASHION_SWITCH_MULTI) + elif event == 'coalition_20260723': + fleet_switch.add_state('single', HORROR_SWITCH_SINGLE) + fleet_switch.add_state('multi', HORROR_SWITCH_MULTI) else: logger.error(f'FLEET_SWITCH is not defined in event {event}') raise ScriptError @@ -164,6 +179,12 @@ class CoalitionUI(Combat): ('coalition_20260122', 'hard'): FASHION_HARD, ('coalition_20260122', 'sp'): FASHION_SP, ('coalition_20260122', 'ex'): FASHION_EX, + # HORROR + ('coalition_20260723', 'easy'): HORROR_EASY, + ('coalition_20260723', 'normal'): HORROR_NORMAL, + ('coalition_20260723', 'hard'): HORROR_HARD, + ('coalition_20260723', 'sp'): HORROR_SP, + ('coalition_20260723', 'ex'): HORROR_EX, } stage = stage.lower() try: @@ -252,6 +273,12 @@ class CoalitionUI(Combat): ('coalition_20260122', 'hard'): 3, ('coalition_20260122', 'sp'): 4, ('coalition_20260122', 'ex'): 5, + # HORROR + ('coalition_20260723', 'easy'): 1, + ('coalition_20260723', 'normal'): 2, + ('coalition_20260723', 'hard'): 3, + ('coalition_20260723', 'sp'): 4, + ('coalition_20260723', 'ex'): 5, } stage = stage.lower() try: @@ -280,6 +307,8 @@ class CoalitionUI(Combat): elif event == 'coalition_20260122': # FASHION reuses NEONCITY, just (-12, -12) shifted return NEONCITY_FLEET_PREPARATION + elif event == 'coalition_20260723': + return HORROR_FLEET_PREPARATION else: logger.error(f'FLEET_PREPARATION is not defined in event {event}') raise ScriptError @@ -304,6 +333,7 @@ class CoalitionUI(Combat): 'coalition_20240627', 'coalition_20250626', 'coalition_20260122', + 'coalition_20260723', ]: # easy is single fleet, SP and EX must must multiple fleets if stage in ['easy', 'sp', 'ex']: @@ -346,9 +376,10 @@ class CoalitionUI(Combat): logger.info(f'{fleet_preparation} -> {NEONCITY_PREPARATION_EXIT}') self.device.click(NEONCITY_PREPARATION_EXIT) continue - if self.appear_then_click(DAL_DIFFICULTY_EXIT, offset=(20, 20), interval=3): - logger.info(f'{DAL_DIFFICULTY_EXIT} -> {DAL_DIFFICULTY_EXIT}') - continue + if event == 'coalition_20251120': + if self.appear_then_click(DAL_DIFFICULTY_EXIT, offset=(20, 20), interval=3): + logger.info(f'{DAL_DIFFICULTY_EXIT} -> {DAL_DIFFICULTY_EXIT}') + continue def enter_map(self, event, stage, mode): """ diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 787885faf..d6580a93b 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -2445,6 +2445,269 @@ } } }, + "Coalition": { + "Scheduler": { + "Enable": { + "type": "checkbox", + "value": false, + "option": [ + true, + false + ] + }, + "NextRun": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + }, + "Command": { + "type": "input", + "value": "Coalition", + "display": "hide" + }, + "SuccessInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "FailureInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "00:00", + "display": "hide" + } + }, + "Campaign": { + "Name": { + "type": "input", + "value": "dynamic", + "display": "hide" + }, + "Event": { + "type": "state", + "value": "campaign_main", + "option": [ + "coalition_20230323", + "coalition_20260723" + ], + "option_cn": [ + "coalition_20260723" + ], + "option_en": [ + "coalition_20260723" + ], + "option_jp": [ + "coalition_20260723" + ], + "option_tw": [ + "coalition_20230323" + ], + "option_bold": [ + "coalition_20230323", + "coalition_20260723" + ] + }, + "Mode": { + "type": "select", + "value": "normal", + "option": [ + "normal", + "hard" + ], + "display": "hide" + }, + "UseClearMode": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "UseFleetLock": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "UseAutoSearch": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "Use2xBook": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "AmbushEvade": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "ClearAfterSinking": { + "type": "checkbox", + "value": false, + "display": "hide" + } + }, + "Coalition": { + "Mode": { + "type": "select", + "value": "hard", + "option": [ + "easy", + "normal", + "hard", + "sp" + ] + }, + "Fleet": { + "type": "select", + "value": "single", + "option": [ + "single", + "multi" + ] + } + }, + "StopCondition": { + "OilLimit": { + "type": "input", + "value": 1000 + }, + "RunCount": { + "type": "input", + "value": 0 + }, + "MapAchievement": { + "type": "select", + "value": "non_stop", + "option": [ + "non_stop", + "non_stop_clear_all", + "100_percent_clear", + "map_3_stars", + "threat_safe", + "threat_safe_without_3_stars" + ], + "display": "hide" + }, + "StageIncrease": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "GetNewShip": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "ReachLevel": { + "type": "input", + "value": 0, + "display": "hide" + } + }, + "Emotion": { + "Mode": { + "type": "select", + "value": "calculate", + "option": [ + "calculate", + "ignore", + "calculate_ignore" + ] + }, + "Fleet1Value": { + "type": "input", + "value": 119 + }, + "Fleet1Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime", + "display": "disabled" + }, + "Fleet1Control": { + "type": "select", + "value": "prevent_green_face", + "option": [ + "keep_exp_bonus", + "prevent_green_face", + "prevent_yellow_face", + "prevent_red_face" + ] + }, + "Fleet1Recover": { + "type": "select", + "value": "not_in_dormitory", + "option": [ + "not_in_dormitory", + "dormitory_floor_1", + "dormitory_floor_2" + ] + }, + "Fleet1Oath": { + "type": "checkbox", + "value": false + }, + "Fleet1Onsen": { + "type": "checkbox", + "value": false + }, + "Fleet2Value": { + "type": "input", + "value": 119, + "display": "hide" + }, + "Fleet2Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime", + "display": "hide" + }, + "Fleet2Control": { + "type": "select", + "value": "prevent_yellow_face", + "option": [ + "keep_exp_bonus", + "prevent_green_face", + "prevent_yellow_face", + "prevent_red_face" + ], + "display": "hide" + }, + "Fleet2Recover": { + "type": "select", + "value": "not_in_dormitory", + "option": [ + "not_in_dormitory", + "dormitory_floor_1", + "dormitory_floor_2" + ], + "display": "hide" + }, + "Fleet2Oath": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "Fleet2Onsen": { + "type": "checkbox", + "value": false, + "display": "hide" + } + }, + "Storage": { + "Storage": { + "type": "storage", + "value": {}, + "valuetype": "ignore", + "display": "disabled" + } + } + }, "Event": { "Scheduler": { "Enable": { @@ -3738,269 +4001,6 @@ } } }, - "Coalition": { - "Scheduler": { - "Enable": { - "type": "checkbox", - "value": false, - "option": [ - true, - false - ] - }, - "NextRun": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime" - }, - "Command": { - "type": "input", - "value": "Coalition", - "display": "hide" - }, - "SuccessInterval": { - "type": "input", - "value": 30, - "display": "hide" - }, - "FailureInterval": { - "type": "input", - "value": 30, - "display": "hide" - }, - "ServerUpdate": { - "type": "input", - "value": "00:00", - "display": "hide" - } - }, - "Campaign": { - "Name": { - "type": "input", - "value": "dynamic", - "display": "hide" - }, - "Event": { - "type": "state", - "value": "campaign_main", - "option": [ - "coalition_20230323", - "coalition_20260122" - ], - "option_cn": [ - "coalition_20260122" - ], - "option_en": [ - "coalition_20260122" - ], - "option_jp": [ - "coalition_20260122" - ], - "option_tw": [ - "coalition_20230323" - ], - "option_bold": [ - "coalition_20230323", - "coalition_20260122" - ] - }, - "Mode": { - "type": "select", - "value": "normal", - "option": [ - "normal", - "hard" - ], - "display": "hide" - }, - "UseClearMode": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "UseFleetLock": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "UseAutoSearch": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "Use2xBook": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "AmbushEvade": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "ClearAfterSinking": { - "type": "checkbox", - "value": false, - "display": "hide" - } - }, - "Coalition": { - "Mode": { - "type": "select", - "value": "tc3", - "option": [ - "tc1", - "tc2", - "tc3", - "ex" - ] - }, - "Fleet": { - "type": "select", - "value": "single", - "option": [ - "single", - "multi" - ] - } - }, - "StopCondition": { - "OilLimit": { - "type": "input", - "value": 1000 - }, - "RunCount": { - "type": "input", - "value": 0 - }, - "MapAchievement": { - "type": "select", - "value": "non_stop", - "option": [ - "non_stop", - "non_stop_clear_all", - "100_percent_clear", - "map_3_stars", - "threat_safe", - "threat_safe_without_3_stars" - ], - "display": "hide" - }, - "StageIncrease": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "GetNewShip": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "ReachLevel": { - "type": "input", - "value": 0, - "display": "hide" - } - }, - "Emotion": { - "Mode": { - "type": "select", - "value": "calculate", - "option": [ - "calculate", - "ignore", - "calculate_ignore" - ] - }, - "Fleet1Value": { - "type": "input", - "value": 119 - }, - "Fleet1Record": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime", - "display": "disabled" - }, - "Fleet1Control": { - "type": "select", - "value": "prevent_green_face", - "option": [ - "keep_exp_bonus", - "prevent_green_face", - "prevent_yellow_face", - "prevent_red_face" - ] - }, - "Fleet1Recover": { - "type": "select", - "value": "not_in_dormitory", - "option": [ - "not_in_dormitory", - "dormitory_floor_1", - "dormitory_floor_2" - ] - }, - "Fleet1Oath": { - "type": "checkbox", - "value": false - }, - "Fleet1Onsen": { - "type": "checkbox", - "value": false - }, - "Fleet2Value": { - "type": "input", - "value": 119, - "display": "hide" - }, - "Fleet2Record": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime", - "display": "hide" - }, - "Fleet2Control": { - "type": "select", - "value": "prevent_yellow_face", - "option": [ - "keep_exp_bonus", - "prevent_green_face", - "prevent_yellow_face", - "prevent_red_face" - ], - "display": "hide" - }, - "Fleet2Recover": { - "type": "select", - "value": "not_in_dormitory", - "option": [ - "not_in_dormitory", - "dormitory_floor_1", - "dormitory_floor_2" - ], - "display": "hide" - }, - "Fleet2Oath": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "Fleet2Onsen": { - "type": "checkbox", - "value": false, - "display": "hide" - } - }, - "Storage": { - "Storage": { - "type": "storage", - "value": {}, - "valuetype": "ignore", - "display": "disabled" - } - } - }, "MaritimeEscort": { "Scheduler": { "Enable": { @@ -4716,6 +4716,270 @@ } } }, + "CoalitionSp": { + "Scheduler": { + "Enable": { + "type": "checkbox", + "value": false, + "option": [ + true, + false + ] + }, + "NextRun": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + }, + "Command": { + "type": "input", + "value": "CoalitionSp", + "display": "hide" + }, + "SuccessInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "FailureInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "00:00", + "display": "hide" + } + }, + "Campaign": { + "Name": { + "type": "input", + "value": "sp", + "display": "hide" + }, + "Event": { + "type": "select", + "value": "campaign_main", + "option": [ + "coalition_20230323", + "coalition_20260723" + ], + "option_cn": [ + "coalition_20260723" + ], + "option_en": [ + "coalition_20260723" + ], + "option_jp": [ + "coalition_20260723" + ], + "option_tw": [ + "coalition_20230323" + ], + "option_bold": [ + "coalition_20230323", + "coalition_20260723" + ] + }, + "Mode": { + "type": "select", + "value": "normal", + "option": [ + "normal", + "hard" + ], + "display": "hide" + }, + "UseClearMode": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "UseFleetLock": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "UseAutoSearch": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "Use2xBook": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "AmbushEvade": { + "type": "checkbox", + "value": true, + "display": "hide" + }, + "ClearAfterSinking": { + "type": "checkbox", + "value": false, + "display": "hide" + } + }, + "Coalition": { + "Mode": { + "type": "select", + "value": "sp", + "option": [ + "easy", + "normal", + "hard", + "sp" + ], + "display": "hide" + }, + "Fleet": { + "type": "select", + "value": "single", + "option": [ + "single", + "multi" + ] + } + }, + "StopCondition": { + "OilLimit": { + "type": "input", + "value": 1000 + }, + "RunCount": { + "type": "input", + "value": 0 + }, + "MapAchievement": { + "type": "select", + "value": "non_stop", + "option": [ + "non_stop", + "non_stop_clear_all", + "100_percent_clear", + "map_3_stars", + "threat_safe", + "threat_safe_without_3_stars" + ], + "display": "hide" + }, + "StageIncrease": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "GetNewShip": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "ReachLevel": { + "type": "input", + "value": 0, + "display": "hide" + } + }, + "Emotion": { + "Mode": { + "type": "select", + "value": "calculate", + "option": [ + "calculate", + "ignore", + "calculate_ignore" + ] + }, + "Fleet1Value": { + "type": "input", + "value": 119 + }, + "Fleet1Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime", + "display": "disabled" + }, + "Fleet1Control": { + "type": "select", + "value": "prevent_green_face", + "option": [ + "keep_exp_bonus", + "prevent_green_face", + "prevent_yellow_face", + "prevent_red_face" + ] + }, + "Fleet1Recover": { + "type": "select", + "value": "not_in_dormitory", + "option": [ + "not_in_dormitory", + "dormitory_floor_1", + "dormitory_floor_2" + ] + }, + "Fleet1Oath": { + "type": "checkbox", + "value": false + }, + "Fleet1Onsen": { + "type": "checkbox", + "value": false + }, + "Fleet2Value": { + "type": "input", + "value": 119, + "display": "hide" + }, + "Fleet2Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime", + "display": "hide" + }, + "Fleet2Control": { + "type": "select", + "value": "prevent_yellow_face", + "option": [ + "keep_exp_bonus", + "prevent_green_face", + "prevent_yellow_face", + "prevent_red_face" + ], + "display": "hide" + }, + "Fleet2Recover": { + "type": "select", + "value": "not_in_dormitory", + "option": [ + "not_in_dormitory", + "dormitory_floor_1", + "dormitory_floor_2" + ], + "display": "hide" + }, + "Fleet2Oath": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "Fleet2Onsen": { + "type": "checkbox", + "value": false, + "display": "hide" + } + }, + "Storage": { + "Storage": { + "type": "storage", + "value": {}, + "valuetype": "ignore", + "display": "disabled" + } + } + }, "EventA": { "Scheduler": { "Enable": { @@ -7175,271 +7439,6 @@ } } }, - "CoalitionSp": { - "Scheduler": { - "Enable": { - "type": "checkbox", - "value": false, - "option": [ - true, - false - ] - }, - "NextRun": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime" - }, - "Command": { - "type": "input", - "value": "CoalitionSp", - "display": "hide" - }, - "SuccessInterval": { - "type": "input", - "value": 30, - "display": "hide" - }, - "FailureInterval": { - "type": "input", - "value": 30, - "display": "hide" - }, - "ServerUpdate": { - "type": "input", - "value": "00:00", - "display": "hide" - } - }, - "Campaign": { - "Name": { - "type": "input", - "value": "sp", - "display": "hide" - }, - "Event": { - "type": "select", - "value": "campaign_main", - "option": [ - "coalition_20230323", - "coalition_20260122" - ], - "option_cn": [ - "coalition_20260122" - ], - "option_en": [ - "coalition_20260122" - ], - "option_jp": [ - "coalition_20260122" - ], - "option_tw": [ - "coalition_20230323" - ], - "option_bold": [ - "coalition_20230323", - "coalition_20260122" - ] - }, - "Mode": { - "type": "select", - "value": "normal", - "option": [ - "normal", - "hard" - ], - "display": "hide" - }, - "UseClearMode": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "UseFleetLock": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "UseAutoSearch": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "Use2xBook": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "AmbushEvade": { - "type": "checkbox", - "value": true, - "display": "hide" - }, - "ClearAfterSinking": { - "type": "checkbox", - "value": false, - "display": "hide" - } - }, - "Coalition": { - "Mode": { - "type": "select", - "value": "sp", - "option": [ - "tc1", - "tc2", - "tc3", - "sp", - "ex" - ], - "display": "hide" - }, - "Fleet": { - "type": "select", - "value": "single", - "option": [ - "single", - "multi" - ] - } - }, - "StopCondition": { - "OilLimit": { - "type": "input", - "value": 1000 - }, - "RunCount": { - "type": "input", - "value": 0 - }, - "MapAchievement": { - "type": "select", - "value": "non_stop", - "option": [ - "non_stop", - "non_stop_clear_all", - "100_percent_clear", - "map_3_stars", - "threat_safe", - "threat_safe_without_3_stars" - ], - "display": "hide" - }, - "StageIncrease": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "GetNewShip": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "ReachLevel": { - "type": "input", - "value": 0, - "display": "hide" - } - }, - "Emotion": { - "Mode": { - "type": "select", - "value": "calculate", - "option": [ - "calculate", - "ignore", - "calculate_ignore" - ] - }, - "Fleet1Value": { - "type": "input", - "value": 119 - }, - "Fleet1Record": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime", - "display": "disabled" - }, - "Fleet1Control": { - "type": "select", - "value": "prevent_green_face", - "option": [ - "keep_exp_bonus", - "prevent_green_face", - "prevent_yellow_face", - "prevent_red_face" - ] - }, - "Fleet1Recover": { - "type": "select", - "value": "not_in_dormitory", - "option": [ - "not_in_dormitory", - "dormitory_floor_1", - "dormitory_floor_2" - ] - }, - "Fleet1Oath": { - "type": "checkbox", - "value": false - }, - "Fleet1Onsen": { - "type": "checkbox", - "value": false - }, - "Fleet2Value": { - "type": "input", - "value": 119, - "display": "hide" - }, - "Fleet2Record": { - "type": "datetime", - "value": "2020-01-01 00:00:00", - "validate": "datetime", - "display": "hide" - }, - "Fleet2Control": { - "type": "select", - "value": "prevent_yellow_face", - "option": [ - "keep_exp_bonus", - "prevent_green_face", - "prevent_yellow_face", - "prevent_red_face" - ], - "display": "hide" - }, - "Fleet2Recover": { - "type": "select", - "value": "not_in_dormitory", - "option": [ - "not_in_dormitory", - "dormitory_floor_1", - "dormitory_floor_2" - ], - "display": "hide" - }, - "Fleet2Oath": { - "type": "checkbox", - "value": false, - "display": "hide" - }, - "Fleet2Onsen": { - "type": "checkbox", - "value": false, - "display": "hide" - } - }, - "Storage": { - "Storage": { - "type": "storage", - "value": {}, - "valuetype": "ignore", - "display": "disabled" - } - } - }, "Commission": { "Scheduler": { "Enable": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 7cc13060c..97c1d877d 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -364,8 +364,8 @@ MaritimeEscort: Enable: true Coalition: Mode: - value: tc3 - option: [ tc1, tc2, tc3, sp, ex ] + value: hard + option: [ easy, normal, hard, sp ] Fleet: value: single option: [ single, multi ] diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index 30d9f8919..74a1b8120 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -24,11 +24,11 @@ "page": "setting", "tasks": [ "EventGeneral", + "Coalition", "Event", "Event2", "Raid", "Hospital", - "Coalition", "MaritimeEscort", "WarArchives" ] @@ -37,13 +37,13 @@ "menu": "collapse", "page": "setting", "tasks": [ + "CoalitionSp", "EventA", "EventB", "EventC", "EventD", "EventSp", - "RaidDaily", - "CoalitionSp" + "RaidDaily" ] }, "Reward": { diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index e88d9d3dc..291ba5e40 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -237,7 +237,7 @@ Coalition: ClearAfterSinking: false Coalition: Mode: - option: [ tc1, tc2, tc3, ex ] + option: [ easy, normal, hard, sp ] StopCondition: MapAchievement: non_stop StageIncrease: false diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index 43324d95c..8d09fe15a 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -76,6 +76,12 @@ Event: EventGeneral: - EventGeneral - TaskBalancer + Coalition: + - Scheduler + - Campaign + - Coalition + - StopCondition + - Emotion Event: - Scheduler - Campaign @@ -105,12 +111,6 @@ Event: - Hospital - StopCondition - Emotion - Coalition: - - Scheduler - - Campaign - - Coalition - - StopCondition - - Emotion MaritimeEscort: - Scheduler - MaritimeEscort @@ -132,6 +132,12 @@ EventDaily: menu: 'collapse' page: 'setting' tasks: + CoalitionSp: + - Scheduler + - Campaign + - Coalition + - StopCondition + - Emotion EventA: - Scheduler - EventDaily @@ -187,12 +193,6 @@ EventDaily: - Campaign - StopCondition - Emotion - CoalitionSp: - - Scheduler - - Campaign - - Coalition - - StopCondition - - Emotion # ==================== Reward ==================== diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 89f9cd361..3426a1774 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -214,7 +214,7 @@ class GeneratedConfig: MaritimeEscort_Enable = True # Group `Coalition` - Coalition_Mode = 'tc3' # tc1, tc2, tc3, sp, ex + Coalition_Mode = 'hard' # easy, normal, hard, sp Coalition_Fleet = 'single' # single, multi # Group `Commission` diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 2042ba33b..49f9a02c7 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -70,6 +70,10 @@ "name": "Event General", "help": "" }, + "Coalition": { + "name": "Authentic Horror Story", + "help": "" + }, "Event": { "name": "Event", "help": "" @@ -86,10 +90,6 @@ "name": "Valley Hospital Story", "help": "" }, - "Coalition": { - "name": "Frostfall", - "help": "" - }, "MaritimeEscort": { "name": "Maritime Escort", "help": "" @@ -98,6 +98,10 @@ "name": "War Archives", "help": "Due to the lack of maintenance of war archives, continuous clear may not work normally, if Alas runs abnormally, Please manually finish clearing and use auto search" }, + "CoalitionSp": { + "name": "Authentic Horror Story SP", + "help": "" + }, "EventA": { "name": "Event Daily A", "help": "" @@ -122,10 +126,6 @@ "name": "Raid Daily", "help": "" }, - "CoalitionSp": { - "name": "Frostfall SP", - "help": "" - }, "Commission": { "name": "Commission", "help": "" @@ -769,6 +769,7 @@ "coalition_20250626": "The Neon City Investigator", "coalition_20251120": "DATE A LANE", "coalition_20260122": "Light & Shadow Fashion Shoot!", + "coalition_20260723": "Authentic Horror Story", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "The Solomon Ranger Rerun", "event_20200326_cn": "Microlayer Medley", @@ -1508,11 +1509,10 @@ "Mode": { "name": "Mode", "help": "SP needs to use event daily SP to run", - "tc1": "tc1", - "tc2": "tc2", - "tc3": "tc3", - "sp": "sp", - "ex": "ex" + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "sp": "SP" }, "Fleet": { "name": "Fleet", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 05dccca1f..f805ad71a 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -70,6 +70,10 @@ "name": "イベント共通設定", "help": "" }, + "Coalition": { + "name": "怪談実録", + "help": "" + }, "Event": { "name": "イベント海域", "help": "" @@ -86,10 +90,6 @@ "name": "病院探訪ストーリー", "help": "" }, - "Coalition": { - "name": "星霜海嵐", - "help": "" - }, "MaritimeEscort": { "name": "Maritime Escort", "help": "" @@ -98,6 +98,10 @@ "name": "作戦履歴", "help": "" }, + "CoalitionSp": { + "name": "怪談実録SP", + "help": "" + }, "EventA": { "name": "毎日イベント海域A", "help": "" @@ -122,10 +126,6 @@ "name": "Raid Daily", "help": "" }, - "CoalitionSp": { - "name": "星霜海嵐SP", - "help": "" - }, "Commission": { "name": "委託", "help": "" @@ -769,6 +769,7 @@ "coalition_20250626": "ネオンシティの探索者", "coalition_20251120": "DATE A LANE", "coalition_20260122": "特集写真-撮影進行中", + "coalition_20260723": "怪談実録", "event_20200227_cn": "凍絶の北海", "event_20200312_cn": "南洋に靡く硝煙(復刻)", "event_20200326_cn": "闇靄払う銀翼", @@ -1508,11 +1509,10 @@ "Mode": { "name": "Coalition.Mode.name", "help": "Coalition.Mode.help", - "tc1": "tc1", - "tc2": "tc2", - "tc3": "tc3", - "sp": "sp", - "ex": "ex" + "easy": "easy", + "normal": "normal", + "hard": "hard", + "sp": "sp" }, "Fleet": { "name": "Coalition.Fleet.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index c068a9837..a18f524d1 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -70,6 +70,10 @@ "name": "活动通用设置", "help": "" }, + "Coalition": { + "name": "怪谈纪实", + "help": "" + }, "Event": { "name": "活动图", "help": "" @@ -86,10 +90,6 @@ "name": "深谷来信", "help": "" }, - "Coalition": { - "name": "极地风暴", - "help": "" - }, "MaritimeEscort": { "name": "商船护航", "help": "" @@ -98,6 +98,10 @@ "name": "作战档案", "help": "由于作战档案缺少维护,开荒功能不一定能正常使用,如果发现Alas运行异常,请手动完成开荒后使用自律寻敌功能" }, + "CoalitionSp": { + "name": "怪谈纪实每日SP", + "help": "" + }, "EventA": { "name": "活动每日A图", "help": "" @@ -122,10 +126,6 @@ "name": "共斗活动每日", "help": "" }, - "CoalitionSp": { - "name": "极地风暴每日SP", - "help": "" - }, "Commission": { "name": "委托", "help": "" @@ -769,6 +769,7 @@ "coalition_20250626": "迷彩都市的寻踪者", "coalition_20251120": "DATE A LANE", "coalition_20260122": "光影风尚-拍摄进行时", + "coalition_20260723": "怪谈纪实", "event_20200227_cn": "北境序曲", "event_20200312_cn": "复刻斯图尔特的硝烟", "event_20200326_cn": "微层混合", @@ -1508,11 +1509,10 @@ "Mode": { "name": "难度", "help": "SP图需要使用活动每日SP运行", - "tc1": "tc1", - "tc2": "tc2", - "tc3": "tc3", - "sp": "sp", - "ex": "ex" + "easy": "简单", + "normal": "普通", + "hard": "困难", + "sp": "SP" }, "Fleet": { "name": "出击队伍", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index fc0421a73..9ab7907df 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -70,6 +70,10 @@ "name": "活動通用", "help": "" }, + "Coalition": { + "name": "極地風暴", + "help": "" + }, "Event": { "name": "活動圖", "help": "" @@ -86,10 +90,6 @@ "name": "深谷来信", "help": "" }, - "Coalition": { - "name": "極地風暴", - "help": "" - }, "MaritimeEscort": { "name": "商船護航", "help": "" @@ -98,6 +98,10 @@ "name": "作戰檔案", "help": "由於作戰檔案缺少維護,開荒功能不一定能正常使用,如果發現Alas運行異常,請手動完成開荒後使用自律尋敵功能" }, + "CoalitionSp": { + "name": "極地風暴SP", + "help": "" + }, "EventA": { "name": "活動每日A圖", "help": "" @@ -122,10 +126,6 @@ "name": "共鬥活動每日", "help": "" }, - "CoalitionSp": { - "name": "極地風暴SP", - "help": "" - }, "Commission": { "name": "委託", "help": "" @@ -769,6 +769,7 @@ "coalition_20250626": "迷彩都市的尋蹤者", "coalition_20251120": "DATE A LANE", "coalition_20260122": "光影風尚-拍攝進行時", + "coalition_20260723": "Authentic Horror Story", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "斯圖爾特的硝煙", "event_20200326_cn": "Microlayer Medley", @@ -1508,11 +1509,10 @@ "Mode": { "name": "難度", "help": "SP圖需要使用活動每日SP運行", - "tc1": "tc1", - "tc2": "tc2", - "tc3": "tc3", - "sp": "sp", - "ex": "ex" + "easy": "簡單", + "normal": "普通", + "hard": "困難", + "sp": "SP" }, "Fleet": { "name": "出擊隊伍", diff --git a/module/device/device.py b/module/device/device.py index 59f6743a1..1aa5c3262 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -154,6 +154,12 @@ class Device(Screenshot, Control, AppControl, Input): if not (self.is_emulator and self.is_ldplayer_bluestacks_family): logger.warning('ScreenshotMethod ldopengl is available on LD Player only, fallback to auto') self.config.Emulator_ScreenshotMethod = 'auto' + # DroidCast is available on SDK 23 (Android 6.0) to SDK 32 (Android 12) + if self.config.Emulator_ScreenshotMethod in ['DroidCast', 'DroidCast_raw']: + if self.sdk_ver < 23 or self.sdk_ver > 32: + logger.warning(f'ScreenshotMethod {self.config.Emulator_ScreenshotMethod} is available on ' + f'Android 6.0 to 12 only (current sdk_ver={self.sdk_ver}), fallback to auto') + self.config.Emulator_ScreenshotMethod = 'auto' if not IS_WINDOWS and self.config.Emulator_ScreenshotMethod in ['nemu_ipc', 'ldopengl']: logger.warning(f'ScreenshotMethod {self.config.Emulator_ScreenshotMethod} is available on Windows only, ' f'fallback to auto') diff --git a/module/retire/dock.py b/module/retire/dock.py index e6094ccc4..1ec1547df 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,7 +1,6 @@ import module.config.server as server - -from module.base.button import ButtonGrid, get_color, color_similar -from module.base.decorator import Config, cached_property +from module.base.button import ButtonGrid, color_similar, get_color +from module.base.decorator import cached_property from module.base.timer import Timer from module.combat.assets import GET_ITEMS_1 from module.equipment.equipment import Equipment @@ -140,54 +139,6 @@ class Dock(Equipment): self.handle_dock_cards_loading() @cached_property - @Config.when(SERVER='tw') - def dock_filter(self) -> Setting: - delta = (147 + 1 / 3, 57) - button_shape = (139, 42) - setting = Setting(name='DOCK', main=self) - setting.add_setting( - setting='sort', - option_buttons=ButtonGrid( - origin=(218, 65), delta=delta, button_shape=button_shape, grid_shape=(7, 1), name='FILTER_SORT'), - # stat has extra grid, not worth pursuing - option_names=['rarity', 'level', 'total', 'join', 'intimacy', 'mood', 'stat'], - option_default='level' - ) - setting.add_setting( - setting='index', - option_buttons=ButtonGrid( - origin=(218, 138), delta=delta, button_shape=button_shape, grid_shape=(7, 2), name='FILTER_INDEX'), - option_names=['all', 'vanguard', 'main', 'dd', 'cl', 'ca', 'bb', - 'cv', 'repair', 'ss', 'others', 'not_available', 'not_available', 'not_available'], - option_default='all' - ) - setting.add_setting( - setting='faction', - option_buttons=ButtonGrid( - origin=(218, 268), delta=delta, button_shape=button_shape, grid_shape=(7, 2), name='FILTER_FACTION'), - option_names=['all', 'eagle', 'royal', 'sakura', 'iron', 'dragon', 'sardegna', - 'northern', 'iris', 'vichya', 'tulipa', 'meta', 'tempesta', 'other'], - option_default='all' - ) - setting.add_setting( - setting='rarity', - option_buttons=ButtonGrid( - origin=(218, 398), delta=delta, button_shape=button_shape, grid_shape=(7, 1), name='FILTER_RARITY'), - option_names=['all', 'common', 'rare', 'elite', 'super_rare', 'ultra', 'not_available'], - option_default='all' - ) - setting.add_setting( - setting='extra', - option_buttons=ButtonGrid( - origin=(218, 471), delta=delta, button_shape=button_shape, grid_shape=(7, 2), name='FILTER_EXTRA'), - option_names=['no_limit', 'has_skin', 'can_retrofit', 'enhanceable', 'can_limit_break', 'not_level_max', 'can_awaken', - 'can_awaken_plus', 'special', 'oath_skin', 'unique_augment_module', 'wear_skin', 'oathed', 'not_available'], - option_default='no_limit' - ) - return setting - - @cached_property - @Config.when(SERVER=None) def dock_filter(self) -> Setting: delta = (147 + 1 / 3, 57) button_shape = (139, 42) diff --git a/module/shop/base.py b/module/shop/base.py index 74adb9903..5d1dd96d0 100644 --- a/module/shop/base.py +++ b/module/shop/base.py @@ -19,6 +19,7 @@ FILTER_REGEX = re.compile( '|chip|coin|cube|drill|food' '|plate|retrofit|pr|dr|specializedcore' '|logger|tuning' + '|type93pureoxygentorpedo|type1armorpiercingshell|superheavyshell' '|hecombatplan|fragment|hiddenzonedatalogger' '|albacore|bataan|bearn|bluegill|carabiniere|casablanca|contedicavour|dukeofyork' '|echo|eldridge|gangut|glorious|grenville|hibiki|hunter|icarus' diff --git a/module/ui/page.py b/module/ui/page.py index 14d03bc12..b40727a66 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -136,10 +136,10 @@ page_campaign.link(button=CAMPAIGN_GOTO_EVENT, destination=page_sp) # Coalition # FROSTFALL -page_coalition = Page(FROSTFALL_COALITION_CHECK) -page_coalition.link(button=GOTO_MAIN, destination=page_main) -page_coalition.link(button=BACK_ARROW, destination=page_campaign_menu) -page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) +# page_coalition = Page(FROSTFALL_COALITION_CHECK) +# page_coalition.link(button=GOTO_MAIN, destination=page_main) +# page_coalition.link(button=BACK_ARROW, destination=page_campaign_menu) +# page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) # ACADEMY # page_coalition_menu = Page(COALITION_ACADEMY_MAIN_CHECK) # page_coalition_menu.link(button=COALITION_ACADEMY_HOME, destination=page_main) @@ -163,6 +163,11 @@ page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalit # page_coalition.link(button=GOTO_MAIN, destination=page_main) # page_coalition.link(button=BACK_ARROW, destination=page_campaign_menu) # page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) +# HORROR +page_coalition = Page(HORROR_COALITION_CHECK) +page_coalition.link(button=GOTO_MAIN, destination=page_main) +page_coalition.link(button=BACK_ARROW, destination=page_campaign_menu) +page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) # Operation Siren page_os = Page(OS_CHECK)