From a7dab01c2dc7105f5feddcbd4bf5489b330d70b5 Mon Sep 17 00:00:00 2001 From: r4dish Date: Sun, 25 Feb 2024 13:36:50 +0100 Subject: Core/Players: Move power regeneration calculations to Player::UpdatePowerRegen --- src/server/game/Entities/Player/Player.cpp | 68 +----------------------------- src/server/game/Entities/Player/Player.h | 4 +- 2 files changed, 3 insertions(+), 69 deletions(-) (limited to 'src/server/game/Entities/Player') 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(GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power)) * static_cast(m_regenTimer) / static_cast((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 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]; } -- cgit v1.2.3