diff --git a/assets/cn/coalition/FASHION_COALITION_CHECK.png b/assets/cn/coalition/FASHION_COALITION_CHECK.png new file mode 100644 index 000000000..3ed0f8806 Binary files /dev/null and b/assets/cn/coalition/FASHION_COALITION_CHECK.png differ diff --git a/assets/cn/coalition/FASHION_EASY.png b/assets/cn/coalition/FASHION_EASY.png new file mode 100644 index 000000000..8c8c2f05d Binary files /dev/null and b/assets/cn/coalition/FASHION_EASY.png differ diff --git a/assets/cn/coalition/FASHION_EX.png b/assets/cn/coalition/FASHION_EX.png new file mode 100644 index 000000000..b99ce8120 Binary files /dev/null and b/assets/cn/coalition/FASHION_EX.png differ diff --git a/assets/cn/coalition/FASHION_FLEET_PREPARATION.png b/assets/cn/coalition/FASHION_FLEET_PREPARATION.png new file mode 100644 index 000000000..cfdc24d13 Binary files /dev/null and b/assets/cn/coalition/FASHION_FLEET_PREPARATION.png differ diff --git a/assets/cn/coalition/FASHION_HARD.png b/assets/cn/coalition/FASHION_HARD.png new file mode 100644 index 000000000..87392542e Binary files /dev/null and b/assets/cn/coalition/FASHION_HARD.png differ diff --git a/assets/cn/coalition/FASHION_MODE_BATTLE.png b/assets/cn/coalition/FASHION_MODE_BATTLE.png new file mode 100644 index 000000000..5e7ac8d27 Binary files /dev/null and b/assets/cn/coalition/FASHION_MODE_BATTLE.png differ diff --git a/assets/cn/coalition/FASHION_MODE_STORY.png b/assets/cn/coalition/FASHION_MODE_STORY.png new file mode 100644 index 000000000..b85c9412c Binary files /dev/null and b/assets/cn/coalition/FASHION_MODE_STORY.png differ diff --git a/assets/cn/coalition/FASHION_NORMAL.png b/assets/cn/coalition/FASHION_NORMAL.png new file mode 100644 index 000000000..426b1bac8 Binary files /dev/null and b/assets/cn/coalition/FASHION_NORMAL.png differ diff --git a/assets/cn/coalition/FASHION_PT_OCR.png b/assets/cn/coalition/FASHION_PT_OCR.png new file mode 100644 index 000000000..4d042fbcd Binary files /dev/null and b/assets/cn/coalition/FASHION_PT_OCR.png differ diff --git a/assets/cn/coalition/FASHION_SP.png b/assets/cn/coalition/FASHION_SP.png new file mode 100644 index 000000000..d5259d110 Binary files /dev/null and b/assets/cn/coalition/FASHION_SP.png differ diff --git a/assets/cn/coalition/FASHION_SWITCH_MULTI.png b/assets/cn/coalition/FASHION_SWITCH_MULTI.png new file mode 100644 index 000000000..13ee7d723 Binary files /dev/null and b/assets/cn/coalition/FASHION_SWITCH_MULTI.png differ diff --git a/assets/cn/coalition/FASHION_SWITCH_SINGLE.png b/assets/cn/coalition/FASHION_SWITCH_SINGLE.png new file mode 100644 index 000000000..00725bc08 Binary files /dev/null and b/assets/cn/coalition/FASHION_SWITCH_SINGLE.png differ diff --git a/assets/cn/coalition/FASHION_UI_BACK.png b/assets/cn/coalition/FASHION_UI_BACK.png new file mode 100644 index 000000000..b00d54443 Binary files /dev/null and b/assets/cn/coalition/FASHION_UI_BACK.png differ diff --git a/assets/cn/coalition/FASHION_UI_HOME.png b/assets/cn/coalition/FASHION_UI_HOME.png new file mode 100644 index 000000000..77feba42d Binary files /dev/null and b/assets/cn/coalition/FASHION_UI_HOME.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index f02639588..5f079d806 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -276,3 +276,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20251218 | event 20251218 cn | A Note Through the Firmament | 响彻于天穹之音 | A Note Through the Firmament | 天穹に響く音謡 | - | | 20251231 | event 20251218 cn | A Note Through the Firmament | - | - | - | 響徹於天穹之音 | | 20260115 | event 20231221 cn | Light-Chasing Sea of Stars | 复刻星海逐光 | Light-Chasing Sea of Stars Rerun | 光追う星の海(復刻) | - | +| 20260122 | coalition 20260122 | Light & Shadow Fashion Shoot! | 光影风尚——拍摄进行时! | Light & Shadow Fashion Shoot! | 特集写真――撮影進行中! | - | diff --git a/config/template.json b/config/template.json index bb39b4262..36b35a931 100644 --- a/config/template.json +++ b/config/template.json @@ -734,7 +734,7 @@ "ClearAfterSinking": false }, "Coalition": { - "Mode": "area1-normal", + "Mode": "hard", "Fleet": "single" }, "StopCondition": { @@ -1332,7 +1332,7 @@ "ClearAfterSinking": false }, "Coalition": { - "Mode": "area1-normal", + "Mode": "sp", "Fleet": "single" }, "StopCondition": { diff --git a/module/coalition/assets.py b/module/coalition/assets.py index 0358fad6a..2359ac13c 100644 --- a/module/coalition/assets.py +++ b/module/coalition/assets.py @@ -36,6 +36,20 @@ DAL_SWITCH_MULTI = Button(area={'cn': (1060, 473, 1204, 500), 'en': (1061, 474, DAL_SWITCH_SINGLE = Button(area={'cn': (910, 473, 1055, 500), 'en': (915, 475, 1051, 499), 'jp': (917, 474, 1035, 499), 'tw': (945, 478, 1013, 495)}, color={'cn': (223, 223, 223), 'en': (193, 193, 193), 'jp': (215, 215, 215), 'tw': (168, 168, 168)}, button={'cn': (910, 473, 1055, 500), 'en': (915, 475, 1051, 499), 'jp': (917, 474, 1035, 499), 'tw': (945, 478, 1013, 495)}, file={'cn': './assets/cn/coalition/DAL_SWITCH_SINGLE.png', 'en': './assets/en/coalition/DAL_SWITCH_SINGLE.png', 'jp': './assets/jp/coalition/DAL_SWITCH_SINGLE.png', 'tw': './assets/tw/coalition/DAL_SWITCH_SINGLE.png'}) EMPTY_FLAGSHIP = Button(area={'cn': (247, 237, 277, 267), 'en': (247, 237, 277, 267), 'jp': (247, 237, 277, 267), 'tw': (247, 237, 277, 267)}, color={'cn': (76, 64, 56), 'en': (76, 64, 56), 'jp': (76, 64, 56), 'tw': (76, 64, 56)}, button={'cn': (247, 237, 277, 267), 'en': (247, 237, 277, 267), 'jp': (247, 237, 277, 267), 'tw': (247, 237, 277, 267)}, file={'cn': './assets/cn/coalition/EMPTY_FLAGSHIP.png', 'en': './assets/cn/coalition/EMPTY_FLAGSHIP.png', 'jp': './assets/cn/coalition/EMPTY_FLAGSHIP.png', 'tw': './assets/cn/coalition/EMPTY_FLAGSHIP.png'}) EMPTY_VANGUARD = Button(area={'cn': (515, 237, 545, 267), 'en': (515, 237, 545, 267), 'jp': (515, 237, 545, 267), 'tw': (515, 237, 545, 267)}, color={'cn': (52, 52, 53), 'en': (52, 52, 53), 'jp': (52, 52, 53), 'tw': (52, 52, 53)}, button={'cn': (515, 237, 545, 267), 'en': (515, 237, 545, 267), 'jp': (515, 237, 545, 267), 'tw': (515, 237, 545, 267)}, file={'cn': './assets/cn/coalition/EMPTY_VANGUARD.png', 'en': './assets/cn/coalition/EMPTY_VANGUARD.png', 'jp': './assets/cn/coalition/EMPTY_VANGUARD.png', 'tw': './assets/cn/coalition/EMPTY_VANGUARD.png'}) +FASHION_COALITION_CHECK = Button(area={'cn': (100, 17, 261, 53), 'en': (100, 17, 261, 53), 'jp': (100, 17, 261, 53), 'tw': (100, 17, 261, 53)}, color={'cn': (100, 94, 76), 'en': (100, 94, 76), 'jp': (100, 94, 76), 'tw': (100, 94, 76)}, button={'cn': (100, 17, 261, 53), 'en': (100, 17, 261, 53), 'jp': (100, 17, 261, 53), 'tw': (100, 17, 261, 53)}, file={'cn': './assets/cn/coalition/FASHION_COALITION_CHECK.png', 'en': './assets/cn/coalition/FASHION_COALITION_CHECK.png', 'jp': './assets/cn/coalition/FASHION_COALITION_CHECK.png', 'tw': './assets/cn/coalition/FASHION_COALITION_CHECK.png'}) +FASHION_EASY = Button(area={'cn': (101, 161, 264, 470), 'en': (101, 161, 264, 470), 'jp': (101, 161, 264, 470), 'tw': (101, 161, 264, 470)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (101, 161, 264, 470), 'en': (101, 161, 264, 470), 'jp': (101, 161, 264, 470), 'tw': (101, 161, 264, 470)}, file={'cn': './assets/cn/coalition/FASHION_EASY.png', 'en': './assets/cn/coalition/FASHION_EASY.png', 'jp': './assets/cn/coalition/FASHION_EASY.png', 'tw': './assets/cn/coalition/FASHION_EASY.png'}) +FASHION_EX = Button(area={'cn': (832, 162, 995, 506), 'en': (832, 162, 995, 506), 'jp': (832, 162, 995, 506), 'tw': (832, 162, 995, 506)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (832, 162, 995, 506), 'en': (832, 162, 995, 506), 'jp': (832, 162, 995, 506), 'tw': (832, 162, 995, 506)}, file={'cn': './assets/cn/coalition/FASHION_EX.png', 'en': './assets/cn/coalition/FASHION_EX.png', 'jp': './assets/cn/coalition/FASHION_EX.png', 'tw': './assets/cn/coalition/FASHION_EX.png'}) +FASHION_FLEET_PREPARATION = Button(area={'cn': (1021, 519, 1121, 545), 'en': (1021, 519, 1121, 545), 'jp': (1021, 519, 1121, 545), 'tw': (1021, 519, 1121, 545)}, color={'cn': (94, 129, 239), 'en': (94, 129, 239), 'jp': (94, 129, 239), 'tw': (94, 129, 239)}, button={'cn': (1021, 519, 1121, 545), 'en': (1021, 519, 1121, 545), 'jp': (1021, 519, 1121, 545), 'tw': (1021, 519, 1121, 545)}, file={'cn': './assets/cn/coalition/FASHION_FLEET_PREPARATION.png', 'en': './assets/cn/coalition/FASHION_FLEET_PREPARATION.png', 'jp': './assets/cn/coalition/FASHION_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/FASHION_FLEET_PREPARATION.png'}) +FASHION_HARD = Button(area={'cn': (439, 161, 602, 502), 'en': (439, 161, 602, 502), 'jp': (439, 161, 602, 502), 'tw': (439, 161, 602, 502)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (439, 161, 602, 502), 'en': (439, 161, 602, 502), 'jp': (439, 161, 602, 502), 'tw': (439, 161, 602, 502)}, file={'cn': './assets/cn/coalition/FASHION_HARD.png', 'en': './assets/cn/coalition/FASHION_HARD.png', 'jp': './assets/cn/coalition/FASHION_HARD.png', 'tw': './assets/cn/coalition/FASHION_HARD.png'}) +FASHION_MODE_BATTLE = Button(area={'cn': (148, 631, 283, 671), 'en': (148, 631, 283, 671), 'jp': (148, 631, 283, 671), 'tw': (148, 631, 283, 671)}, color={'cn': (162, 149, 122), 'en': (162, 149, 122), 'jp': (162, 149, 122), 'tw': (162, 149, 122)}, button={'cn': (148, 631, 283, 671), 'en': (148, 631, 283, 671), 'jp': (148, 631, 283, 671), 'tw': (148, 631, 283, 671)}, file={'cn': './assets/cn/coalition/FASHION_MODE_BATTLE.png', 'en': './assets/cn/coalition/FASHION_MODE_BATTLE.png', 'jp': './assets/cn/coalition/FASHION_MODE_BATTLE.png', 'tw': './assets/cn/coalition/FASHION_MODE_BATTLE.png'}) +FASHION_MODE_STORY = Button(area={'cn': (152, 621, 287, 669), 'en': (152, 621, 287, 669), 'jp': (152, 621, 287, 669), 'tw': (152, 621, 287, 669)}, color={'cn': (168, 154, 126), 'en': (168, 154, 126), 'jp': (168, 154, 126), 'tw': (168, 154, 126)}, button={'cn': (152, 621, 287, 669), 'en': (152, 621, 287, 669), 'jp': (152, 621, 287, 669), 'tw': (152, 621, 287, 669)}, file={'cn': './assets/cn/coalition/FASHION_MODE_STORY.png', 'en': './assets/cn/coalition/FASHION_MODE_STORY.png', 'jp': './assets/cn/coalition/FASHION_MODE_STORY.png', 'tw': './assets/cn/coalition/FASHION_MODE_STORY.png'}) +FASHION_NORMAL = Button(area={'cn': (270, 161, 433, 470), 'en': (270, 161, 433, 470), 'jp': (270, 161, 433, 470), 'tw': (270, 161, 433, 470)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (270, 161, 433, 470), 'en': (270, 161, 433, 470), 'jp': (270, 161, 433, 470), 'tw': (270, 161, 433, 470)}, file={'cn': './assets/cn/coalition/FASHION_NORMAL.png', 'en': './assets/cn/coalition/FASHION_NORMAL.png', 'jp': './assets/cn/coalition/FASHION_NORMAL.png', 'tw': './assets/cn/coalition/FASHION_NORMAL.png'}) +FASHION_PT_OCR = Button(area={'cn': (889, 659, 936, 674), 'en': (889, 659, 936, 674), 'jp': (889, 659, 936, 674), 'tw': (889, 659, 936, 674)}, color={'cn': (132, 124, 120), 'en': (132, 124, 120), 'jp': (132, 124, 120), 'tw': (132, 124, 120)}, button={'cn': (889, 659, 936, 674), 'en': (889, 659, 936, 674), 'jp': (889, 659, 936, 674), 'tw': (889, 659, 936, 674)}, file={'cn': './assets/cn/coalition/FASHION_PT_OCR.png', 'en': './assets/cn/coalition/FASHION_PT_OCR.png', 'jp': './assets/cn/coalition/FASHION_PT_OCR.png', 'tw': './assets/cn/coalition/FASHION_PT_OCR.png'}) +FASHION_SP = Button(area={'cn': (664, 166, 826, 507), 'en': (664, 166, 826, 507), 'jp': (664, 166, 826, 507), 'tw': (664, 166, 826, 507)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (664, 166, 826, 507), 'en': (664, 166, 826, 507), 'jp': (664, 166, 826, 507), 'tw': (664, 166, 826, 507)}, file={'cn': './assets/cn/coalition/FASHION_SP.png', 'en': './assets/cn/coalition/FASHION_SP.png', 'jp': './assets/cn/coalition/FASHION_SP.png', 'tw': './assets/cn/coalition/FASHION_SP.png'}) +FASHION_SWITCH_MULTI = Button(area={'cn': (1075, 457, 1206, 485), 'en': (1075, 457, 1206, 485), 'jp': (1075, 457, 1206, 485), 'tw': (1075, 457, 1206, 485)}, color={'cn': (233, 183, 63), 'en': (233, 183, 63), 'jp': (233, 183, 63), 'tw': (233, 183, 63)}, button={'cn': (1075, 457, 1206, 485), 'en': (1075, 457, 1206, 485), 'jp': (1075, 457, 1206, 485), 'tw': (1075, 457, 1206, 485)}, file={'cn': './assets/cn/coalition/FASHION_SWITCH_MULTI.png', 'en': './assets/cn/coalition/FASHION_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/FASHION_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/FASHION_SWITCH_MULTI.png'}) +FASHION_SWITCH_SINGLE = Button(area={'cn': (929, 457, 1059, 485), 'en': (929, 457, 1059, 485), 'jp': (929, 457, 1059, 485), 'tw': (929, 457, 1059, 485)}, color={'cn': (230, 181, 62), 'en': (230, 181, 62), 'jp': (230, 181, 62), 'tw': (230, 181, 62)}, button={'cn': (929, 457, 1059, 485), 'en': (929, 457, 1059, 485), 'jp': (929, 457, 1059, 485), 'tw': (929, 457, 1059, 485)}, file={'cn': './assets/cn/coalition/FASHION_SWITCH_SINGLE.png', 'en': './assets/cn/coalition/FASHION_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/FASHION_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/FASHION_SWITCH_SINGLE.png'}) +FASHION_UI_BACK = Button(area={'cn': (29, 28, 45, 45), 'en': (29, 28, 45, 45), 'jp': (29, 28, 45, 45), 'tw': (29, 28, 45, 45)}, color={'cn': (132, 125, 113), 'en': (132, 125, 113), 'jp': (132, 125, 113), 'tw': (132, 125, 113)}, button={'cn': (29, 28, 45, 45), 'en': (29, 28, 45, 45), 'jp': (29, 28, 45, 45), 'tw': (29, 28, 45, 45)}, file={'cn': './assets/cn/coalition/FASHION_UI_BACK.png', 'en': './assets/cn/coalition/FASHION_UI_BACK.png', 'jp': './assets/cn/coalition/FASHION_UI_BACK.png', 'tw': './assets/cn/coalition/FASHION_UI_BACK.png'}) +FASHION_UI_HOME = Button(area={'cn': (1210, 23, 1238, 47), 'en': (1210, 23, 1238, 47), 'jp': (1210, 23, 1238, 47), 'tw': (1210, 23, 1238, 47)}, color={'cn': (124, 120, 112), 'en': (124, 120, 112), 'jp': (124, 120, 112), 'tw': (124, 120, 112)}, button={'cn': (1210, 23, 1238, 47), 'en': (1210, 23, 1238, 47), 'jp': (1210, 23, 1238, 47), 'tw': (1210, 23, 1238, 47)}, file={'cn': './assets/cn/coalition/FASHION_UI_HOME.png', 'en': './assets/cn/coalition/FASHION_UI_HOME.png', 'jp': './assets/cn/coalition/FASHION_UI_HOME.png', 'tw': './assets/cn/coalition/FASHION_UI_HOME.png'}) FLEET_NOT_PREPARED = Button(area={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, color={'cn': (106, 106, 112), 'en': (106, 106, 112), 'jp': (106, 106, 112), 'tw': (108, 107, 112)}, button={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, file={'cn': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'en': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'jp': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'tw': './assets/tw/coalition/FLEET_NOT_PREPARED.png'}) FROSTFALL_COALITION_CHECK = Button(area={'cn': (118, 14, 227, 39), 'en': (118, 16, 221, 36), 'jp': (118, 14, 227, 39), 'tw': (118, 14, 227, 39)}, color={'cn': (145, 161, 200), 'en': (116, 130, 168), 'jp': (150, 166, 204), 'tw': (152, 168, 206)}, button={'cn': (118, 14, 227, 39), 'en': (118, 16, 221, 36), 'jp': (118, 14, 227, 39), 'tw': (118, 14, 227, 39)}, file={'cn': './assets/cn/coalition/FROSTFALL_COALITION_CHECK.png', 'en': './assets/en/coalition/FROSTFALL_COALITION_CHECK.png', 'jp': './assets/jp/coalition/FROSTFALL_COALITION_CHECK.png', 'tw': './assets/tw/coalition/FROSTFALL_COALITION_CHECK.png'}) FROSTFALL_EX = Button(area={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, color={'cn': (198, 152, 252), 'en': (198, 152, 252), 'jp': (198, 152, 252), 'tw': (182, 127, 252)}, button={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, file={'cn': './assets/cn/coalition/FROSTFALL_EX.png', 'en': './assets/en/coalition/FROSTFALL_EX.png', 'jp': './assets/jp/coalition/FROSTFALL_EX.png', 'tw': './assets/tw/coalition/FROSTFALL_EX.png'}) diff --git a/module/coalition/coalition.py b/module/coalition/coalition.py index 0addc5024..79bcccb33 100644 --- a/module/coalition/coalition.py +++ b/module/coalition/coalition.py @@ -9,6 +9,7 @@ from module.log_res.log_res import LogRes from module.logger import logger from module.ocr.ocr import Digit from module.ui.assets import BACK_ARROW +from module.ui.page import page_campaign_menu class AcademyPtOcr(Digit): @@ -59,6 +60,8 @@ class Coalition(CoalitionCombat, CampaignEvent): ocr = Digit(NEONCITY_PT_OCR, name='OCR_PT', lang='cnocr', letter=(208, 208, 208), threshold=128) elif event == 'coalition_20251120': 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, 41, 42), threshold=128) else: logger.error(f'ocr object is not defined in event {event}') raise ScriptError @@ -155,9 +158,9 @@ class Coalition(CoalitionCombat, CampaignEvent): self.coalition_map_exit(event) raise - if self.triggered_stop_condition(oil_check=True): - self.coalition_map_exit(event) - raise ScriptEnd + # if self.triggered_stop_condition(oil_check=True): + # self.coalition_map_exit(event) + # raise ScriptEnd self.enter_map(event=event, stage=stage, mode=fleet) self.coalition_combat() @@ -195,10 +198,10 @@ class Coalition(CoalitionCombat, CampaignEvent): logger.info(f'Count: {self.run_count}') # UI switches - # if self.config.SERVER in ['tw']: - # self.ui_goto(page_campaign_menu) - # if self.triggered_stop_condition(oil_check=True): - # break + self.ui_goto(page_campaign_menu) + if self.triggered_stop_condition(oil_check=True): + break + self.device.stuck_record_clear() self.device.click_record_clear() self.ui_goto_coalition() diff --git a/module/coalition/ui.py b/module/coalition/ui.py index d612e5a62..7a4357c44 100644 --- a/module/coalition/ui.py +++ b/module/coalition/ui.py @@ -52,6 +52,10 @@ class CoalitionUI(Combat): elif event == 'coalition_20251120': logger.info('Coalition event coalition_20251120 has no mode switch') return + elif event == 'coalition_20260122': + mode_switch = Switch('CoalitionMode', offset=(20, 20)) + mode_switch.add_state('story', FASHION_MODE_STORY) + mode_switch.add_state('battle', FASHION_MODE_BATTLE) else: logger.error(f'MODE_SWITCH is not defined in event {event}') raise ScriptError @@ -85,6 +89,9 @@ class CoalitionUI(Combat): elif event == 'coalition_20251120': fleet_switch.add_state('single', DAL_SWITCH_SINGLE) fleet_switch.add_state('multi', DAL_SWITCH_MULTI) + elif event == 'coalition_20260122': + fleet_switch.add_state('single', FASHION_SWITCH_SINGLE) + fleet_switch.add_state('multi', FASHION_SWITCH_MULTI) else: logger.error(f'FLEET_SWITCH is not defined in event {event}') raise ScriptError @@ -137,6 +144,12 @@ class CoalitionUI(Combat): ('coalition_20251120', 'area4-hard'): DAL_AREA4, ('coalition_20251120', 'area5-hard'): DAL_AREA5, ('coalition_20251120', 'area6-hard'): DAL_AREA6, + + ('coalition_20260122', 'easy'): FASHION_EASY, + ('coalition_20260122', 'normal'): FASHION_NORMAL, + ('coalition_20260122', 'hard'): FASHION_HARD, + ('coalition_20260122', 'sp'): FASHION_SP, + ('coalition_20260122', 'ex'): FASHION_EX, } stage = stage.lower() try: @@ -216,6 +229,12 @@ class CoalitionUI(Combat): ('coalition_20251120', 'area4-hard'): 3, ('coalition_20251120', 'area5-hard'): 3, ('coalition_20251120', 'area6-hard'): 4, + + ('coalition_20260122', 'easy'): 1, + ('coalition_20260122', 'normal'): 2, + ('coalition_20260122', 'hard'): 3, + ('coalition_20260122', 'sp'): 4, + ('coalition_20260122', 'ex'): 5, } stage = stage.lower() try: @@ -241,6 +260,8 @@ class CoalitionUI(Combat): return NEONCITY_FLEET_PREPARATION elif event == 'coalition_20251120': return DAL_FLEET_PREPARATION + elif event == 'coalition_20260122': + return FASHION_FLEET_PREPARATION else: logger.error(f'FLEET_PREPARATION is not defined in event {event}') raise ScriptError @@ -267,6 +288,9 @@ class CoalitionUI(Combat): if event == 'coalition_20250626': if stage in ['easy', 'sp', 'ex']: return False + if event == 'coalition_20260122': + if stage in ['easy', 'sp', 'ex']: + return False self.coalition_ensure_fleet(event, mode) return True @@ -406,6 +430,11 @@ class CoalitionUI(Combat): campaign_timer.reset() continue + # Fleet import + if self.handle_popup_confirm('FLEET_IMPORT'): + campaign_timer.reset() + continue + # Auto confirm if self.handle_combat_automation_confirm(): continue diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 47091a50e..e4c960271 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3610,22 +3610,24 @@ "type": "state", "value": "campaign_main", "option": [ - "coalition_20251120" + "coalition_20251120", + "coalition_20260122" ], "option_cn": [ - "coalition_20251120" + "coalition_20260122" ], "option_en": [ - "coalition_20251120" + "coalition_20260122" ], "option_jp": [ - "coalition_20251120" + "coalition_20260122" ], "option_tw": [ "coalition_20251120" ], "option_bold": [ - "coalition_20251120" + "coalition_20251120", + "coalition_20260122" ] }, "Mode": { @@ -3671,20 +3673,12 @@ "Coalition": { "Mode": { "type": "select", - "value": "area1-normal", + "value": "hard", "option": [ - "area1-normal", - "area1-hard", - "area2-normal", - "area2-hard", - "area3-normal", - "area3-hard", - "area4-normal", - "area4-hard", - "area5-normal", - "area5-hard", - "area6-normal", - "area6-hard" + "easy", + "normal", + "hard", + "ex" ] }, "Fleet": { @@ -6918,22 +6912,24 @@ "type": "state", "value": "campaign_main", "option": [ - "coalition_20251120" + "coalition_20251120", + "coalition_20260122" ], "option_cn": [ - "coalition_20251120" + "coalition_20260122" ], "option_en": [ - "coalition_20251120" + "coalition_20260122" ], "option_jp": [ - "coalition_20251120" + "coalition_20260122" ], "option_tw": [ "coalition_20251120" ], "option_bold": [ - "coalition_20251120" + "coalition_20251120", + "coalition_20260122" ] }, "Mode": { @@ -6979,21 +6975,15 @@ "Coalition": { "Mode": { "type": "select", - "value": "area1-normal", + "value": "sp", "option": [ - "area1-normal", - "area1-hard", - "area2-normal", - "area2-hard", - "area3-normal", - "area3-hard", - "area4-normal", - "area4-hard", - "area5-normal", - "area5-hard", - "area6-normal", - "area6-hard" - ] + "easy", + "normal", + "hard", + "sp", + "ex" + ], + "display": "hide" }, "Fleet": { "type": "select", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index ee592a0a6..aa29f1ead 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -340,8 +340,8 @@ MaritimeEscort: Enable: true Coalition: Mode: - value: area1-normal - option: [ area1-normal, area1-hard, area2-normal, area2-hard, area3-normal, area3-hard, area4-normal, area4-hard, area5-normal, area5-hard, area6-normal, area6-hard ] + value: hard + option: [ easy, normal, hard, sp, ex ] Fleet: value: single option: [ single, multi ] diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index 589efe946..243c8bbd7 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -257,9 +257,9 @@ Coalition: Use2xBook: false AmbushEvade: true ClearAfterSinking: false -# Coalition: -# Mode: -# option: [ easy, normal, hard, ex ] + Coalition: + Mode: + option: [ easy, normal, hard, ex ] StopCondition: MapAchievement: non_stop StageIncrease: false diff --git a/module/config/config_generated.py b/module/config/config_generated.py index cf6537518..4fa21ca46 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -199,7 +199,7 @@ class GeneratedConfig: MaritimeEscort_Enable = True # Group `Coalition` - Coalition_Mode = 'area1-normal' # area1-normal, area1-hard, area2-normal, area2-hard, area3-normal, area3-hard, area4-normal, area4-hard, area5-normal, area5-hard, area6-normal, area6-hard + Coalition_Mode = 'hard' # easy, normal, hard, sp, ex Coalition_Fleet = 'single' # single, multi # Group `Commission` diff --git a/module/config/config_updater.py b/module/config/config_updater.py index bdb3c8a67..79f21c687 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -617,6 +617,8 @@ class ConfigUpdater: # ('Coalition.Coalition.Mode', 'Coalition.Coalition.Mode', coalition_to_frostfall), # 2025.06.26 # ('Coalition.Coalition.Mode', 'Coalition.Coalition.Mode', coalition_to_little_academy), + # 2026.01.22 + ('Coalition.Coalition.Mode', 'Coalition.Coalition.Mode', coalition_to_fashion_shoot), ] # redirection += [ @@ -686,7 +688,7 @@ class ConfigUpdater: for task in EVENTS + WAR_ARCHIVES: default_stage(task, 'D3') for task in COALITIONS: - default_stage(task, 'area1-normal') + default_stage(task, 'hard') if not is_template: new = self.config_redirect(old, new) diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 5c3878337..3927de052 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -83,7 +83,7 @@ "help": "" }, "Coalition": { - "name": "DATE A LANE", + "name": "Light & Shadow Fashion Shoot!", "help": "" }, "MaritimeEscort": { @@ -119,7 +119,7 @@ "help": "" }, "CoalitionSp": { - "name": "Neon City Investigator SP", + "name": "Light & Shadow Fashion Shoot! SP", "help": "" }, "Commission": { @@ -702,6 +702,7 @@ "coalition_20240627": "Welcome to Little Academy", "coalition_20250626": "The Neon City Investigator", "coalition_20251120": "DATE A LANE", + "coalition_20260122": "Light & Shadow Fashion Shoot!", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "The Solomon Ranger Rerun", "event_20200326_cn": "Microlayer Medley", @@ -1414,18 +1415,11 @@ "Mode": { "name": "Mode", "help": "SP needs to use event daily SP to run", - "area1-normal": "area1-normal", - "area1-hard": "area1-hard", - "area2-normal": "area2-normal", - "area2-hard": "area2-hard", - "area3-normal": "area3-normal", - "area3-hard": "area3-hard", - "area4-normal": "area4-normal", - "area4-hard": "area4-hard", - "area5-normal": "area5-normal", - "area5-hard": "area5-hard", - "area6-normal": "area6-normal", - "area6-hard": "area6-hard" + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "sp": "SP", + "ex": "EX" }, "Fleet": { "name": "Fleet", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 41a588db4..ddbec4ab7 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -702,6 +702,7 @@ "coalition_20240627": "リトル学園へようこそ", "coalition_20250626": "ネオンシティの探索者", "coalition_20251120": "DATE A LANE", + "coalition_20260122": "特集写真――撮影進行中!", "event_20200227_cn": "凍絶の北海", "event_20200312_cn": "南洋に靡く硝煙(復刻)", "event_20200326_cn": "闇靄払う銀翼", @@ -1414,18 +1415,11 @@ "Mode": { "name": "Coalition.Mode.name", "help": "Coalition.Mode.help", - "area1-normal": "area1-normal", - "area1-hard": "area1-hard", - "area2-normal": "area2-normal", - "area2-hard": "area2-hard", - "area3-normal": "area3-normal", - "area3-hard": "area3-hard", - "area4-normal": "area4-normal", - "area4-hard": "area4-hard", - "area5-normal": "area5-normal", - "area5-hard": "area5-hard", - "area6-normal": "area6-normal", - "area6-hard": "area6-hard" + "easy": "easy", + "normal": "normal", + "hard": "hard", + "sp": "sp", + "ex": "ex" }, "Fleet": { "name": "Coalition.Fleet.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 68c0aaa78..2392a9015 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -83,7 +83,7 @@ "help": "" }, "Coalition": { - "name": "DATE A LANE", + "name": "光影风尚——拍摄进行时!", "help": "" }, "MaritimeEscort": { @@ -119,7 +119,7 @@ "help": "" }, "CoalitionSp": { - "name": "迷彩都市的寻踪者SP", + "name": "光影风尚——拍摄进行时!SP", "help": "" }, "Commission": { @@ -702,6 +702,7 @@ "coalition_20240627": "欢迎来到童心学院", "coalition_20250626": "迷彩都市的寻踪者", "coalition_20251120": "DATE A LANE", + "coalition_20260122": "光影风尚——拍摄进行时!", "event_20200227_cn": "北境序曲", "event_20200312_cn": "复刻斯图尔特的硝烟", "event_20200326_cn": "微层混合", @@ -1414,18 +1415,11 @@ "Mode": { "name": "难度", "help": "SP图需要使用活动每日SP运行", - "area1-normal": "AREA-1 普通", - "area1-hard": "AREA-1 困难", - "area2-normal": "AREA-2 普通", - "area2-hard": "AREA-2 困难", - "area3-normal": "AREA-3 普通", - "area3-hard": "AREA-3 困难", - "area4-normal": "AREA-4 普通", - "area4-hard": "AREA-4 困难", - "area5-normal": "AREA-5 普通", - "area5-hard": "AREA-5 困难", - "area6-normal": "AREA-6 普通", - "area6-hard": "AREA-6 困难" + "easy": "简单", + "normal": "普通", + "hard": "困难", + "sp": "SP", + "ex": "EX" }, "Fleet": { "name": "出击队伍", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 214b99067..e7c58100b 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -702,6 +702,7 @@ "coalition_20240627": "歡迎來到童心學院", "coalition_20250626": "迷彩都市的尋蹤者", "coalition_20251120": "DATE A LANE", + "coalition_20260122": "Light & Shadow Fashion Shoot!", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "斯圖爾特的硝煙", "event_20200326_cn": "Microlayer Medley", @@ -1414,18 +1415,11 @@ "Mode": { "name": "難度", "help": "SP圖需要使用活動每日SP運行", - "area1-normal": "area1-normal", - "area1-hard": "area1-hard", - "area2-normal": "area2-normal", - "area2-hard": "area2-hard", - "area3-normal": "area3-normal", - "area3-hard": "area3-hard", - "area4-normal": "area4-normal", - "area4-hard": "area4-hard", - "area5-normal": "area5-normal", - "area5-hard": "area5-hard", - "area6-normal": "area6-normal", - "area6-hard": "area6-hard" + "easy": "easy", + "normal": "normal", + "hard": "hard", + "sp": "sp", + "ex": "ex" }, "Fleet": { "name": "出擊隊伍", diff --git a/module/config/redirect_utils/utils.py b/module/config/redirect_utils/utils.py index 33a4f6f6e..3f4839229 100644 --- a/module/config/redirect_utils/utils.py +++ b/module/config/redirect_utils/utils.py @@ -130,3 +130,18 @@ def coalition_to_little_academy(value): return 'hard' else: return value + + +def coalition_to_fashion_shoot(value: str): + """ + Redirect Fashion Shoot stage names to DATE A LANE + """ + value = value.split('-')[0] + if value == 'area1': + return 'easy' + elif value in ['area2', 'area3', 'area4', 'area5']: + return 'normal' + elif value == 'area6': + return 'hard' + else: + return value diff --git a/module/ui/page.py b/module/ui/page.py index 9a165a718..ee87b0081 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -150,9 +150,14 @@ page_campaign.link(button=CAMPAIGN_GOTO_EVENT, destination=page_sp) # page_coalition.link(button=NEONCITY_UI_BACK, destination=page_campaign) # page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) # DAL -page_coalition = Page(FROSTFALL_COALITION_CHECK) -page_coalition.link(button=GOTO_MAIN, destination=page_main) -page_coalition.link(button=BACK_ARROW, destination=page_campaign) +# page_coalition = Page(FROSTFALL_COALITION_CHECK) +# page_coalition.link(button=GOTO_MAIN, destination=page_main) +# page_coalition.link(button=BACK_ARROW, destination=page_campaign) +# page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) +# FASHION +page_coalition = Page(FASHION_COALITION_CHECK) +page_coalition.link(button=FASHION_UI_HOME, destination=page_main) +page_coalition.link(button=FASHION_UI_BACK, destination=page_campaign) page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) # Operation Siren diff --git a/module/ui/ui.py b/module/ui/ui.py index 6964901d3..bae581040 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -1,7 +1,7 @@ from module.base.button import Button from module.base.decorator import run_once from module.base.timer import Timer -from module.coalition.assets import NEONCITY_FLEET_PREPARATION, NEONCITY_PREPARATION_EXIT, DAL_DIFFICULTY_EXIT +from module.coalition.assets import FASHION_FLEET_PREPARATION, NEONCITY_PREPARATION_EXIT from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2, GET_SHIP from module.event_hospital.assets import HOSIPITAL_CLUE_CHECK, HOSPITAL_BATTLE_EXIT from module.exception import (GameNotRunningError, GamePageUnknownError, @@ -564,7 +564,12 @@ class UI(InfoHandler): # self.device.click(NEONCITY_PREPARATION_EXIT) # return True # DATE A LANE (coalition_20251120) - if self.appear_then_click(DAL_DIFFICULTY_EXIT, offset=(20, 20), interval=3): + # if self.appear_then_click(DAL_DIFFICULTY_EXIT, offset=(20, 20), interval=3): + # return True + # Fashion shoot (coalition_20260122) + if self.appear(FASHION_FLEET_PREPARATION, offset=(20, 20), interval=3): + logger.info(f'{FASHION_FLEET_PREPARATION} -> {NEONCITY_PREPARATION_EXIT}') + self.device.click(NEONCITY_PREPARATION_EXIT) return True # Idle page