这是针对多人游戏,其中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
这是有问题的