我重新定义了打印功能在Lua如何重新定义一个LUA功能全局
local myThing = PrintThing
function PrintThing (text)
... some code ...
return myThing(text)
end
它适合我的地方脚本其他脚本
但不是
如何重新定义这个打印功能全球范围内?
我重新定义了打印功能在Lua如何重新定义一个LUA功能全局
local myThing = PrintThing
function PrintThing (text)
... some code ...
return myThing(text)
end
它适合我的地方脚本其他脚本
但不是
如何重新定义这个打印功能全球范围内?
一般而言,你不能。最好你可以重新定义全球环境中的功能(_G.PrintThing=...
)。但即使这并不总是允许的。例如。主机应用程序在沙箱中运行您的代码,并且不提供对全局环境的访问。在这种情况下,你必须让C模块访问全局环境(但我不认为沙箱环境允许加载这样的模块)。 第二差异 - 在您的环境中设置此功能。如果你在同样的环境中加载新模块,那么你只需要在加载库之前重新定义函数。 如果在加载模块后尝试重新定义函数,它将取决于模块本身。例如如果使用local PrintThing = PrintThing
它将不会在加载后看到您的新功能。另外C代码可以直接使用C函数。
谢谢,'_G.PrintThing ='工作得很好 – Vladimir
如何重新定义全局打印功能?
修改Lua源代码并构建自己的解释器。
print
在Lua源代码中定义。将其重新定义为运行时的唯一方法是运行类似于您所展示的代码。
谢谢,这不是默认的'打印'功能的Lua,它是一个游戏黑客软件和功能的实际名称是'PrintChat',仍然你的答案适用?因为我见过其他人阻止这个函数只运行脚本 – Vladimir
您的软件可能会为其加载的每个脚本文件创建一个新状态,以避免不同“插件”之间的冲突。除非你打算修改程序(如果是黑客/脚本框架,再加上它可能会被混淆,你可能无法访问源代码),所以不可能在全局范围内重载它。
然而,你通常可以做的是创建一个文件,该文件重载该函数并将其包含到每个文件的开头,从而创建一个新的状态。
另外:这些基于插件的框架中的很多都可以加载全局lua文件,在这种情况下,您需要确定是否存在类似这样的事情。
对于我所知道的,在libs文件夹内创建一个覆盖该函数的文件应该适合您。
如果您正在使用,我认为您正在使用。
没有任何反应 - 包括分配给全局变量 - 直到执行脚本。执行脚本是获得效果的唯一方法。据推测,PrintThing是一个全局变量。你的脚本会将它分配给脚本运行时产生的函数。你有没有在你希望有效的其他脚本之前执行脚本? –
@TomBlodget是的,它总是首先执行,我也将它命名为'0 Script',因此它首先在列表中运行,我已经看到其他人通过脚本阻止执行此'PrintThing'函数,并且只让我们运行他们的脚本的名字是0,所以它首先在列表中运行。所以是别人都这样做,但我不知道如何:( – Vladimir