1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 18:39:25 +08:00
Files
Alas/module/luahook/crack.py
2025-03-18 22:37:03 +08:00

185 lines
7.1 KiB
Python

from typing import Union, List, Type
from module.config.config import AzurLaneConfig
from module.config.utils import deep_get
from module.device.device import Device
from module.luahook.api import CrackApi
from module.luahook.op import CrackOp
ALL_ENABLE_OPS = [
CrackOp.EnableGlobalShipProperties,
CrackOp.EnableChapterFastMove,
CrackOp.EnableRemoveHardModeLimit,
CrackOp.EnableFakePlayer,
CrackOp.EnableNoBBAnimation,
CrackOp.EnableNoEmotionWarning,
CrackOp.EnableOpsiFastMove,
]
def do_crack_op(config: AzurLaneConfig, device: Device, ops: Union[Type[CrackOp.Op], List[Type[CrackOp.Op]]]):
if deep_get(config.data, "Hook.HookGeneral.Enable", False):
return
if isinstance(ops, list):
l = ops
else:
if ops == CrackOp.EnableAll:
l = ALL_ENABLE_OPS
else:
l = [ops]
base_url = f"http://127.0.0.1:{device.adb.forward_port(7540)}"
api = CrackApi(base_url)
for op in l:
if op == CrackOp.DisableAll:
api.disable_all()
elif op == CrackOp.EnableGlobalShipProperties:
if not deep_get(config.data, "Hook.ShipProperty.Enable", False):
continue
api.update_global_ship_properties(
CrackApi.ShipProperties(
armor=float(deep_get("Hook.ShipProperty.Armor", -1)),
speed=float(deep_get("Hook.ShipProperty.Speed", -1)),
antiaircraft=float(deep_get("Hook.ShipProperty.AntiAircraft", -1)),
oxy_recovery_bench=float(deep_get("Hook.ShipProperty.OxyRecoveryBench", -1)),
torpedo=float(deep_get("Hook.ShipProperty.Torpedo", -1)),
hit=float(deep_get("Hook.ShipProperty.Hit", -1)),
sonarRange=float(deep_get("Hook.ShipProperty.SonarRange", -1)),
attack_duration=float(deep_get("Hook.ShipProperty.AttackDuration", -1)),
raid_distance=float(deep_get("Hook.ShipProperty.RaidDistance", -1)),
oxy_recovery_surface=float(deep_get("Hook.ShipProperty.OxyRecoverySurface", -1)),
oxy_recovery=float(deep_get("Hook.ShipProperty.OxyRecovery", -1)),
dodge=float(deep_get("Hook.ShipProperty.Dodge", -1)),
luck=float(deep_get("Hook.ShipProperty.Luck", -1)),
reload=float(deep_get("Hook.ShipProperty.Reload", -1)),
oxy_cost=float(deep_get("Hook.ShipProperty.OxyCost", -1)),
durability=float(deep_get("Hook.ShipProperty.Durability", -1)),
air=float(deep_get("Hook.ShipProperty.Air", -1)),
oxy_max=float(deep_get("Hook.ShipProperty.OxyMax", -1)),
cannon=float(deep_get("Hook.ShipProperty.Cannon", -1)),
antisub=float(deep_get("Hook.ShipProperty.AntiSub", -1)),
)
)
api.enable_global_ship_properties_crack()
elif op == CrackOp.DisableGlobalShipProperties:
api.disable_global_ship_properties_crack()
elif op == CrackOp.EnableChapterFastMove:
if not deep_get(config.data, "Hook.Misc.ChapterMove", False):
continue
api.enable_fast_stage_move()
elif op == CrackOp.DisableChapterFastMove:
api.disable_fast_stage_move()
elif op == CrackOp.EnableRemoveHardModeShipPropertiesLimit:
if deep_get(config.data, "Hook.Misc.RemoveHardMapLimit", "") != "remove_ship_properties_limit":
continue
api.enable_remove_hard_mode_ship_properties_limit()
elif op == CrackOp.DisableRemoveHardModeShipPropertiesLimit:
api.disable_remove_hard_mode_ship_properties_limit()
elif op == CrackOp.EnableRemoveHardModeShipTypeLimit:
if deep_get(config.data, "Hook.Misc.RemoveHardMapLimit", "") != "remove_ship_type_limit":
continue
api.enable_remove_hard_mode_ship_type_limit()
elif op == CrackOp.DisableRemoveHardModeShipTypeLimit:
api.disable_remove_hard_mode_ship_type_limit()
elif op == CrackOp.EnableRemoveHardModeLimit:
if deep_get(config.data, "Hook.Misc.RemoveHardMapLimit", "") != "remove_all_limit":
continue
api.enable_remove_hard_mode_limit()
elif op == CrackOp.DisableRemoveHardModeLimit:
api.disable_remove_hard_mode_limit()
elif op == CrackOp.EnableFakePlayer:
if not deep_get(config.data, "Hook.FakePlayer.Enable", False):
continue
api.update_fake_player_info(
CrackApi.FakePlayerInfo(
name=str(deep_get("Hook.FakePlayer.Name", "")),
level=str(deep_get("Hook.FakePlayer.Level", "")),
id=str(deep_get("Hook.FakePlayer.Id", "")),
)
)
api.enable_fake_player()
elif op == CrackOp.DisableFakePlayer:
api.disable_fake_player()
elif op == CrackOp.EnableNoBBAnimation:
if not deep_get(config.data, "Hook.Misc.NoBBAnimation", False):
continue
api.enable_no_bb_animation()
elif op == CrackOp.DisableNoBBAnimation:
api.disable_no_bb_animation()
elif op == CrackOp.EnableNoEmotionWarning:
if not deep_get(config.data, "Hook.Misc.NoEmotionWarning", False):
continue
api.enable_no_emotion_warning()
elif op == CrackOp.DisableNoEmotionWarning:
api.disable_no_emotion_warning()
elif op == CrackOp.IsAlive:
api.is_alive()
else:
raise ValueError(f"Unknown op: {op}")
def crack_op(ops: Union[Type[CrackOp.Op], List[Type[CrackOp.Op]]]):
def inner(f):
def wrapper(*args, **kwargs):
obj = args[0]
do_crack_op(obj.config, obj.device, ops)
return f(*args, **kwargs)
return wrapper
return inner
def disable_all_crack(f):
def wrapper(*args, **kwargs):
obj = args[0]
do_crack_op(obj.config, obj.device, CrackOp.DisableAll)
return f(*args, **kwargs)
return wrapper
def enable_all_crack(f):
def wrapper(*args, **kwargs):
obj = args[0]
do_crack_op(obj.config, obj.device, CrackOp.EnableAll)
return f(*args, **kwargs)
return wrapper
CHAPTER_CRACK_OPS = [
CrackOp.EnableChapterFastMove,
CrackOp.EnableNoBBAnimation,
CrackOp.EnableNoEmotionWarning,
CrackOp.EnableGlobalShipProperties,
CrackOp.EnableRemoveHardModeLimit,
CrackOp.EnableFakePlayer,
]
def chapter_task_crack(f):
def wrapper(*args, **kwargs):
obj = args[0]
do_crack_op(obj.config, obj.device, CHAPTER_CRACK_OPS)
return f(*args, **kwargs)
return wrapper
OPSI_CRACK_OPS = [
CrackOp.EnableNoBBAnimation,
CrackOp.EnableOpsiFastMove,
CrackOp.EnableGlobalShipProperties,
CrackOp.EnableFakePlayer,
]
def opsi_task_crack(f):
def wrapper(*args, **kwargs):
obj = args[0]
do_crack_op(obj.config, obj.device, OPSI_CRACK_OPS)
return f(*args, **kwargs)
return wrapper