Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

AzerothCore修改源码增加宠物天赋倍率

玩猎人感觉宠物天赋点太少了,感觉可以和人物天赋一样可以配置天赋点的获取倍率。自己研究了一下,这里总结出来。

增加配置

World/IWorld.h 中的Rates 枚举的RATE_TALENT后面增加RATE_PET_TALENT 代表宠物天赋倍率的配置。
World/World.cpp 中配置读取的地方新增(可以加在_rate_values[RATE_TALENT]配置的后面)

1
2
3
4
5
6
_rate_values[RATE_PET_TALENT] = sConfigMgr->GetOption<float>("Rate.Pet.Talent", 1.0f);
if (_rate_values[RATE_PET_TALENT] < 0.0f)
{
LOG_ERROR("server.loading", "Rate.Pet.Talent ({}) must be > 0. Using 1 instead.", _rate_values[RATE_PET_TALENT]);
_rate_values[RATE_PET_TALENT] = 1.0f;
}

实现配置读取以及默认值的设置。

修改源码

Entities/Pet/pet.cpp 中找到 GetMaxTalentPointsForLevel 方法,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint8 Pet::GetMaxTalentPointsForLevel(uint8 level)
{
uint8 points = (level >= 20) ? ((level - 16) / 4) : 0;
// 新增这一行代码
points = uint8(points * sWorld->getRate(RATE_PET_TALENT));

// Mod points from owner SPELL_AURA_MOD_PET_TALENT_POINTS
if (Unit* owner = GetOwner())
points += owner->GetTotalAuraModifier(SPELL_AURA_MOD_PET_TALENT_POINTS);

sScriptMgr->OnCalculateMaxTalentPointsForLevel(this, level, points);

return points;
}

好了,这样代码就改好了。

编译验证

worldserver.conf 中增加配置:Rate.Pet.Talent = 2 设置成两倍倍率。
编译服务端,启动游戏验证,天赋计算公式按代码逻辑是:**20级开始(等级-16)/ 4 取整 **

宠物20级:2点天赋
20231111000001.png

宠物80级:32点天赋
20231111000002.png

完成~

PR

给官方提了PR,也成功合并了。有个问题是项目成员觉得应该和玩家的天赋倍率保持一致,需要影响到所有天赋点获取行为,我觉得也合理,所以最终提交的代码是有变化的。
PR详情: https://github.com/azerothcore/azerothcore-wotlk/pull/17678