沃玛大殿打满三星的玩家只想拿材料不想再跑图,扫荡功能把六百秒的跑图压成一次点击。扫荡不是无门槛福利:三星评价解锁、每次消耗两张扫荡券、每日五次上限,三个闸门控制产出节奏。
入口校验历史最高星级与扫荡券存量,三星以下拒绝并提示差距。actor是字符串,转对象后才能读变量与扣券。
function npc_sweep(actor)
local player = class(actor)
local star = tonumber(getplayvar(actor, 2, "WOMA_STAR") or "0")
if star < 3 then
sendmsg(actor, 0, "三星通关后解锁扫荡,当前" .. star .. "星")
return
end
local times = tonumber(getplayvar(actor, 2, "SWEEP_CNT") or "0")
if times >= 5 then
sendmsg(actor, 0, "今日扫荡次数已用完,零点刷新")
return
end
if player:checkitemw("扫荡券", 2) == false then
sendmsg(actor, 0, "每次扫荡消耗扫荡券2张")
return
end
player:takeitem("扫荡券", 2)
setplayvar(actor, "HUMAN", "SWEEP_CNT", times + 1, 1)
end
扫荡奖励按三星档全额发放,随机掉落部分按七成折算,保持手动通关的收益优势。
function sweepReward(actor)
local base = "沃玛号角碎片|3;金币|20000"
local extra = ""
if math.random(1, 100) <= 30 then
extra = ";黑铁矿石|2"
end
sendmail(actor, 0, "沃玛大殿扫荡奖励", "第" .. (getplayvar(actor, 2, "SWEEP_CNT") or "1") .. "次扫荡", base .. extra)
end
测试号覆盖两星拒绝、无券拒绝、五次封顶三个分支,核对折算比例。上线后对比扫荡与手动通关的人均日收益,扫荡侧超过手动侧即折算系数失当。
SWEEP_CNT按自然日刷新,跨零点比对日期变量清零,漏做会让五次上限变成永久上限,首日玩家第二天全被卡住。扫荡券的checkitemw只查随身,券存仓库会被误判无券,与门票同一类坑。折算系数写死0.7要进配置变量,数值组调参不该找程序员。sendmail的正文里拼次数时变量可能为空,or 1兜底必须保留,否则正文出现空串玩家截图当 bug 报。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…