屠龙刀的四环任务做了一半下线,两周后回来要接着做——任务的进度存储是断点续做的地基。任务数据的要点是进度的持久化、回退的边界与多任务并行的隔离。
---任务进度:按键值对持久化
function Quest.saveProgress(actor, questId, key, value)
local player = class(actor)
if not player then return false end
local storeKey = "Q_" .. questId .. "_" .. key
setplayvar(actor, "HUMAN", storeKey, value, 1)
return true
end
---屠龙任务的进度读取
function Quest.progressOf(actor, questId, key)
local storeKey = "Q_" .. questId .. "_" .. key
return getplayvar(actor, 2, storeKey)
end
---屠龙刀任务第三环的进度示例
function Quest.dragonStep(actor)
local step = Quest.progressOf(actor, "dragon", "step")
return tonumber(step) or 1
end
进度的存储按「任务 ID 加键」的组合键持久化:屠龙任务的当前环、杀怪计数、材料的已交数量,全走 setplayvar 的落库通道——断线、重启、换设备,进度都在。键的命名规范(Q_任务_键)让任务的数据在变量的海洋里可识别、可批量清理。完成的任务进度不删档:已完成的任务标记为 done 保留进度快照,任务的重演玩法(周常化)读旧档续期。
---任务的重置:付费重做与奖励的防刷
function Quest.reset(actor, questId)
local player = class(actor)
if not player then return false end
-- 已领奖的任务重做,奖励减半
local claimed = Quest.progressOf(actor, questId, "claimed")
if claimed == "1" then
setplayvar(actor, "HUMAN", "Q_" .. questId .. "_halved", 1, 1)
sendmsg(actor, 1, "重做任务的奖励将为 50%")
end
-- 只清进度,不动完成标记
for _, key in ipairs(Quest.progressKeys(questId)) do
Quest.saveProgress(actor, questId, key, "")
end
sendmsg(actor, 1, "任务已重置,可重新开始")
return true
end
任务回退的边界设计:进度可清、完成标记与奖励的账不重算——重做的任务奖励减半,刷任务的收益循环被折半的规则掐断。回退的场景两类:付费的重做(可重复的周常)与 GM 的纠错回退(数据修复把错乱的任务状态拉回正轨),两条路的入口与权限分开。多任务并行的隔离:屠龙与行会周任务的进度键互不干扰,任务 ID 的前缀隔离让并行的进度井水不犯河水。进度的一致性校验:任务的进度与任务的接取状态匹配(没接的任务不该有进度),错配的检测在任务面板打开时跑一遍。
进度持久化的成功率监控,落库失败的进度在下线清算里补写;任务进度的孤儿扫描,有进度无接取的错配进修复队列。
进度的键曾经漏了任务 ID 的前缀,同名键的两个任务互相覆盖,前缀的规范修复。回退曾经把奖励的领取标记也清了,重做领双份奖,回退的边界清单化。断点续做的读取曾经区分大小写,进度键的大小写笔误让进度读空,键的生成统一走函数。
任务的进度键设计进任务的接入规范:接取、进度、完成三段键的命名模板。任务的重做与奖励的减半规则公示,重做的价值玩家自己算。纠错回退的权限收口到客服主管,回退的操作留痕。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会活动集中在攻城战,日常缺乏轻量社交场景。行会篝火答题做行会固定社交活动:每周三、周日晚在行会驻地点燃…
实战应用:用在哪里 全服答题活动办过几期,参与的人不少但黏性不足,答完就散。科举答题把答题做成两段式:每天晚八点的乡试答题筛…
n n n 实战应用:用在哪里 n战斗中打字沟通慢且危险,队伍协作靠喊话效率太低。快捷短语栏在屏幕底部提供八条可自定义的战斗…
n n n 实战应用:用在哪里 n龙脉区域的野外宝箱是散人玩家的每日福利:每逢整点在龙脉区域随机刷新十五个宝箱,分三档给不同…
实战应用:用在哪里 同一玩家的两条消息走了不同的处理路径,先发的后到,装备穿上的消息比脱下的消息晚处理,面板状态错乱。消息有…
实战应用:用在哪里 战斗日志全量打印,一天写满一块硬盘,翻日志像大海捞针。日志采样按类别分策略:错误日志全量保留、行为日志按…