aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-05-26 16:04:16 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-01-09 02:10:08 +0100
commit6393e80129327b4d8bc742f594eeb95a00a494d4 (patch)
tree3414f74c63b694fccc5c511ff5a2356473ca77a2 /src
parente9e3daa30c3ec39acfa23ea1709a11b664c18380 (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.cpp14
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())