称号是荣誉的徽章:沙巴克城主、科举状元、等级巅峰的第一人,称号挂在名字旁全服可见。称号系统的实现要点是称号的获取登记、展示位的切换与属性叠加的规则。
---称号的授予:登记进玩家的称号簿
function Title.grant(actor, titleId)
local player = getplayerbyname(actor)
if not player then return false end
local owned = getplayvar(player, 2, "Titles") or ""
-- 幂等:已有称号不重复授予
if ("," .. owned .. ","):find("," .. titleId .. ",", 1, true) then
return false
end
setplayvar(player, "HUMAN", "Titles",
owned .. (owned ~= "" and "," or "") .. titleId, 1)
local def = TITLE_DEF[titleId]
sendmsg(player, 1, "获得称号:" .. def.name)
return true
end
称号簿用逗号分隔的 ID 串存进持久变量,授予的幂等靠串内的查找——同一个称号两次授予只有第一次生效。称号的定义表管三件事:显示文本、获取条件、属性加成。沙巴克城主的称号由攻城的占领触发授予,科举状元由答题活动发放,等级冲榜的称号每周由排行榜任务结算,来源的多样性让每个玩法都有荣誉的出口。
---佩戴切换与属性叠加
function Title.wear(actor, titleId)
local player = getplayerbyname(actor)
if not player then return false end
local owned = "," .. (getplayvar(player, 2, "Titles") or "") .. ","
if not owned:find("," .. titleId .. ",", 1, true) then
sendmsg(player, 1, "尚未获得该称号")
return false
end
setplayvar(player, "HUMAN", "WornTitle", titleId, 1)
setranklevelname(player, TITLE_DEF[titleId].name)
Title.recalc(player)
return true
end
---属性叠加:全部已获称号的加成生效
function Title.recalc(player)
local atk = 0
local owned = getplayvar(player, 2, "Titles") or ""
for id in owned:gmatch("%d+") do
atk = atk + (TITLE_DEF[tonumber(id)].atk or 0)
end
setplayvar(player, "HUMAN", "TitleAtk", atk, 1)
sendmsg(player, 1, "称号攻击加成合计 +" .. atk)
end
展示位与属性的分工:佩戴的称号决定名字旁显示什么(setranklevelname 一行切换),属性的叠加按全部已获得的称号累计——收藏的每一枚称号都有战斗价值,佩戴的选择是外观的决策而非数值的取舍。称号的时效分两类:永久的荣誉(城主、状元)与限时的活动称号(节日登录),限时的到期自动失效并邮件告知,荣誉的稀缺不被通胀稀释。称号的排序在称号簿里按稀有度分层展示,收集的进度与未获得的获取途径灰色提示,收集欲的导航让玩家知道下一枚去哪拿。
称号的持有分布与佩戴率的统计,佩戴率低的称号是设计失效的信号;属性叠加的合计与面板的一致性抽检,数值的账当面算清。
称号簿的串曾经超长,两百枚称号的玩家的存取变慢,串的上限与归档机制补上。佩戴的切换曾经不同步属性,只换了名字没换加成,切换后的重算调用补上。限时的到期曾经不通知,玩家的称号悄悄消失引发客诉,到期前的邮件预告补齐。
称号的获取途径在图鉴页全量公示,未获得的灰色条目是收集的路线图。称号的命名规范:活动的临时称号带年月份,荣誉的永久称号不带时效词。称号的稀有度分层(普通、稀有、传说)用颜色区分,名字旁的底色就是身份的语言。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…
实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…
实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…
实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…
实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…
实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…