Core/Players: Move power regeneration calculations to Player::UpdatePowerRegen
(cherry picked from commit a7dab01c2dc7105f5feddcbd4bf5489b330d70b5)
This commit is contained in:
@@ -1647,68 +1647,12 @@ void Player::Regenerate(Powers power)
|
||||
if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS)
|
||||
return;
|
||||
|
||||
/// @todo possible use of miscvalueb instead of amount
|
||||
if (HasAuraTypeWithValue(SPELL_AURA_PREVENT_REGENERATE_POWER, power))
|
||||
return;
|
||||
|
||||
int32 curValue = GetPower(power);
|
||||
|
||||
// TODO: updating haste should update UnitData::PowerRegenFlatModifier for certain power types
|
||||
PowerTypeEntry const* powerType = sDB2Manager.GetPowerTypeEntry(power);
|
||||
if (!powerType)
|
||||
return;
|
||||
|
||||
float addvalue = 0.0f;
|
||||
if (!IsInCombat())
|
||||
{
|
||||
if (powerType->GetFlags().HasFlag(PowerTypeFlags::UseRegenInterrupt) && m_regenInterruptTimestamp + Milliseconds(powerType->RegenInterruptTimeMS) >= GameTime::Now())
|
||||
return;
|
||||
|
||||
addvalue = (powerType->RegenPeace + m_unitData->PowerRegenFlatModifier[powerIndex]) * 0.001f * m_regenTimer;
|
||||
}
|
||||
else
|
||||
addvalue = (powerType->RegenCombat + m_unitData->PowerRegenInterruptedFlatModifier[powerIndex]) * 0.001f * m_regenTimer;
|
||||
|
||||
static Rates const RatesForPower[MAX_POWERS] =
|
||||
{
|
||||
RATE_POWER_MANA,
|
||||
RATE_POWER_RAGE_LOSS,
|
||||
RATE_POWER_FOCUS,
|
||||
RATE_POWER_ENERGY,
|
||||
RATE_POWER_COMBO_POINTS_LOSS,
|
||||
MAX_RATES, // runes
|
||||
RATE_POWER_RUNIC_POWER_LOSS,
|
||||
RATE_POWER_SOUL_SHARDS,
|
||||
RATE_POWER_LUNAR_POWER,
|
||||
RATE_POWER_HOLY_POWER,
|
||||
MAX_RATES, // alternate
|
||||
RATE_POWER_MAELSTROM,
|
||||
RATE_POWER_CHI,
|
||||
RATE_POWER_INSANITY,
|
||||
MAX_RATES, // burning embers, unused
|
||||
MAX_RATES, // demonic fury, unused
|
||||
RATE_POWER_ARCANE_CHARGES,
|
||||
RATE_POWER_FURY,
|
||||
RATE_POWER_PAIN,
|
||||
RATE_POWER_ESSENCE,
|
||||
MAX_RATES, // runes
|
||||
MAX_RATES, // runes
|
||||
MAX_RATES, // runes
|
||||
MAX_RATES, // alternate
|
||||
MAX_RATES, // alternate
|
||||
MAX_RATES, // alternate
|
||||
};
|
||||
|
||||
if (RatesForPower[power] != MAX_RATES)
|
||||
addvalue *= sWorld->getRate(RatesForPower[power]);
|
||||
|
||||
// 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) * static_cast<float>(m_regenTimer) / static_cast<float>(5 * IN_MILLISECONDS);
|
||||
}
|
||||
int32 curValue = GetPower(power);
|
||||
float addvalue = GetPowerRegen(power) * 0.001f * m_regenTimer;
|
||||
|
||||
int32 minPower = powerType->MinPower;
|
||||
int32 maxPower = GetMaxPower(power);
|
||||
@@ -5393,7 +5337,7 @@ void Player::UpdateRating(CombatRating cr)
|
||||
ApplyAttackTimePercentMod(BASE_ATTACK, newVal, true);
|
||||
ApplyAttackTimePercentMod(OFF_ATTACK, newVal, true);
|
||||
if (GetClass() == CLASS_DEATH_KNIGHT)
|
||||
UpdateAllRunesRegen();
|
||||
UpdatePowerRegen(POWER_RUNES);
|
||||
break;
|
||||
case CR_HASTE_RANGED:
|
||||
ApplyAttackTimePercentMod(RANGED_ATTACK, oldVal, false);
|
||||
|
||||
Reference in New Issue
Block a user