演武场的傀儡、镜像演武的影子对手都需要听起来像玩家名字,硬编码的名字表三个月就不够用。随机名生成器用姓氏与名字两组音节表拼接出名字,查重表过滤已用组合,音节表可无限扩充,名字池永远不会枯竭。
五个复姓配三十个名字音节,理论组合一百五十个,查重表保证同一个名字不被重复使用,二十次尝试内取不到就返回空。
local FAMILY = { "慕容", "上官", "欧阳", "司马", "独孤" }
local GIVEN = { "云飞", "傲雪", "战天", "流云", "惊鸿", "听雨" }
local used = {}
local function genName()
for attempt = 1, 20 do
local nm = FAMILY[math.random(#FAMILY)] .. GIVEN[math.random(#GIVEN)]
if not used[nm] then
used[nm] = true
return nm
end
end
return nil
end
命名入口调用生成器,音节组合耗尽时返回编号名的兜底方案,同时广播提醒扩充音节表,避免业务拿到空值报错。
local function nameShadow(actor, idx)
local nm = genName()
if nm == nil then
nm = "影子对手" .. idx
sendcentermsg("名字音节表即将耗尽,请扩充音节表")
end
return nm
end
生成一千个名字核对无重复、长度在四到六字之间、全部由音节表拼出;音节表耗尽路径的兜底名字可辨识;重启后查重表清零在演武场景可接受。名字生成后与玩家昵称做一轮比对,撞名的组合直接废弃重新生成,避免影子对手与真实玩家同名引起误会。监控名字池的使用率,使用超过八成即提示扩充音节表,避免高峰期集中耗尽。
math.random 没播种时生成序列固定,两台节点生成了同名影子对手,启动处用 os.time 播种后序列恢复正常。查重表只增不减,长跑服一个月后音节组合全部用尽,兜底编号名大量出现,配合周期清空未上线的保留名策略缓解。音节表里混入了生僻字,部分客户端字体渲染成方框,音节表用字收进常用字集校验。名字在聊天频道展示时与其他玩家撞名,业务要求生成名追加统一前缀做视觉区分。生成器的音节表按主题分组,恶魔系与天界系分别成表,按活动氛围挑表取用,名字风格与活动调性一致。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会活动集中在攻城战,日常缺乏轻量社交场景。行会篝火答题做行会固定社交活动:每周三、周日晚在行会驻地点燃…
实战应用:用在哪里 全服答题活动办过几期,参与的人不少但黏性不足,答完就散。科举答题把答题做成两段式:每天晚八点的乡试答题筛…
n n n 实战应用:用在哪里 n战斗中打字沟通慢且危险,队伍协作靠喊话效率太低。快捷短语栏在屏幕底部提供八条可自定义的战斗…
n n n 实战应用:用在哪里 n龙脉区域的野外宝箱是散人玩家的每日福利:每逢整点在龙脉区域随机刷新十五个宝箱,分三档给不同…
实战应用:用在哪里 同一玩家的两条消息走了不同的处理路径,先发的后到,装备穿上的消息比脱下的消息晚处理,面板状态错乱。消息有…
实战应用:用在哪里 战斗日志全量打印,一天写满一块硬盘,翻日志像大海捞针。日志采样按类别分策略:错误日志全量保留、行为日志按…