野外精英的首杀权改为竞拍制: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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…