后端lua有没有类似TXT的键值对存储变量?
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-28 14:04:34 |
👁️ 阅读: 3
我是lua后端老师!
小仙,你问的这个问题很关键!996引擎的Lua后端确实有类似TXT键值对存储的变量系统,而且功能更强大,分为几种类型,我来给你详细介绍一下:
**1. 玩家自定义变量(类似TXT的U/T变量)**
这是最接近TXT键值对的方式,变量名是“键”,值是“值”。分为**临时变量**和**持久变量**:
```lua
-- 临时数字变量(重启服务器会丢失)
setplaydef(actor, "N$变量1", 1)
local value = getplaydef(actor, "N$变量1") -- 获取值为1
-- 临时字符串变量
setplaydef(actor, "S$玩家名", "张三")
-- 持久数字变量(类似TXT的U变量,重启不丢失)
setplaydef(actor, "U1", 100)
local uValue = getplaydef(actor, "U1") -- 获取值为100
-- 持久字符串变量(类似TXT的T变量)
setplaydef(actor, "T1", "等级=10,攻击=100")
local tValue = getplaydef(actor, "T1") -- 获取值为"等级=10,攻击=100"
```
**2. 系统全局变量**
这是服务器级别的键值对,所有玩家共享:
```lua
-- 首先需要在引擎启动时初始化变量类型
function startup(sysobj)
inisysvar("integer", "系统变量_1", 0) -- 整数类型
inisysvar("string", "系统变量_6", 5) -- 字符串类型
end
-- 使用系统变量
setsysvarex("系统变量_1", 100, 1) -- 设置值,1表示保存到数据库
local sysValue = getsysvarex("系统变量_1") -- 获取值
```
**3. 物品变量(给装备道具存储键值对)**
可以给物品附加自定义变量:
```lua
-- 给身上第1个位置的装备设置变量
setitemparam(actor, 1, 1, "装备属性1") -- 位置1,变量索引1,值"装备属性1"
setitemintparam(actor, 1, 1, 100) -- 设置整数变量
-- 获取物品变量
local strValue = getitemparam(actor, 1, 1) -- 获取字符串变量
local intValue = getitemintparam(actor, 1, 1) -- 获取整数变量
-- 更新到数据库(重要!不然重启会丢失)
updatecustitemparam(actor, 1)
```
**4. 怪物/NPC临时变量**
给怪物或NPC对象设置临时键值对:
```lua
-- 给怪物设置变量
local mons = getobjectinmap(mapID, x, y, 10, 2)
for i, mon in ipairs(mons or {}) do
setobjintvar(mon, 1, 996 + i) -- 设置整数变量
setobjstrvar(mon, 1, "怪物标记") -- 设置字符串变量
end
-- 获取变量
local monValue = getobjintvar(mon, 1)
local monStr = getobjstrvar(mon, 1)
```
**5. 标志位变量(类似TXT的标识)**
这是简单的0/1标记系统:
```lua
-- 设置标志位(1-800)
setflagstatus(actor, 1, 1) -- 设置第1个标志位为1(开启)
-- 获取标志位状态
local flagStatus = getflagstatus(actor, 1) -- 返回1
```
**高效处理键值对字符串的函数:**
如果你想像TXT那样用逗号分隔的键值对,可以用这个函数解析:
```lua
function getVarCache(actor, varName, key) -- 解析TXT格式的键值对字符串
local str = getplaydef(actor, varName)
local result = {}
for k, v in string.gmatch(str, "([^=]+)=([^,]+)") do
k = k:gsub(",", "")
result[k] = v
end
return result[tostring(key)] or ""
end
-- 使用示例
setplaydef(actor, "T1", "等级=10,攻击=100,防御=50")
local attackValue = getVarCache(actor, "T1", "攻击") -- 返回"100"
```
**总结一下:**
- **玩家变量**:`setplaydef`/`getplaydef` - 最常用,类似TXT的U/T变量
- **系统变量**:`setsysvarex`/`getsysvarex` - 服务器全局共享
- **物品变量**:`setitemparam`/`getitemparam` - 装备专属属性
- **对象变量**:`setobjintvar`/`getobjintvar` - 怪物/NPC临时存储
- **标志位**:`setflagstatus`/`getflagstatus` - 简单开关标记
每种变量都有不同的用途场景,小仙你可以根据实际需求选择使用。记得物品变量要调用`updatecustitemparam`保存到数据库哦!
有什么不清楚的随时问我,或者也可以请教浮生梦尊师!
← 返回问答库