From 089095dff1798e6d3d3a9339ee4014de7f052ff3 Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Sat, 20 Sep 2025 22:02:16 +0800 Subject: [PATCH] add: migrate NoOpsiMeowfficerFarming and NoYellowCoinLimit for OpsiHazard1Leveling --- config/template.json | 2 + module/config/argument/args.json | 8 +++ module/config/argument/argument.yaml | 2 + module/config/config_generated.py | 2 + module/config/full_config_generated.py | 2 + module/config/i18n/en-US.json | 8 +++ module/config/i18n/ja-JP.json | 8 +++ module/config/i18n/zh-CN.json | 8 +++ module/config/i18n/zh-TW.json | 8 +++ module/os/operation_siren.py | 67 ++++++++++++++++++++++++++ 10 files changed, 115 insertions(+) diff --git a/config/template.json b/config/template.json index a985e7d44..704d9fe4c 100644 --- a/config/template.json +++ b/config/template.json @@ -2585,6 +2585,8 @@ }, "OpsiHazard1Leveling": { "HigherPriority": false, + "NoOpsiMeowfficerFarming": false, + "NoYellowCoinLimit": false, "TargetZone": 0 }, "OpsiFleet": { diff --git a/module/config/argument/args.json b/module/config/argument/args.json index ff4738d54..ed44fd8af 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -16597,6 +16597,14 @@ "type": "checkbox", "value": false }, + "NoOpsiMeowfficerFarming": { + "type": "checkbox", + "value": false + }, + "NoYellowCoinLimit": { + "type": "checkbox", + "value": false + }, "TargetZone": { "type": "select", "value": 0, diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index acf972a3b..e63f0b218 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -744,6 +744,8 @@ OpsiMeowfficerFarming: value: 0 OpsiHazard1Leveling: HigherPriority: false + NoOpsiMeowfficerFarming: false + NoYellowCoinLimit: false TargetZone: value: 0 option: [ 0, 44, 22 ] diff --git a/module/config/config_generated.py b/module/config/config_generated.py index a04975a48..92ee32f61 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -445,6 +445,8 @@ class GeneratedConfig: # Group `OpsiHazard1Leveling` OpsiHazard1Leveling_HigherPriority = False + OpsiHazard1Leveling_NoOpsiMeowfficerFarming = False + OpsiHazard1Leveling_NoYellowCoinLimit = False OpsiHazard1Leveling_TargetZone = 0 # 0, 44, 22 # Group `Daemon` diff --git a/module/config/full_config_generated.py b/module/config/full_config_generated.py index dfe43c294..3a1a519e6 100644 --- a/module/config/full_config_generated.py +++ b/module/config/full_config_generated.py @@ -1878,6 +1878,8 @@ class FullGeneratedConfig: OpsiHazard1Leveling_Scheduler_FailureInterval = None OpsiHazard1Leveling_Scheduler_ServerUpdate = None OpsiHazard1Leveling_OpsiHazard1Leveling_HigherPriority = None + OpsiHazard1Leveling_OpsiHazard1Leveling_NoOpsiMeowfficerFarming = None + OpsiHazard1Leveling_OpsiHazard1Leveling_NoYellowCoinLimit = None OpsiHazard1Leveling_OpsiHazard1Leveling_TargetZone = None OpsiHazard1Leveling_OpsiFleet_Fleet = None OpsiHazard1Leveling_OpsiFleet_Submarine = None diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index b4ac65f77..d25e8876b 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -2617,6 +2617,14 @@ "name": "OpsiHazard1Leveling.HigherPriority.name", "help": "OpsiHazard1Leveling.HigherPriority.help" }, + "NoOpsiMeowfficerFarming": { + "name": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.name", + "help": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.help" + }, + "NoYellowCoinLimit": { + "name": "OpsiHazard1Leveling.NoYellowCoinLimit.name", + "help": "OpsiHazard1Leveling.NoYellowCoinLimit.help" + }, "TargetZone": { "name": "Target Zone ID", "help": "Only attack target zone, which can be used to avoid the event that the map cannot be refreshed due to game bug", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 60f3f25cf..61f78e31e 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -2617,6 +2617,14 @@ "name": "OpsiHazard1Leveling.HigherPriority.name", "help": "OpsiHazard1Leveling.HigherPriority.help" }, + "NoOpsiMeowfficerFarming": { + "name": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.name", + "help": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.help" + }, + "NoYellowCoinLimit": { + "name": "OpsiHazard1Leveling.NoYellowCoinLimit.name", + "help": "OpsiHazard1Leveling.NoYellowCoinLimit.help" + }, "TargetZone": { "name": "OpsiHazard1Leveling.TargetZone.name", "help": "OpsiHazard1Leveling.TargetZone.help", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index d24f39b60..c7155c546 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -2617,6 +2617,14 @@ "name": "更高优先级", "help": "开启后会将优先级调整到紧急委托前面" }, + "NoOpsiMeowfficerFarming": { + "name": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.name", + "help": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.help" + }, + "NoYellowCoinLimit": { + "name": "OpsiHazard1Leveling.NoYellowCoinLimit.name", + "help": "OpsiHazard1Leveling.NoYellowCoinLimit.help" + }, "TargetZone": { "name": "指定海域", "help": "仅出击指定的海域,可以用来规避游戏BUG导致的无法刷新海域", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 34813b82a..f6fff9d10 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -2617,6 +2617,14 @@ "name": "OpsiHazard1Leveling.HigherPriority.name", "help": "OpsiHazard1Leveling.HigherPriority.help" }, + "NoOpsiMeowfficerFarming": { + "name": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.name", + "help": "OpsiHazard1Leveling.NoOpsiMeowfficerFarming.help" + }, + "NoYellowCoinLimit": { + "name": "OpsiHazard1Leveling.NoYellowCoinLimit.name", + "help": "OpsiHazard1Leveling.NoYellowCoinLimit.help" + }, "TargetZone": { "name": "指定海域", "help": "僅出擊指定的海域,可以用來規避遊戲BUG導致的無法重繪海域", diff --git a/module/os/operation_siren.py b/module/os/operation_siren.py index 0ad96dce3..722cd9844 100644 --- a/module/os/operation_siren.py +++ b/module/os/operation_siren.py @@ -897,6 +897,73 @@ class OperationSiren(OSMap): self.config.task_stop() +class OperationSiren(OperationSiren): + def os_hazard1_leveling(self): + logger.hr('OS hazard 1 leveling', level=1) + # Without these enabled, CL1 gains 0 profits + self.config.override( + OpsiGeneral_DoRandomMapEvent=True, + OpsiGeneral_AkashiShopFilter='ActionPoint', + ) + + full_config = self.config.full_config + no_opsi_meowfficer_farming = full_config.OpsiHazard1Leveling_OpsiHazard1Leveling_NoOpsiMeowfficerFarming + no_yellow_coin_limit = full_config.OpsiHazard1Leveling_NoYellowCoinLimit + + if no_opsi_meowfficer_farming: + logger.info(f"No OpsiMeowfficerFarming is enabled in OpsiHazard1Leveling") + else: + if not self.config.is_task_enabled('OpsiMeowfficerFarming'): + self.config.cross_set(keys='OpsiMeowfficerFarming.Scheduler.Enable', value=True) + + while True: + # Limited action point preserve of hazard 1 to 200 + self.config.OS_ACTION_POINT_PRESERVE = 200 + if self.config.is_task_enabled('OpsiAshBeacon') \ + and not self._ash_fully_collected \ + and self.config.OpsiAshBeacon_EnsureFullyCollected: + logger.info('Ash beacon not fully collected, ignore action point limit temporarily') + self.config.OS_ACTION_POINT_PRESERVE = 0 + logger.attr('OS_ACTION_POINT_PRESERVE', self.config.OS_ACTION_POINT_PRESERVE) + + if not no_yellow_coin_limit: + if self.get_yellow_coins() < self.config.OS_CL1_YELLOW_COINS_PRESERVE: + logger.info(f'Reach the limit of yellow coins, preserve={self.config.OS_CL1_YELLOW_COINS_PRESERVE}') + with self.config.multi_set(): + self.config.task_delay(server_update=True) + if not self.is_in_opsi_explore(): + self.config.task_call('OpsiMeowfficerFarming') + self.config.task_stop() + + self.get_current_zone() + + # Preset action point to 70 + # When running CL1 oil is for running CL1, not meowfficer farming + keep_current_ap = True + if self.config.OpsiGeneral_BuyActionPointLimit > 0: + keep_current_ap = False + self.action_point_set(cost=70, keep_current_ap=keep_current_ap, check_rest_ap=True) + if self._action_point_total >= 3000 and not no_opsi_meowfficer_farming: + with self.config.multi_set(): + self.config.task_delay(server_update=True) + if not self.is_in_opsi_explore(): + self.config.task_call('OpsiMeowfficerFarming') + self.config.task_stop() + + if self.config.OpsiHazard1Leveling_TargetZone != 0: + zone = self.config.OpsiHazard1Leveling_TargetZone + else: + zone = 22 + logger.hr(f'OS hazard 1 leveling, zone_id={zone}', level=1) + if self.zone.zone_id != zone or not self.is_zone_name_hidden: + self.globe_goto(self.name_to_zone(zone), types='SAFE', refresh=True) + self.fleet_set(self.config.OpsiFleet_Fleet) + self.run_strategic_search() + + self.handle_after_auto_search() + self.config.check_task_switch() + + if __name__ == '__main__': self = OperationSiren('month_test', task='OpsiMonthBoss') from module.os.config import OSConfig