把竞速游戏的计时赛搬进坐骑系统:盟重到沙巴克的赛道上设十个计时点,坐骑竞速按分段成绩排名,最快圈速永久记录在坐骑名片上。坐骑的养成价值从属性扩展到操作,骑术高手有了展示舞台。
赛道设十个计时门,依次穿越记录分段成绩,总成绩为分段之和。actor是字符串,转对象后记录分段。
local gateIdx = {}
local gateTs = {}
function onGatePass(actor, gate)
local player = class(actor)
local name = player:GetName()
if gate ~= gateIdx[name] + 1 then
sendmsg(actor, 0, "漏检计时点,成绩无效")
return
end
gateIdx[name] = gate
gateTs[name] = gateTs[name] or {}
gateTs[name][gate] = os.clock()
if gate == 10 then
local total = os.clock() - gateTs[name][1]
sendmsg(actor, 0, "完赛!总用时" .. string.format("%.2f", total) .. "秒")
end
end
个人最好成绩持久化到坐骑名片,查看坐骑即可看到骑手的赛道荣誉,成绩是坐骑玩法的社会货币。
local function saveBestLap(actor, total)
local player = class(actor)
local best = tonumber(getplayvar(actor, 2, "RIDE_BEST") or "999")
if total < best then
setplayvar(actor, "HUMAN", "RIDE_BEST", total, 1)
sendcentermsg(class(actor):GetName() .. " 刷新盟重竞速最快纪录:" .. string.format("%.2f", total) .. "秒!")
end
end
漏检、跳检、倒序穿越三类违规路径全部判无效;总成绩与分段之和的误差核对。上线后看圈速纪录的刷新频率,纪录长期不动说明赛道缺乏技巧点,加弯道漂移惩罚丰富操作。
os.clock的精度受帧间隔影响,毫秒级竞速要用引擎高精度时钟,秒级计时会让并列成绩大量出现。gateIdx按名字记录,双开小号在同赛道会串成绩,键改唯一标识。漏检判定只校验顺序号,抄近道穿墙的路径要叠加距离校验。sendcentermsg的破纪录播报加冷却,热门赛道的纪录战一天播几十条会刷屏。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…