setplayvar 的末位参数 isSave 决定一个变量的生死:置 1 落库重启不丢,置 0 只活在内存里。这个参数的分界设计是变量系统的灵魂——哪些状态值得跨重启,哪些状态天生就该随风而逝。
---持久变量:装备、关系、任务进度(isSave=1)
function PlayerState.setPerm(actor, key, value)
setplayvar(actor, "HUMAN", key, value, 1)
end
---临时变量:会话内的标记(isSave=0)
function PlayerState.setTemp(actor, key, value)
setplayvar(actor, "HUMAN", key, value, 0)
end
---同一状态的不同选择
function Examples.compare(actor)
-- 婚姻关系:必须持久
setplayvar(actor, "HUMAN", "SpouseId", "10086", 1)
-- 本次会话的传送标记:临时即可
setplayvar(actor, "HUMAN", "TeleportTag", 1, 0)
end
分界的判断法一句话:这个状态在服务器重启后还应该存在吗?婚姻、称号、任务进度、强化等级——玩家的资产与成长必须落库;本次会话的传送标记、活动的临时开关、战斗中的计数——临时的状态用内存变量,重启归零反而是特性(防状态的陈旧累积)。isSave=0 的变量的生命周期与进程绑定,热更新与重启时的自动清零是「设计出的遗忘」。
---混用的现场:该持久的没持久
-- 危险:行会贡献用临时变量,重启全清零
-- setplayvar(actor, "HUMAN", "GuildPoint", pt, 0)
---治理:变量键的注册表标注持久属性
VAR_REGISTRY = {
["SpouseId"] = { save = 1, desc = "配偶ID" },
["GuildPoint"]= { save = 1, desc = "行会贡献" },
["TeleportTag"] = { save = 0, desc = "传送标记" },
}
function State.set(actor, key, value)
local meta = VAR_REGISTRY[key]
if not meta then error("未登记的变量键: " .. key) end
setplayvar(actor, "HUMAN", key, value, meta.save)
end
分界的治理靠注册表:每个变量键在登记时声明持久属性与用途说明,业务代码通过 State 门面读写,isSave 的选择由注册表统一决定——散落各处的 0 和 1 是拼写事故的温床,集中登记让审计一眼看清全服有哪些变量、各活了多久。注册表与文档同源导出:变量清单的表格直接生成给策划与运维查阅,「这个值重启后还在吗」的疑问查表即答。临时变量的价值重估:会话级的临时不是二等公民,重启归零的自动清理恰好是多数标记变量想要的淘汰机制。
变量键的注册率审计:直接调用 setplayvar 的散写逐个收编;持久与临时的分布统计,持久变量的数量增长趋势是存储成本的先行指标。
行会贡献曾经用临时变量,重启清零引发集体客诉,登记表的 save 位改 1。临时变量的键曾经与持久键同名,一次改动让两套语义打架,键的前缀按注册表生成。isSave 的语义曾经在文档里写反,照文档开发的模块丢数据,文档以代码为准修正。
变量键的登记表进版本库与配置文档同源维护,新增键必须登记。持久变量的清理要有归档的流程,直接删除等于销毁玩家的资产。isSave 的选择写进编码规范的判断法,新功能的变量先分类再落码。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 攻城战前的城防准备通常是帮主一人操心的后勤活。城墙修筑赛把城防建设变成行会全员可参与的竞赛:攻城前一周开…
实战应用:用在哪里 行会成员的付出经常被忽视:连续一个月全勤、攻城战首杀、基金大额投入,这些贡献没有正式的认可渠道。行会授勋…
实战应用:用在哪里 首充礼包的转化率高度依赖展示效果:一张静态图配一行文字的弹窗转化率不足三成,动态展示礼包内容物与价值对比…
实战应用:用在哪里 比奇安全区的设计初衷是新手的避风港,但红名玩家仗着守卫不攻击红名而无视安全区规则。安全区守卫驱逐触发让红…
实战应用:用在哪里 行会转让、装备销毁、大额交易这类操作一旦出错不可逆转,事后追责全靠口头描述。关键双录机制在操作前后各留存…
实战应用:用在哪里 服务器资源的使用趋势靠人记不现实,容量不够时才发现已经超限运行一个月。容量月报自动汇总每月的 CPU、内…