祖玛教主的狂暴有一条时间轴:开战三十秒召唤护卫、血量七成播报愤怒、血量三成进入狂暴。时间轴触发链把阶段事件按条件依次点亮,播报、Buff、机制切换挂在各阶段上,教主的每一阶段都有戏剧节拍。
阶段表登记触发条件与回调,伤害与计时双通道推进阶段。actor是字符串,转对象后推进触发。
local STAGES = {
{ id = "summon", cond = "t>=30", done = false, fire = "doSummon" },
{ id = "enrage", cond = "hp<=70", done = false, fire = "doEnrage" },
{ id = "final", cond = "hp<=30", done = false, fire = "doFinal" },
}
local function checkStages(actor, hpPct, elapsed)
for _, st in ipairs(STAGES) do
if st.done ~= true then
local hit = false
if st.cond == "t>=30" and elapsed >= 30 then hit = true end
if st.cond == "hp<=70" and hpPct <= 70 then hit = true end
if st.cond == "hp<=30" and hpPct <= 30 then hit = true end
if hit then
st.done = true
callscript(st.fire)
end
end
end
end
各阶段的回调函数承载实际机制:召唤用genmon、狂暴用addbuff、播报用sendcentermsg,机制与触发解耦。actor是字符串,转对象后执行机制。
function doSummon(actor)
local player = class(actor)
genmon("zuma7", 22, 24, "祖玛卫士", 4)
sendcentermsg("祖玛教主召唤了护卫!")
end
function doEnrage(actor)
addbuff(actor, "BOSS_RAGE", 9999)
sendcentermsg("祖玛教主进入狂暴状态!")
end
时间与血量双通道的触发互不重复;阶段顺序错乱的重入拒绝。上线后记录各阶段的实际触达时长,狂暴阶段团灭率超五成则回调前加一次预警播报。
STAGES的done标记是表级共享状态,多只教主同场要按实例分表,共享标记会让第二只教主直接跳到末阶段。callscript的脚本名与注册函数名逐字一致,拼错静默无执行,阶段跳空最难排查。hpPct的计算分母是最大血量,教主被治疗回升后已触发的阶段不回退,播报只进不退。计时通道的elapsed从开战起算,开战时刻在首刀入账时写,无人开打的教主不会凭空进入召唤阶段。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…