玩家升级是留存的关键节点,升级瞬间发奖励、挂称号,比玩家自己领奖更有仪式感。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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…