function handlerequest(actor, msgID, param1, param2, param3, str)
-- local me = player_module:new(actor)
-- me.npc = {
-- actor = actor ,
-- msgID = msgID,
-- param1 = param1,
-- param2 =
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-24 14:10:11 |
👁️ 阅读: 6
我是lua后端老师!
小仙,我看到你的代码了,你是在尝试用 `setsysvarex` 和 `getsysvarex` 来存储和读取全局变量,然后打印出来,但发现打印出来是空值,对吧?
问题出在你的使用方式上。`setsysvarex` 和 `getsysvarex` 是**系统自定义变量**,它们需要先**初始化**才能使用,而且每次引擎启动都需要重新初始化。
根据资料,你需要先使用 `inisysvar` 来声明这些变量的类型。你的代码里直接存取了,但没有初始化,所以读取到的就是空值。
正确的做法是,在引擎启动时(比如在 `startup` 函数里)初始化这些变量,然后再在你的 `handlerequest` 函数里使用它们。
这里给你一个修改后的示例:
```lua
-- 首先,在引擎启动时初始化这些系统变量(这通常在单独的启动脚本里执行)
function startup(sysobj)
-- 初始化变量,指定类型(integer或string)和变量名
-- 第三个参数是合服类型,这里先设为0
inisysvar("string", "actor", 0)
inisysvar("integer", "msgID", 0)
inisysvar("integer", "param1", 0)
inisysvar("integer", "param2", 0)
inisysvar("integer", "param3", 0)
inisysvar("string", "str", 0)
release_print("系统自定义变量初始化完成!")
end
-- 然后,在你的 handlerequest 函数中就可以正常使用了
function handlerequest(actor, msgID, param1, param2, param3, str)
-- 存储到系统变量,isSave参数为1表示保存到数据库
setsysvarex('actor', actor, 1)
setsysvarex('msgID', msgID, 1)
setsysvarex('param1', param1, 1)
setsysvarex('param2', param2, 1)
setsysvarex('param3', param3, 1)
setsysvarex('str', str, 1)
-- 从系统变量读取
local saved_actor = getsysvarex('actor')
local saved_msgID = getsysvarex('msgID')
local saved_param1 = getsysvarex('param1')
local saved_param2 = getsysvarex('param2')
local saved_param3 = getsysvarex('param3')
local saved_str = getsysvarex('str')
-- 打印验证
release_print("actor: " .. tostring(saved_actor))
release_print("msgID: " .. tostring(saved_msgID))
release_print("param1: " .. tostring(saved_param1))
release_print("param2: " .. tostring(saved_param2))
release_print("param3: " .. tostring(saved_param3))
release_print("str: " .. tostring(saved_str))
end
```
**核心要点:**
1. **先初始化,后使用**:系统自定义变量必须用 `inisysvar` 初始化类型(integer或string)后才能用 `setsysvarex` 赋值。
2. **启动时初始化**:初始化操作通常放在 `startup` 触发里,因为引擎重启后,这些变量需要重新声明。
3. **变量名一致**:你存和取用的变量名(如 `'actor'`)必须完全一样。
你原来的代码跳过了初始化步骤,所以系统不知道 `'actor'` 这些变量是整数还是字符串,自然就存不进去也读不出来了。按照上面的方法修改一下,应该就没问题啦!
下次如果还有不明白的,随时可以问我,或者请教我师傅浮生梦尊师哦!
← 返回问答库