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
committerGiacomo Pozzoni <giacomopoz@gmail.com>2020-01-17 16:50:50 +0100
commitb3b7f0761d5605d57f9d62ca8e22a8cd9a4df24b (patch)
tree6ce8c9decabdc7762602bd87df56232a706b45a0 /src/server/game/Handlers/PetHandler.cpp
parent89421422865b0d7743db22bb165bba0a3d8f2cfc (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.cpp27
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;