新人保护榜只收注册三十天内的玩家,冲到全服前一百即毕业,毕业发称号与专属坐骑,并把名额让给后面的新人。毕业接口管三件事:资格判定、结算发奖、名额滚动,防止老号占坑新人没得玩。
定时器每日结算一次:查注册天数与榜单名次,双条件满足即毕业。actor是字符串,转对象后读注册信息。
function checkGraduate(actor, rank)
local player = class(actor)
local regDays = tonumber(getplayvar(actor, 2, "REG_DAYS") or "0")
if regDays > 30 then
sendmsg(actor, 0, "已超过新人保护期30天,不再参与该榜")
return false
end
if rank <= 100 then
setplayvar(actor, "HUMAN", "ROOKIE_GRAD", 1, 1)
sendmail(actor, 0, "新人榜毕业奖励", "排名第" .. rank .. "顺利毕业", "毕业称号卷轴|1;小毛驴坐骑|1")
return true
end
return false
end
毕业一人空出一个位,递补从榜单一百零一名往后顺延,保护期内的玩家始终有一百个目标坑位。
local function refillRanks(graduated)
for i = 1, graduated do
local nxt = 100 + i
sendmail(lookupRankName(nxt), 0, "新人榜递补通知", "已进入保护榜前100", "")
end
end
测试构造三十天边界、九十九名与一百零一名三场景,毕业与递补各归各位。上线后看榜单毕业率,周毕业超过三百人说明保护期太短,新人两周就毕业会让保护形同虚设。
REG_DAYS按注册时间折算,合服并入的玩家注册信息缺失,缺省按老号处理最稳妥,误把老号当新人毕业会引来真新人投诉。lookupRankName查不到离线玩家返回空,递补邮件对空名直接跳过并计数,连续递补失败超十次说明榜单数据源有问题。毕业称号卷轴是唯一产出,重复毕业路径要被GRAD标记挡死,重复结算的客诉比漏发更难处理。递补通知的文案别带第二人称说法,给还没到榜的新人压力感反而是负体验。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…