diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-05-26 16:04:16 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-01-09 02:10:08 +0100 |
commit | 6393e80129327b4d8bc742f594eeb95a00a494d4 (patch) | |
tree | 3414f74c63b694fccc5c511ff5a2356473ca77a2 /src | |
parent | e9e3daa30c3ec39acfa23ea1709a11b664c18380 (diff) |
Core/Spells: Implemented SPELL_ATTR1_DISMISS_PET
Closes #7372
(cherry picked from commit 9246189b9849349b63bc89663407199fb96b4bbc)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index ecac3d29031..672ae8ce38e 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3280,6 +3280,10 @@ void Spell::cast(bool skipCheck) return; } + if (m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET)) + if (Creature* pet = ObjectAccessor::GetCreature(*m_caster, m_caster->GetPetGUID())) + pet->DespawnOrUnsummon(); + PrepareTriggersExecutedOnHit(); CallScriptOnCastHandlers(); @@ -5359,7 +5363,7 @@ SpellCastResult Spell::CheckCast(bool strict) switch (SummonProperties->Category) { case SUMMON_CATEGORY_PET: - if (!m_caster->GetPetGUID().IsEmpty()) + if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET) && !m_caster->GetPetGUID().IsEmpty()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; // intentional missing break, check both GetPetGUID() and GetCharmGUID for SUMMON_CATEGORY_PET case SUMMON_CATEGORY_PUPPET: @@ -5375,7 +5379,7 @@ SpellCastResult Spell::CheckCast(bool strict) { if (m_targets.GetUnitTarget()->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_BAD_TARGETS; - if (!m_targets.GetUnitTarget()->GetPetGUID().IsEmpty()) + if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET) && !m_targets.GetUnitTarget()->GetPetGUID().IsEmpty()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; } break; @@ -5384,13 +5388,13 @@ SpellCastResult Spell::CheckCast(bool strict) { if (!m_caster->GetPetGUID().IsEmpty()) //let warlock do a replacement summon { - if (m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->getClass() == CLASS_WARLOCK) + if (m_caster->GetTypeId() == TYPEID_PLAYER) { if (strict) //starting cast, trigger pet stun (cast by pet so it doesn't attack player) if (Pet* pet = m_caster->ToPlayer()->GetPet()) pet->CastSpell(pet, 32752, true, NULL, NULL, pet->GetGUID()); } - else + else if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET)) return SPELL_FAILED_ALREADY_HAVE_SUMMON; } @@ -5555,7 +5559,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (effect->ApplyAuraName == SPELL_AURA_MOD_CHARM || effect->ApplyAuraName == SPELL_AURA_MOD_POSSESS) { - if (!m_caster->GetPetGUID().IsEmpty()) + if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET) && !m_caster->GetPetGUID().IsEmpty()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; if (!m_caster->GetCharmGUID().IsEmpty()) |