把糖豆人的闯关淘汰搬进传奇:五十人同场跑酷穿越机关关卡,每关淘汰末位的一成玩家,坚持到终点的进入决赛圈抢宝箱。轻竞技无战力门槛,非硬核玩家也有夺冠时刻。
三段关卡各有机关:旋转锤击飞、移动地板错位、缩圈浮桥,淘汰线按时序收口,未过线者出局。actor是字符串,转对象后判定淘汰。
local CHECKPOINTS = { 60, 120, 180 }
local passed = {}
setontimerex(118, 1)
function ontimer118()
local now = os.time()
local stage = 0
for i, cp in ipairs(CHECKPOINTS) do
if now >= cp then stage = i end
end
if stage == 0 then return end
for _, name in ipairs(racers()) do
if passed[name] == nil or passed[name] < stage then
if now > CHECKPOINTS[stage] + 10 then
eliminated[name] = true
sendmsg(name, 0, "很遗憾,本届闯关止步第" .. stage .. "关")
end
end
end
end
通过全部关卡的玩家进入终点平台,中央宝箱限量三只,先到先得,拾取即锁定归属。
local chestLeft = 3
local function tryGrabChest(actor)
local player = class(actor)
if chestLeft <= 0 then
sendmsg(actor, 0, "宝箱已被抢完,感谢参与!")
return
end
chestLeft = chestLeft - 1
giveitem(actor, "闯关冠军宝箱", 1)
sendcentermsg(class(actor):GetName() .. " 抢到了冠军宝箱!")
end
三关淘汰的时序收口逐关验证;宝箱数量与拾取归属一一对应。上线后看各关的淘汰率分布,首关淘汰超过五成说明机关难度偏高,首关要给新手留足通过率。
passed表按名字记录通过关卡号,重名玩家的记录会互相覆盖,键改用唯一标识。eliminated标记在玩家掉线重连后要恢复校验,掉线不算淘汰是规则公平的底线。chestLeft并发抢拾取要加锁,两个玩家同帧抢末位宝箱的双冠军是判定事故。机关的击飞力度过大会把玩家抛出地图边界,物理参数要按地图尺寸校准。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 攻城战前的城防准备通常是帮主一人操心的后勤活。城墙修筑赛把城防建设变成行会全员可参与的竞赛:攻城前一周开…
实战应用:用在哪里 行会成员的付出经常被忽视:连续一个月全勤、攻城战首杀、基金大额投入,这些贡献没有正式的认可渠道。行会授勋…
实战应用:用在哪里 首充礼包的转化率高度依赖展示效果:一张静态图配一行文字的弹窗转化率不足三成,动态展示礼包内容物与价值对比…
实战应用:用在哪里 比奇安全区的设计初衷是新手的避风港,但红名玩家仗着守卫不攻击红名而无视安全区规则。安全区守卫驱逐触发让红…
实战应用:用在哪里 行会转让、装备销毁、大额交易这类操作一旦出错不可逆转,事后追责全靠口头描述。关键双录机制在操作前后各留存…
实战应用:用在哪里 服务器资源的使用趋势靠人记不现实,容量不够时才发现已经超限运行一个月。容量月报自动汇总每月的 CPU、内…