mirror of
https://github.com/mangosfour/server.git
synced 2025-12-21 19:37:02 +00:00
[8381] Some refactoring work in Unit::m_currentSpells code.
* Restrict access, use enum args, move some repeated code parts to function. * Make m_selfContainer set only part of Unit::SetCurrentCastedSpell
This commit is contained in:
parent
1b1d013623
commit
74d27294aa
10 changed files with 70 additions and 69 deletions
|
|
@ -3483,8 +3483,8 @@ void Aura::HandleFeignDeath(bool apply, bool Real)
|
|||
m_target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
||||
|
||||
// prevent interrupt message
|
||||
if(m_caster_guid==m_target->GetGUID() && m_target->m_currentSpells[CURRENT_GENERIC_SPELL])
|
||||
m_target->m_currentSpells[CURRENT_GENERIC_SPELL]->finish();
|
||||
if (m_caster_guid==m_target->GetGUID())
|
||||
m_target->FinishSpell(CURRENT_GENERIC_SPELL,false);
|
||||
m_target->InterruptNonMeleeSpells(true);
|
||||
m_target->getHostilRefManager().deleteReferences();
|
||||
}
|
||||
|
|
@ -3905,9 +3905,11 @@ void Aura::HandleAuraModSilence(bool apply, bool Real)
|
|||
{
|
||||
m_target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED);
|
||||
// Stop cast only spells vs PreventionType == SPELL_PREVENTION_TYPE_SILENCE
|
||||
for (uint32 i = CURRENT_MELEE_SPELL; i < CURRENT_MAX_SPELL;i++)
|
||||
if (m_target->m_currentSpells[i] && m_target->m_currentSpells[i]->m_spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
|
||||
m_target->InterruptSpell(i, false); // Stop spells on prepare or casting state
|
||||
for (uint32 i = CURRENT_MELEE_SPELL; i < CURRENT_MAX_SPELL; ++i)
|
||||
if (Spell* spell = m_target->GetCurrentSpell(CurrentSpellTypes(i)))
|
||||
if(spell->m_spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
|
||||
// Stop spells on prepare or casting state
|
||||
m_target->InterruptSpell(CurrentSpellTypes(i), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -6268,13 +6270,10 @@ void Aura::PeriodicTick()
|
|||
int32 new_damage = pCaster->DealDamage(m_target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(GetSpellProto()), GetSpellProto(), false);
|
||||
|
||||
if (!m_target->isAlive() && pCaster->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; ++i)
|
||||
{
|
||||
if (pCaster->m_currentSpells[i] && pCaster->m_currentSpells[i]->m_spellInfo->Id == GetId())
|
||||
pCaster->m_currentSpells[i]->cancel();
|
||||
}
|
||||
}
|
||||
if (Spell* spell = pCaster->GetCurrentSpell(CurrentSpellTypes(i)))
|
||||
if (spell->m_spellInfo->Id == GetId())
|
||||
spell->cancel();
|
||||
|
||||
|
||||
if(Player *modOwner = pCaster->GetSpellModOwner())
|
||||
|
|
@ -6348,15 +6347,8 @@ void Aura::PeriodicTick()
|
|||
pCaster->RemoveAurasDueToSpell(GetId());
|
||||
|
||||
// finish current generic/channeling spells, don't affect autorepeat
|
||||
if(pCaster->m_currentSpells[CURRENT_GENERIC_SPELL])
|
||||
{
|
||||
pCaster->m_currentSpells[CURRENT_GENERIC_SPELL]->finish();
|
||||
}
|
||||
if(pCaster->m_currentSpells[CURRENT_CHANNELED_SPELL])
|
||||
{
|
||||
pCaster->m_currentSpells[CURRENT_CHANNELED_SPELL]->SendChannelUpdate(0);
|
||||
pCaster->m_currentSpells[CURRENT_CHANNELED_SPELL]->finish();
|
||||
}
|
||||
pCaster->FinishSpell(CURRENT_GENERIC_SPELL);
|
||||
pCaster->FinishSpell(CURRENT_CHANNELED_SPELL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue