diff options
| author | r4dish <ovitnez@gmail.com> | 2024-02-25 13:36:50 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-02-25 13:36:50 +0100 |
| commit | a7dab01c2dc7105f5feddcbd4bf5489b330d70b5 (patch) | |
| tree | 111c17f886bfa0070b06bb9932daaa3aeff54942 /src/server/game/Entities/Player | |
| parent | 1a3006b20d8c41139b206f610bcb6c22508ec329 (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.cpp | 68 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 |
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]; } |
