aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorr4dish <ovitnez@gmail.com>2024-02-25 13:36:50 +0100
committerShauren <shauren.trinity@gmail.com>2024-02-25 13:36:50 +0100
commita7dab01c2dc7105f5feddcbd4bf5489b330d70b5 (patch)
tree111c17f886bfa0070b06bb9932daaa3aeff54942 /src/server/game/Entities/Player
parent1a3006b20d8c41139b206f610bcb6c22508ec329 (diff)
Core/Players: Move power regeneration calculations to Player::UpdatePowerRegen
Diffstat (limited to 'src/server/game/Entities/Player')
-rw-r--r--src/server/game/Entities/Player/Player.cpp68
-rw-r--r--src/server/game/Entities/Player/Player.h4
2 files changed, 3 insertions, 69 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 11d9c9ea1c8..6872705706f 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2056,73 +2056,7 @@ void Player::Regenerate(Powers power)
return;
uint32 curValue = GetPower(power);
-
- /// @todo possible use of miscvalueb instead of amount
- if (HasAuraTypeWithValue(SPELL_AURA_PREVENT_REGENERATE_POWER, power))
- return;
-
- float addvalue = 0.0f;
-
- switch (power)
- {
- case POWER_MANA:
- {
- bool recentCast = IsUnderLastManaUseEffect();
- float ManaIncreaseRate = sWorld->getRate(RATE_POWER_MANA);
-
- if (GetLevel() < 15)
- ManaIncreaseRate = sWorld->getRate(RATE_POWER_MANA) * (2.066f - (GetLevel() * 0.066f));
-
- if (recentCast) // Trinity Updates Mana in intervals of 2s, which is correct
- addvalue += GetFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + AsUnderlyingType(POWER_MANA)) * ManaIncreaseRate * 0.001f * m_regenTimer;
- else
- addvalue += GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + AsUnderlyingType(POWER_MANA)) * ManaIncreaseRate * 0.001f * m_regenTimer;
- } break;
- case POWER_RAGE: // Regenerate rage
- {
- if (!IsInCombat() && !HasAuraType(SPELL_AURA_INTERRUPT_REGEN))
- {
- float RageDecreaseRate = sWorld->getRate(RATE_POWER_RAGE_LOSS);
- addvalue += -0.0125f * m_regenTimer * RageDecreaseRate; // -1.25 rage per second
- }
- } break;
- case POWER_ENERGY: // Regenerate energy (rogue)
- // Regen per second
- addvalue += (GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + AsUnderlyingType(POWER_ENERGY)) + 10.f);
- // Regen per millisecond
- addvalue *= 0.001f;
- // Milliseconds passed
- addvalue *= m_regenTimer;
- // Rate
- addvalue *= sWorld->getRate(RATE_POWER_ENERGY);
- break;
- case POWER_RUNIC_POWER:
- {
- if (!IsInCombat() && !HasAuraType(SPELL_AURA_INTERRUPT_REGEN))
- {
- float RunicPowerDecreaseRate = sWorld->getRate(RATE_POWER_RUNICPOWER_LOSS);
- addvalue += -0.0125f * m_regenTimer * RunicPowerDecreaseRate; // -1.25 runic power per second
- }
- } break;
- case POWER_RUNE:
- case POWER_FOCUS:
- case POWER_HAPPINESS:
- break;
- case POWER_HEALTH:
- return;
- default:
- break;
- }
-
- // Mana regen calculated in Player::UpdateManaRegen(), energy regen calculated in Player::UpdateEnergyRegen()
- if (power != POWER_MANA && power != POWER_ENERGY)
- {
- addvalue *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, power);
-
- // Butchery requires combat for this effect
- if (power != POWER_RUNIC_POWER || IsInCombat())
- addvalue += static_cast<float>(GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power)) * static_cast<float>(m_regenTimer) / static_cast<float>((5 * IN_MILLISECONDS));
- }
+ float addvalue = GetPowerRegen(power) * 0.001f * m_regenTimer;
if (addvalue < 0.0f)
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 80f90f4e09c..3d5f7fd4361 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1649,9 +1649,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void UpdateExpertise(WeaponAttackType attType);
void ApplyManaRegenBonus(int32 amount, bool apply);
void ApplyHealthRegenBonus(int32 amount, bool apply);
- void UpdateManaRegen();
- void UpdateEnergyRegen();
+ void UpdatePowerRegen(Powers power);
void UpdateRuneRegen(RuneType rune);
+ float GetPowerRegen(Powers power) const;
uint32 GetRuneTimer(uint8 index) const { return m_runeGraceCooldown[index]; }
void SetRuneTimer(uint8 index, uint32 timer) { m_runeGraceCooldown[index] = timer; }
uint32 GetLastRuneGraceTimer(uint8 index) const { return m_lastRuneGraceTimers[index]; }