新人保护榜只收注册三十天内的玩家,冲到全服前一百即毕业,毕业发称号与专属坐骑,并把名额让给后面的新人。毕业接口管三件事:资格判定、结算发奖、名额滚动,防止老号占坑新人没得玩。
定时器每日结算一次:查注册天数与榜单名次,双条件满足即毕业。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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…