结拜面向固定小队:三五名玩家共享结拜称号与血量加成,团战收益明显,桃园结义的场景仪式在传奇玩家群体里接受度很高。结拜与结婚不同,重在多人状态一致性——一人退伙,全员属性重算,称号同步降级,任何一步不同步都会出现属性幽灵。
local SWORN_MIN, SWORN_MAX = 2, 5
function Sworn.invite(leader, target)
if #leader.swornIds + 1 > SWORN_MAX then return false, "人数已满" end
if target.swornIds and #target.swornIds > 0 then return false, "已有结义" end
QF_SendConfirm(target, "结拜邀请", function(ok)
if ok then Sworn.join(leader, target) end
end)
return true
end
发起方当队长,被邀请人弹确认框,同意才入团。人数 2 到 5 人,二次确认防误触。邀请有效期 60 秒,超时自动作废,队长可重新发起。结拜仪式要求全员在线聚集到结义石旁,仪式感与在线率双重收益。
function Sworn.join(leader, member)
table.insert(leader.swornIds, member.id)
table.insert(member.swornIds, leader.swornIds[1])
for _, pid in ipairs(leader.swornIds) do
local p = QF_GetPlayer(pid)
Sworn.recalc(p)
QF_SetTitle(p, "结义 · " .. #leader.swornIds .. "人")
end
end
function Sworn.recalc(plr)
local bonus = #plr.swornIds * 100
plr.swornHp = bonus
end
每名成员提供 100 点血量加成,全员同步重算并刷新称号。退伙流程复用重算逻辑,称号按剩余人数降级,主动退伙 3 天内不可加入新结义,防反复横跳薅加成。结义称号支持队长自定义后缀,展示在头顶称号栏。关系列表用 GUI 树控件渲染成员血量加成明细,解散操作需要全员确认,任一成员拒绝即中止。
全员属性一致性每小时抽查一次,成员加成数值与结义人数不符即触发重算修复。
成员退伙后称号没有同步降级是第一版的大坑,五人结义的队伍打城时有人实际只享受三人加成,战力复核时才暴露。重算逻辑收敛到单点函数后,绑定、退伙、解散所有路径都走同一段代码,这类不一致问题再没复发。结义称号自定义后缀的输入没接敏感词库,出现过几个出格的名字,输入框接上与聊天同一套词库是标配,不是可选项。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 脚本的规范靠人盯盯不过来:命名风格漂移、全局变量乱用、缩进混着来——风格检查器把这些规则的执行自动化。提…
实战应用:用在哪里 拍卖行的出价是一场与时间的博弈:出价的按钮、倒计时的紧迫、截拍瞬间的悬念——拍卖界面的要点是出价的流程、…
实战应用:用在哪里 强化连败七次是什么体验?幸运值机制给失败的玩家一个隐性的承诺:每次失败累加幸运值,幸运值越高下一次的成功…
实战应用:用在哪里 审计日志的价值在于不可抵赖:被改过的日志比没有日志更危险——纠纷的追溯、内部的追责都建立在「日志没被动过…
实战应用:用在哪里 活动结束给 3 万玩家发奖励:一次性群发让邮件表瞬间多 3 万行、投递的队列堵塞正常的通信。批量邮件的分…
实战应用:用在哪里 面对面的交易是传奇最经典的交互:两人面对面、各自放入物品与金币、双方确认后成交。交易的协议要点是会话的建…