如何hook已有函数

2021-01-14 15:18:16 字数 1960 阅读 1035

1楼:好丽友

从lua的文档来看: the statement function f () ... end translates to f = function () ...

end 那意味着任意一个函数

能被其它的任意一个函数通过一个简单的分配所替代.把这个记在心里,它将变得很容易去“hook”,或者是添加你自己的函数到一个预先定义好的函数中. # hook 有钩住,钩子的意思.

警告:这个部分包含过时的信息.比如说我们想显示那些我们级别高很多的玩家和怪的级别来替代骷髅.

隐藏级别的函数是targetframe_checklevel(),因此我们需要hook那个函数来让它不要隐藏级别. 让我们假设我们的插件被命名为"myaddon",并且有一个onload处理器被它的xml 事件所调用.在lua的文档中我们应该有:

local myaddon_orig_targetframe_checklevel; function myaddon_onload() myaddon_orig_targetframe_checklevel = targetframe_checklevel; -- 存储原始的函数 targetframe_checklevel = myaddon_targetframe_checklevel; -- hook进我们的 end 因此上面所做的就是它存储原始"targetframe_checklevel" 的参量到"myaddon_orig_targetframe_checklevel".接着它用我们的函数替换了原始的,因此现在任何人调用targetframe_checklevel()时实际上得到的是被myaddon_targetframe_checklevel()所替代的. 下一步就是创建我们的myaddon_targetframe_checklevel().

让我们假设我们想要它显示目标的级别. function myaddon_targetframe_checklevel() local retval = myaddon_orig_targetframe_checklevel(); -- 调用原始的函数 targetleveltext:show(); targethighleveltexture:

hide(); return retval; end 因此在这个函数中,我们首先调用老的函数让它做它必需做的.接着,显示级别并且隐藏骷髅.非常简单不是吗?

这只是一个怎么样hook的例子,它不是真的为你显示级别. --影子而矣 很容易就能hook一个函数吗? 如你有sea库,那么你能hook一个函数用sea.

util.hook. sea.

util.hook("oldfunctionname", "newfunctionname", "before|after|hide|replace"); 如果你指明代替,那么老的函数将只在新的函数返回真时被调用. 如果你使用sea.

util.hook,那么你也能在此过后用sea.util.

unhook移去hook. sea.util.

unhook("oldfunctionname, "newfunctionname"); 使用sea.util.hook 要小心参数的传递,优先权,链接并且你能确保在此过后你能清掉这些.

有选择的使用sea 如果你不想你的插件依赖sea,但是你又想当它可用时获益,你可以检测它的存在: local myaddon_old_functiontohook = function() end; if sea then sea.util.

hook("functiontohook", "replacementfunction", "after"); else myaddon_old_functiontohook = functiontohook; functiontohook = replacementfunction; end function replacementfunction() myaddon_old_functiontohook(); ... end 这些编码允许你在你的toc中列出sea做为一个optionaldep.这能帮你防止将来用户安装sea时其它的插件完全替换老的函数所引起的冲突.

如何在函数中调用另函数js,如何在一个函数中调用另一个函数 js

1楼 匿名用户 把两个函数放在同一个作用域下,然后在内部写,另一个函数名 。就可以了,如果不确定把两个函数都写成全局的,即不进行任何封装,functiona functionb 就可以了 2楼 网海1书生 function f1 function f2 如何在js函数中调用另外一个函数 3楼 匿名用...

如何判断两个函数是不是同函数,如何判断两个函数是不是同一个函数

1楼 匿名用户 看 定义域 是否相同 对应法则相同 即经化简两函数为同一形式 即式子或数相同 简便算法 任取一个数x 将x分别带入两式子中看两式是否同时得一个数 得一个数 同一函数 否 则不为同一函数 2楼 纪婀娜苟多 即使定义域和值域都一样的函数也不一定是同一函数。 能够转化为相同表达式,且定义域...

如何判断两个函数是否为同一函数,如何判断两个函数是不是同一个函数

1楼 看 定义域 是否相同 对应法则相同 即经化简两函数为同一形式 即式子或数相同 简便算法 任取一个数x 将x分别带入两式子中看两式是否同时得一个数, 得一个数 同一函数,否,则不为同一函数 望能理解 2楼 匿名用户 第一,定义域一样吗,第二,任取相同的x y值一样吗?这两个问题的答案是肯定的才能...