创建元变量
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-07-02 17:52:29 |
👁️ 阅读: 7
我是lua后端老师!
修仙者,关于创建元变量,我来详细给你讲解一下。在996引擎中,元变量主要分为系统变量、玩家变量、行会变量和物品变量几种类型。
## 1. 系统变量(全局变量)
系统变量是服务器级别的变量,需要初始化后才能使用:
```lua
-- 初始化系统变量
local varName = "系统自定义变量_1"
inisysvar("integer", varName, 0) -- 初始化整数类型
setsysvarex(varName, 996, 1) -- 设置变量值,1表示保存到数据库
release_print("系统自定义变量[integer]", varName, getsysvarex(varName))
-- 字符串类型系统变量
local varName = "系统自定义变量_2"
inisysvar("string", varName, 0) -- 初始化字符串类型
setsysvarex(varName, "996abc", 1) -- 设置字符串值
release_print("系统自定义变量[string]", varName, getsysvarex(varName))
```
## 2. 玩家变量
玩家变量需要每个玩家登录时初始化:
```lua
-- 角色登陆触发
function login(actor)
-- 初始化玩家变量
iniplayvar(actor, "integer", "HUMAN", "玩家变量_1")
iniplayvar(actor, "string", "HUMAN", "玩家变量_2")
end
-- 使用玩家变量
local varName = "玩家自定义变量_1"
iniplayvar(actor, "integer", "HUMAN", varName)
setplayvar(actor, "HUMAN", varName, 996, 1) -- 设置变量值
release_print("玩家自定义变量[integer]", varName, getplayvar(actor, varName))
```
## 3. 行会变量
行会变量需要通过行会对象操作:
```lua
function main(actor)
guild = getmyguild(actor) -- 获取行会对象
iniguildvar(guild, "integer", "N变量1") -- 初始化行会整数变量
setguildvar(guild, "N变量1", 997) -- 设置行会变量值
say(self, "自定义变量 N变量1="..getguildvar(guild, "N变量1"))
end
-- 字符串类型行会变量
function main(actor)
guild = getmyguild(actor)
iniguildvar(guild, "string", "S变量1|S变量2") -- 可以一次初始化多个
setguildvar(guild, "S变量1", "引擎", 1) -- 1表示保存到数据库
say(self, "自定义变量 S变量1="..getguildvar(guild, "S变量1"))
end
```
## 4. 物品变量
物品变量用于存储物品相关的数据:
```lua
-- 存储物品字符串变量
setitemparam(actor, where, idx, value, itemobj) -- where:装备位置(-2传入物品对象), idx:变量位置(1-20)
-- 获取物品字符串变量
getitemparam(actor, where, idx, itemobj) -- 返回变量值
-- 存储物品整数变量
setitemintparam(actor, where, idx, value, itemobj) -- idx:变量位置(1-50), value:Int64类型
-- 获取物品整数变量
getitemintparam(actor, where, idx, itemobj) -- 返回变量值
-- 重要:更新物品变量到数据库
updatecustitemparam(actor, where, idx, itemobj) -- 如果不调用此接口,物品变量只是临时变量
```
## 5. 玩家标记/标识
除了自定义变量,还可以使用玩家标记:
```lua
-- 设置玩家标记
setflagstatus(play, nIndex, nvalue) -- nIndex:索引(1-800), nvalue:0/1
-- 获取玩家标记
getflagstatus(play, nIndex) -- 返回对应属性值
```
## 重要注意事项:
1. **初始化**:所有自定义变量都需要先初始化才能使用
2. **变量类型**:integer(整数)或 string(字符串),一个变量名不能初始化两种类型
3. **保存到数据库**:设置变量时最后一个参数为1表示保存到数据库,0表示临时变量
4. **变量范围**:HUMAN(玩家)、GUILD(行会)、NATION(国家)
5. **物品变量**:必须使用`updatecustitemparam`更新到数据库,否则前端无法访问
需要特别注意的是,前端访问物品变量需要特定的方法,并且后端设置的物品变量如果不更新到数据库,前端是无法访问的。
有什么具体需求或者不明白的地方,随时问我!
← 返回问答库