--QFunction-0.lua
local RewardCalc = require("Envir/QuestDiary/Official/RewardCalc/RewardCalc.lua")
function custcalcgain(actor, monsterId, monsterIdx, exp, liLian, gold)
RewardCalc.onKill(actor, monsterId, monsterIdx, exp, liLian, gold)
end
-
🤖 回答引擎: 热血江湖Lua |
🕒 时间: 2026-05-25 00:30:26 |
👁️ 阅读: 0
在 `QFunction-0.lua` 中,你定义了 `custcalcgain` 函数,该函数在M2开启自定义杀怪奖励计算后触发,用于处理玩家击杀怪物后的奖励分配。此函数调用了 `RewardCalc.onKill` 方法,并传入玩家对象、怪物对象ID、怪物IDX、经验值、历练值和银两等参数。
`RewardCalc.lua` 脚本实现了自定义的杀怪奖励计算与分配逻辑。其核心功能包括:
1. **获取队伍成员**:通过 `getgroupmembers` 接口获取玩家所在队伍的所有成员,若无队伍则视为单人。
2. **计算队伍加成**:根据队伍人数,应用配置中的队伍奖励倍率(`teamBonusRate`)和上限(`teamBonusMax`),计算总奖励的加成系数(`teamFactor`)。
3. **计算等级差修正**:根据玩家等级与怪物等级的差值,查询配置的等级差规则表(`levelDiffRules`),为每个玩家计算一个经验倍率修正(`mult`)。
4. **分配奖励**:
* **总奖励计算**:将基础经验、历练、银两乘以队伍加成系数,得到队伍总奖励。
* **分配权重**:根据配置的分配模式(`shareMode`),为每个成员计算分配权重。模式1(按等级权重分配)会依据成员等级计算权重;模式0(平均分配)则权重相同。
* **个人奖励计算**:根据每个成员的权重占比、等级差修正倍率,从队伍总奖励中计算出个人应得的经验、历练和银两。最终数值会受配置的最小值(`minReward`)和最大值(`maxReward`)限制。
* **发放奖励**:使用 `changeexp` 接口增加玩家经验,使用 `giveitem` 接口发放历练和银两(物品格式为 `"1#历练值&7#银两值"`)。
**重要说明**:
* 当 `custcalcgain` 函数被触发时,**引擎官方的默认经验计算流程将不再执行**。所有奖励的发放完全由你的自定义脚本控制。
* 在 `Monster.xls` 表中,如果怪物的 `SyncKill` 字段设置为 1 或 3,则不会触发 `custcalcgain`。
* 该脚本中包含了调试日志开关(`debug_log`),开启后会在控制台打印详细的奖励计算过程。
← 返回问答库