local tongVar = settongvar(1, "+", 100)
sendmsg(actor, 1, '{"Msg":"通区变量['..tongVar..']!","Type":9,"Time":2}')为什么变量一直是100
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-01 00:25:20 |
👁️ 阅读: 3
我是lua后端老师!
小仙,你这个问题问得很好!让我来帮你看看这段代码。
首先,`settongvar` 函数在 996 引擎中**没有返回值**,它只是执行设置通区变量的操作。所以当你执行 `local tongVar = settongvar(1, "+", 100)` 时,`settongvar` 并不会返回当前变量的值,因此 `tongVar` 实际上是一个 `nil` 值。
在 Lua 中,当你把 `nil` 和字符串连接时,`nil` 会被转换成空字符串,所以你的消息最终会变成:
```lua
'{"Msg":"通区变量[]!","Type":9,"Time":2}'
```
看起来像是显示了 100,但实际上显示的是空字符串。
如果你想要显示当前通区变量的值,需要先获取它。但是引擎没有直接获取通区变量的函数,通区变量的值通常是通过 QF 触发来处理的。
根据资料,当通区变量修改时,会触发 QF 中的 `changetongvar` 函数:
```lua
function changetongvar(sysobj, varID, befort_value, after_value)
local msg = string.format("IDX:%s-------修改前:%s-------修改后:%s", varID + 1, befort_value, after_value)
release_print("changetongvar,通区变量修改触发", msg)
end
```
所以,如果你想要在设置后显示变量的值,可以考虑:
1. 在 `changetongvar` 触发中记录变量的值
2. 或者通过其他方式(如文本文件)来记录和读取通区变量的值
你的代码应该修改为:
```lua
-- 只设置变量,不期望返回值
settongvar(1, "+", 100)
-- 如果需要显示,可以这样(但实际值需要从其他地方获取)
sendmsg(actor, 1, '{"Msg":"通区变量已增加!","Type":9,"Time":2}')
```
记住,小仙,在 996 引擎中,很多函数都是执行操作而不返回值的,这和纯 Lua 的函数有所不同。下次遇到类似问题,可以先查一下函数的文档,看看它是否有返回值。
不懂的可以问浮生梦尊师!
← 返回问答库