沃玛大殿打满三星的玩家只想拿材料不想再跑图,扫荡功能把六百秒的跑图压成一次点击。扫荡不是无门槛福利:三星评价解锁、每次消耗两张扫荡券、每日五次上限,三个闸门控制产出节奏。
入口校验历史最高星级与扫荡券存量,三星以下拒绝并提示差距。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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 公告的敌人不是玩家没看到,是玩家看麻了:全服喇叭一天 40 条,玩家把公告通道整体静音,真正的停机公告也被淹没在里…
设计初衷 数值通胀是长线服务器的慢性病:每个版本都想给玩家"更强的爽感",三年后伤害翻一百倍,老装备一夜归零,平衡体系整体崩…
底层原理 合成一件装备要动三个变量:合成计数、幸运值、材料锁。写到一半失败,逐个手写还原是事故高发地——五个变量的事务,手工…
设计初衷 烈火剑法 1 到 3 级是战士战力的分水岭,升级曲线要回答三个问题:每一级值多少、贵多少、什么时候点。设计立场是增…
业务场景 主播直播喊口令"祖玛教主首杀庆典",玩家在世界频道打出该口令即领奖。三个约束:口令只在直播中口头公布、有效期 60…
底层原理 战力榜每 5 秒重算一次,单次重算 200 毫秒,期间前端仍在拉取榜单——直接在原表上改,读到的就是半新半旧的混合…