aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp15
2 files changed, 15 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ea27d68ee9f..95c91c6a9cf 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2006,6 +2006,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
bool UpdateFishingSkill(int32 expansion);
float GetHealthBonusFromStamina() const;
+ float GetManaBonusFromIntellect() const;
Stats GetPrimaryStat() const;
bool UpdateStats(Stats stat) override;
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 8226ac7c00d..4e1bb27398b 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -384,6 +384,17 @@ float Player::GetHealthBonusFromStamina() const
return baseStam + moreStam * ratio;
}
+float Player::GetManaBonusFromIntellect() const
+{
+ // Taken from PaperDollFrame.lua - 4.3.4.15595
+ float intellect = GetStat(STAT_INTELLECT);
+
+ float baseInt = std::min(20.0f, intellect);
+ float moreInt = intellect - baseInt;
+
+ return baseInt + (moreInt * 15.0f);
+}
+
Stats Player::GetPrimaryStat() const
{
uint8 primaryStatPriority = [&]() -> uint8
@@ -428,9 +439,11 @@ void Player::UpdateMaxPower(Powers power)
UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + AsUnderlyingType(power));
+ float bonusPower = (power == POWER_MANA && GetCreatePowerValue(power) > 0) ? GetManaBonusFromIntellect() : 0.0f;
+
float value = GetFlatModifierValue(unitMod, BASE_VALUE) + GetCreatePowerValue(power);
value *= GetPctModifierValue(unitMod, BASE_PCT);
- value += GetFlatModifierValue(unitMod, TOTAL_VALUE);
+ value += GetFlatModifierValue(unitMod, TOTAL_VALUE) + bonusPower;
value *= GetPctModifierValue(unitMod, TOTAL_PCT);
SetMaxPower(power, (int32)std::lroundf(value));