1
0
mirror of https://github.com/TheFunny/ArisuAutoSweeper synced 2025-12-16 19:55:12 +00:00

Compare commits

...

4 Commits

Author SHA1 Message Date
RedDeadDepresso
0594484cd7
Merge 517c0f1033 into 2cad7ebbac 2024-01-06 00:12:26 +00:00
RedDeadDepresso
517c0f1033 feat: exit AAS & emulator 2024-01-06 00:11:18 +00:00
RedDeadDepresso
524f15e2bf fix: bluestacks start emulator 2024-01-05 21:40:28 +00:00
RedDeadDepresso
67310938d2 test: exit emulator 2024-01-05 18:07:29 +00:00
8 changed files with 75 additions and 25 deletions

View File

@ -13,4 +13,7 @@ class CTkAddButton(customtkinter.CTkFrame):
def set_button(self, value):
self.option_menu.set("")
self.button.configure(text=value)
self.button.configure(text=value)
def configure(self, *args, **kwargs):
self.button.configure(*args, **kwargs)

View File

@ -29,6 +29,7 @@ class AzurLaneAutoScript:
# Failure count of tasks
# Key: str, task name, value: int, failure count
self.failure_record = {}
self.operating_system = platform.system()
@cached_property
def config(self):
@ -231,21 +232,21 @@ class AzurLaneAutoScript:
if not self.wait_until(task.next_run):
del_cached_property(self, 'config')
continue
elif method == 'exit_aas':
self.config.Optimization_WhenTaskQueueEmpty = 'goto_main'
self.exit_aas()
exit(1)
elif method == 'exit_emulator':
self.config.Optimization_WhenTaskQueueEmpty = 'goto_main'
self.exit_emulator()
exit(1) # stops AAS from restarting emulator
elif method == 'exit_aas_emulator':
self.exit_emulator()
self.exit_aas()
exit(1)
elif method == 'shutdown':
os = platform.system()
if os not in ["Windows", "Linux", "Darwin"]:
logger.info("Shutdown set during wait but operating system not supported")
else:
logger.info('Shutdown during wait')
try:
self.shutdown(os)
msg = CTkMessagebox(title="AAS: Cancel Shutdown?", message="All tasks have been completed: shutting down. Do you want to cancel?",
icon="MCE\icons\question.png", option_1="Cancel")
response = msg.get()
if response=="Cancel":
self.abort_shutdown(os)
except:
logger.error("Failed to shutdown. It may be due to a lack of administrator privileges.")
self.config.Optimization_WhenTaskQueueEmpty = 'goto_main'
self.shutdown()
release_resources()
self.device.release_during_wait()
if not self.wait_until(task.next_run):
@ -331,17 +332,52 @@ class AzurLaneAutoScript:
self.checker.check_now()
continue
def shutdown(self, os):
def exit_emulator(self):
if self.operating_system != 'Windows':
logger.error("Exiting emulator is only supported on Windows")
return
try:
from module.device.platform.platform_windows import PlatformWindows
PlatformWindows(self.config).emulator_stop()
except:
logger.error("Failed to stop emulator. It may be due to a lack of administrator privileges.")
def exit_aas(self):
if self.operating_system != 'Windows':
logger.error("Exiting AAS is only supported on Windows")
return
try:
from module.device.platform.platform_windows import PlatformWindows
PlatformWindows(self.config).kill_process_by_regex("aas\.exe")
except:
logger.error("Failed to stop AAS. It may be due to a lack of administrator privileges.")
def shutdown(self):
if self.operating_system not in ["Windows", "Linux", "Darwin"]:
logger.error("Shutdown set during wait but operating system not supported")
else:
logger.info('Shutdown during wait')
try:
self.start_shutdown()
msg = CTkMessagebox(title="AAS: Cancel Shutdown?", message="All tasks have been completed: shutting down. Do you want to cancel?",
icon="MCE\icons\question.png", option_1="Cancel")
response = msg.get()
if response=="Cancel":
self.cancel_shutdown()
except:
logger.error("Failed to shutdown. It may be due to a lack of administrator privileges.")
def start_shutdown(self):
logger.info("Running Shutting down")
if os == "Windows":
if self.operating_system == "Windows":
subprocess.run(["shutdown", "-s", "-t", "60"])
elif os in ["Linux", "Darwin"]:
elif self.operating_system in ["Linux", "Darwin"]:
subprocess.run(["shutdown", "-h", "+1"])
def abort_shutdown(self, os):
if os == "Windows":
def cancel_shutdown(self):
if self.operating_system == "Windows":
subprocess.run(["shutdown", "-a"])
elif os in ["Linux", "Darwin"]:
elif self.operating_system in ["Linux", "Darwin"]:
subprocess.run(["shutdown", "-c"])
if __name__ == '__main__':

View File

@ -129,6 +129,9 @@
"stay_there",
"goto_main",
"close_game",
"exit_aas",
"exit_emulator",
"exit_aas_emulator",
"shutdown"
]
}

View File

@ -71,7 +71,7 @@ Optimization:
CombatScreenshotInterval: 1.0
WhenTaskQueueEmpty:
value: goto_main
option: [ stay_there, goto_main, close_game, shutdown ]
option: [ stay_there, goto_main, close_game, exit_aas, exit_emulator, exit_aas_emulator, shutdown ]
# ==================== Daily ====================

View File

@ -37,7 +37,7 @@ class GeneratedConfig:
# Group `Optimization`
Optimization_ScreenshotInterval = 0.3
Optimization_CombatScreenshotInterval = 1.0
Optimization_WhenTaskQueueEmpty = 'goto_main' # stay_there, goto_main, close_game, shutdown
Optimization_WhenTaskQueueEmpty = 'goto_main' # stay_there, goto_main, close_game, exit_aas, exit_emulator, exit_aas_emulator, shutdown
# Group `Cafe`
Cafe_Reward = True

View File

@ -221,10 +221,13 @@
},
"WhenTaskQueueEmpty": {
"name": "When Task Queue is Empty",
"help": "Close AL when there are no pending tasks, can help reduce CPU",
"help": "Close Blue Archive when there are no pending tasks, can help reduce CPU.\nExit AAS, emulator and shutdown should be set while AAS is running tasks otherwise it won't start.\nExit AAS and emulator are only available on Windows.\nExit emulator is only possible if instance name and emulator path follow the same auto-filled values according to 'Serial' in Emulator Settings",
"stay_there": "Stay There",
"goto_main": "Goto Main Page",
"close_game": "Close Game",
"exit_aas": "Exit AAS",
"exit_emulator": "Exit Emulator",
"exit_aas_emulator": "Exit AAS & Emulator",
"shutdown": "Shutdown"
}
},

View File

@ -225,6 +225,9 @@
"stay_there": "停在原处",
"goto_main": "前往主界面",
"close_game": "关闭游戏",
"exit_aas": "exit_aas",
"exit_emulator": "exit_emulator",
"exit_aas_emulator": "exit_aas_emulator",
"shutdown": "shutdown"
}
},

View File

@ -97,7 +97,7 @@ class PlatformWindows(PlatformBase, EmulatorManager):
self.execute(f'"{exe}" -clone:{instance.name}')
elif instance == Emulator.BlueStacks5:
# HD-Player.exe -instance Pie64
self.execute(f'"{exe}" -instance {instance.name}')
self.execute(f'"{exe}" --instance {instance.name}')
elif instance == Emulator.BlueStacks4:
# BlueStacks\Client\Bluestacks.exe -vmname Android_1
self.execute(f'"{exe}" -vmname {instance.name}')
@ -153,6 +153,8 @@ class PlatformWindows(PlatformBase, EmulatorManager):
elif instance == Emulator.NoxPlayerFamily:
# Nox.exe -clone:Nox_1 -quit
self.execute(f'"{exe}" -clone:{instance.name} -quit')
elif instance == Emulator.BlueStacks5:
self.execute(f'taskkill /fi "WINDOWTITLE eq {instance.name}" /IM "HD-Player.exe" /F')
else:
raise EmulatorUnknown(f'Cannot stop an unknown emulator instance: {instance}')