mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-15 00:06:11 +00:00
fix(Core/Player): smooth energy regeneration with SPELL_AURA_MOD_POWER_REGEN_PERCENT mods (#22041)
Co-authored-by: r4dish <ovitnez@gmail.com>
This commit is contained in:
@@ -1882,9 +1882,9 @@ void Player::Regenerate(Powers power)
|
||||
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) * ManaIncreaseRate * 0.001f * m_regenTimer;
|
||||
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) * ManaIncreaseRate * 0.001f * m_regenTimer;
|
||||
addvalue += GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + AsUnderlyingType(POWER_MANA)) * ManaIncreaseRate * 0.001f * m_regenTimer;
|
||||
}
|
||||
break;
|
||||
case POWER_RAGE: // Regenerate rage
|
||||
@@ -1897,7 +1897,14 @@ void Player::Regenerate(Powers power)
|
||||
}
|
||||
break;
|
||||
case POWER_ENERGY: // Regenerate energy (rogue)
|
||||
addvalue += 0.01f * m_regenTimer * sWorld->getRate(RATE_POWER_ENERGY);
|
||||
// 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:
|
||||
{
|
||||
@@ -1918,8 +1925,8 @@ void Player::Regenerate(Powers power)
|
||||
break;
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
AuraEffectList const& ModPowerRegenPCTAuras = GetAuraEffectsByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT);
|
||||
for (AuraEffectList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i)
|
||||
@@ -1947,7 +1954,6 @@ void Player::Regenerate(Powers power)
|
||||
addvalue += m_powerFraction[power];
|
||||
uint32 integerValue = uint32(std::fabs(addvalue));
|
||||
|
||||
bool forcedUpdate = false;
|
||||
if (addvalue < 0.0f)
|
||||
{
|
||||
if (curValue > integerValue)
|
||||
@@ -1959,7 +1965,6 @@ void Player::Regenerate(Powers power)
|
||||
{
|
||||
curValue = 0;
|
||||
m_powerFraction[power] = 0;
|
||||
forcedUpdate = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1970,22 +1975,15 @@ void Player::Regenerate(Powers power)
|
||||
{
|
||||
curValue = maxValue;
|
||||
m_powerFraction[power] = 0;
|
||||
forcedUpdate = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_powerFraction[power] = addvalue - integerValue;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_regenTimerCount >= 2000 || forcedUpdate)
|
||||
{
|
||||
if (m_regenTimerCount >= 2000 || curValue == 0 || curValue == maxValue)
|
||||
SetPower(power, curValue, true, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateUInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power, curValue);
|
||||
}
|
||||
UpdateUInt32Value(UNIT_FIELD_POWER1 + AsUnderlyingType(power), curValue);
|
||||
}
|
||||
|
||||
void Player::RegenerateHealth()
|
||||
|
||||
Reference in New Issue
Block a user