野外精英的首杀权改为竞拍制:BOSS刷新前开放六十秒竞拍窗口,价高者的队伍获得首杀挑战权,出价冻结后未中标即时退款。窗口由定时触发驱动,竞拍的节奏感与公平性都在窗口里。
竞拍入口校验窗口期与出价高于当前标王,写入标王记录。actor是字符串,转对象后冻结押金。
local auction = { open = false, top = 0, topName = "" }
function openAuction()
auction.open = true
auction.top = 0
setontimerex(116, 60)
sendcentermsg("首杀竞拍开启,窗口60秒!")
end
function bidFirstKill(actor, price)
local player = class(actor)
if not auction.open then
sendmsg(actor, 0, "竞拍窗口未开启")
return
end
if price <= auction.top then
sendmsg(actor, 0, "出价需高于当前标王" .. auction.top)
return
end
if player:checkitemw("金币", price) == false then
sendmsg(actor, 0, "金币不足,无法出价")
return
end
player:takeitem("金币", price)
if auction.topName ~= "" then
giveitem(auction.topName, "金币", auction.top)
end
auction.top = price
auction.topName = player:GetName()
end
六十秒到点关闭窗口,标王队伍获得首杀挑战权,未中标者的冻结押金已实时退回。
function onAuctionEnd(actor)
if auction.topName == "" then
sendcentermsg("首杀流拍,BOSS转为自由争夺!")
return
end
sendcentermsg(auction.topName .. " 拍下首杀挑战权!")
auction.open = false
end
出价高于标王、低于拒绝、窗口外拒绝三路径验证;实时退款的金额与冻结一致。上线后看竞拍成交价曲线,首杀权价格走高说明BOSS产出物超值,产出与竞拍价联动平衡。
实时退款的giveitem按名字发放,标王改名的边缘场景要按唯一ID冻结,改名窗口期的押金会打水漂。auction表是进程内存,竞拍中途重启整场作废,开拍前公告竞拍的全局有效性以服务端结算为准。出价的price来自客户端要服务端复核区间,负数与超大数出价都是攻击面。sendcentermsg的竞拍播报只播开拍与成交两个节点,逐笔出价播报会刷屏。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…