Skip to content

API Reference LawnMod

Mewnojs edited this page May 23, 2023 · 1 revision

LawnMod API 参考

这里的信息可能不会及时更新,请以代码注释为准

LawnMod.MonoModUtils

各种辅助MonoMod以及使用IronPython进行动态Hook的工具,例如将Python函数转为MonoMod.RuntimeDetour.DynamicHookGen可用的形式

LawnMod.MonoModUtils.As(dynamic funcOrMethoddesc)

Python装饰器,将Python函数转换为Hook一个C#方法所需的Delegate类型

参数:

  • funcOrMethoddesc 要Hook的C#方法的Python封装

返回值:

​ 一个装饰器,其接受Python函数,返回所需的Delegate类型

用法示例:

# 定义一个Hook函数
@LawnMod.MonoModUtils.As(要被Hook的方法)
def Hook函数(orig, *要被Hook的方法的参数):
    # 修改"要被Hook的方法参数"或者其他操作
    orig(*要被Hook的方法的参数) # 也可以不调用orig原函数而是拦截

MonoModUtils.On.要被Hook的方法 += Hook函数 # 应用Hook
MonoModUtils.On.要被Hook的方法 -= Hook函数 # 解除Hook
# 定义一个Hook函数2
LawnMod.MonoModUtils.As(要被Hook的方法)(
    lambda orig, *要被Hook的方法的参数: orig(*[对参数做某些操作(i,index) for index,i in enumerate(要被Hook的方法的参数)])
)
# 应用与解除Hook的方法与上面一致

LawnMod.MonoModUtils.HookTo(dynamic funcOrMethoddesc, MonoMod.RuntimeDetour.DynamicHookGen.HookType hookType = OnOrIL)

Python装饰器,为Python函数Hook一个特定的C#方法 参数:

  • funcOrMethoddesc 要Hook的C#方法的Python封装
  • hookType Hook的类型,默认为MonoMod.RuntimeDetour.DynamicHookGen.HookType.OnOrIL

返回值:

​ 一个装饰器,其接受Python函数,返回一个HookResult对象,通过此掌控Hook的生命周期

用法示例:

# 直接应用Hook到某个函数
@LawnMod.MonoModUtils.HookTo(要被Hook的方法, MonoMod.RuntimeDetour.DynamicHookGen.HookType.On)
def Hook函数会变成HookResult对象(orig, *要被Hook的方法的参数):
    # 修改"要被Hook的方法参数"或者其他操作
    orig(*要被Hook的方法的参数) # 也可以不调用orig原函数而是拦截
# 在此之后通过"Hook函数会变成HookResult对象"访问HookResult对象

# 手动指定参数调用Hook函数
Hook函数会变成HookResult对象(*指定参数)
# 解除Hook
Hook函数会变成HookResult对象.UnHook()

其余内容待更新...