Core/Auras:
Make Aura::ModStackAmount(1) an equivalent of reapplying the aura
Recalculate periodic aura timers on aura reapply.
This commit is contained in:
@@ -726,6 +726,16 @@ void Aura::RefreshDuration()
|
||||
m_timeCla = 1 * IN_MILLISECONDS;
|
||||
}
|
||||
|
||||
void Aura::RefreshTimers()
|
||||
{
|
||||
m_maxDuration = CalcMaxDuration();
|
||||
RefreshDuration();
|
||||
Unit * caster = GetCaster();
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
if (HasEffect(i))
|
||||
GetEffect(i)->CalculatePeriodic(caster, false, false);
|
||||
}
|
||||
|
||||
void Aura::SetCharges(uint8 charges)
|
||||
{
|
||||
if (m_procCharges == charges)
|
||||
@@ -802,7 +812,12 @@ bool Aura::ModStackAmount(int32 num, AuraRemoveMode removeMode)
|
||||
SetStackAmount(stackAmount);
|
||||
|
||||
if (refresh)
|
||||
RefreshDuration();
|
||||
{
|
||||
RefreshTimers();
|
||||
|
||||
// reset charges
|
||||
SetCharges(CalcMaxCharges());
|
||||
}
|
||||
SetNeedClientUpdateForTargets();
|
||||
return false;
|
||||
}
|
||||
@@ -871,7 +886,7 @@ void Aura::SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint
|
||||
{
|
||||
m_effects[i]->SetAmount(amount[i]);
|
||||
m_effects[i]->SetCanBeRecalculated(recalculateMask & (1<<i));
|
||||
m_effects[i]->CalculatePeriodic(caster);
|
||||
m_effects[i]->CalculatePeriodic(caster, false, true);
|
||||
m_effects[i]->CalculateSpellMod();
|
||||
m_effects[i]->RecalculateAmount(caster);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user