三种品质的装备各写一个熔炼分支,学员复制第一段改出第二、第三段——条件改了、材料数改了,发奖的物品名忘了改:三段全部发放同一种材料。复制粘贴本身没错,错在没有核对清单:粘贴出的每个分支要改哪些位置,全凭记忆。错误写法:
local function recycleBad(quality)
if quality == "蓝" then
takeitem(actor, "蓝装", 1)
giveitem(actor, "强化石", 3, 1)
elseif quality == "紫" then
takeitem(actor, "紫装", 1)
giveitem(actor, "强化石", 8, 1)
elseif quality == "橙" then
takeitem(actor, "橙装", 1)
giveitem(actor, "强化石", 3, 1)
end
end
橙装分支的 8 抄成了 3——橙色品质的收益被砍掉六成。
分支差异收敛为数据差异:把"品质到材料数"的映射提进一张表,分支只剩一条,复制粘贴无从发生。示例代码如下:
local RECYCLE_MAP = { ["蓝"] = 3, ["紫"] = 8, ["橙"] = 20 }
local function recycle(quality)
actor = getplayerbyname(actor)
local num = RECYCLE_MAP[quality]
if num == nil then
sendmsg(actor, 1, "未知品质:" .. tostring(quality))
return
end
if not takeitem(actor, quality .. "装", 1) then
sendmsg(actor, 1, "背包里没有" .. quality .. "装。")
return
end
giveitem(actor, "强化石", num, 1)
sendmsg(actor, 1, "熔炼成功,获得强化石 " .. num .. " 颗。")
end
本篇的新技术点是"以表代分支":三个分支的差异只有数字时,数字就该住进表里——新增品质加一行配置,核对成本从三处降到一处。
三步验证:蓝紫橙三种品质各熔一次,材料数分别应为 3、8、20;对照误写版,橙色熔出 3 颗复现事故;传入"绿"未知品质,确认提示而非报错。
确实要写多分支时(差异不止数字),粘贴后逐分支核对三个位置:条件、动作对象、数值,核对完在行尾写注释标注已核对。示例代码如下:
if quality == "蓝" then
giveitem(actor, "蓝强化石", 1, 1) -- checked
elseif quality == "紫" then
giveitem(actor, "紫强化石", 3, 1) -- checked
end
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 战场激励只有掉落与经验:打赢分东西、打输白来——牺牲与战功没有独立的记账,败仗连参与感都不剩。军功爵位设计:把战场…
设计初衷 传奇世界有地图、怪物与装备,唯独没有"可读的东西":背景故事躺在官网停更的设定集里,玩家与世界的情感联结缺一条文化…
底层原理 装备搭配的最优组合是组合爆炸:20 件挑 6 件约 3.8 万种组合,叠加多约束后枚举不可行。模拟退火借冶金退火的…
底层原理 把 n 个据点用最短的线路连成一张连通网(地图路网、节点布线),最小生成树给出总长最短的方案:每次从"已连接区"向…
设计初衷 玩家 ID 千篇一律的符号前缀,江湖人物没有江湖味;外号全靠玩家互喊,叫开了却没有名分,恶意起外号也没有约束。江湖…
业务场景 帮会人数封顶 200 后管理半径失控:总舵集合没人应、帮频刷屏、烈火剑法心得与广告混在一起没人理。帮会分舵封装:帮…