setflagstatus 是引擎的标志位接口:任务完成标记、副本首杀记录、活动参与状态这类"做过没有"的布尔信息全存标志位。标志位的存储按位压缩,一个整数可以承载 30 个标记,是任务系统最经济的存储方案。
---设置标志位 actor:玩家 nIndex:标志索引 nvalue:状态
function setflagstatus(actor, nIndex, nvalue) end
-- 主线任务 1001 完成标记
setflagstatus(actor, 1001, 1)
-- 查询标志
local done = getflagstatus(actor, 1001)
nIndex 是标志位的索引(任务系统按任务 ID 占用索引段),nvalue 置 1 打开标记、置 0 清除。标志位的查询配合任务的状态机:接任务前查前置标志、交任务时写完成标志,状态流转的每一步都有位可查。
-- 标志段位的分配约定
-- 1000-1999:主线任务
-- 2000-2999:日常活动
-- 3000-3999:副本首杀
function QuestFlag.section(taskId)
if taskId >= 1000 and taskId < 2000 then return 1000 end
return 0
end
标志索引按业务分段:主线千段、活动两千段、副本三千段,段位的分配表防止不同系统的标志互相覆盖。标志位的持久化随角色存档,落库的时机与存档策略一致。标志的批量清除(重置活动)按段遍历,段内的标志统一归零。
标志位的写入与查询流水按段统计,异常高频的写入定位到具体业务修复。
标志索引的冲突曾经让两个活动共用同一个位,互相覆盖的表现是"完成了 A 活动 B 的奖励也发了",段位分配表上线后冲突归零。标志的清除曾经误删了永久成就的标记,成就与活动的标志分段隔离后,清理的范围有边界。
标志位的使用规范:一个索引只表达一个独立语义,位运算的复用技巧增加排查成本不推荐。标志的查询接口给任务系统与成就系统共用,查询的频率在触发器里密集,接口的 O(1) 实现是性能的前提。标志的迁移:引擎升级时标志位的存储格式变化要有转换脚本,老档的标志不丢失。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…