Core/Spell: kill old charge restoring system. Mods are fully handled by proc system now.
This commit is contained in:
@@ -1847,67 +1847,6 @@ namespace Game.Entities
|
|||||||
CastSpell(this, spell.spellId, true);
|
CastSpell(this, spell.spellId, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Restore spellmods in case of failed cast
|
|
||||||
public void RestoreSpellMods(Spell spell, uint ownerAuraId = 0, Aura aura = null)
|
|
||||||
{
|
|
||||||
if (spell == null || spell.m_appliedMods.Empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
List<Aura> aurasQueue = new List<Aura>();
|
|
||||||
for (var i = 0; i < (int)SpellModOp.Max; ++i)
|
|
||||||
{
|
|
||||||
for (var j = 0; j < (int)SpellModType.End; ++j)
|
|
||||||
{
|
|
||||||
foreach (var mod in m_spellMods[i][j])
|
|
||||||
{
|
|
||||||
// Spellmods without charged aura set cannot be charged
|
|
||||||
if (!mod.ownerAura.IsUsingCharges())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Restore only specific owner aura mods
|
|
||||||
if (ownerAuraId != 0 && mod.spellId != ownerAuraId)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (aura != null && mod.ownerAura != aura)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// check if mod affected this spell
|
|
||||||
// first, check if the mod aura applied at least one spellmod to this spell
|
|
||||||
var iterMod = spell.m_appliedMods.Find(p => p == mod.ownerAura);
|
|
||||||
if (iterMod == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// secondly, check if the current mod is one of the spellmods applied by the mod aura
|
|
||||||
if (!(mod.mask & spell.m_spellInfo.SpellFamilyFlags))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// remove from list - This will be done after all mods have been gone through
|
|
||||||
// to ensure we iterate over all mods of an aura before removing said aura
|
|
||||||
// from applied mods (Else, an aura with two mods on the current spell would
|
|
||||||
// only see the first of its modifier restored)
|
|
||||||
aurasQueue.Add(mod.ownerAura);
|
|
||||||
|
|
||||||
// add charges back to aura
|
|
||||||
mod.ownerAura.ModCharges(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var removeAura in aurasQueue)
|
|
||||||
spell.m_appliedMods.Remove(aura);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RestoreAllSpellMods(uint ownerAuraId = 0, Aura aura = null)
|
|
||||||
{
|
|
||||||
for (CurrentSpellTypes i = 0; i < CurrentSpellTypes.Max; ++i)
|
|
||||||
{
|
|
||||||
Spell spell = GetCurrentSpell(i);
|
|
||||||
if (spell != null)
|
|
||||||
RestoreSpellMods(spell, ownerAuraId, aura);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ApplyModToSpell(SpellModifier mod, Spell spell)
|
public void ApplyModToSpell(SpellModifier mod, Spell spell)
|
||||||
{
|
{
|
||||||
if (spell == null)
|
if (spell == null)
|
||||||
|
|||||||
@@ -882,7 +882,6 @@ namespace Game.Spells
|
|||||||
|
|
||||||
if (refresh)
|
if (refresh)
|
||||||
{
|
{
|
||||||
RefreshSpellMods();
|
|
||||||
RefreshTimers(resetPeriodicTimer);
|
RefreshTimers(resetPeriodicTimer);
|
||||||
|
|
||||||
// reset charges
|
// reset charges
|
||||||
@@ -892,16 +891,6 @@ namespace Game.Spells
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RefreshSpellMods()
|
|
||||||
{
|
|
||||||
foreach (var app in m_applications.Values)
|
|
||||||
{
|
|
||||||
Player player = app.GetTarget().ToPlayer();
|
|
||||||
if (player != null)
|
|
||||||
player.RestoreAllSpellMods(0, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HasMoreThanOneEffectForType(AuraType auraType)
|
public bool HasMoreThanOneEffectForType(AuraType auraType)
|
||||||
{
|
{
|
||||||
uint count = 0;
|
uint count = 0;
|
||||||
|
|||||||
+12
-18
@@ -2541,13 +2541,10 @@ namespace Game.Spells
|
|||||||
triggeredByAura.GetBase().SetDuration(0);
|
triggeredByAura.GetBase().SetDuration(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cleanup after mod system
|
||||||
|
// triggered spell pointer can be not removed in some cases
|
||||||
if (m_caster.IsTypeId(TypeId.Player))
|
if (m_caster.IsTypeId(TypeId.Player))
|
||||||
{
|
|
||||||
m_caster.ToPlayer().RestoreSpellMods(this);
|
|
||||||
// cleanup after mod system
|
|
||||||
// triggered spell pointer can be not removed in some cases
|
|
||||||
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
||||||
}
|
|
||||||
|
|
||||||
if (param1 != 0 || param2 != 0)
|
if (param1 != 0 || param2 != 0)
|
||||||
SendCastResult(result, param1, param2);
|
SendCastResult(result, param1, param2);
|
||||||
@@ -2659,8 +2656,6 @@ namespace Game.Spells
|
|||||||
{
|
{
|
||||||
case SpellState.Preparing:
|
case SpellState.Preparing:
|
||||||
CancelGlobalCooldown();
|
CancelGlobalCooldown();
|
||||||
if (m_caster.IsTypeId(TypeId.Player))
|
|
||||||
m_caster.ToPlayer().RestoreSpellMods(this);
|
|
||||||
goto case SpellState.Delayed;
|
goto case SpellState.Delayed;
|
||||||
case SpellState.Delayed:
|
case SpellState.Delayed:
|
||||||
SendInterrupted(0);
|
SendInterrupted(0);
|
||||||
@@ -2763,13 +2758,12 @@ namespace Game.Spells
|
|||||||
{
|
{
|
||||||
SendCastResult(castResult, param1, param2);
|
SendCastResult(castResult, param1, param2);
|
||||||
SendInterrupted(0);
|
SendInterrupted(0);
|
||||||
//restore spell mods
|
|
||||||
|
// cleanup after mod system
|
||||||
|
// triggered spell pointer can be not removed in some cases
|
||||||
if (m_caster.IsTypeId(TypeId.Player))
|
if (m_caster.IsTypeId(TypeId.Player))
|
||||||
{
|
|
||||||
m_caster.ToPlayer().RestoreSpellMods(this);
|
|
||||||
// cleanup after mod system
|
|
||||||
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
||||||
}
|
|
||||||
finish(false);
|
finish(false);
|
||||||
SetExecutedCurrently(false);
|
SetExecutedCurrently(false);
|
||||||
return;
|
return;
|
||||||
@@ -2790,9 +2784,10 @@ namespace Game.Spells
|
|||||||
my_trade.SetSpell(m_spellInfo.Id, m_CastItem);
|
my_trade.SetSpell(m_spellInfo.Id, m_CastItem);
|
||||||
SendCastResult(SpellCastResult.DontReport);
|
SendCastResult(SpellCastResult.DontReport);
|
||||||
SendInterrupted(0);
|
SendInterrupted(0);
|
||||||
m_caster.ToPlayer().RestoreSpellMods(this);
|
|
||||||
// cleanup after mod system
|
// cleanup after mod system
|
||||||
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
||||||
|
|
||||||
finish(false);
|
finish(false);
|
||||||
SetExecutedCurrently(false);
|
SetExecutedCurrently(false);
|
||||||
return;
|
return;
|
||||||
@@ -2820,13 +2815,12 @@ namespace Game.Spells
|
|||||||
if (m_spellState == SpellState.Finished)
|
if (m_spellState == SpellState.Finished)
|
||||||
{
|
{
|
||||||
SendInterrupted(0);
|
SendInterrupted(0);
|
||||||
//restore spell mods
|
|
||||||
|
// cleanup after mod system
|
||||||
|
// triggered spell pointer can be not removed in some cases
|
||||||
if (m_caster.IsTypeId(TypeId.Player))
|
if (m_caster.IsTypeId(TypeId.Player))
|
||||||
{
|
|
||||||
m_caster.ToPlayer().RestoreSpellMods(this);
|
|
||||||
// cleanup after mod system
|
|
||||||
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
m_caster.ToPlayer().SetSpellModTakingSpell(this, false);
|
||||||
}
|
|
||||||
finish(false);
|
finish(false);
|
||||||
SetExecutedCurrently(false);
|
SetExecutedCurrently(false);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user