权限 perm=3;审计日志、事件通知,对接 AttrMgr 经验升级逻辑,自动处理升级、多段转生、升级奖励触发 gm_cmd_list.lua 追加注册:
ini
{
cmd = "add_exp",
perm = 3,
desc = "增加经验:add_exp roleid exp | exp 为要增加的经验数值",
status = 1,
func = "gm_add_exp"
},
gm_func.lua 追加代码
lua
function gm.gm_add_exp(gm_role, args)
local role_id = tonumber(args[1])
local add_exp = tonumber(args[2])
if not role_id or not add_exp or add_exp <= 0 then
return -1, "参数错误: add_exp roleid exp"
end
local player = PlayerMgr:GetPlayer(role_id)
if not player then
return -3, "目标玩家不存在"
end
-- AttrMgr统一加经验,内部自动判断升级、转生、抛升级事件
local ret, tip = AttrMgr:AddExp(player, add_exp)
if ret ~= 0 then
return ret, tip
end
LogMgr:WriteGMLog(gm_role, "add_exp", string.format("target:%d,add_exp:%d", role_id, add_exp))
EventMgr:Fire("GM_ADD_EXP", gm_role, role_id, add_exp)
return 0, string.format("增加经验 %d 成功", add_exp)
end
AttrMgr 契约接口(AttrMgr:AddExp)说明
diff
-- AttrMgr:AddExp(player, exp)
-- 内部逻辑:
-- 1. 累加经验
-- 2. 循环判断是否满足升级条件,自动升级
-- 3. 升级后刷新属性、同步客户端
-- 4. 抛出 PLAYER_LEVEL_UP 事件(礼包、红点、升级奖励订阅)
GM调用示例
lua
add_exp 10001 5000000 -- 给10001增加500万经验