From 90bf70f578bc6db3506b44fcf7339aa20ba70ea3 Mon Sep 17 00:00:00 2001 From: Zuosizhu <2839299264@qq.com> Date: Sun, 21 Jul 2024 02:33:06 +0800 Subject: [PATCH] Adj: Only enable ShipChanger in GemsFarming --- alas.py | 8 ++--- module/base/timer.py | 10 +++--- module/gg_handler/gg_data.py | 7 +++- module/gg_handler/gg_handler.py | 44 +++++++++++++++++++++--- module/gg_handler/gg_u2.py | 60 +++++++++++++++++++++++---------- 5 files changed, 98 insertions(+), 31 deletions(-) diff --git a/alas.py b/alas.py index 08029f04b..29f53c104 100644 --- a/alas.py +++ b/alas.py @@ -606,13 +606,13 @@ class AzurLaneAutoScript: def loop(self): gl.gl_set("g_config", self.config) - + GGH=GGHandler(config=self.config, device=self.device) self.gg_check() logger.set_file_logger(self.config_name) logger.info(f'Start scheduler loop: {self.config_name}') # Try forced task_call restart to reset GG status self.checker.wait_until_available() - GGHandler(config=self.config, device=self.device).handle_restart_before_tasks() + GGH.handle_restart_before_tasks() check_fail = 0 while 1: # Check update event from GUI @@ -651,9 +651,9 @@ class AzurLaneAutoScript: continue # Check GG config before a task begins (to reset temporary config), and decide to enable it. - GGHandler(config=self.config, device=self.device).check_config() + GGH.check_config() try: - GGHandler(config=self.config, device=self.device).check_then_set_gg_status(inflection.underscore(task)) + GGH.check_then_set_gg_status(inflection.underscore(task)) check_fail = 0 except GameStuckError: del_cached_property(self, 'config') diff --git a/module/base/timer.py b/module/base/timer.py index 530af0708..1546c774b 100644 --- a/module/base/timer.py +++ b/module/base/timer.py @@ -46,15 +46,15 @@ from functools import wraps # return decorator2 # # return decorator -def timeout(func, timeout_sec=30.0, *args, **kwargs): +def timeout(_function, timeout_sec=30.0, *args, **kwargs): """Won't kill that task until it finishes""" from threading import Thread from module.logger import logger - def function_timeout(func): + def function_timeout(_func): t0 = time.time() success = True - p = Thread(target=func, args=args, kwargs=kwargs) + p = Thread(target=_func, args=args, kwargs=kwargs) p.start() p.join(timeout_sec) if p.is_alive(): @@ -63,11 +63,11 @@ def timeout(func, timeout_sec=30.0, *args, **kwargs): if t1 - t0 < 10: success = False _success = 'Done' if success else 'Failed' - logger.hr(f'{func.__name__}: {_success} in {str(round(t1 - t0, 1))}s', 1) + logger.hr(f'{_func.__name__}: {_success} in {str(round(t1 - t0, 1))}s', 1) if not success: return True return False - return function_timeout(func) + return function_timeout(_function) def timer(function): diff --git a/module/gg_handler/gg_data.py b/module/gg_handler/gg_data.py index f1e66ea64..596fa6346 100644 --- a/module/gg_handler/gg_data.py +++ b/module/gg_handler/gg_data.py @@ -6,6 +6,7 @@ class GGData(ModuleBase): gg_on = False gg_enable = False gg_auto = False + gg_type = False ggdata = {} def __init__(self, config=None): @@ -29,6 +30,7 @@ class GGData(ModuleBase): tmp.write(f'{self.config.config_name}\n') tmp.write('gg_on=False\n') self.ggdata['gg_on'] = False + self.ggdata['gg_type'] = False self.ggdata['gg_enable'] = deep_get(d=self.config.data, keys='GameManager.GGHandler.Enabled', default=False) @@ -37,10 +39,13 @@ class GGData(ModuleBase): default=False) tmp.write('gg_enable=' + str(self.ggdata['gg_enable']) + '\n') tmp.write('gg_auto=' + str(self.ggdata['gg_auto']) + '\n') + tmp.write('gg_type=' + str(self.ggdata['gg_type']) + '\n') tmp.close() else: - for i in range(3): + for i in range(4): line = tmp.readline() + if i == 3 and line == '': + line = 'gg_type=False\n' line1, line2 = line.split('=') self.ggdata[line1] = True if line2[:-1] == 'True' else False tmp.close() diff --git a/module/gg_handler/gg_handler.py b/module/gg_handler/gg_handler.py index fa19c82d2..dab9c035c 100644 --- a/module/gg_handler/gg_handler.py +++ b/module/gg_handler/gg_handler.py @@ -15,6 +15,7 @@ class GGHandler: """ def __init__(self, config=None, device=None): + self.task = '' self.config = config self.device = device self.factor = deep_get(self.config.data, @@ -60,7 +61,8 @@ class GGHandler: # GGU2(config=self.config, device=self.device) \ # .set_on(factor=self.factor) self.handle_u2_restart() - success = timeout(GGU2(config=self.config, device=self.device).set_on, timeout_sec=deep_get(self.config.data, "GameManager.GGHandler.Timeout"), factor=self.factor) + success = self.change_attribute() + success = success and self.multiplier() if success: from module.exception import GameStuckError raise GameStuckError @@ -100,7 +102,7 @@ class GGHandler: gg_data = GGData(self.config).get_data() logger.info(f'GG status:') logger.info( - f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]}') + f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]} Type Changed={gg_data["gg_type"]}') return gg_data def handle_u2_restart(self): @@ -127,9 +129,10 @@ class GGHandler: gg_enable = gg_data['gg_enable'] if gg_enable: GGData(config=self.config).set_data(target='gg_on', value=False) + GGData(config=self.config).set_data(target='gg_type', value=False) logger.info(f'GG status:') logger.info( - f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]}') + f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]} Type Changed={gg_data["gg_type"]}') if not self.skip_error(): logger.hr('Assume game died without GG panel') @@ -156,8 +159,11 @@ class GGHandler: default=False) else False logger.info(f'Check GG status:') logger.info( - f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]}') + f'Enabled={gg_data["gg_enable"]} AutoRestart={gg_data["gg_auto"]} Current stage={gg_data["gg_on"]} ' + f'Type Changed={gg_data["gg_type"]}') if gg_auto: + if not gg_data['gg_type']: + self.change_ship_type(task=self.task) if not gg_data['gg_on']: self.set(True) elif gg_data['gg_on']: @@ -212,6 +218,7 @@ class GGHandler: Args: task : str = the next task to run """ + self.task = task _disabled_task = deep_get(self.config.data, 'GameManager.GGHandler.DisabledTask') """ 'disable_all_dangerous_task' @@ -298,3 +305,32 @@ class GGHandler: self.check_status(False) elif task in _enabled: self.check_status(True) + + def change_ship_type(self, task): + if task == 'gems_farming': + logger.hr('GG Ship Type', level=2) + success = timeout(GGU2(config=self.config, device=self.device).set_on, + timeout_sec=deep_get(self.config.data, "GameManager.GGHandler.Timeout"), + func='change_type', + factor=self.factor) + # success = GGU2(config=self.config, device=self.device).set_on('change_type') + return success + return True + + def change_attribute(self): + logger.hr('GG Attribute', level=2) + success = timeout(GGU2(config=self.config, device=self.device).set_on, + timeout_sec=deep_get(self.config.data, "GameManager.GGHandler.Timeout"), + func='change_attribute', + factor=self.factor) + # GGU2(config=self.config, device=self.device).set_on('change_attribute') + return True + + def multiplier(self): + logger.hr('GG Multiplier', level=2) + success = timeout(GGU2(config=self.config, device=self.device).set_on, + timeout_sec=deep_get(self.config.data, "GameManager.GGHandler.Timeout"), + func='multiplier', + factor=self.factor) + # success = GGU2(config=self.config, device=self.device).set_on(factor=self.factor) + return success diff --git a/module/gg_handler/gg_u2.py b/module/gg_handler/gg_u2.py index c4554043d..de32bc34a 100644 --- a/module/gg_handler/gg_u2.py +++ b/module/gg_handler/gg_u2.py @@ -31,12 +31,16 @@ class GGU2(Base): self.exit() return _skipped - def set_on(self, factor=200): + def set_on(self, func='multiplier', factor=200): + """ + func : 'multiplier' or 'change_type' or 'change_attribute' + factor : factor used in multiplier + """ _name_dict = { - 'en' : 'Azur Lane', - 'cn' : '碧蓝航线', - 'jp' : 'アズールレーン', - 'tw' : '碧藍航線' + 'en': 'Azur Lane', + 'cn': '碧蓝航线', + 'jp': 'アズールレーン', + 'tw': '碧藍航線' } _server = self.config.SERVER _name = _name_dict[_server] @@ -44,9 +48,12 @@ class GGU2(Base): ggdata = GGData(self.config).get_data() for _i in range(1): try: - if ggdata['gg_on']: + if ggdata['gg_on'] and func == 'multiplier': logger.attr('GG', 'Enabled') pass + elif ggdata['gg_type'] and func == 'change_type': + logger.attr('Type', 'Changed') + pass else: chosen = False if self.d(resourceId=f"{self.gg_package_name}:id/hot_point_icon").exists: @@ -104,8 +111,8 @@ class GGU2(Base): ).click() logger.info('Click run Scripts') self.device.sleep(0.3) - if self._run(): - return 1 + self.__getattribute__(func)() + return 1 if self.d.xpath('//*[@text="取消"]').exists: self.d.xpath('//*[@text="取消"]').click() logger.info("Cancel exists but not running script, click cancel") @@ -125,16 +132,28 @@ class GGU2(Base): finally: pass - def _run(self): + def change_type(self): + ShipChanger = ChangeShip(self.config, self.device) + ShipChanger.PushLua() + ShipChanger.ChangeShipType() + GGData(self.config).set_data(target='gg_type', value='True') + self.d.app_stop(self.gg_package_name) + logger.hr('GG Enabled: Type Changed', level=2) + return 1 + + def change_attribute(self): + AttributeChanger = ChangeAttribute(self.config, self.device) + AttributeChanger.PushLua() + AttributeChanger.ChangeAttribute() + self.d.app_stop(self.gg_package_name) + return 1 + + def multiplier(self): _run = False _set = False _confirmed = False import os _repush = deep_get(self.config.data, keys='GameManager.GGHandler.RepushLua') - ShipChanger = ChangeShip(self.config, self.device) - ShipChanger.PushLua() - AttributeChanger = ChangeAttribute(self.config, self.device) - AttributeChanger.PushLua() if _repush: # os.popen(f'"toolkit/Lib/site-packages/adbutils/binaries/adb.exe" -s' # f' {self.device.serial} shell mkdir /sdcard/Notes') @@ -152,8 +171,6 @@ class GGU2(Base): self.device.adb_push("bin/Lua/Multiplier.lua", "/sdcard/Notes/Multiplier.lua") self.device.sleep(0.5) logger.info('Lua Pushed') - ShipChanger.ChangeShipType() - AttributeChanger.ChangeAttribute() while 1: self.device.sleep(1) if self.d(resourceId=f"{self.gg_package_name}:id/search_toolbar").exists: @@ -200,6 +217,15 @@ class GGU2(Base): break else: return 0 - logger.hr('GG Enabled', level=2) + logger.hr('GG Enabled: Multiplied', level=2) self.d.app_stop(self.gg_package_name) - return 1 \ No newline at end of file + return 1 + + +if __name__ == '__main__': + from module.config.config import AzurLaneConfig + from module.device.device import Device + + config = AzurLaneConfig('主号') + device = Device(config) + GGU2(config, device).set_on()