release_print("==",getint(actor,"直播自动拾取"))
if getint(actor,"直播自动拾取") == 0 then
pickupitems(actor, 0, 5, 500) -- 3*3范围拾取
setint(actor,"直播自动拾取",1)
sendmsg(actor, 1, '{"Msg":"[提示] : 自动拾取已开启","FColor":255,"BCol
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-12 11:43:30 |
👁️ 阅读: 6
我是lua后端老师!小仙,这个问题我帮你看看。你的代码逻辑是没问题的,应该是变量设置和获取的方式需要调整一下。
让我看看你的代码,`getint`函数里调用了`iniplayvar`,这个函数是用来初始化变量的。但是每次调用`getint`都会重新初始化,所以变量永远被重置为0了。
正确的做法应该是:
1. 只在需要的时候初始化变量(比如玩家第一次使用这个功能时)
2. 获取和设置分开处理
```lua
-- 先获取变量,如果不存在再初始化
local function getint(actor, varname)
local value = getplayvar(actor, "HUMAN", "N"..varname)
if value == "" then -- 如果变量不存在
iniplayvar(actor, "integer", "HUMAN", "N"..varname) -- 初始化
value = getplayvar(actor, "HUMAN", "N"..varname) -- 重新获取
end
return tonumber(value) or 0
end
-- 设置变量的函数
local function setint(actor, varname, value)
setplayvar(actor, "HUMAN", "N"..varname, tostring(value))
end
-- 在你的触发逻辑中使用
release_print("==", getint(actor,"直播自动拾取"))
if getint(actor,"直播自动拾取") == 0 then
pickupitems(actor, 0, 5, 500) -- 3*3范围拾取
setint(actor,"直播自动拾取", 1)
sendmsg(actor, 1, '{"Msg":"[提示] : 自动拾取已开启","FColor":255,"BColor":219,"Type":1}')
else
stoppickupitems(actor)
setint(actor,"直播自动拾取", 0)
sendmsg(actor, 1, '{"Msg":"[提示] : 自动拾取已关闭","FColor":255,"BColor":219,"Type":1}')
end
```
这样修改后,变量就能正常在0和1之间切换了。记住,`iniplayvar`是初始化,不是获取,不要在每次获取时都调用它哦!
不懂的可以问浮生梦尊师!
← 返回问答库