diff options
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index bd1e1def02e..da0e46c5a1d 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -686,13 +686,30 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& return; } - // do not cast not learned spells - if (!caster->HasSpell(spellInfo->Id) || spellInfo->IsPassive()) + SpellCastTargets targets(caster, petCastSpell.Cast); + + TriggerCastFlags triggerCastFlags = TRIGGERED_NONE; + + if (spellInfo->IsPassive()) return; - SpellCastTargets targets(caster, petCastSpell.Cast); + // cast only learned spells + if (!caster->HasSpell(spellInfo->Id)) + { + bool allow = false; + + // allow casting of spells triggered by clientside periodic trigger auras + if (caster->HasAuraTypeWithTriggerSpell(SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT, spellInfo->Id)) + { + allow = true; + triggerCastFlags = TRIGGERED_FULL_MASK; + } + + if (!allow) + return; + } - Spell* spell = new Spell(caster, spellInfo, TRIGGERED_NONE); + Spell* spell = new Spell(caster, spellInfo, triggerCastFlags); spell->m_fromClient = true; spell->m_misc.Raw.Data[0] = petCastSpell.Cast.Misc[0]; spell->m_misc.Raw.Data[1] = petCastSpell.Cast.Misc[1]; |
