Core/Players: Auras that change the rate of energy regeneration should have an effect on client prediction.
(cherry picked from commit 1a3006b20d8c41139b206f610bcb6c22508ec329)
This commit is contained in:
@@ -1702,12 +1702,12 @@ void Player::Regenerate(Powers power)
|
||||
if (RatesForPower[power] != MAX_RATES)
|
||||
addvalue *= sWorld->getRate(RatesForPower[power]);
|
||||
|
||||
// Mana regen calculated in Player::UpdateManaRegen()
|
||||
if (power != POWER_MANA)
|
||||
// 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);
|
||||
|
||||
addvalue += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power) * ((power != POWER_ENERGY) ? m_regenTimerCount : m_regenTimer) / (5 * IN_MILLISECONDS);
|
||||
addvalue += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power) * static_cast<float>(m_regenTimer) / static_cast<float>(5 * IN_MILLISECONDS);
|
||||
}
|
||||
|
||||
int32 minPower = powerType->MinPower;
|
||||
|
||||
@@ -2255,6 +2255,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
|
||||
void ApplyManaRegenBonus(int32 amount, bool apply);
|
||||
void ApplyHealthRegenBonus(int32 amount, bool apply);
|
||||
void UpdateManaRegen();
|
||||
void UpdateEnergyRegen();
|
||||
void UpdateAllRunesRegen();
|
||||
|
||||
void SetPetSpellPower(uint32 spellPower) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::PetSpellPower), spellPower); }
|
||||
|
||||
@@ -825,6 +825,20 @@ void Player::UpdateManaRegen()
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, manaIndex), base_regen);
|
||||
}
|
||||
|
||||
void Player::UpdateEnergyRegen()
|
||||
{
|
||||
uint32 energyIndex = GetPowerIndex(POWER_ENERGY);
|
||||
if (energyIndex == MAX_POWERS)
|
||||
return;
|
||||
|
||||
float regenPerSecond = 10.f; // +10 energy per second
|
||||
regenPerSecond *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_ENERGY);
|
||||
regenPerSecond += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_ENERGY) / static_cast<float>(5 * IN_MILLISECONDS);
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, energyIndex), regenPerSecond - 10.f);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, energyIndex), regenPerSecond - 10.f);
|
||||
}
|
||||
|
||||
void Player::UpdateAllRunesRegen()
|
||||
{
|
||||
if (GetClass() != CLASS_DEATH_KNIGHT)
|
||||
|
||||
@@ -4085,6 +4085,8 @@ void AuraEffect::HandleModPowerRegen(AuraApplication const* aurApp, uint8 mode,
|
||||
// Update manaregen value
|
||||
if (GetMiscValue() == POWER_MANA)
|
||||
target->ToPlayer()->UpdateManaRegen();
|
||||
else if (GetMiscValue() == POWER_ENERGY)
|
||||
target->ToPlayer()->UpdateEnergyRegen();
|
||||
else if (GetMiscValue() == POWER_RUNES)
|
||||
target->ToPlayer()->UpdateAllRunesRegen();
|
||||
// other powers are not immediate effects - implemented in Player::Regenerate, Creature::Regenerate
|
||||
|
||||
Reference in New Issue
Block a user