充值称号与BUFF配置维护说明
1. 文件位置
涉及文件:
/home/ubuntu/Game2/services/scripts/event/prize/eprize.lua
主要看 3 处:
eprize.pay_title_rules
eprize:GetTotalRecharge
eprize:AddPayTitle
2. 现有结构
AddPayTitle 已经改成按配置表发放,不再手写多段 if。
当前规则表:
eprize.pay_title_rules =
{
{need = 100, title = 1286},
{need = 200, title = 1361},
{need = 400, title = 1366},
{need = 600, title = 1392},
{need = 800, title = 1281},
{need = 1000, title = 1288, impact = 50102},
{need = 2000, title = 1316, impact = 50112},
{need = 3000, title = 1387, impact = 50106},
{need = 4000, title = 1386, impact = 50116},
{need = 5000, title = 1385},
{need = 10000, title = 1240, impact = 50118},
{need = 15000, impact = 50109},
{need = 20000, title = 1216},
{need = 30000, title = 1217, impact = 50119},
}
AddPayTitle 的处理方式:
for _, rule in ipairs(self.pay_title_rules) do
if HaveYuanBao < rule.need then
break
end
grant_pay_title_rule(self, selfId, rule)
end
规则按 need 从小到大写。遍历时只要遇到当前充值额度达不到的档位,后面的规则就不再继续执行。
3. 字段说明
单条规则格式:
{need = 数值, title = 称号ID, impact = BUFF_ID}
字段含义:
need:累计充值门槛。
title:称号 ID,可省略。
impact:BUFF ID,可省略。字段名虽然叫 impact,这里实际是发 BUFF。
允许的写法:
{need = 1000, title = 1288}
{need = 15000, impact = 50109}
{need = 30000, title = 1217, impact = 50119}
4. 累计充值计算
累计充值统一走:
function eprize:GetTotalRecharge(selfId)
当前计算方式是:
local oldRecharge = self:GetMissionData(selfId, ScriptGlobal.MD_CHANGE_YUANBAO_OLD) / ScriptGlobal.MD_CHANGE_YUANBAO_OLD_RATE
local newRecharge = self:GetMissionData(selfId, ScriptGlobal.MD_CHANGE_YUANBAO_NEW) / ScriptGlobal.MD_CHANGE_YUANBAO_NEW_RATE
return oldRecharge + newRecharge
如果后面充值统计口径有变动,改这里,不要在 AddPayTitle 里重新手写一份。
5. 常见修改
5.1 新增档位
例:累计充值 60000 发称号 20001,同时发 BUFF 50130。
直接在 pay_title_rules 末尾追加:
{need = 60000, title = 20001, impact = 50130},
5.2 修改档位
例:把
{need = 5000, title = 1385},
改成充值 8000 才发,称号改为 18888:
{need = 8000, title = 18888},
5.3 删除档位
例:删除下面这条:
{need = 15000, impact = 50109},
直接删掉,或者先注释:
-- {need = 15000, impact = 50109},
6. 注意事项
6.1 规则顺序不能乱
pay_title_rules 必须按 need 从小到大写。
原因是 AddPayTitle 里有:
if HaveYuanBao < rule.need then
break
end
如果把大档位写到前面,后面的低档位会被一起跳过。
6.2 不要删最后的刷新
AddPayTitle 末尾这句不能删:
self:LuaFnAddNewAgname(selfId, -1)
前面发称号时用的是:
self:LuaFnAddNewAgname(selfId, rule.title, true)
true 表示先不立即刷新,最后统一刷新一次。
6.3 一般不要改函数主体
只要是增删改档位,优先改 pay_title_rules。
只有在下面几种情况才需要动 AddPayTitle 或 grant_pay_title_rule:
- 规则字段结构变了
- 发放逻辑变了
- 需要新增称号、BUFF 之外的奖励类型
7. 自检
改完后检查以下几项:
- 表结构有没有少逗号、少括号。
need 是否按从小到大排列。
- 称号 ID、BUFF ID 是否填对。
- 新增规则是否写在
pay_title_rules 里。
有 luac 的话,直接跑一次:
luac -p /home/ubuntu/Game2/services/scripts/event/prize/eprize.lua
8. 维护原则
- 改档位,先改
pay_title_rules。
- 改累计充值算法,改
GetTotalRecharge。
- 不要把旧版的多段
if HaveYuanBao >= ... 写法再加回来。