把竞速游戏的计时赛搬进坐骑系统:盟重到沙巴克的赛道上设十个计时点,坐骑竞速按分段成绩排名,最快圈速永久记录在坐骑名片上。坐骑的养成价值从属性扩展到操作,骑术高手有了展示舞台。
赛道设十个计时门,依次穿越记录分段成绩,总成绩为分段之和。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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 师门的公共物资散落在各成员背包里,打仗时才发现没药没符。师门仓库给师门一个共享物资池:成员捐献药品、符纸…
实战应用:用在哪里 师门任务的药材全靠成员自己采,供给不稳定还常被市场价卡脖子。师门药园给师门一块自留地:成员认领地块种植药…
实战应用:用在哪里 锁妖塔是每周最受期待的限时地图:封印每七天松动一次,开门后两小时内妖物掉落翻倍,时间一过封印重合。定时开…
实战应用:用在哪里 师门掌门长期连任,门派活动没人组织,新人没有上升通道。掌门挑战玩法给掌门之位装上轮换机制:每两周开放一次…
实战应用:用在哪里 行会驻地有一片空地,升级什么全凭帮主心情。行会建筑升级接口把驻地建筑体系化:聚义厅、兵器库、药庐、演武场…
实战应用:用在哪里 行会公告只有一行纯文本,写不下攻城安排。富文本公告编辑器支持分段落、插表情、标重点色,编辑区所见即所得,…