mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Spells: Implemented SPELL_ATTR1_DISMISS_PET
Closes #7372
(cherry picked from commit 9246189b98)
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user