function npc:takeMoney(actor, str)
local userId = getbaseinfo(actor, 2)
local money = querymoney(actor, 1)
local donateCount = tonumber(str)
if money < donateCount then
sendluamsg(actor, 1017, 17, 3, 0, "沙城捐献")
retur
我是lua后端老师!
小仙,你这个问题问得很好!你想把用户ID和捐献数量同时存到"沙城捐献"这个系统变量里,这个需求很常见。从你的代码来看,你已经掌握了基本的变量操作,只是需要调整一下存储方式。
根据你的需求,这里有两种实现方法:
**方法一:使用字符串拼接(推荐)**
```lua
function npc:takeMoney(actor, str)
local userId = getbaseinfo(actor, 2)
local money = querymoney(actor, 1)
local donateCount = tonumber(str)
if money < donateCount then
sendluamsg(actor, 1017, 17, 3, 0, "沙城捐献")
return
else
changemoney(actor, 1, "-", donateCount, "沙城捐献", true)
inisysvar("string", "沙城捐献", 6) -- 初始化系统变量
setsysvar("沙城捐献", userId.."|"..tostring(donateCount)) -- 使用字符串拼接
sendluamsg(actor, 1017, 17, 4, 0, "沙城捐献")
end
end
```
**方法二:使用JSON格式(如果需要复杂数据结构)**
```lua
function npc:takeMoney(actor, str)
local userId = getbaseinfo(actor, 2)
local money = querymoney(actor, 1)
local donateCount = tonumber(str)
if money < donateCount then
sendluamsg(actor, 1017, 17, 3, 0, "沙城捐献")
return
else
changemoney(actor, 1, "-", donateCount, "沙城捐献", true)
inisysvar("string", "沙城捐献", 6) -- 初始化系统变量
-- 创建JSON格式的字符串
local dataStr = '{"userId":"'..userId..'","donateCount":'..donateCount..'}'
setsysvar("沙城捐献", dataStr) -- 存储JSON字符串
sendluamsg(actor, 1017, 17, 4, 0, "沙城捐献")
end
end
```
**关键点说明:**
1. `setsysvar`函数的第一个参数是变量名,第二个参数是变量值
2. 使用`..`运算符进行字符串拼接
3. 使用`tostring()`将数字转换为字符串
4. `inisysvar`用于初始化变量类型和数量
**读取时如何拆分:**
```lua
-- 对于方法一(管道符分隔)
local data = getsysvar("沙城捐献")
if data then
local parts = {}
for part in string.gmatch(data, "[^|]+") do
table.insert(parts, part)
end
local userId = parts[1]
local donateCount = tonumber(parts[2])
release_print("用户ID:", userId, "捐献数量:", donateCount)
end
-- 对于方法二(JSON格式)
local data = getsysvar("沙城捐献")
if data then
-- 使用tbl2json和json2tbl函数处理JSON数据
local dataTable = json2tbl(data)
release_print("用户ID:", dataTable.userId, "捐献数量:", dataTable.donateCount)
end
```
建议使用第一种方法,简单明了,使用管道符`|`分隔两个值。如果你以后需要存储更复杂的数据结构,再考虑使用JSON格式。
小仙,你写的代码基础很不错,只是`setsysvar`函数的参数用错了位置。下次遇到类似问题,可以多看看`setsysvar`函数的参数说明,不懂的可以问浮生梦尊师!