更改lua_thread的_ENV(使用C API)

时间:2019-07-14 19:31:50

标签: c++ lua luabridge lua-5.3

这是针对多人游戏,其中NPC脚本将作为功能块加载并缓存在单个lua_State上,然后,每当玩家与NPC进行交互时,都会创建一个新的lua_thread,从全局变量中获取缓存的函数lua_table并推入线程的堆栈,然后继续执行线程(在完成之前,npc脚本产生多次)。

我正在尝试使用C API更改lua线程的环境,以便已加载/运行的函数将无法更改全局变量,或者无法通过在不同线程上运行的其他函数来更改全局变量。

通过将函数代码添加到脚本的开头来更改函数环境,从而获得了预期的结果。但是,我想使用C API端进行此操作,因此不必将此代码粘贴到每个脚本中。

 @Override
 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
     handler.proceed();
 }

示例代码+期望的/当前的输出

npcA.lua

local newgt = {}
setmetatable(newgt, {__index = _G })
local _ENV = newgt

npcB.lua

x = 10
print(x)
y = 60

我希望能打印npcA

print(x)
y = 25
player:someYieldingFunction()
print(y)

和该npcB打印

10

当前的输出是(这不是我想要的)

如果npcA首先运行npcB,则会打印

nil
25

如果先运行npcB然后屈服,然后运行npcA,然后恢复npcB。 npcB会打印

10
25

这是有问题的

0 个答案:

没有答案