交易失败、背包已满、等级不足——业务失败的返回不能只有一句文案:客户端要按错误码做分支处理,玩家要看人类能懂的提示。错误码的数值与消息双层设计,让机器与人都各取所需。
---错误码的定义:分段编码
local E = {
OK = 0,
-- 1xxx 通用
E_UNKNOWN = 1000,
E_TIMEOUT = 1001,
-- 2xxx 物品
E_BAG_FULL = 2001,
E_NO_ITEM = 2002,
-- 3xxx 交易
E_TRADE_LOCK= 3001,
E_NO_GOLD = 3002,
}
---错误的结果构造:码与消息双层
local function fail(code, msg)
return { ok = false, code = code, msg = msg }
end
local function ok(data)
return { ok = true, data = data }
end
---业务的使用
function Trade.buy(actor, goodsId)
if not checkitemw(actor, "金币", 10000) then
return fail(E.E_NO_GOLD, "金币不足,还差 " ..
(10000 - (getplayvar(actor, 2, "Gold") or 0)))
end
return ok({ goodsId = goodsId })
end
错误码分段编码:1xxx 通用、2xxx 物品、3xxx 交易——段位的前缀让错误的归属一眼可辨,新增的业务段不与旧的冲突。fail 的构造带码与消息双层:code 给客户端做分支(背包满就弹清理提示、金币不足就跳充值),msg 给玩家看原因——双层的价值在分支与提示的解耦,文案改一万遍客户端的分支不动。
---错误码的登记与提示的同源
local MSG_OF = {
[E.E_BAG_FULL] = "背包已满,请清理后重试",
[E.E_NO_GOLD] = "金币不足",
[E.E_NO_ITEM] = "材料不足",
}
function Trade.notify(actor, result)
if result.ok then return end
-- 同源的默认提示,业务的定制消息优先
local msg = result.msg or MSG_OF[result.code] or "操作失败"
sendmsg(actor, 1, msg)
end
---错误码的监控埋点
function Trade.track(code)
ErrCode.count[code] = (ErrCode.count[code] or 0) + 1
if ErrCode.count[code] > 500 then
Ops.alert("高频错误码: " .. code)
end
end
码的治理两条:每个码登记默认的提示文案(同源表),业务可覆盖但覆盖的文案走评审;错误码的触发量进监控,高频的错误码是体验问题的信号——背包满的报错每小时三千次,说明清理的引导没做好。码的复用禁止:一个码一种含义,两处业务共用一个码的错误分支会互相污染。客户端的分支处理与码表的版本绑定,服务端新增码时旧客户端走默认分支的兜底。
错误码的覆盖测试:每条业务的失败分支逐一触发,码与消息的配对断言;码表与文档的同源导出,文档的漂移在生成时消除。
错误码曾经用字符串("bag_full"),客户端的比较大小写出过分歧,数值码的传输与比较更稳。消息的拼接曾经带内部信息(表名、行号),错误的提示泄露了结构,提示的白名单模板化。码的监控曾经全量告警,高频的正常失败(背包满是常态)把告警灌爆,正常失败的告警降级为统计。
错误码的段位规划一次做十年,新增业务的段位预分配。客户端的码表处理有默认分支,未知码不崩溃只提示。错误的高频看板进运营周报,体验的病灶从错误码的分布里找。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会活动集中在攻城战,日常缺乏轻量社交场景。行会篝火答题做行会固定社交活动:每周三、周日晚在行会驻地点燃…
实战应用:用在哪里 全服答题活动办过几期,参与的人不少但黏性不足,答完就散。科举答题把答题做成两段式:每天晚八点的乡试答题筛…
n n n 实战应用:用在哪里 n战斗中打字沟通慢且危险,队伍协作靠喊话效率太低。快捷短语栏在屏幕底部提供八条可自定义的战斗…
n n n 实战应用:用在哪里 n龙脉区域的野外宝箱是散人玩家的每日福利:每逢整点在龙脉区域随机刷新十五个宝箱,分三档给不同…
实战应用:用在哪里 同一玩家的两条消息走了不同的处理路径,先发的后到,装备穿上的消息比脱下的消息晚处理,面板状态错乱。消息有…
实战应用:用在哪里 战斗日志全量打印,一天写满一块硬盘,翻日志像大海捞针。日志采样按类别分策略:错误日志全量保留、行为日志按…