diff --git a/config/template.json b/config/template.json index 166d95df1..7c13bb677 100644 --- a/config/template.json +++ b/config/template.json @@ -37,6 +37,7 @@ "ResearchRecord": "do_not", "CommissionRecord": "do_not", "CombatRecord": "do_not", + "MetaRecord": "do_not", "OpsiRecord": "do_not", "MeowfficerBuy": "do_not", "MeowfficerTalent": "do_not" diff --git a/module/config/argument/args.json b/module/config/argument/args.json index e09241841..2e4c8e833 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -275,6 +275,14 @@ "save" ] }, + "MetaRecord": { + "type": "select", + "value": "do_not", + "option": [ + "do_not", + "save" + ] + }, "OpsiRecord": { "type": "select", "value": "do_not", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index b1a231d41..cc2f4b015 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -114,6 +114,9 @@ DropRecord: CombatRecord: value: do_not option: [ do_not, save ] + MetaRecord: + value: do_not + option: [ do_not, save ] OpsiRecord: value: do_not option: [ do_not, save, upload, save_and_upload ] diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 67da2c813..0fb09f9ec 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -54,6 +54,7 @@ class GeneratedConfig: DropRecord_ResearchRecord = 'do_not' # do_not, save, upload, save_and_upload DropRecord_CommissionRecord = 'do_not' # do_not, save, upload, save_and_upload DropRecord_CombatRecord = 'do_not' # do_not, save + DropRecord_MetaRecord = 'do_not' # do_not, save DropRecord_OpsiRecord = 'do_not' # do_not, save, upload, save_and_upload DropRecord_MeowfficerBuy = 'do_not' # do_not, save DropRecord_MeowfficerTalent = 'do_not' # do_not, save, upload, save_and_upload diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 43ecfa200..94ac91039 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -612,6 +612,12 @@ "do_not": "Do nothing", "save": "Save" }, + "MetaRecord": { + "name": "Meta Record", + "help": "", + "do_not": "Do nothing", + "save": "Save" + }, "OpsiRecord": { "name": "OpSi Record", "help": "", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 500c245b2..f4a896b71 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -612,6 +612,12 @@ "do_not": "do_not", "save": "save" }, + "MetaRecord": { + "name": "DropRecord.MetaRecord.name", + "help": "DropRecord.MetaRecord.help", + "do_not": "do_not", + "save": "save" + }, "OpsiRecord": { "name": "DropRecord.OpsiRecord.name", "help": "DropRecord.OpsiRecord.help", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 9112a7e79..bebedd5db 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -612,6 +612,12 @@ "do_not": "无操作", "save": "保存" }, + "MetaRecord": { + "name": "Meta结算截图", + "help": "启用后会放缓结算时的点击速度", + "do_not": "无操作", + "save": "保存" + }, "OpsiRecord": { "name": "大世界掉落截图", "help": "", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 7db74088b..1855c11d7 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -612,6 +612,12 @@ "do_not": "無操作", "save": "保存" }, + "MetaRecord": { + "name": "DropRecord.MetaRecord.name", + "help": "DropRecord.MetaRecord.help", + "do_not": "do_not", + "save": "save" + }, "OpsiRecord": { "name": "大世界掉落截圖", "help": "", diff --git a/module/os_ash/ash.py b/module/os_ash/ash.py index f33c07686..7360700bb 100644 --- a/module/os_ash/ash.py +++ b/module/os_ash/ash.py @@ -2,6 +2,7 @@ from datetime import datetime, timedelta import module.config.server as server +from module.base.timer import Timer from module.base.utils import image_left_strip from module.combat.combat import BATTLE_PREPARATION, Combat from module.config.utils import DEFAULT_TIME @@ -11,6 +12,7 @@ from module.os_ash.assets import * from module.os_handler.map_event import MapEventHandler from module.ui.assets import BACK_ARROW from module.ui.ui import UI +from module.statistics.azurstats import DropImage class DailyDigitCounter(DigitCounter): @@ -37,7 +39,9 @@ class AshCombat(Combat): return False if self.appear(BATTLE_STATUS, offset=(120, 20), interval=self.battle_status_click_interval): if drop: - drop.handle_add(self) + self.device.sleep(3) + self.device.screenshot() + drop.add(self.device.image) else: self.device.sleep((0.25, 0.5)) self.device.click(BATTLE_STATUS) @@ -45,7 +49,7 @@ class AshCombat(Combat): if self.appear(BATTLE_PREPARATION, offset=(30, 30), interval=2): self.device.click(BACK_ARROW) return True - if super().handle_battle_status(drop=drop): + if super().handle_battle_status(): return True return False @@ -77,9 +81,68 @@ class AshCombat(Combat): return False - def combat(self, *args, expected_end=None, **kwargs): + def combat_execute(self, auto='combat_auto', submarine='do_not_use', drop=None): + """ + Args: + auto (str): ['combat_auto', 'combat_manual', 'stand_still_in_the_middle', 'hide_in_bottom_left'] + submarine (str): ['do_not_use', 'hunt_only', 'every_combat'] + drop (DropImage): + """ + logger.info('Combat execute') + auto = 'combat_auto' + self.submarine_call_reset() + self.combat_auto_reset() + self.combat_manual_reset() + self.device.stuck_record_clear() + self.device.click_record_clear() + confirm_timer = Timer(10) + confirm_timer.start() + + while 1: + self.device.screenshot() + + if not confirm_timer.reached(): + if self.handle_combat_automation_confirm(): + continue + + if self.handle_story_skip(): + continue + if self.handle_combat_auto(auto): + continue + if self.handle_combat_manual(auto): + continue + if auto != 'combat_auto' and self.auto_mode_checked and self.is_combat_executing(): + if self.handle_combat_weapon_release(): + continue + if self.handle_submarine_call(submarine): + continue + if self.handle_popup_confirm('COMBAT_EXECUTE'): + continue + + # End + if self.handle_get_items(): + self.device.sleep((0.5,0.75)) + continue + if self.handle_battle_status(drop=drop): + break + + def combat(self, balance_hp=None, emotion_reduce=None, auto_mode="combat_auto", submarine_mode=None, + save_get_items=None, expected_end=None, fleet_index=1): try: - super().combat(*args, expected_end=expected_end, **kwargs) + with self.stat.new( + genre="meta", method=self.config.DropRecord_MetaRecord + ) as drop: + if save_get_items is False: + drop = None + elif isinstance(save_get_items, DropImage): + drop = save_get_items + self.combat_preparation( + balance_hp=balance_hp, emotion_reduce=emotion_reduce, auto=auto_mode, fleet_index=fleet_index) + self.combat_execute(drop=drop, + auto=auto_mode, submarine=submarine_mode) + self.combat_status(expected_end=expected_end) + + logger.info('Combat end.') except AshBeaconFinished: pass diff --git a/module/os_ash/meta.py b/module/os_ash/meta.py index 382a241b5..79f15727c 100644 --- a/module/os_ash/meta.py +++ b/module/os_ash/meta.py @@ -156,7 +156,11 @@ class OpsiAshBeacon(Meta): # Attack combat = AshCombat(config=self.config, device=self.device) - combat.combat(expected_end=expected_end, save_get_items=False, emotion_reduce=False) + if self.config.DropRecord_MetaRecord == "save": + _save = True + else: + _save = False + combat.combat(expected_end=expected_end, save_get_items=_save, emotion_reduce=False) def _handle_ash_beacon_reward(self, skip_first_screenshot=True): """ @@ -548,7 +552,11 @@ class AshBeaconAssist(Meta): # Attack combat = AshCombat(config=self.config, device=self.device) - combat.combat(expected_end=expected_end, save_get_items=False, emotion_reduce=False) + if self.config.DropRecord_MetaRecord == "save": + _save = True + else: + _save = False + combat.combat(expected_end=expected_end, save_get_items=_save, emotion_reduce=False) def _ensure_meta_level(self): """