沙巴克攻城战是传奇的巅峰玩法:每周固定时段,申请攻城的行会进攻沙巴克,皇宫内站稳 60 秒即改旗易帜,城主行会获得税收权与全服尊荣。占领判定的每一条规则都牵动全服最强势力的神经,引擎为攻城提供了一整套真名接口与触发链。
---castlewarstart: 攻城开始时触发 sysobj:系统对象
function castlewarstart(sysobj)
local applicants = getcastlewarlist()
if not applicants or #applicants == 0 then return end
QF_Broadcast("沙巴克攻城战开始!城门已开")
end
攻城的排期与城门开关由引擎托管,脚本侧在 castlewarstart 触发里做业务衔接:getcastlewarlist 取回申请攻城的行会列表,用于开场通报与参战统计。申请环节用 addtocastlewarlist 把行会写入攻城名单,名单在开战前 24 小时冻结,防止临时抱团。
---getcastle0: 占领沙巴克触发
function getcastle0(sysobj, guildName)
setcastleguild(guildName, 0)
QF_Broadcast("「" .. guildName .. "」占领沙巴克!")
Siege.grantTax(guildName, 0.05)
end
---castlewarend: 攻城结束时触发
function castlewarend(sysobj)
QF_Broadcast("沙巴克攻城战结束")
end
皇宫内的占领计时由引擎判定:同一行会的成员独占皇宫并持续 60 秒即触发 getcastle0,混入他帮成员计时清零。脚本侧拿到占领触发的行会名后写城主、发播报、授税收。城主行会获得全服交易税 5% 的抽成权,每日结算进行会基金,经济霸权是沙巴克的真正奖赏。攻城战期间的击杀不计 PK 值,杀红了眼也不进红名村,这是攻城的特权。
占领触发的日志保留整个赛季,争议判罚凭日志逐秒还原,攻城战的公信力靠数据维护。
皇宫的归属判定早期用矩形框自行计算,玩家站在模型边缘卡出判定区,改成引擎的房间判定后无死角。税收结算曾经按日重复发放,发放任务的幂等键补上后城主基金才对得上账。攻城名单曾经开战后仍可修改,半夜偷报名的行会让守方措手不及,名单冻结时点写进规则后争议消失。
攻城时段、占领秒数、税收比例全部进配置表,赛季间可调。占领触发的播报文案区分占领与卫冕两种,卫冕成功的荣誉感单独设计。攻城战的容错预案:开战时 castleinfo 检查城墙状态,异常时用 gmexecute 走引擎的强制开场通道,裁判权永远在脚本侧可干预。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 竞技场奖励"一刀切"(前 10 名有奖,其余没份)的后果:排名 11 到 50 的中间层玩家觉得自己白打了一个赛季…
业务场景 三连胜后继续匹配同段位对手没有挑战性。连胜豁免:三连胜后自动将匹配池上移一档。 核心实现 连胜计数与豁免判定。示例…
底层原理 事件系统硬编码处理函数名导致新增事件必须改分发入口——开放封闭原则的反面。事件委托表用数据代替分支:事件名到处理函…
设计初衷 坐骑系统普遍的死穴是"买了就不用管":一次性消费后坐骑沦为纯代步工具,没有养成层级。坐骑长线的设计目标:喂养、训练…
设计初衷 回流玩家的最大障碍不是数值落后,是社交断层:离开 90 天后,好友列表里一半人退游、行会换了会长、固定队散了。回归…
底层原理 引擎的 Lua 脚本跑在协作式调度里:一段脚本能跑多久,取决于它自己何时返回。批量操作(扫 5000 只怪物掉落、…