diff options
author | NoName <322016+Faq@users.noreply.github.com> | 2020-01-17 17:50:50 +0200 |
---|---|---|
committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2020-01-17 16:50:50 +0100 |
commit | b3b7f0761d5605d57f9d62ca8e22a8cd9a4df24b (patch) | |
tree | 6ce8c9decabdc7762602bd87df56232a706b45a0 /src/server/game/Handlers/PetHandler.cpp | |
parent | 89421422865b0d7743db22bb165bba0a3d8f2cfc (diff) |
Core/Spells: SPELL_AURA_48 implementation (#24054)
by xvwyh
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 71aec844957..c8257c34f30 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -787,15 +787,32 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket) return; } - // do not cast not learned spells - if (!caster->HasSpell(spellId) || spellInfo->IsPassive()) - return; - SpellCastTargets targets; targets.Read(recvPacket, caster); HandleClientCastFlags(recvPacket, castFlags, targets); - Spell* spell = new Spell(caster, spellInfo, TRIGGERED_NONE); + TriggerCastFlags triggerCastFlags = TRIGGERED_NONE; + + if (spellInfo->IsPassive()) + return; + + // cast only learned spells + if (!caster->HasSpell(spellId)) + { + bool allow = false; + + // allow casting of spells triggered by clientside periodic trigger auras + if (caster->HasAuraTypeWithTriggerSpell(SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT, spellId)) + { + allow = true; + triggerCastFlags = TRIGGERED_FULL_MASK; + } + + if (!allow) + return; + } + + Spell* spell = new Spell(caster, spellInfo, triggerCastFlags); spell->m_cast_count = castCount; // probably pending spell cast spell->m_targets = targets; |