玩家升级是留存的关键节点,升级瞬间发奖励、挂称号,比玩家自己领奖更有仪式感。996引擎的playlevelup触发正是这个入口,配合真名接口能在零脚本文件的前提下完成转生礼与称号发放。
playlevelup在人物升级瞬间触发,用getbaseinfo(actor,6)读取新等级做分支,逢百发转生礼,逢十发小额奖励。actor是字符串,调用方法前先转换成对象。
function playlevelup(actor)
local player = class(actor)
local lv = getbaseinfo(actor, 6)
if lv % 100 == 0 then
giveitem(actor, "转生宝箱", 1)
setranklevelname(actor, "玛法先锋" .. lv / 100)
sendcentermsg(class(actor):GetName() .. " 达到 " .. lv .. " 级!")
elseif lv % 10 == 0 then
giveitem(actor, "回城卷", 5)
sendmsg(actor, 0, "恭喜升到" .. lv .. "级,奖励回城卷5张")
end
end
整百级再叠加一小时攻击Buff,配合烈火剑法的职业节奏,升级反馈更强。
function playlevelup(actor)
local lv = getbaseinfo(actor, 6)
if lv == 200 or lv == 300 then
addbuff(actor, "LEVEL_UP_ATK", 3600)
sendmail(actor, 0, "转生贺礼", "附加攻击Buff一小时已生效", "金创药|10")
end
end
测试号用GM命令连续升降级,验证每个分支只发一次。上线后每日统计各等级段触发量,写入运营日志;某档奖励领取数为零,多半是物品名拼写与物品库不一致,第一时间能从数据侧发现。
playlevelup在经验溢出连升时会连续触发多次,每次都要完整执行,奖励代码必须可重入,别在函数里依赖单次初始化。setranklevelname的称号会覆盖旧称号,低级分支不要调用它,否则整百称号被逢十逻辑冲掉。giveitem的actor参数在玩家背包满时静默失败,转生礼这种高价值物品改成sendmail投递更稳。getbaseinfo第二参数的含义以站点apidb.json为准,不同分支编号含义有差异,写死前先查库再定值。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 排行榜卡死拖累登录、成就推送挤占带宽,这些非核心功能出问题时最需要的是一个总闸。服务降级预案定义了核心链…
实战应用:用在哪里 单件装备的属性提升有限,套装共鸣让多件装备产生化学反应:穿戴同系三件以上触发共鸣属性,五件触发全局光环。…
实战应用:用在哪里 同一账号在两台设备同时在线,一台打怪一台交易,是盗号者测试密码后的标准动作。多设备在线检测在登录环节检查…
实战应用:用在哪里 老服合并、机房迁移、数据分库改造,都涉及角色数据的批量搬家。数据迁移的核心是搬运过程中不断服、不丢数据、…
实战应用:用在哪里 沙影之路的暗之Boss是行会实力的试金石:真身与三个镜像随机分布在四个祭坛,只有击杀真身才有掉落,镜像被…
实战应用:用在哪里 攻城战最容易变成人海推门的无脑玩法。攻城拔寨将城门攻坚设计为三线战术:正面强攻吸引火力、侧翼工程车破城、…