道具描述全靠手写:同一件装备在商店、掉落公告、图鉴三处描述各不相同;数值改动后文案忘了同步,"攻击 +37"的道具描述还写着 +35。描述模板封装:模板串加数值参数,一处改数值三处同步——文案与数值永不脱节。
模板与组装。示例代码如下:
local TEMPLATES = {
weapon = "攻击 +%d,耐久 %d/%d,暴率 1/%d",
potion = "恢复 %d 点生命,冷却 %d 秒"
}
local function describe(item)
local tpl = TEMPLATES[item.kind]
if not tpl then
return item.name
end
return string.format(tpl, unpack(item.params))
end
local sword = { kind = "weapon", name = "裁决之杖",
params = { 37, 200, 320, 5000 } }
print(describe(sword))
输出"攻击 +37,耐久 200/320,暴率 1/5000"——数值与文案一次组装成型。
上架校验。示例代码如下:
local PARAM_COUNT = { weapon = 4, potion = 2 }
local function checkTemplate(kind, params)
return PARAM_COUNT[kind] == #params
end
print(checkTemplate("weapon", { 37, 200, 320, 5000 }))
输出 true——参数个数与模板声明对齐才允许上架,缺参错位在源头拦住。
TEMPLATES 按道具种类存模板串(%d 占位),describe 用 string.format 配 unpack 把 params 展开填入——改模板或改参数,所有引用点自动同步。PARAM_COUNT 声明每种模板需要的参数个数,checkTemplate 在上架前校验对齐,防"少一个参数全串错位"的经典事故——错位不报错但语义全错,只能靠源头校验。
道具描述踩过三个坑:一是模板串里出现百分号字面量("成功率100%")被 format 当占位符吃掉直接报错,字面百分号必须写 %%;二是参数顺序靠记忆,两个数字调换不报错但语义全错(耐久与暴率互换),治理方案是参数改键值表配命名占位,从根上消灭顺序依赖;三是同一道具的多语言模板参数个数不一致,定为多语言共用同一 params 数组、各语言模板自行声明参数——参数集唯一,文案多态。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、业务场景 帮会人少时打不死召唤的目标,人多时又抢不到,时机全靠会长手点,纠纷不断。改为每日一次的定时召唤加伤害…
【游戏】 一、业务场景 30 人团本开荒,伤害按个人目标结算,近战几秒就把目标打空,后排毫无参与感。改为全团共享血池:目标总…
【语法】 一、隐蔽陷阱 账目表频繁单点改值又要频繁查前 n 项合计:朴素写法改值一步、查询要扫 n 个元素,查询一多整体就慢…
【游戏】 一、业务场景 想拉动日活,登录礼包要跟着连登天数走:第 1 天小奖,第 7 天大奖。发放核心就一行:按连登天数查阶…
【语法】 一、隐蔽陷阱 大数加法用字符串竖式解决了失真,两笔大数相乘怎么办?tonumber 相乘在 9 位乘 9 位时结果…
【语法】 一、隐蔽陷阱 两批任务分别每 6 分钟与每 8 分钟刷新一次,想知道它们同帧刷新的间隔,从 1 开始逐个试除到 4…