aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/PetHandler.cpp
diff options
context:
space:
mode:
authorNoName <322016+Faq@users.noreply.github.com>2020-01-17 17:50:50 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-20 22:30:41 +0100
commit37178ff311af95c4a2035a38839b5e8a9afe2af5 (patch)
tree545bceb5ebc2ce36f9923a691c85ce9f22f34a31 /src/server/game/Handlers/PetHandler.cpp
parentef794af489e6e6b593023cbbb6b032a916ed9db0 (diff)
Core/Spells: SPELL_AURA_48 implementation (#24054)
by xvwyh (cherry picked from commit b3b7f0761d5605d57f9d62ca8e22a8cd9a4df24b)
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
-rw-r--r--src/server/game/Handlers/PetHandler.cpp25
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];