mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[8330] Move spell 19574 and 34471 boosts to Aura::HandleSpellSpecificBoosts.
Also small cleanup for prev. commit.
This commit is contained in:
parent
c8cc9b28f8
commit
600f6d142d
2 changed files with 48 additions and 61 deletions
|
|
@ -3587,47 +3587,44 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
|
||||||
|
|
||||||
void Aura::HandleModStealth(bool apply, bool Real)
|
void Aura::HandleModStealth(bool apply, bool Real)
|
||||||
{
|
{
|
||||||
Unit* pTarget = m_target;
|
|
||||||
SpellEntry const* pSpellInfo = GetSpellProto();
|
|
||||||
|
|
||||||
if (apply)
|
if (apply)
|
||||||
{
|
{
|
||||||
// drop flag at stealth in bg
|
// drop flag at stealth in bg
|
||||||
pTarget->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
m_target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
||||||
|
|
||||||
// only at real aura add
|
// only at real aura add
|
||||||
if (Real)
|
if (Real)
|
||||||
{
|
{
|
||||||
pTarget->SetStandFlags(UNIT_STAND_FLAGS_CREEP);
|
m_target->SetStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||||
|
|
||||||
if (pTarget->GetTypeId()==TYPEID_PLAYER)
|
if (m_target->GetTypeId()==TYPEID_PLAYER)
|
||||||
pTarget->SetFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
m_target->SetFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||||
|
|
||||||
// apply only if not in GM invisibility (and overwrite invisibility state)
|
// apply only if not in GM invisibility (and overwrite invisibility state)
|
||||||
if (pTarget->GetVisibility()!=VISIBILITY_OFF)
|
if (m_target->GetVisibility()!=VISIBILITY_OFF)
|
||||||
{
|
{
|
||||||
pTarget->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
m_target->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||||
pTarget->SetVisibility(VISIBILITY_GROUP_STEALTH);
|
m_target->SetVisibility(VISIBILITY_GROUP_STEALTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply full stealth period bonuses only at first stealth aura in stack
|
// apply full stealth period bonuses only at first stealth aura in stack
|
||||||
if(pTarget->GetAurasByType(SPELL_AURA_MOD_STEALTH).size()<=1)
|
if(m_target->GetAurasByType(SPELL_AURA_MOD_STEALTH).size()<=1)
|
||||||
{
|
{
|
||||||
Unit::AuraList const& mDummyAuras = pTarget->GetAurasByType(SPELL_AURA_DUMMY);
|
Unit::AuraList const& mDummyAuras = m_target->GetAurasByType(SPELL_AURA_DUMMY);
|
||||||
for(Unit::AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
|
for(Unit::AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
|
||||||
{
|
{
|
||||||
// Master of Subtlety
|
// Master of Subtlety
|
||||||
if ((*i)->GetSpellProto()->SpellIconID == 2114)
|
if ((*i)->GetSpellProto()->SpellIconID == 2114)
|
||||||
{
|
{
|
||||||
pTarget->RemoveAurasDueToSpell(31666);
|
m_target->RemoveAurasDueToSpell(31666);
|
||||||
int32 bp = (*i)->GetModifier()->m_amount;
|
int32 bp = (*i)->GetModifier()->m_amount;
|
||||||
pTarget->CastCustomSpell(pTarget,31665,&bp,NULL,NULL,true);
|
m_target->CastCustomSpell(m_target,31665,&bp,NULL,NULL,true);
|
||||||
}
|
}
|
||||||
// Overkill
|
// Overkill
|
||||||
else if ((*i)->GetId() == 58426 && pSpellInfo->SpellFamilyFlags & UI64LIT(0x0000000000400000))
|
else if ((*i)->GetId() == 58426 && GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000400000))
|
||||||
{
|
{
|
||||||
pTarget->RemoveAurasDueToSpell(58428);
|
m_target->RemoveAurasDueToSpell(58428);
|
||||||
pTarget->CastSpell(pTarget, 58427, true);
|
m_target->CastSpell(m_target, 58427, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3636,36 +3633,36 @@ void Aura::HandleModStealth(bool apply, bool Real)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// only at real aura remove of _last_ SPELL_AURA_MOD_STEALTH
|
// only at real aura remove of _last_ SPELL_AURA_MOD_STEALTH
|
||||||
if (Real && !pTarget->HasAuraType(SPELL_AURA_MOD_STEALTH))
|
if (Real && !m_target->HasAuraType(SPELL_AURA_MOD_STEALTH))
|
||||||
{
|
{
|
||||||
// if no GM invisibility
|
// if no GM invisibility
|
||||||
if(pTarget->GetVisibility()!=VISIBILITY_OFF)
|
if (m_target->GetVisibility()!=VISIBILITY_OFF)
|
||||||
{
|
{
|
||||||
pTarget->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP);
|
m_target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||||
|
|
||||||
if (pTarget->GetTypeId()==TYPEID_PLAYER)
|
if (m_target->GetTypeId()==TYPEID_PLAYER)
|
||||||
pTarget->RemoveFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
m_target->RemoveFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||||
|
|
||||||
// restore invisibility if any
|
// restore invisibility if any
|
||||||
if (pTarget->HasAuraType(SPELL_AURA_MOD_INVISIBILITY))
|
if (m_target->HasAuraType(SPELL_AURA_MOD_INVISIBILITY))
|
||||||
{
|
{
|
||||||
pTarget->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
m_target->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||||
pTarget->SetVisibility(VISIBILITY_GROUP_INVISIBILITY);
|
m_target->SetVisibility(VISIBILITY_GROUP_INVISIBILITY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pTarget->SetVisibility(VISIBILITY_ON);
|
m_target->SetVisibility(VISIBILITY_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply delayed talent bonus remover at last stealth aura remove
|
// apply delayed talent bonus remover at last stealth aura remove
|
||||||
Unit::AuraList const& mDummyAuras = pTarget->GetAurasByType(SPELL_AURA_DUMMY);
|
Unit::AuraList const& mDummyAuras = m_target->GetAurasByType(SPELL_AURA_DUMMY);
|
||||||
for(Unit::AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
|
for(Unit::AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
|
||||||
{
|
{
|
||||||
// Master of Subtlety
|
// Master of Subtlety
|
||||||
if ((*i)->GetSpellProto()->SpellIconID == 2114)
|
if ((*i)->GetSpellProto()->SpellIconID == 2114)
|
||||||
pTarget->CastSpell(pTarget, 31666, true);
|
m_target->CastSpell(m_target, 31666, true);
|
||||||
// Overkill
|
// Overkill
|
||||||
else if ((*i)->GetId() == 58426 && pSpellInfo->SpellFamilyFlags & UI64LIT(0x0000000000400000))
|
else if ((*i)->GetId() == 58426 && GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000400000))
|
||||||
pTarget->CastSpell(pTarget, 58428, true);
|
m_target->CastSpell(m_target, 58428, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4026,18 +4023,14 @@ void Aura::HandleAuraModUseNormalSpeed(bool /*apply*/, bool Real)
|
||||||
|
|
||||||
void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
|
void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
|
||||||
{
|
{
|
||||||
// cache values in local vars for prevent access to possible deleted aura data
|
|
||||||
SpellEntry const* spellInfo = GetSpellProto();
|
|
||||||
uint32 misc = m_modifier.m_miscvalue;
|
uint32 misc = m_modifier.m_miscvalue;
|
||||||
Unit* target = m_target;
|
|
||||||
|
|
||||||
// Forbearance
|
// Forbearance
|
||||||
// in DBC wrong mechanic immune since 3.0.x
|
// in DBC wrong mechanic immune since 3.0.x
|
||||||
if (GetId() == 25771)
|
if (GetId() == 25771)
|
||||||
misc = MECHANIC_IMMUNE_SHIELD;
|
misc = MECHANIC_IMMUNE_SHIELD;
|
||||||
|
|
||||||
|
|
||||||
if(apply && spellInfo->AttributesEx & SPELL_ATTR_EX_DISPEL_AURAS_ON_IMMUNITY)
|
if(apply && GetSpellProto()->AttributesEx & SPELL_ATTR_EX_DISPEL_AURAS_ON_IMMUNITY)
|
||||||
{
|
{
|
||||||
uint32 mechanic = 1 << m_modifier.m_miscvalue;
|
uint32 mechanic = 1 << m_modifier.m_miscvalue;
|
||||||
|
|
||||||
|
|
@ -4045,19 +4038,19 @@ void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
|
||||||
if(GetId()==42292 || GetId()==59752)
|
if(GetId()==42292 || GetId()==59752)
|
||||||
mechanic=IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
|
mechanic=IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
|
||||||
|
|
||||||
Unit::AuraMap& Auras = target->GetAuras();
|
Unit::AuraMap& Auras = m_target->GetAuras();
|
||||||
for(Unit::AuraMap::iterator iter = Auras.begin(), next; iter != Auras.end(); iter = next)
|
for(Unit::AuraMap::iterator iter = Auras.begin(), next; iter != Auras.end(); iter = next)
|
||||||
{
|
{
|
||||||
next = iter;
|
next = iter;
|
||||||
++next;
|
++next;
|
||||||
SpellEntry const *spell = iter->second->GetSpellProto();
|
SpellEntry const *spell = iter->second->GetSpellProto();
|
||||||
if (!( spell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) && // spells unaffected by invulnerability
|
if (!( spell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) && // spells unaffected by invulnerability
|
||||||
spell->Id != spellInfo->Id)
|
spell->Id != GetId())
|
||||||
{
|
{
|
||||||
//check for mechanic mask
|
//check for mechanic mask
|
||||||
if(GetSpellMechanicMask(spell, iter->second->GetEffIndex()) & mechanic)
|
if(GetSpellMechanicMask(spell, iter->second->GetEffIndex()) & mechanic)
|
||||||
{
|
{
|
||||||
target->RemoveAurasDueToSpell(spell->Id);
|
m_target->RemoveAurasDueToSpell(spell->Id);
|
||||||
if(Auras.empty())
|
if(Auras.empty())
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
|
|
@ -4067,13 +4060,13 @@ void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target->ApplySpellImmune(spellInfo->Id,IMMUNITY_MECHANIC,misc,apply);
|
m_target->ApplySpellImmune(GetId(),IMMUNITY_MECHANIC,misc,apply);
|
||||||
|
|
||||||
// Bestial Wrath
|
// Bestial Wrath
|
||||||
if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->SpellIconID == 1680)
|
if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_HUNTER && GetSpellProto()->SpellIconID == 1680)
|
||||||
{
|
{
|
||||||
// The Beast Within cast on owner if talent present
|
// The Beast Within cast on owner if talent present
|
||||||
if (Unit* owner = target->GetOwner())
|
if (Unit* owner = m_target->GetOwner())
|
||||||
{
|
{
|
||||||
// Search talent
|
// Search talent
|
||||||
Unit::AuraList const& dummyAuras = owner->GetAurasByType(SPELL_AURA_DUMMY);
|
Unit::AuraList const& dummyAuras = owner->GetAurasByType(SPELL_AURA_DUMMY);
|
||||||
|
|
@ -4090,25 +4083,6 @@ void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Beast Within and Bestial Wrath - immunity
|
|
||||||
if (spellInfo->Id == 19574 || spellInfo->Id == 34471)
|
|
||||||
{
|
|
||||||
if (apply)
|
|
||||||
{
|
|
||||||
target->CastSpell(target, 24395, true);
|
|
||||||
target->CastSpell(target, 24396, true);
|
|
||||||
target->CastSpell(target, 24397, true);
|
|
||||||
target->CastSpell(target, 26592, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
target->RemoveAurasDueToSpell(24395);
|
|
||||||
target->RemoveAurasDueToSpell(24396);
|
|
||||||
target->RemoveAurasDueToSpell(24397);
|
|
||||||
target->RemoveAurasDueToSpell(26592);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//this method is called whenever we add / remove aura which gives m_target some imunity to some spell effect
|
//this method is called whenever we add / remove aura which gives m_target some imunity to some spell effect
|
||||||
|
|
@ -5543,6 +5517,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
uint32 spellId1 = 0;
|
uint32 spellId1 = 0;
|
||||||
uint32 spellId2 = 0;
|
uint32 spellId2 = 0;
|
||||||
uint32 spellId3 = 0;
|
uint32 spellId3 = 0;
|
||||||
|
uint32 spellId4 = 0;
|
||||||
|
|
||||||
switch(GetSpellProto()->SpellFamilyName)
|
switch(GetSpellProto()->SpellFamilyName)
|
||||||
{
|
{
|
||||||
|
|
@ -5575,6 +5550,14 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
// Aspect of the Dragonhawk dodge
|
// Aspect of the Dragonhawk dodge
|
||||||
if (GetSpellProto()->SpellFamilyFlags2 & 0x00001000)
|
if (GetSpellProto()->SpellFamilyFlags2 & 0x00001000)
|
||||||
spellId1 = 61848;
|
spellId1 = 61848;
|
||||||
|
// The Beast Within and Bestial Wrath - immunity
|
||||||
|
else if (GetId() == 19574 || GetId() == 34471)
|
||||||
|
{
|
||||||
|
spellId1 = 24395;
|
||||||
|
spellId2 = 24396;
|
||||||
|
spellId3 = 24397;
|
||||||
|
spellId4 = 26592;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -5627,6 +5610,8 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
m_target->CastSpell(m_target, spellId2, true, NULL, this);
|
m_target->CastSpell(m_target, spellId2, true, NULL, this);
|
||||||
if (spellId3)
|
if (spellId3)
|
||||||
m_target->CastSpell(m_target, spellId3, true, NULL, this);
|
m_target->CastSpell(m_target, spellId3, true, NULL, this);
|
||||||
|
if (spellId4)
|
||||||
|
m_target->CastSpell(m_target, spellId4, true, NULL, this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -5636,6 +5621,8 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
m_target->RemoveAurasByCasterSpell(spellId2, GetCasterGUID());
|
m_target->RemoveAurasByCasterSpell(spellId2, GetCasterGUID());
|
||||||
if (spellId3)
|
if (spellId3)
|
||||||
m_target->RemoveAurasByCasterSpell(spellId3, GetCasterGUID());
|
m_target->RemoveAurasByCasterSpell(spellId3, GetCasterGUID());
|
||||||
|
if (spellId4)
|
||||||
|
m_target->RemoveAurasByCasterSpell(spellId4, GetCasterGUID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8329"
|
#define REVISION_NR "8330"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue