From 761a1423668e7e1cc263da38f924c41fe6d1d5ea Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:42:32 +0800 Subject: [PATCH] Add: Coalition scuttle function --- alas.py | 4 + config/template.json | 74 +++++ module/coalition/scuttle.py | 233 ++++++++++++++ module/config/argument/args.json | 444 +++++++++++++++++++++++++++ module/config/argument/argument.yaml | 4 + module/config/argument/menu.json | 1 + module/config/argument/override.yaml | 52 ++++ module/config/argument/task.yaml | 9 + module/config/config_generated.py | 3 + module/config/config_manual.py | 3 +- module/config/config_updater.py | 2 +- module/config/i18n/en-US.json | 16 + module/config/i18n/ja-JP.json | 16 + module/config/i18n/zh-CN.json | 16 + module/config/i18n/zh-TW.json | 16 + 15 files changed, 891 insertions(+), 2 deletions(-) create mode 100644 module/coalition/scuttle.py diff --git a/alas.py b/alas.py index 55e40364f..8998a341a 100644 --- a/alas.py +++ b/alas.py @@ -412,6 +412,10 @@ class AzurLaneAutoScript: from module.coalition.coalition import Coalition Coalition(config=self.config, device=self.device).run() + def coalition_scuttle(self): + from module.coalition.scuttle import CoalitionScuttleRun + CoalitionScuttleRun(config=self.config, device=self.device).run() + def coalition_sp(self): from module.coalition.coalition_sp import CoalitionSP CoalitionSP(config=self.config, device=self.device).run() diff --git a/config/template.json b/config/template.json index 4ce994859..0689b5247 100644 --- a/config/template.json +++ b/config/template.json @@ -834,6 +834,80 @@ "Storage": {} } }, + "CoalitionScuttle": { + "Scheduler": { + "Enable": false, + "NextRun": "2020-01-01 00:00:00", + "Command": "CoalitionScuttle", + "SuccessInterval": 30, + "FailureInterval": 30, + "ServerUpdate": "00:00" + }, + "CoalitionScuttle": { + "Sacrifice": "vanguard" + }, + "Campaign": { + "Name": "dynamic", + "Event": "campaign_main", + "Mode": "normal", + "UseClearMode": true, + "UseFleetLock": true, + "UseAutoSearch": false, + "Use2xBook": false, + "AmbushEvade": true, + "ClearAfterSinking": false + }, + "Coalition": { + "Mode": "hard", + "Fleet": "multi" + }, + "StopCondition": { + "OilLimit": 1000, + "RunCount": 0, + "MapAchievement": "non_stop", + "StageIncrease": false, + "GetNewShip": false, + "ReachLevel": 0 + }, + "Fleet": { + "Fleet1": 1, + "Fleet1Formation": "double_line", + "Fleet1Mode": "combat_auto", + "Fleet1Step": 3, + "Fleet2": 2, + "Fleet2Formation": "double_line", + "Fleet2Mode": "combat_auto", + "Fleet2Step": 3, + "FleetOrder": "fleet1_all_fleet2_standby" + }, + "Submarine": { + "Fleet": 0, + "AutoRecommend": false, + "AutoSearchMode": "sub_standby", + "HuntMode": "do_not_use", + "CallMode": "do_not_use", + "Timing": "default", + "DistanceToBoss": "use_open_ocean_support" + }, + "Emotion": { + "Mode": "calculate_ignore", + "Fleet1Value": 119, + "Fleet1Record": "2020-01-01 00:00:00", + "Fleet1Control": "prevent_yellow_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": {} + } + }, "Hospital": { "Scheduler": { "Enable": false, diff --git a/module/coalition/scuttle.py b/module/coalition/scuttle.py new file mode 100644 index 000000000..8eb64571c --- /dev/null +++ b/module/coalition/scuttle.py @@ -0,0 +1,233 @@ +from module.base.button import ButtonGrid +from module.coalition.assets import EMPTY_FLAGSHIP, EMPTY_VANGUARD +from module.coalition.coalition import Coalition +from module.coalition.combat import CoalitionCombat +from module.combat.assets import BATTLE_PREPARATION, BATTLE_STATUS_D, EXP_INFO_D, OPTS_INFO_D +from module.exception import CampaignEnd +from module.logger import logger +from module.retire.assets import DOCK_CHECK +from module.retire.dock import Dock +from module.retire.scanner import ShipScanner +from module.ui.assets import BACK_ARROW +from module.ui.navbar import Navbar + + +class CoalitionScuttleCombat(CoalitionCombat): + triggered_normal_end = False + + def auto_search_combat_end(self): + if self.appear(BATTLE_STATUS_D) or self.appear(EXP_INFO_D): + self.device.screenshot_interval_set() + return True + return super().auto_search_combat_end() + + def handle_battle_status(self, drop=None): + """ + Args: + drop (DropImage): + + Returns: + bool: + """ + if self.is_combat_executing(): + return False + if self.appear(BATTLE_STATUS_D, interval=self.battle_status_click_interval): + if drop: + drop.handle_add(self) + else: + self.device.sleep((0.25, 0.5)) + self.device.click(BATTLE_STATUS_D) + return True + if self.appear(OPTS_INFO_D, interval=self.battle_status_click_interval): + if drop: + drop.handle_add(self) + else: + self.device.sleep((0.25, 0.5)) + self.device.click(OPTS_INFO_D) + return True + if super().handle_battle_status(drop=drop): + if self.battle_count >= self._scuttle_battle_total - 1: + logger.warning("Triggered normal end") + self.triggered_normal_end = True + return True + + return False + + def handle_exp_info(self): + """ + Returns: + bool: + """ + if self.is_combat_executing(): + return False + if self.appear_then_click(EXP_INFO_D): + self.device.sleep((0.25, 0.5)) + return True + if super().handle_exp_info(): + return True + + return False + + def handle_combat_weapon_release(self): + return False + + +class CoalitionScuttleRun(Coalition, CoalitionScuttleCombat, Dock): + @property + def _coalition_fleet_navbar(self): + grids = ButtonGrid( + origin=(63, 148), + delta=(141.5, 0), + button_shape=(110, 36), + grid_shape=(self._scuttle_battle_total + 1, 1), + name='COALITION_FLEET_NAVBAR_GRID', + ) + return Navbar(grids=grids, active_color=(180, 180, 180), active_count=1500, name='COALITION_FLEET_NAVBAR') + + @property + def manual_mode(self): + return self.config.Fleet_Fleet1Mode + + @property + def change_vanguard(self): + return 'vanguard' in self.config.CoalitionScuttle_Sacrifice + + @property + def change_flagship(self): + return 'flagship' in self.config.CoalitionScuttle_Sacrifice + + def triggered_stop_condition(self, pt_check=False, oil_check=False, coin_check=False): + if self.triggered_normal_end: + return True + return super().triggered_stop_condition(pt_check=pt_check, oil_check=oil_check) + + def coalition_combat(self): + """ + Run prerequisite battles in auto mode and switch to the configured + manual mode for the last battle only. + + Pages: + in: is_coalition + out: is_coalition + """ + self.battle_count = 0 + battle_total = self._scuttle_battle_total + manual_mode = self.manual_mode + self.combat_preparation(emotion_reduce=False, auto='combat_auto') + + try: + while 1: + logger.hr(f'{self.FUNCTION_NAME_BASE}{self.battle_count}', level=2) + final_battle = self.battle_count >= battle_total - 1 + self.config.override( + Fleet_Fleet1Mode=manual_mode if final_battle else 'combat_auto' + ) + logger.attr('CombatMode', self.config.Fleet_Fleet1Mode) + self.auto_search_combat_execute( + emotion_reduce=self.battle_count == 0, + fleet_index=1, + ) + self.coalition_combat_re_enter() + self.battle_count += 1 + except CampaignEnd: + logger.info('Coalition combat end.') + + def coalition_enter_fleet_preparation(self, event, stage, fleet): + """ + Enter a coalition map, then return from battle preparation to the + coalition-specific fleet preparation screen. + + Pages: + in: in_coalition + out: coalition-specific fleet preparation + """ + self.enter_map(event=event, stage=stage, mode=fleet) + fleet_preparation = self.coalition_get_fleet_preparation(event) + for _ in self.loop(): + if self.appear(fleet_preparation, offset=(20, 50)): + break + if self.appear(BATTLE_PREPARATION, offset=(20, 20), interval=3): + self.device.click(BACK_ARROW) + continue + + def get_common_rarity_ship(self, index='all'): + self.dock_favourite_set(False, wait_loading=False) + self.dock_sort_method_dsc_set(False, wait_loading=False) + self.dock_filter_set( + index=index, rarity='common', extra='enhanceable', sort='total' + ) + + logger.hr('FINDING SHIP') + + scanner = ShipScanner(level=(1, 31), fleet=0, status='free') + scanner.disable('rarity') + + return scanner.scan(self.device.image) + + def _coalition_ship_change(self, button, index): + fleet_preparation = self.coalition_get_fleet_preparation(self._scuttle_event) + for _ in self.loop(): + if self.appear(DOCK_CHECK, offset=(20, 20)): + break + if self.appear(fleet_preparation, offset=(20, 50)): + self.device.click(button) + continue + + ship = self.get_common_rarity_ship(index=index) + if ship: + ship = min(ship, key=lambda s: (s.level, -s.emotion)) + self.dock_select_one(ship.button) + self.dock_reset() + self.dock_select_confirm(check_button=fleet_preparation) + return True + + self.dock_reset() + self.ui_back(check_button=fleet_preparation) + return False + + def vanguard_change(self): + logger.hr('Change vanguard', level=2) + if self._coalition_ship_change(EMPTY_VANGUARD, index='vanguard'): + logger.info('Change vanguard success') + return True + logger.info('Change vanguard failed, no vanguard in common rarity.') + return False + + def flagship_change(self): + logger.hr('Change flagship', level=2) + if self._coalition_ship_change(EMPTY_FLAGSHIP, index='main'): + logger.info('Change flagship success') + return True + logger.info('Change flagship failed, no flagship in common rarity.') + return False + + def run(self, event='', mode='', fleet='', total=0): + event = event if event else self.config.Campaign_Event + mode = mode if mode else self.config.Coalition_Mode + fleet = fleet if fleet else self.config.Coalition_Fleet + event, mode = self.handle_stage_name(event, mode) + self._scuttle_event = event + self._scuttle_battle_total = self.coalition_get_battles(event, mode) + + while 1: + super().run(event=event, mode=mode, fleet=fleet, total=total) + + if not self.triggered_normal_end: + break + + self.coalition_enter_fleet_preparation(event, mode, fleet) + self._coalition_fleet_navbar.set(main=self, right=2) + success = True + if self.change_vanguard: + success = self.vanguard_change() + if self.change_flagship: + success = success and self.flagship_change() + + self.coalition_map_exit(event) + self.triggered_normal_end = False + + if self.config.task_switched(): + self.config.task_stop() + elif not success: + self.config.task_delay(minute=30) + self.config.task_stop() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index eb9dcc7d2..92fceb6f9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -4254,6 +4254,450 @@ } } }, + "CoalitionScuttle": { + "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": "CoalitionScuttle", + "display": "hide" + }, + "SuccessInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "FailureInterval": { + "type": "input", + "value": 30, + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "00:00", + "display": "hide" + } + }, + "CoalitionScuttle": { + "Sacrifice": { + "type": "select", + "value": "vanguard", + "option": [ + "vanguard", + "flagship" + ] + } + }, + "Campaign": { + "Name": { + "type": "input", + "value": "dynamic", + "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 + } + }, + "Coalition": { + "Mode": { + "type": "select", + "value": "hard", + "option": [ + "easy", + "normal", + "hard", + "sp" + ] + }, + "Fleet": { + "type": "lock", + "value": "multi", + "option": [ + "multi" + ], + "option_bold": [ + "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" + } + }, + "Fleet": { + "Fleet1": { + "type": "select", + "value": 1, + "option": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "display": "hide" + }, + "Fleet1Formation": { + "type": "select", + "value": "double_line", + "option": [ + "line_ahead", + "double_line", + "diamond" + ], + "display": "hide" + }, + "Fleet1Mode": { + "type": "select", + "value": "combat_auto", + "option": [ + "combat_auto", + "combat_manual", + "stand_still_in_the_middle", + "hide_in_bottom_left", + "hide_in_upper_left" + ] + }, + "Fleet1Step": { + "type": "select", + "value": 3, + "option": [ + 2, + 3, + 4, + 5 + ], + "display": "hide" + }, + "Fleet2": { + "type": "select", + "value": 2, + "option": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "display": "hide" + }, + "Fleet2Formation": { + "type": "select", + "value": "double_line", + "option": [ + "line_ahead", + "double_line", + "diamond" + ], + "display": "hide" + }, + "Fleet2Mode": { + "type": "select", + "value": "combat_auto", + "option": [ + "combat_auto", + "combat_manual", + "stand_still_in_the_middle", + "hide_in_bottom_left", + "hide_in_upper_left" + ], + "display": "hide" + }, + "Fleet2Step": { + "type": "select", + "value": 3, + "option": [ + 2, + 3, + 4, + 5 + ], + "display": "hide" + }, + "FleetOrder": { + "type": "select", + "value": "fleet1_all_fleet2_standby", + "option": [ + "fleet1_mob_fleet2_boss", + "fleet1_boss_fleet2_mob", + "fleet1_all_fleet2_standby", + "fleet1_standby_fleet2_all" + ], + "display": "hide" + } + }, + "Submarine": { + "Fleet": { + "type": "select", + "value": 0, + "option": [ + 0, + 1, + 2 + ] + }, + "AutoRecommend": { + "type": "checkbox", + "value": false, + "display": "hide" + }, + "AutoSearchMode": { + "type": "select", + "value": "sub_standby", + "option": [ + "sub_standby", + "sub_auto_call" + ], + "display": "hide" + }, + "HuntMode": { + "type": "select", + "value": "do_not_use", + "option": [ + "do_not_use", + "hunt" + ], + "display": "hide" + }, + "CallMode": { + "type": "select", + "value": "do_not_use", + "option": [ + "do_not_use", + "boss_only", + "every_combat" + ] + }, + "Timing": { + "type": "select", + "value": "default", + "option": [ + "default", + "wait_for_boss" + ], + "display": "hide" + }, + "DistanceToBoss": { + "type": "select", + "value": "use_open_ocean_support", + "option": [ + "to_boss_position", + "1_grid_to_boss", + "2_grid_to_boss", + "use_open_ocean_support" + ], + "display": "hide" + } + }, + "Emotion": { + "Mode": { + "type": "lock", + "value": "calculate_ignore", + "option": [ + "calculate_ignore" + ], + "option_bold": [ + "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_yellow_face", + "option": [ + "keep_exp_bonus", + "prevent_green_face", + "prevent_yellow_face", + "prevent_red_face" + ], + "display": "hide" + }, + "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" + } + } + }, "Hospital": { "Scheduler": { "Enable": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 1f159430d..3fabeaae9 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -366,6 +366,10 @@ HospitalEvent: option: [ T1, T2, T3, T4, ESP ] MaritimeEscort: Enable: true +CoalitionScuttle: + Sacrifice: + value: vanguard + option: [ vanguard, flagship ] Coalition: Mode: value: hard diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index fd6317e2b..497df0743 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -29,6 +29,7 @@ "Event2", "Raid", "RaidScuttle", + "CoalitionScuttle", "Hospital", "MaritimeEscort", "WarArchives" diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index b2e5408ef..eb1519ec0 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -295,6 +295,58 @@ Coalition: Fleet2Recover: not_in_dormitory Fleet2Oath: false Fleet2Onsen: False +CoalitionScuttle: + Scheduler: + SuccessInterval: 30 + FailureInterval: 30 + ServerUpdate: 00:00 + Campaign: + Name: dynamic + Mode: normal + UseClearMode: true + UseFleetLock: true + UseAutoSearch: false + Use2xBook: false + AmbushEvade: true + Coalition: + Fleet: + type: lock + value: multi + option: [ multi, ] + option_bold: [ multi, ] + StopCondition: + MapAchievement: non_stop + StageIncrease: false + GetNewShip: false + ReachLevel: 0 + Fleet: + Fleet1: 1 + Fleet1Formation: double_line + Fleet1Step: 3 + Fleet2: 2 + Fleet2Formation: double_line + Fleet2Mode: combat_auto + Fleet2Step: 3 + FleetOrder: fleet1_all_fleet2_standby + Submarine: + AutoRecommend: false + AutoSearchMode: sub_standby + HuntMode: do_not_use + Timing: default + DistanceToBoss: use_open_ocean_support + Emotion: + Mode: + type: lock + value: calculate_ignore + option: [ calculate_ignore ] + option_bold: [ calculate_ignore ] + Fleet1Control: prevent_yellow_face + Fleet2Value: 119 + Fleet2Record: 2020-01-01 00:00:00 + Fleet2Control: prevent_yellow_face + Fleet2Recover: not_in_dormitory + Fleet2Oath: false + Fleet2Onsen: False CoalitionSp: Scheduler: SuccessInterval: 30 diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index af62bb056..9b6bfb717 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -115,6 +115,15 @@ Event: - Fleet - Submarine - Emotion + CoalitionScuttle: + - Scheduler + - CoalitionScuttle + - Campaign + - Coalition + - StopCondition + - Fleet + - Submarine + - Emotion Hospital: - Scheduler - Hospital diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 37666eacf..38914814f 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -216,6 +216,9 @@ class GeneratedConfig: # Group `MaritimeEscort` MaritimeEscort_Enable = True + # Group `CoalitionScuttle` + CoalitionScuttle_Sacrifice = 'vanguard' # vanguard, flagship + # Group `Coalition` Coalition_Mode = 'hard' # easy, normal, hard, sp Coalition_Fleet = 'single' # single, multi diff --git a/module/config/config_manual.py b/module/config/config_manual.py index d21952216..5281d0bed 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -26,7 +26,8 @@ class ManualConfig: > Daily > Hard > OpsiAshBeacon > OpsiAshAssist > OpsiMonthBoss > Sos > EventSp > EventA > EventB > EventC > EventD > RaidDaily > CoalitionSp > WarArchives > MaritimeEscort - > Event > Event2 > Raid > RaidScuttle > Hospital > HospitalEvent > Coalition > Main > Main2 > Main3 + > Event > Event2 > Raid > RaidScuttle > Hospital > HospitalEvent > Coalition > CoalitionScuttle + > Main > Main2 > Main3 > OpsiMeowfficerFarming > GemsFarming > OpsiHazard1Leveling diff --git a/module/config/config_updater.py b/module/config/config_updater.py index 39e5fbca6..546ca703c 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -35,7 +35,7 @@ EVENTS = ['Event', 'Event2', 'EventA', 'EventB', 'EventC', 'EventD', 'EventSp'] GEMS_FARMINGS = ['GemsFarming'] RAIDS = ['Raid', 'RaidDaily', 'RaidScuttle'] WAR_ARCHIVES = ['WarArchives'] -COALITIONS = ['Coalition', 'CoalitionSp'] +COALITIONS = ['Coalition', 'CoalitionSp', 'CoalitionScuttle'] MARITIME_ESCORTS = ['MaritimeEscort'] HOSPITAL = ['Hospital', 'HospitalEvent'] diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index d0188bf3f..ab599e23f 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -90,6 +90,10 @@ "name": "Raid Scuttle", "help": "" }, + "CoalitionScuttle": { + "name": "Coalition Scuttle", + "help": "" + }, "Hospital": { "name": "Valley Hospital Story", "help": "" @@ -1517,6 +1521,18 @@ "help": "" } }, + "CoalitionScuttle": { + "_info": { + "name": "Coalition Scuttle", + "help": "" + }, + "Sacrifice": { + "name": "Ship to sacrifice", + "help": "", + "vanguard": "Vanguard", + "flagship": "Flagship" + } + }, "Coalition": { "_info": { "name": "Event Settings", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 6591e72c5..0986ee8ec 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -90,6 +90,10 @@ "name": "Task.RaidScuttle.name", "help": "Task.RaidScuttle.help" }, + "CoalitionScuttle": { + "name": "Task.CoalitionScuttle.name", + "help": "Task.CoalitionScuttle.help" + }, "Hospital": { "name": "病院探訪ストーリー", "help": "" @@ -1517,6 +1521,18 @@ "help": "MaritimeEscort.Enable.help" } }, + "CoalitionScuttle": { + "_info": { + "name": "CoalitionScuttle._info.name", + "help": "CoalitionScuttle._info.help" + }, + "Sacrifice": { + "name": "CoalitionScuttle.Sacrifice.name", + "help": "CoalitionScuttle.Sacrifice.help", + "vanguard": "vanguard", + "flagship": "flagship" + } + }, "Coalition": { "_info": { "name": "Coalition._info.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index a4bd08b44..2bdd2921a 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -90,6 +90,10 @@ "name": "共斗沉船", "help": "" }, + "CoalitionScuttle": { + "name": "协斗沉船", + "help": "" + }, "Hospital": { "name": "深谷来信", "help": "" @@ -1517,6 +1521,18 @@ "help": "" } }, + "CoalitionScuttle": { + "_info": { + "name": "协斗沉船", + "help": "" + }, + "Sacrifice": { + "name": "牺牲船位置", + "help": "", + "vanguard": "前排", + "flagship": "旗舰" + } + }, "Coalition": { "_info": { "name": "活动设置", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 340096db3..21e2f3941 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -90,6 +90,10 @@ "name": "共鬥鑿船", "help": "" }, + "CoalitionScuttle": { + "name": "協鬥鑿船", + "help": "" + }, "Hospital": { "name": "深谷来信", "help": "" @@ -1517,6 +1521,18 @@ "help": "" } }, + "CoalitionScuttle": { + "_info": { + "name": "協鬥鑿船", + "help": "" + }, + "Sacrifice": { + "name": "牺牲船位置", + "help": "", + "vanguard": "前排", + "flagship": "旗舰" + } + }, "Coalition": { "_info": { "name": "活動設定",