diff options
116 files changed, 625 insertions, 520 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 218113fef20..233d5da657c 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -87,12 +87,10 @@ class TC_GAME_API GameObjectAI virtual void EventInform(uint32 /*eventId*/) { } // Called when hit by a spell - virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spellInfo*/) { } - virtual void SpellHitByGameObject(GameObject* /*caster*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHit(WorldObject* /*caster*/, SpellInfo const* /*spellInfo*/) { } // Called when spell hits a target - virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spellInfo*/) { } - virtual void SpellHitTargetGameObject(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* /*spellInfo*/) { } // Called when the gameobject summon successfully other creature virtual void JustSummoned(Creature* /*summon*/) { } diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index fae81fdd4b8..8c25331172d 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -138,12 +138,10 @@ class TC_GAME_API CreatureAI : public UnitAI virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { } // Called when hit by a spell - virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spellInfo*/) { } - virtual void SpellHitByGameObject(GameObject* /*caster*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHit(WorldObject* /*caster*/, SpellInfo const* /*spellInfo*/) { } // Called when spell hits a target - virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spellInfo*/) { } - virtual void SpellHitTargetGameObject(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* /*spellInfo*/) { } // Called when a spell cast gets interrupted virtual void OnSpellCastInterrupt(SpellInfo const* /*spell*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index c06ed6690ed..7a766468a76 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -613,24 +613,14 @@ void SmartAI::AttackStart(Unit* who) } } -void SmartAI::SpellHit(Unit* unit, SpellInfo const* spellInfo) +void SmartAI::SpellHit(WorldObject* caster, SpellInfo const* spellInfo) { - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT, unit, 0, 0, false, spellInfo); + GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT, caster->ToUnit(), 0, 0, false, spellInfo, caster->ToGameObject()); } -void SmartAI::SpellHitByGameObject(GameObject* object, SpellInfo const* spellInfo) +void SmartAI::SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) { - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT, nullptr, 0, 0, false, spellInfo, object); -} - -void SmartAI::SpellHitTarget(Unit* target, SpellInfo const* spellInfo) -{ - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT_TARGET, target, 0, 0, false, spellInfo); -} - -void SmartAI::SpellHitTargetGameObject(GameObject* target, SpellInfo const* spellInfo) -{ - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT_TARGET, nullptr, 0, 0, false, spellInfo, target); + GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT_TARGET, target->ToUnit(), 0, 0, false, spellInfo, target->ToGameObject()); } void SmartAI::DamageTaken(Unit* doneBy, uint32& damage) @@ -1100,9 +1090,9 @@ void SmartGameObjectAI::EventInform(uint32 eventId) GetScript()->ProcessEventsFor(SMART_EVENT_GO_EVENT_INFORM, nullptr, eventId); } -void SmartGameObjectAI::SpellHit(Unit* unit, SpellInfo const* spellInfo) +void SmartGameObjectAI::SpellHit(WorldObject* caster, SpellInfo const* spellInfo) { - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT, unit, 0, 0, false, spellInfo); + GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT, caster->ToUnit(), 0, 0, false, spellInfo); } void SmartGameObjectAI::JustSummoned(Creature* creature) diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index dac0bd51456..8e6afd8eccf 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -98,12 +98,10 @@ class TC_GAME_API SmartAI : public CreatureAI void MoveInLineOfSight(Unit* who) override; // Called when hit by a spell - void SpellHit(Unit* unit, SpellInfo const* spellInfo) override; - void SpellHitByGameObject(GameObject* object, SpellInfo const* spellInfo) override; + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override; // Called when spell hits a target - void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override; - void SpellHitTargetGameObject(GameObject* object, SpellInfo const* spellInfo) override; + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override; // Called at any Damage from any attacker (before damage apply) void DamageTaken(Unit* doneBy, uint32& damage) override; @@ -269,7 +267,9 @@ class TC_GAME_API SmartGameObjectAI : public GameObjectAI void OnGameEvent(bool start, uint16 eventId) override; void OnLootStateChanged(uint32 state, Unit* unit) override; void EventInform(uint32 eventId) override; - void SpellHit(Unit* unit, SpellInfo const* spellInfo) override; + + // Called when hit by a spell + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override; // Called when the gameobject summon successfully other creature void JustSummoned(Creature* creature) override; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index c75e60f6bd3..b6c7a94aa68 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2534,12 +2534,7 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell) //AI functions if (Creature* cHitTarget = _spellHitTarget->ToCreature()) if (CreatureAI* hitTargetAI = cHitTarget->AI()) - { - if (spell->m_caster->GetTypeId() == TYPEID_GAMEOBJECT) - hitTargetAI->SpellHitByGameObject(spell->m_caster->ToGameObject(), spell->m_spellInfo); - else - hitTargetAI->SpellHit(spell->m_caster->ToUnit(), spell->m_spellInfo); - } + hitTargetAI->SpellHit(spell->m_caster, spell->m_spellInfo); if (spell->m_caster->GetTypeId() == TYPEID_UNIT && spell->m_caster->ToCreature()->IsAIEnabled()) spell->m_caster->ToCreature()->AI()->SpellHitTarget(_spellHitTarget, spell->m_spellInfo); @@ -2583,19 +2578,14 @@ void Spell::GOTargetInfo::DoTargetSpellHit(Spell* spell, uint8 effIndex) spell->HandleEffects(nullptr, nullptr, go, effIndex, SPELL_EFFECT_HANDLE_HIT_TARGET); - //AI functions + // AI functions if (go->AI()) - { - if (spell->m_caster->GetTypeId() == TYPEID_GAMEOBJECT) - go->AI()->SpellHitByGameObject(spell->m_caster->ToGameObject(), spell->m_spellInfo); - else - go->AI()->SpellHit(spell->m_caster->ToUnit(), spell->m_spellInfo); - } + go->AI()->SpellHit(spell->m_caster, spell->m_spellInfo); if (spell->m_caster->GetTypeId() == TYPEID_UNIT && spell->m_caster->ToCreature()->IsAIEnabled()) - spell->m_caster->ToCreature()->AI()->SpellHitTargetGameObject(go, spell->m_spellInfo); + spell->m_caster->ToCreature()->AI()->SpellHitTarget(go, spell->m_spellInfo); else if (spell->m_caster->GetTypeId() == TYPEID_GAMEOBJECT && spell->m_caster->ToGameObject()->AI()) - spell->m_caster->ToGameObject()->AI()->SpellHitTargetGameObject(go, spell->m_spellInfo); + spell->m_caster->ToGameObject()->AI()->SpellHitTarget(go, spell->m_spellInfo); spell->CallScriptOnHitHandlers(); spell->CallScriptAfterHitHandlers(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 1c33719aa5c..4b8a78933de 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -123,9 +123,9 @@ public: instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ENCAGE_EMBERSEER) + if (spellInfo->Id == SPELL_ENCAGE_EMBERSEER) { if (!me->GetAuraCount(SPELL_ENCAGED_EMBERSEER)) { @@ -134,7 +134,7 @@ public: } } - if (spell->Id == SPELL_EMBERSEER_GROWING_TRIGGER) + if (spellInfo->Id == SPELL_EMBERSEER_GROWING_TRIGGER) { if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 10) Talk(EMOTE_TEN_STACK); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index d2e59177be3..4550c6ec198 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -85,10 +85,10 @@ struct boss_the_beast : public BossAI me->GetMotionMaster()->MovePath(BEAST_MOVEMENT_ID, true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (spell->Effects[i].IsEffect(SPELL_EFFECT_SKINNING)) + if (spellInfo->Effects[i].IsEffect(SPELL_EFFECT_SKINNING)) if (!me->IsAlive()) // can that even happen? DoCastAOE(SPELL_FINKLE_IS_EINHORN, true); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 3e11a414454..e05535fb9a4 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -222,12 +222,12 @@ public: std::bind(&BossAI::DoMeleeAttackIfReady, this)); } - void SpellHit(Unit* /*source*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Mechanic == MECHANIC_DISARM) + if (spellInfo->Mechanic == MECHANIC_DISARM) Talk(SAY_DISARMED); - if (spell->Id == SPELL_MOUNT) + if (spellInfo->Id == SPELL_MOUNT) { if (Creature* midnight = ObjectAccessor::GetCreature(*me, _midnightGUID)) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 2309b4a5e3f..77f7edc16c0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -154,9 +154,9 @@ public: creature->AI()->KilledUnit(who); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_INFERNAL_RELAY) + if (spellInfo->Id == SPELL_INFERNAL_RELAY) { me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index a8c2c89cbac..324a82f0a06 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -478,12 +478,12 @@ public: DrinkInturrupted = true; } - void SpellHit(Unit* /*pAttacker*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { //We only care about interrupt effects and only if they are durring a spell currently being cast - if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && - Spell->Effects[1].Effect != SPELL_EFFECT_INTERRUPT_CAST && - Spell->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) + if ((spellInfo->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && + spellInfo->Effects[1].Effect != SPELL_EFFECT_INTERRUPT_CAST && + spellInfo->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) return; //Interrupt effect diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 5761c180729..fdd33a4bca9 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -92,9 +92,9 @@ public: Talk(SAY_AGGRO); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BROKEN_PACT) + if (spellInfo->Id == SPELL_BROKEN_PACT) events.ScheduleEvent(EVENT_SUMMON_KILREK, 32s); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 6b09acea438..b5b546d5e0b 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -372,9 +372,9 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10))) + if ((spellInfo->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10))) { /* if (not direct damage(aoe, dot)) @@ -1136,9 +1136,9 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_DRINK_POISON) + if (spellInfo->Id == SPELL_DRINK_POISON) { Talk(SAY_JULIANNE_DEATH01); DrinkPoisonTimer = 2500; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 41717966e0a..dedeb2aebb9 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -218,13 +218,17 @@ struct boss_felblood_kaelthas : public BossAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_GRAVITY_LAPSE_INITIAL: { - DoCast(target, gravityLapseTeleportSpells[_gravityLapseTargetCount], true); + DoCast(unitTarget, gravityLapseTeleportSpells[_gravityLapseTargetCount], true); uint32 gravityLapseDamageSpell = SPELL_GRAVITY_LAPSE_DAMAGE; target->m_Events.AddEventAtOffset([target, gravityLapseDamageSpell]() { @@ -236,8 +240,8 @@ struct boss_felblood_kaelthas : public BossAI break; } case SPELL_CLEAR_FLIGHT: - target->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); - target->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DAMAGE); + unitTarget->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); + unitTarget->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DAMAGE); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 19513b177f7..38d328892b5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -571,12 +571,12 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SWIMMING); } - void SpellHit(Unit* pCaster, SpellInfo const* pSpell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL) + if (!m_bIsDuelInProgress && spellInfo->Id == SPELL_DUEL) { - m_uiDuelerGUID = pCaster->GetGUID(); - Talk(SAY_DUEL, pCaster); + m_uiDuelerGUID = caster->GetGUID(); + Talk(SAY_DUEL, caster); m_bIsDuelInProgress = true; } } @@ -752,9 +752,9 @@ struct npc_dark_rider_of_acherus : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DESPAWN_HORSE && target->GetGUID() == _horseGUID) + if (spellInfo->Id == SPELL_DESPAWN_HORSE && target->GetGUID() == _horseGUID) if (Creature* creature = target->ToCreature()) creature->DespawnOrUnsummon(2s); } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index cbd65529da0..6e93fcdaef0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -206,7 +206,7 @@ struct npc_wisp_invis : public ScriptedAI DoCastSelf(_firstSpell); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_HEADLESS_HORSEMAN___WISP_FLIGHT_PORT && _creatureType == 4) me->SetDisplayId(DISPLAYID_INVIS_WISP_MAN); @@ -328,17 +328,21 @@ struct npc_head : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (!_withBody) return; - if (spell->Id == SPELL_HEADLESS_HORSEMAN_CLIMAX___SEND_HEAD) + if (spellInfo->Id == SPELL_HEADLESS_HORSEMAN_CLIMAX___SEND_HEAD) { _withBody = false; if (!_bodyGUID) - _bodyGUID = caster->GetGUID(); + _bodyGUID = unitCaster->GetGUID(); me->RemoveAllAuras(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -349,9 +353,9 @@ struct npc_head : public ScriptedAI DoTalk(SAY_LOST_HEAD); - _scheduler.Schedule(2s, [caster, this](TaskContext /*context*/) + _scheduler.Schedule(2s, [unitCaster, this](TaskContext /*context*/) { - me->GetMotionMaster()->MoveFleeing(caster); + me->GetMotionMaster()->MoveFleeing(unitCaster); }); } } @@ -610,10 +614,14 @@ struct boss_headless_horseman : public ScriptedAI head->AI()->SetData(DATA_HEAD_TALK, SAY_PLAYER_DEATH); } - void SpellHitTarget(Unit* unit, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CONFLAGRATION && unit->HasAura(SPELL_CONFLAGRATION)) - DoTalk(SAY_CONFLAGRATION, unit); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_CONFLAGRATION && unitTarget->HasAura(SPELL_CONFLAGRATION)) + DoTalk(SAY_CONFLAGRATION, unitTarget); } void JustDied(Unit* /*killer*/) override @@ -634,8 +642,12 @@ struct boss_headless_horseman : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (_withHead) return; @@ -653,8 +665,8 @@ struct boss_headless_horseman : public ScriptedAI DoTalk(SAY_REJOINED); DoCastSelf(SPELL_HEADLESS_HORSEMAN_CLIMAX___HEAD_VISUAL); - caster->GetMotionMaster()->Clear(); - caster->GetMotionMaster()->MoveFollow(me, 6.f, 0.f); + unitCaster->GetMotionMaster()->Clear(); + unitCaster->GetMotionMaster()->MoveFollow(me, 6.f, 0.f); switch (_phase) { @@ -831,9 +843,9 @@ struct npc_pulsing_pumpkin : public ScriptedAI me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SPROUTING) + if (spellInfo->Id == SPELL_SPROUTING) { _sprouted = true; me->RemoveAllAuras(); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index 9f7ac20331d..f00a7c1c3db 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -182,10 +182,10 @@ public: damage = 0; } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Casted from Whitemane - if (spell->Id == SPELL_SCARLET_RESURRECTION) + if (spellInfo->Id == SPELL_SCARLET_RESURRECTION) { scheduler.Schedule(3s, [this](TaskContext /*context*/) { @@ -401,7 +401,7 @@ public: }); } - void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target->GetEntry() == NPC_MOGRAINE && spellInfo->Id == SPELL_SCARLET_RESURRECTION) MograineResurrected(); diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 0c3c37d4c43..0a0744080d1 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -244,9 +244,9 @@ class boss_archmage_arugal : public CreatureScript Talk(SAY_SLAY); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARUGAL_CURSE) + if (spellInfo->Id == SPELL_ARUGAL_CURSE) Talk(SAY_TRANSFORM); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 5702f0b68be..92da0c408a3 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -156,9 +156,9 @@ struct npc_summoned_skeleton : public ScriptedAI { npc_summoned_skeleton(Creature* creature) : ScriptedAI(creature) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DEATH_PACT_2) + if (spellInfo->Id == SPELL_DEATH_PACT_2) DoCastSelf(SPELL_DEATH_PACT_3, true); } }; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index cc4275cf622..2634441d8b4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -146,9 +146,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (Tagged || spell->Id != SPELL_EGAN_BLASTER) + if (Tagged || spellInfo->Id != SPELL_EGAN_BLASTER) return; Player* player = caster->ToPlayer(); @@ -242,9 +242,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (!Tagged && spell->Id == SPELL_EGAN_BLASTER) + if (!Tagged && spellInfo->Id == SPELL_EGAN_BLASTER) Tagged = true; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 50f2b0d4085..6a3d40ef67c 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -161,18 +161,22 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_SHADOW_BLADES: case SPELL_SHADOW_NOVA: case SPELL_CONFOUNDING_BLOW: case SPELL_SHADOW_FURY: - HandleTouchedSpells(target, SPELL_DARK_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_DARK_TOUCHED); break; case SPELL_CONFLAGRATION: - HandleTouchedSpells(target, SPELL_FLAME_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_FLAME_TOUCHED); break; } } @@ -437,19 +441,23 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_BLAZE: - target->CastSpell(target, SPELL_BLAZE_SUMMON, true); + target->CastSpell(unitTarget, SPELL_BLAZE_SUMMON, true); break; case SPELL_CONFLAGRATION: case SPELL_FLAME_SEAR: - HandleTouchedSpells(target, SPELL_FLAME_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_FLAME_TOUCHED); break; case SPELL_SHADOW_NOVA: - HandleTouchedSpells(target, SPELL_DARK_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_DARK_TOUCHED); break; } } @@ -674,19 +682,25 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_SHADOW_FURY: case SPELL_DARK_STRIKE: - if (!target->HasAura(SPELL_DARK_FLAME)) + if (!unitTarget->HasAura(SPELL_DARK_FLAME)) { - if (target->HasAura(SPELL_FLAME_TOUCHED)) + if (unitTarget->HasAura(SPELL_FLAME_TOUCHED)) { - target->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - target->CastSpell(target, SPELL_DARK_FLAME, true); - } else target->CastSpell(target, SPELL_DARK_TOUCHED, true); + unitTarget->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); + unitTarget->CastSpell(unitTarget, SPELL_DARK_FLAME, true); + } + else + unitTarget->CastSpell(unitTarget, SPELL_DARK_TOUCHED, true); } break; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 58b76ecd122..b7f7b41c4a8 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -198,26 +198,30 @@ public: instance->SetBossState(DATA_FELMYST, DONE); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + // workaround for linked aura /*if (spell->Id == SPELL_VAPOR_FORCE) { caster->CastSpell(caster, SPELL_VAPOR_TRIGGER, true); }*/ // workaround for mind control - if (spell->Id == SPELL_FOG_INFORM) + if (spellInfo->Id == SPELL_FOG_INFORM) { float x, y, z; - caster->GetPosition(x, y, z); + unitCaster->GetPosition(x, y, z); if (Unit* summon = me->SummonCreature(NPC_DEAD, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) { - summon->SetMaxHealth(caster->GetMaxHealth()); - summon->SetHealth(caster->GetMaxHealth()); + summon->SetMaxHealth(unitCaster->GetMaxHealth()); + summon->SetHealth(unitCaster->GetMaxHealth()); summon->CastSpell(summon, SPELL_FOG_CHARM, true); summon->CastSpell(summon, SPELL_FOG_CHARM2, true); } - Unit::DealDamage(me, caster, caster->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); + Unit::DealDamage(me, unitCaster, unitCaster->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 1e3670cffd5..83d84a99eaf 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -474,12 +474,16 @@ struct boss_sathrovarr : public BossAI kalecgos->AI()->EnterEvadeMode(why); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TAP_CHECK_DAMAGE) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_TAP_CHECK_DAMAGE) { DoCastSelf(SPELL_TELEPORT_BACK, true); - Unit::Kill(caster, me); + Unit::Kill(unitCaster, me); } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index c0034cebb38..9633e9458e2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -353,9 +353,9 @@ public: summon->m_Events.AddEvent(new VoidSpawnSummon(summon), summon->m_Events.CalculateTime(1500)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_OPEN_ALL_PORTALS: DoCastAOE(SPELL_OPEN_PORTAL, true); diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index f0f4c4f3d19..2c29edfb8f6 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -128,10 +128,10 @@ class boss_archaedas : public CreatureScript me->SetControlled(false, UNIT_STATE_ROOT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Being woken up from the altar, start the awaken sequence - if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) + if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) { Talk(SAY_AGGRO); iAwakenTimer = 4000; @@ -279,10 +279,10 @@ class npc_archaedas_minions : public CreatureScript bAmIAwake = true; } - void SpellHit(Unit * /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // time to wake up, start animation - if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) + if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) { iAwakenTimer = 5000; bWakingUp = true; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index f0c8327de53..f0d930cefd1 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -135,9 +135,9 @@ class boss_halazzi : public CreatureScript damage = 0; } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TRANSFORM_SPLIT2) + if (spellInfo->Id == SPELL_TRANSFORM_SPLIT2) EnterPhase(PHASE_HUMAN); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 8f0eee9e7d1..ff42de1e54b 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -444,10 +444,10 @@ class npc_janalai_firebomb : public CreatureScript void Reset() override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FIRE_BOMB_THROW) - DoCast(me, SPELL_FIRE_BOMB_DUMMY, true); + if (spellInfo->Id == SPELL_FIRE_BOMB_THROW) + DoCastSelf(SPELL_FIRE_BOMB_DUMMY, true); } void JustEngagedWith(Unit* /*who*/) override { } @@ -670,9 +670,9 @@ class npc_janalai_egg : public CreatureScript void UpdateAI(uint32 /*diff*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HATCH_EGG) + if (spellInfo->Id == SPELL_HATCH_EGG) DoCast(SPELL_SUMMON_HATCHLING); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index 62a8238881c..367b64cc3c5 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -582,10 +582,14 @@ class npc_zuljin_vortex : public CreatureScript void JustEngagedWith(Unit* /*target*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ZAP_INFORM) - DoCast(caster, SPELL_ZAP_DAMAGE, true); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_ZAP_INFORM) + DoCast(unitCaster, SPELL_ZAP_DAMAGE, true); } void UpdateAI(uint32 /*diff*/) override diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 1c52aefd14e..b9d5fe7da42 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -206,9 +206,9 @@ class npc_harrison_jones : public CreatureScript return false; } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_COSMETIC_SPEAR_THROW) + if (spellInfo->Id == SPELL_COSMETIC_SPEAR_THROW) { me->RemoveAllAuras(); me->SetEntry(NPC_HARRISON_JONES_2); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index c16c9a51fce..2261fa84bb3 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -375,10 +375,14 @@ class npc_zulian_prowler : public CreatureScript me->RemoveAura(SPELL_SNEAK_RANK_1_2); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight - me->Attack(caster, true); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight + me->Attack(unitCaster, true); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index c5c5b272603..fcf9c1b54a0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -127,9 +127,9 @@ class boss_epoch : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* info) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (info->Id == SPELL_TIME_STEP_DUMMY && me->IsHostileTo(target)) + if (spellInfo->Id == SPELL_TIME_STEP_DUMMY && me->IsHostileTo(target)) { _stepTargets.push_back(target->GetGUID()); events.RescheduleEvent(EVENT_TIME_STEP, Milliseconds(500)); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index 3286e02d707..f2dbe13b2c0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -69,9 +69,9 @@ class boss_infinite_corruptor : public CreatureScript DoCastAOE(SPELL_CORRUPTION_OF_TIME_CHANNEL); // implicitly targets the Guardian } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CORRUPTION_OF_TIME_CHANNEL) + if (spellInfo->Id == SPELL_CORRUPTION_OF_TIME_CHANNEL) target->CastSpell(target, SPELL_CORRUPTION_OF_TIME_TARGET, true); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 8915d92953a..1a783bff081 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1407,9 +1407,9 @@ public: current = candidate; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (!_crateRevealed && spell->Id == SPELL_ARCANE_DISRUPTION) + if (!_crateRevealed && spellInfo->Id == SPELL_ARCANE_DISRUPTION) { _crateRevealed = true; if (InstanceScript* instance = me->GetInstanceScript()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 4b3fd8490fa..6051f721fe3 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -140,15 +140,15 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (SpellCorrupt_Timer) return; - if (spell->Id == SPELL_CORRUPT_AEONUS) + if (spellInfo->Id == SPELL_CORRUPT_AEONUS) SpellCorrupt_Timer = 1000; - if (spell->Id == SPELL_CORRUPT) + if (spellInfo->Id == SPELL_CORRUPT) SpellCorrupt_Timer = 3000; } diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 8c6551c14d5..9e843abb17b 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -196,14 +196,14 @@ public: Talk(SAY_KILL); } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_BREATH_EAST_TO_WEST || - Spell->Id == SPELL_BREATH_WEST_TO_EAST || - Spell->Id == SPELL_BREATH_SE_TO_NW || - Spell->Id == SPELL_BREATH_NW_TO_SE || - Spell->Id == SPELL_BREATH_SW_TO_NE || - Spell->Id == SPELL_BREATH_NE_TO_SW) + if (spellInfo->Id == SPELL_BREATH_EAST_TO_WEST || + spellInfo->Id == SPELL_BREATH_WEST_TO_EAST || + spellInfo->Id == SPELL_BREATH_SE_TO_NW || + spellInfo->Id == SPELL_BREATH_NW_TO_SE || + spellInfo->Id == SPELL_BREATH_SW_TO_NE || + spellInfo->Id == SPELL_BREATH_NE_TO_SW) { PointData = GetMoveData(); MovePoint = PointData->LocIdEnd; @@ -274,20 +274,20 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* Spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { //Workaround - Couldn't find a way to group this spells (All Eruption) - if (((Spell->Id >= 17086 && Spell->Id <= 17095) || - (Spell->Id == 17097) || - (Spell->Id >= 18351 && Spell->Id <= 18361) || - (Spell->Id >= 18564 && Spell->Id <= 18576) || - (Spell->Id >= 18578 && Spell->Id <= 18607) || - (Spell->Id == 18609) || - (Spell->Id >= 18611 && Spell->Id <= 18628) || - (Spell->Id >= 21132 && Spell->Id <= 21133) || - (Spell->Id >= 21135 && Spell->Id <= 21139) || - (Spell->Id >= 22191 && Spell->Id <= 22202) || - (Spell->Id >= 22267 && Spell->Id <= 22268)) && + if (((spellInfo->Id >= 17086 && spellInfo->Id <= 17095) || + (spellInfo->Id == 17097) || + (spellInfo->Id >= 18351 && spellInfo->Id <= 18361) || + (spellInfo->Id >= 18564 && spellInfo->Id <= 18576) || + (spellInfo->Id >= 18578 && spellInfo->Id <= 18607) || + (spellInfo->Id == 18609) || + (spellInfo->Id >= 18611 && spellInfo->Id <= 18628) || + (spellInfo->Id >= 21132 && spellInfo->Id <= 21133) || + (spellInfo->Id >= 21135 && spellInfo->Id <= 21139) || + (spellInfo->Id >= 22191 && spellInfo->Id <= 22202) || + (spellInfo->Id >= 22267 && spellInfo->Id <= 22268)) && (target->GetTypeId() == TYPEID_PLAYER)) { instance->SetData(DATA_SHE_DEEP_BREATH_MORE, FAIL); diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index f6c1f2f4e16..5998cdf84d1 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -124,11 +124,11 @@ class boss_ossirian : public CreatureScript Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { for (uint8 i = 0; i < NUM_WEAKNESS; ++i) { - if (spell->Id == SpellWeakness[i]) + if (spellInfo->Id == SpellWeakness[i]) { me->RemoveAurasDueToSpell(SPELL_SUPREME); // Despawn used crystal diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index d13e37c06c2..1b7601837fe 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -167,13 +167,13 @@ struct boss_twinemperorsAI : public BossAI } } - void SpellHit(Unit* caster, SpellInfo const* entry) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (caster == me) return; Creature* pOtherBoss = GetOtherBoss(); - if (entry->Id != SPELL_HEAL_BROTHER || !pOtherBoss) + if (spellInfo->Id != SPELL_HEAL_BROTHER || !pOtherBoss) return; // add health so we keep same percentage for both brothers diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 37cf18f92d0..9d00ada5b46 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -151,9 +151,9 @@ class boss_viscidus : public CreatureScript Talk(EMOTE_CRACK); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) + if ((spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) { ++_hitcounter; diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 2d9e29efc44..a8a4971d861 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -111,16 +111,16 @@ public: } } - void SpellHit(Unit* Caster, SpellInfo const* Spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (Spell->SpellFamilyFlags[2] & 0x080000000) + if (spellInfo->SpellFamilyFlags[2] & 0x080000000) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_STUNNED, true); - pCaster = Caster->GetGUID(); + pCaster = caster->GetGUID(); SayThanksTimer = 5000; } diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index 1102fab6a24..000ba01e291 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -101,9 +101,9 @@ public: } } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* pSpell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_AWAKEN) + if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && spellInfo->Id == SPELL_AWAKEN) ClearSleeping(); } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 8cdd1b1efd2..35b3f79b431 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -74,14 +74,18 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_KODO_KOMBO_ITEM) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_KODO_KOMBO_ITEM) { - if (!(caster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) + if (!(unitCaster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) && (me->GetEntry() == NPC_AGED_KODO || me->GetEntry() == NPC_DYING_KODO || me->GetEntry() == NPC_ANCIENT_KODO)) { - caster->CastSpell(caster, SPELL_KODO_KOMBO_PLAYER_BUFF, true); + unitCaster->CastSpell(unitCaster, SPELL_KODO_KOMBO_PLAYER_BUFF, true); DoCast(me, SPELL_KODO_KOMBO_DESPAWN_BUFF, true); me->UpdateEntry(NPC_TAMED_KODO); @@ -91,12 +95,12 @@ public: EngagementOver(); - me->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, me->GetFollowAngle()); + me->GetMotionMaster()->MoveFollow(unitCaster, PET_FOLLOW_DIST, me->GetFollowAngle()); me->setActive(true); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } } - else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) + else if (spellInfo->Id == SPELL_KODO_KOMBO_GOSSIP) { me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index 2c892c1d25a..99d87fc0bd9 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -341,9 +341,9 @@ class npc_troll_volunteer : public CreatureScript me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_AOE_TURNIN && caster->GetEntry() == NPC_URUZIN && !_complete) + if (spellInfo->Id == SPELL_AOE_TURNIN && caster->GetEntry() == NPC_URUZIN && !_complete) { _complete = true; // Preventing from giving credit twice DoCast(me, SPELL_TURNIN); diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 327ddbd7960..82496ea1df7 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -442,9 +442,9 @@ public: DoCast(SPELL_OMEN_SUMMON_SPOTLIGHT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ELUNE_CANDLE) + if (spellInfo->Id == SPELL_ELUNE_CANDLE) { if (me->HasAura(SPELL_OMEN_STARFALL)) me->RemoveAurasDueToSpell(SPELL_OMEN_STARFALL); diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index e9f62fca787..5448fa8362e 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -192,9 +192,9 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY) + if (spellInfo->Id == SPELL_FLARE || spellInfo->Id == SPELL_FOLLY) { ++FlareCount; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index e694fb12f03..7b721ea82bd 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -109,9 +109,9 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_INSANITY) + if (spellInfo->Id == SPELL_INSANITY) { // Not good target or too many players if (target->GetTypeId() != TYPEID_PLAYER || insanityHandled > 4) diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 33950ef4363..dc938fbb71a 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -361,9 +361,9 @@ public: } } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBMERGE) + if (spellInfo->Id == SPELL_SUBMERGE) { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 09350e9f091..00d176bfe9d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -294,15 +294,15 @@ class boss_krik_thir : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); } - void SpellHitTarget(Unit* /*who*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) Talk(SAY_SEND_GROUP); } @@ -381,9 +381,9 @@ struct npc_gatewatcher_petAI : public ScriptedAI JustEngagedWith(who); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); } @@ -753,10 +753,14 @@ class npc_anub_ar_skirmisher : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CHARGE && target) - DoCast(target, SPELL_FIXATE_TRIGGER); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_CHARGE) + DoCast(unitTarget, SPELL_FIXATE_TRIGGER); } }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index dd8e4958c83..b069f8285dc 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -308,7 +308,7 @@ class boss_halion : public CreatureScript } } - void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TWILIGHT_MENDING) Talk(SAY_REGENERATE); @@ -492,9 +492,9 @@ class boss_twilight_halion : public CreatureScript } } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_TWILIGHT_DIVISION: if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER)) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index 791b66a1785..4be58562cfe 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -643,7 +643,7 @@ struct npc_open_portal_target_toc : public ScriptedAI me->SetDisableGravity(true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_OPEN_PORTAL) { diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index ba9aba5d3d1..5b74ecb3bca 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -222,9 +222,9 @@ class boss_devourer_of_souls : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == H_SPELL_PHANTOM_BLAST) + if (spellInfo->Id == H_SPELL_PHANTOM_BLAST) threeFaced = false; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 18a211e0553..0a143b0c48d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -171,11 +171,15 @@ class boss_garfrost : public CreatureScript events.ScheduleEvent(EVENT_RESUME_ATTACK, 5s); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_PERMAFROST_HELPER) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_PERMAFROST_HELPER) { - if (Aura* aura = target->GetAura(SPELL_PERMAFROST_HELPER)) + if (Aura* aura = unitTarget->GetAura(SPELL_PERMAFROST_HELPER)) _permafrostStack = std::max<uint32>(_permafrostStack, aura->GetStackAmount()); } } diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 73dab15acbf..0dbec20cf86 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -346,9 +346,9 @@ class boss_drakkari_elemental : public CreatureScript me->DespawnOrUnsummon(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_MERGE) + if (spellInfo->Id == SPELL_MERGE) { if (Creature* colossus = target->ToCreature()) { diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index d7c3b7a95f4..d9333de0ba0 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -174,7 +174,7 @@ class boss_gal_darah : public CreatureScript Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TRANSFORM_BACK) me->RemoveAurasDueToSpell(SPELL_TRANSFORM_RHINO); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index f4f6837b454..102ea3a85a9 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -125,7 +125,7 @@ class boss_moorabi : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TRANSFORMATION) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 6a73202bf91..7231a724ea1 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -545,9 +545,9 @@ struct BloodPrincesBossAI : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SelectInvocationSpell()) + if (spellInfo->Id == SelectInvocationSpell()) DoAction(ACTION_CAST_INVOCATION); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index cf78955688a..9c6fd50a7ee 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -415,7 +415,7 @@ class boss_deathbringer_saurfang : public CreatureScript instance->HandleGameObject(instance->GetGuidData(GO_SAURFANG_S_DOOR), false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target->GetTransport()) { @@ -423,7 +423,7 @@ class boss_deathbringer_saurfang : public CreatureScript return; } - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_MARK_OF_THE_FALLEN_CHAMPION: Talk(SAY_MARK_OF_THE_FALLEN_CHAMPION); @@ -444,9 +444,9 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BLOOD_LINK_POWER) + if (spellInfo->Id == SPELL_BLOOD_LINK_POWER) if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) bloodPower->RecalculateAmountOfEffects(); } @@ -716,9 +716,9 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]); @@ -923,9 +923,9 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]); @@ -1005,9 +1005,9 @@ class npc_saurfang_event : public CreatureScript _index = data; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[_index]); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 444008478c5..ce7b9f60e11 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -162,10 +162,14 @@ class boss_festergut : public CreatureScript Talk(SAY_KILL); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == PUNGENT_BLIGHT_HELPER) - target->RemoveAurasDueToSpell(INOCULATED_HELPER); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == PUNGENT_BLIGHT_HELPER) + unitTarget->RemoveAurasDueToSpell(INOCULATED_HELPER); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 30714723d1a..451ea8a1785 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -460,9 +460,9 @@ class boss_lady_deathwhisper : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUMMON_SPIRITS) + if (spellInfo->Id == SPELL_SUMMON_SPIRITS) _nextVengefulShadeTargetGUID.push_back(target->GetGUID()); } @@ -629,9 +629,9 @@ class npc_cult_fanatic : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_DARK_TRANSFORMATION_T: me->InterruptNonMeleeSpells(true); @@ -736,9 +736,9 @@ class npc_cult_adherent : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_DARK_EMPOWERMENT_T: me->UpdateEntry(NPC_EMPOWERED_ADHERENT); @@ -829,9 +829,9 @@ class npc_vengeful_shade : public CreatureScript _targetGUID = guid; } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_VENGEFUL_BLAST: case SPELL_VENGEFUL_BLAST_25N: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 8c7d8527012..851c561c662 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -728,9 +728,9 @@ class npc_putricide_oozeAI : public ScriptedAI npc_putricide_oozeAI(Creature* creature, uint32 auraSpellId, uint32 hitTargetSpellId) : ScriptedAI(creature), _auraSpellId(auraSpellId), _hitTargetSpellId(hitTargetSpellId), _newTargetSelectTimer(0), _instance(creature->GetInstanceScript()) { } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (!_newTargetSelectTimer && spell->Id == sSpellMgr->GetSpellIdForDifficulty(_hitTargetSpellId, me)) + if (!_newTargetSelectTimer && spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(_hitTargetSpellId, me)) { _newTargetSelectTimer = 1000; // go passive until next target selection @@ -747,9 +747,9 @@ class npc_putricide_oozeAI : public ScriptedAI DoCastAOE(_auraSpellId, true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TEAR_GAS_CREATURE) + if (spellInfo->Id == SPELL_TEAR_GAS_CREATURE) _newTargetSelectTimer = 1000; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index 933753007dc..1fe1dd21cf6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -173,9 +173,9 @@ class boss_rotface : public CreatureScript professor->AI()->EnterEvadeMode(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SLIME_SPRAY) + if (spellInfo->Id == SPELL_SLIME_SPRAY) Talk(SAY_SLIME_SPRAY); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index f6445deb21c..85fc93f32f9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -437,11 +437,15 @@ class boss_sindragosa : public CreatureScript summon->AI()->JustDied(summon); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + if (uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(70127, me)) - if (spellId == spell->Id) - if (Aura const* mysticBuffet = target->GetAura(spell->Id)) + if (spellId == spellInfo->Id) + if (Aura const* mysticBuffet = unitTarget->GetAura(spellId)) _mysticBuffetStack = std::max<uint8>(_mysticBuffetStack, mysticBuffet->GetStackAmount()); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp index eb46b84e6f4..9b2cf55a48d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp @@ -427,9 +427,9 @@ struct boss_sister_svalna : public BossAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) + if (spellInfo->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) { me->RemoveAurasDueToSpell(SPELL_AETHER_SHIELD); Talk(EMOTE_SVALNA_BROKEN_SHIELD, caster); @@ -449,17 +449,21 @@ struct boss_sister_svalna : public BossAI me->SetHover(false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_IMPALING_SPEAR_KILL: - Unit::Kill(me, target); + Unit::Kill(me, unitTarget); break; case SPELL_IMPALING_SPEAR: - if (TempSummon* summon = target->SummonCreature(NPC_IMPALING_SPEAR, *target)) + if (TempSummon* summon = unitTarget->SummonCreature(NPC_IMPALING_SPEAR, *unitTarget)) { - Talk(EMOTE_SVALNA_IMPALE, target); + Talk(EMOTE_SVALNA_IMPALE, unitTarget); CastSpellExtraArgs args; args.AddSpellBP0(1); summon->CastSpell(target, VEHICLE_SPELL_RIDE_HARDCODED, args); @@ -887,9 +891,9 @@ public: Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_REVIVE_CHAMPION && !IsUndead) + if (spellInfo->Id == SPELL_REVIVE_CHAMPION && !IsUndead) { IsUndead = true; me->setDeathState(JUST_RESPAWNED); @@ -914,7 +918,7 @@ public: Talk(SAY_CAPTAIN_RESURRECTED); me->UpdateEntry(newEntry, me->GetCreatureData()); - DoCast(me, SPELL_UNDEATH, true); + DoCastSelf(SPELL_UNDEATH, true); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 0167e562928..a2098d0450e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -815,15 +815,12 @@ class boss_the_lich_king : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) + if (spellInfo->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) Talk(SAY_LK_FROSTMOURNE_KILL); - } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override - { - if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) + if (spellInfo->Id == REMORSELESS_WINTER_1 || spellInfo->Id == REMORSELESS_WINTER_2) { me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_DEFAULT, LIGHT_SNOWSTORM, 5000); me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_LIGHT_SNOW, 0.5f); @@ -1228,11 +1225,11 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ICE_LOCK) + if (spellInfo->Id == SPELL_ICE_LOCK) me->SetFacingTo(3.085098f); - else if (spell->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK) + else if (spellInfo->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK) me->LoadEquipment(1); // remove glow on ashbringer } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index aa89aa7ae79..42cd6edee74 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -377,9 +377,9 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DREAM_SLIP) + if (spellInfo->Id == SPELL_DREAM_SLIP) { DoCastSelf(SPELL_CLEAR_ALL); DoCastSelf(SPELL_REPUTATION_BOSS_KILL, true); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 1749f91448d..8f2ae7543fe 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -746,9 +746,9 @@ struct npc_icc_orb_controller : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ORB_CONTROLLER_ACTIVE) + if (spellInfo->Id == SPELL_ORB_CONTROLLER_ACTIVE) if (GameObject* orb = me->FindNearestGameObject(GO_EMPOWERING_BLOOD_ORB, 5.0f)) orb->AI()->SetGUID(caster->GetGUID(), DATA_GUID); } diff --git a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp index d42cf6a3164..dc318e78645 100644 --- a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp +++ b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp @@ -68,10 +68,14 @@ public: _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 15s); } - void SpellHit(Unit* caster, SpellInfo const* /*spell*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { - if (caster->IsVehicle()) - Unit::Kill(me, caster); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (unitCaster->IsVehicle()) + Unit::Kill(me, unitCaster); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index 8fb3897c717..54e137c666c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -124,13 +124,17 @@ class boss_faerlina : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_WIDOWS_EMBRACE_HELPER) { ++_frenzyDispels; Talk(EMOTE_WIDOW_EMBRACE, caster); - Unit::Kill(me, caster); + Unit::Kill(me, unitCaster); } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index c5595dfaaae..f1b85633494 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -443,9 +443,9 @@ class boss_four_horsemen_baron : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_UNHOLY_SHADOW) + if (spellInfo->Id == SPELL_UNHOLY_SHADOW) Talk(SAY_SPECIAL); } }; @@ -519,9 +519,9 @@ class boss_four_horsemen_thane : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (_shouldSay && spell->Id == SPELL_METEOR) + if (_shouldSay && spellInfo->Id == SPELL_METEOR) { Talk(SAY_SPECIAL); _shouldSay = false; @@ -671,9 +671,9 @@ class boss_four_horsemen_sir : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (_shouldSay && spell->Id == SPELL_HOLY_WRATH) + if (_shouldSay && spellInfo->Id == SPELL_HOLY_WRATH) { Talk(SAY_SPECIAL); _shouldSay = false; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 0d7ca73ccde..c73d8a0bcda 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -914,12 +914,10 @@ public: return nullptr; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override - { - if (!spell) - return; - switch (spell->Id) + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + switch (spellInfo->Id) { case SPELL_ANCHOR_1_TRAINEE: DoCastAOE(SPELL_ANCHOR_2_TRAINEE, true); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 89cb80b5386..b5cbc646523 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -63,9 +63,9 @@ class boss_grobbulus : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 12min); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SLIME_SPRAY) + if (spellInfo->Id == SPELL_SLIME_SPRAY) me->SummonCreature(NPC_FALLOUT_SLIME, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 6fd230ce7dd..d0d0a909ad0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -280,9 +280,9 @@ public: damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CHAINS_DUMMY) + if (spellInfo->Id == SPELL_CHAINS_DUMMY) { Talk(SAY_CHAINS); std::list<Unit*> targets; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index c02db311140..9cd9a9aca6b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -99,9 +99,9 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_UNDERSTUDY_TAUNT) + if (spellInfo->Id == SPELL_UNDERSTUDY_TAUNT) Talk(SAY_TAUNTED, caster); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 4eca760017d..e9940dc185c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -187,12 +187,16 @@ class boss_sapphiron : public CreatureScript EnterPhaseGround(true); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch(spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch(spellInfo->Id) { case SPELL_CHECK_RESISTS: - if (target && target->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) + if (unitTarget->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) _canTheHundredClub = false; break; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 27f50380123..e0a8eac329b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -599,35 +599,36 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!caster) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) return; - if (spell->Id != SPELL_STALAGG_TESLA_PERIODIC) + + if (spellInfo->Id != SPELL_STALAGG_TESLA_PERIODIC) return; if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); - if (Creature* creatureCaster = caster->ToCreature()) - creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + creatureCaster->SetImmuneToPC(false); + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); } if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) { - caster->CastStop(SPELL_TESLA_SHOCK); - caster->CastSpell(target, SPELL_TESLA_SHOCK,true); + creatureCaster->CastStop(SPELL_TESLA_SHOCK); + creatureCaster->CastSpell(target, SPELL_TESLA_SHOCK,true); } } else if (isOverloading || refreshBeam) { isOverloading = false; refreshBeam = false; - caster->CastStop(); - caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); - caster->SetImmuneToPC(true); + creatureCaster->CastStop(); + creatureCaster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); + creatureCaster->SetImmuneToPC(true); } } @@ -848,35 +849,37 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!caster) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) return; - if (spell->Id != SPELL_FEUGEN_TESLA_PERIODIC) + + if (spellInfo->Id != SPELL_FEUGEN_TESLA_PERIODIC) return; + if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); - if (Creature* creatureCaster = caster->ToCreature()) - creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + creatureCaster->SetImmuneToPC(false); + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); } if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - caster->CastStop(SPELL_TESLA_SHOCK); - caster->CastSpell(target, SPELL_TESLA_SHOCK,true); + creatureCaster->CastStop(SPELL_TESLA_SHOCK); + creatureCaster->CastSpell(target, SPELL_TESLA_SHOCK,true); } } else if (isOverloading || refreshBeam) { isOverloading = false; refreshBeam = false; - caster->CastStop(); - caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); - caster->SetImmuneToPC(true); + creatureCaster->CastStop(); + creatureCaster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); + creatureCaster->SetImmuneToPC(true); } } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index d0ccc5f482f..3d2014c05ce 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -629,16 +629,16 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_POWER_SPARK_MALYGOS) + if (spellInfo->Id == SPELL_POWER_SPARK_MALYGOS) { if (Creature* creature = caster->ToCreature()) creature->DespawnOrUnsummon(); Talk(SAY_BUFF_SPARK); } - else if (spell->Id == SPELL_MALYGOS_BERSERK) + else if (spellInfo->Id == SPELL_MALYGOS_BERSERK) Talk(EMOTE_HIT_BERSERKER_TIMER); } @@ -1023,9 +1023,9 @@ public: _instance = creature->GetInstanceScript(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_PORTAL_OPENED) + if (spellInfo->Id == SPELL_PORTAL_OPENED) { if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_MALYGOS))) { @@ -1474,12 +1474,12 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARCANE_BOMB_TRIGGER) + if (spellInfo->Id == SPELL_ARCANE_BOMB_TRIGGER) { DoCastAOE(SPELL_ARCANE_BOMB_KNOCKBACK_DAMAGE, true); - DoCast(me, SPELL_ARCANE_OVERLOAD_1, true); + DoCastSelf(SPELL_ARCANE_OVERLOAD_1, true); } } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index c04c3728a06..bd34252bc75 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -295,7 +295,7 @@ class boss_urom : public CreatureScript EngagementOver(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { switch (spellInfo->Id) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index faa6f0166e7..46ded908314 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -203,9 +203,9 @@ class npc_azure_ring_captain : public CreatureScript me->SetReactState(REACT_AGGRESSIVE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ICE_BEAM) + if (spellInfo->Id == SPELL_ICE_BEAM) { target->CastSpell(target, SPELL_SUMMON_ARCANE_BEAM, true); me->DespawnOrUnsummon(); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index c01be422e8e..ce3e86b4e8b 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -266,10 +266,10 @@ class npc_ruby_emerald_amber_drake : public CreatureScript Initialize(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) - if (spell->Id == SPELL_GPS) + if (spellInfo->Id == SPELL_GPS) { if (_instance->GetBossState(DATA_EREGOS) == DONE) Talk(WHISPER_GPS_END, creator); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 412a9b322fa..8090445ec3c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -146,9 +146,9 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DISPERSE) + if (spellInfo->Id == SPELL_DISPERSE) { for (uint8 i = 0; i < DATA_MAX_SPARKS; ++i) me->CastSpell(me, SPELL_SUMMON_SPARK, true); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 298d6e2f3da..becfe8d3a8c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -441,10 +441,10 @@ public: } } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* pSpell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // This is the dummy effect of the spells - if (pSpell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SHATTER, me)) + if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SHATTER, me)) if (me->GetEntry() == NPC_BRITTLE_GOLEM) me->DespawnOrUnsummon(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index ad946bbe34e..0f4b427e09e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -765,14 +765,18 @@ struct npc_living_constellation : public CreatureAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_CONSTELLATION_PHASE_EFFECT || caster->GetTypeId() != TYPEID_UNIT) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) + return; + + if (spellInfo->Id != SPELL_CONSTELLATION_PHASE_EFFECT) return; _instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_ID_SUPERMASSIVE_START); - caster->CastSpell(nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK); - DoCast(caster, SPELL_DESPAWN_BLACK_HOLE, TRIGGERED_FULL_MASK); + creatureCaster->CastSpell(nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK); + DoCast(creatureCaster, SPELL_DESPAWN_BLACK_HOLE, TRIGGERED_FULL_MASK); me->DespawnOrUnsummon(500ms); } @@ -825,9 +829,9 @@ struct npc_black_hole : public ScriptedAI _summons.Summon(summon); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DESPAWN_BLACK_HOLE) + if (spellInfo->Id == SPELL_DESPAWN_BLACK_HOLE) { _summons.DespawnAll(); me->DespawnOrUnsummon(1); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 056c35adc74..ce7cabfde46 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -331,16 +331,16 @@ class boss_flame_leviathan : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_START_THE_ENGINE) + if (spellInfo->Id == SPELL_START_THE_ENGINE) if (Vehicle* vehicleKit = me->GetVehicleKit()) vehicleKit->InstallAllAccessories(false); - if (spell->Id == SPELL_ELECTROSHOCK) + if (spellInfo->Id == SPELL_ELECTROSHOCK) me->InterruptSpell(CURRENT_CHANNELED_SPELL); - if (spell->Id == SPELL_OVERLOAD_CIRCUIT) + if (spellInfo->Id == SPELL_OVERLOAD_CIRCUIT) ++Shutdown; } @@ -476,15 +476,19 @@ class boss_flame_leviathan : public CreatureScript DoBatteringRamIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_PURSUED) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) return; - _pursueTarget = target->GetGUID(); - AttackStart(target); + if (spellInfo->Id != SPELL_PURSUED) + return; + + _pursueTarget = unitTarget->GetGUID(); + AttackStart(unitTarget); - for (SeatMap::const_iterator itr = target->GetVehicleKit()->Seats.begin(); itr != target->GetVehicleKit()->Seats.end(); ++itr) + for (SeatMap::const_iterator itr = unitTarget->GetVehicleKit()->Seats.begin(); itr != unitTarget->GetVehicleKit()->Seats.end(); ++itr) { if (Player* passenger = ObjectAccessor::GetPlayer(*me, itr->second.Passenger.Guid)) { @@ -906,9 +910,9 @@ class npc_pool_of_tar : public CreatureScript damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE)) + if (spellInfo->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE)) me->CastSpell(me, SPELL_BLAZE, true); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 5478f7c8d73..bf035dde39f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1505,12 +1505,16 @@ class npc_unstable_sun_beam : public CreatureScript despawnTimer -= diff; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (target && spell->Id == SPELL_UNSTABLE_ENERGY) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_UNSTABLE_ENERGY) { - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM_TRIGGERED); + unitTarget->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); + unitTarget->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM_TRIGGERED); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 0458f811f92..bf28b7c7301 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -219,9 +219,9 @@ class boss_general_vezax : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_SHADOW_CRASH_HIT) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_SHADOW_CRASH_HIT) shadowDodger = false; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 1f7a1a64410..e52b23d1c3f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -967,9 +967,9 @@ class npc_toasty_fire : public CreatureScript DoCast(me, SPELL_SINGED, true); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BLOCK_OF_ICE || spell->Id == SPELL_ICE_SHARD || spell->Id == SPELL_ICE_SHARD_HIT) + if (spellInfo->Id == SPELL_BLOCK_OF_ICE || spellInfo->Id == SPELL_ICE_SHARD || spellInfo->Id == SPELL_ICE_SHARD_HIT) { if (GameObject* ToastyFire = me->FindNearestGameObject(GO_TOASTY_FIRE, 1.0f)) me->RemoveGameObject(ToastyFire, true); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index c96c381c7f8..e5bc9080e43 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1034,10 +1034,10 @@ class boss_vx_001 : public CreatureScript mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY); } - void SpellHit(Unit* caster, SpellInfo const* /*spellProto*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { if (caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING)) - DoCast(caster, SPELL_RAPID_BURST); + DoCast(caster->ToUnit(), SPELL_RAPID_BURST); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 49cbf43e337..2d0c1c31cf6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -498,9 +498,9 @@ struct boss_razorscale : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HARPOON_TRIGGER) + if (spellInfo->Id == SPELL_HARPOON_TRIGGER) { _harpoonHitCount++; if (_harpoonHitCount == RAID_MODE(2, 4)) @@ -1452,9 +1452,9 @@ struct npc_razorscale_harpoon_fire_state : public ScriptedAI { npc_razorscale_harpoon_fire_state(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FIREBOLT) + if (spellInfo->Id == SPELL_FIREBOLT) { DoCastSelf(SPELL_HARPOON_FIRE_STATE); if (Creature* commander = _instance->GetCreature(DATA_EXPEDITION_COMMANDER)) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 4bdcd3514c4..8144c2b3df2 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -543,7 +543,7 @@ class boss_thorim : public CreatureScript Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TOUCH_OF_DOMINION_TRIGGERED) { @@ -556,9 +556,9 @@ class boss_thorim : public CreatureScript } } - void SpellHitTarget(Unit* who, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_LIGHTNING_RELEASE) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_LIGHTNING_RELEASE) _dontStandInTheLightning = false; } @@ -1595,7 +1595,7 @@ class npc_sif : public CreatureScript _events.Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_STORMHAMMER_SIF) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index e9743454674..0ab72506086 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -737,12 +737,12 @@ class boss_sara : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { if (!roll_chance_i(30) || _events.IsInPhase(PHASE_TRANSFORM)) return; - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_SARAS_FERVOR: Talk(SAY_SARA_FERVOR_HIT); @@ -948,10 +948,10 @@ class boss_yogg_saron : public CreatureScript me->AddLootMode(LOOT_MODE_HARD_MODE_1); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Val'anyr - if (spell->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) + if (spellInfo->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) me->AddLootMode(32); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 8158237ac87..5dc99994cd1 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -445,9 +445,9 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_LAUNCH_HARPOON) + if (spellInfo->Id == SPELL_LAUNCH_HARPOON) if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS)) skadi->AI()->DoAction(ACTION_HARPOON_HIT); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 0018069e18b..a2fd2301808 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -220,7 +220,7 @@ class boss_svala : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_RITUAL_STRIKE_EFF_1 && !events.IsInPhase(NORMAL) && !events.IsInPhase(SVALADEAD)) { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 0860a8989bc..25a290cd50f 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -148,9 +148,9 @@ public: events.ScheduleEvent(EVENT_ANCESTORS_VENGEANCE, DUNGEON_MODE(60000, 45000), EVENT_GROUP_BASE_SPELLS); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_BANE_HIT) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_BANE_HIT) kingsBane = false; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 18b0016d532..5d262d0eaae 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -248,13 +248,17 @@ class npc_ichor_globule : public CreatureScript creature->SetReactState(REACT_PASSIVE); } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (spellInfo->Id == SPELL_WATER_GLOBULE_VISUAL) { DoCast(me, SPELL_WATER_GLOBULE_TRANSFORM); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->GetMotionMaster()->MoveFollow(caster, 0.0f, 0.0f); + me->GetMotionMaster()->MoveFollow(unitCaster, 0.0f, 0.0f); } } diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 190c66a9145..026d64d1b39 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -121,9 +121,9 @@ class boss_xevozz : public CreatureScript _JustDied(); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARCANE_POWER || spell->Id == H_SPELL_ARCANE_POWER) + if (spellInfo->Id == SPELL_ARCANE_POWER || spellInfo->Id == H_SPELL_ARCANE_POWER) Talk(SAY_SUMMON_ENERGY); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 34a0667c147..ba312374f57 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1314,18 +1314,21 @@ public: AttackStart(who); } - void SpellHit(Unit* pCaster, SpellInfo const* pSpell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (pSpell->Id == SPELL_ARCANE_CHAINS && pCaster->GetTypeId() == TYPEID_PLAYER && !HealthAbovePct(50) && !bEnslaved) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_ARCANE_CHAINS && !HealthAbovePct(50) && !bEnslaved) { EnterEvadeMode(); //We make sure that the npc is not attacking the player! me->SetReactState(REACT_PASSIVE); - StartFollow(pCaster->ToPlayer()); + StartFollow(playerCaster); me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER); DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF, true); - if (Player* player = pCaster->ToPlayer()) - player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER); + playerCaster->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER); bEnslaved = true; } @@ -1419,10 +1422,14 @@ public: { } - void SpellHit(Unit* unit, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if ((spell->Id == SPELL_NEURAL_NEEDLE || spell->Id == SPELL_PROTOTYPE_NEURAL_NEEDLE) && unit->GetTypeId() == TYPEID_PLAYER) - GotStinged(unit->ToPlayer(), spell->Id); + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_NEURAL_NEEDLE || spellInfo->Id == SPELL_PROTOTYPE_NEURAL_NEEDLE) + GotStinged(playerCaster, spellInfo->Id); } void GotStinged(Player* caster, uint32 spellId) diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index b797e50c31d..a167135deda 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -539,9 +539,9 @@ class npc_wyrmrest_defender : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_WYRMREST_DEFENDER_MOUNT: Talk(WHISPER_MOUNTED, me->GetCharmerOrOwner()); @@ -625,9 +625,9 @@ class npc_torturer_lecraft : public CreatureScript Talk (SAY_AGGRO, player); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) + if (spellInfo->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) return; if (Player* player = caster->ToPlayer()) diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 0580f6dfb3b..2b530b5207e 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -299,13 +299,17 @@ public: _gender = Data; } - void SpellHit(Unit* Caster, SpellInfo const* Spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_OUTHOUSE_GROANS) - { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_OUTHOUSE_GROANS) + { ++_counter; if (_counter < 5) - DoCast(Caster, SPELL_CAMERA_SHAKE, true); + DoCast(unitCaster, SPELL_CAMERA_SHAKE, true); else _counter = 0; DoCast(me, SPELL_DUST_FIELD, true); @@ -496,13 +500,16 @@ public: me->DespawnOrUnsummon(_despawnTimer); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER - && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_RENEW_SKIRMISHER && playerCaster->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) { - DoCast(caster, SPELL_KILL_CREDIT); - Talk(SAY_RANDOM, caster); + DoCast(playerCaster, SPELL_KILL_CREDIT); + Talk(SAY_RANDOM, playerCaster); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); else @@ -617,9 +624,9 @@ public: DoMeleeAttackIfReady(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) + if (spellInfo->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToPC(true); @@ -909,7 +916,7 @@ public: FinishQuest(false, _faction); } - void SpellHit(Unit* caster, SpellInfo const* /*spellInfo*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { if (caster->GetEntry() == NPC_HORDE_LUMBERBOAT || caster->GetEntry() == NPC_ALLIANCE_LUMBERBOAT) FinishQuest(true, _faction); diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 3d28c33dace..1ea5565ae52 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -234,32 +234,36 @@ class npc_tournament_training_dummy : public CreatureScript events.RescheduleEvent(EVENT_DUMMY_RESET, 10000); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + switch (me->GetEntry()) { case NPC_CHARGE_TARGET: - if (spell->Id == SPELL_PLAYER_CHARGE) + if (spellInfo->Id == SPELL_PLAYER_CHARGE) if (isVulnerable) - DoCast(caster, SPELL_CHARGE_CREDIT, true); + DoCast(unitCaster, SPELL_CHARGE_CREDIT, true); break; case NPC_MELEE_TARGET: - if (spell->Id == SPELL_PLAYER_THRUST) + if (spellInfo->Id == SPELL_PLAYER_THRUST) { - DoCast(caster, SPELL_MELEE_CREDIT, true); + DoCast(unitCaster, SPELL_MELEE_CREDIT, true); - if (Unit* target = caster->GetVehicleBase()) + if (Unit* target = unitCaster->GetVehicleBase()) DoCast(target, SPELL_COUNTERATTACK, true); } break; case NPC_RANGED_TARGET: - if (spell->Id == SPELL_PLAYER_BREAK_SHIELD) + if (spellInfo->Id == SPELL_PLAYER_BREAK_SHIELD) if (isVulnerable) - DoCast(caster, SPELL_RANGED_CREDIT, true); + DoCast(unitCaster, SPELL_RANGED_CREDIT, true); break; } - if (spell->Id == SPELL_PLAYER_BREAK_SHIELD) + if (spellInfo->Id == SPELL_PLAYER_BREAK_SHIELD) if (!me->HasAura(SPELL_CHARGE_DEFEND) && !me->HasAura(SPELL_RANGED_DEFEND)) isVulnerable = true; } @@ -756,9 +760,9 @@ class npc_frostbrood_skytalon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_EXPLOSION: DoCast(me, SPELL_IMMOLATION); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 137b6de5296..9628a041896 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -304,7 +304,7 @@ public: sayTimer -= diff; } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (spellInfo->Id != SPELL_OFFER) return; @@ -575,16 +575,16 @@ public: { npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target == me) return; - if (spell->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (spellInfo->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) { me->UpdateEntry(NPC_HAIPHOON_AIR); } - else if (spell->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + else if (spellInfo->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) { me->UpdateEntry(NPC_HAIPHOON_WATER); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 4fa7b575ba2..3ad5cf25fc3 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -225,15 +225,19 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_ICE_LANCE) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) return; - if (caster->GetVehicleKit()->GetAvailableSeatCount() != 0) + if (spellInfo->Id != SPELL_ICE_LANCE) + return; + + if (unitCaster->GetVehicleKit()->GetAvailableSeatCount() != 0) { me->CastSpell(me, SPELL_FREE_PRISONER, true); - me->CastSpell(caster, SPELL_RIDE_DRAKE, true); + me->CastSpell(unitCaster, SPELL_RIDE_DRAKE, true); me->CastSpell(me, SPELL_SHARD_IMPACT, true); freed = true; } @@ -750,7 +754,7 @@ class npc_wild_wyrm : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (_playerGuid || spellInfo->Id != SPELL_SPEAR_OF_HODIR) return; diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 68e64773f33..efd14ab16e0 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -75,27 +75,28 @@ public: rageclaw->SetFacingToObject(me); } - void UnlockRageclaw(Unit* who, Creature* rageclaw) + void UnlockRageclaw(Creature* rageclaw) { - if (!who) - return; - // pointer check not needed DoCast(rageclaw, SPELL_FREE_RAGECLAW, true); me->setDeathState(DEAD); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_UNLOCK_SHACKLE) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_UNLOCK_SHACKLE) { - if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE) + if (playerCaster->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE) { if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID)) { - UnlockRageclaw(caster, rageclaw); - caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID); + UnlockRageclaw(rageclaw); + playerCaster->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID); me->RemoveAurasDueToSpell(SPELL_CHAIN_OF_THE_SCURGE_RIGHT); me->DespawnOrUnsummon(); } @@ -142,9 +143,9 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FREE_RAGECLAW) + if (spellInfo->Id == SPELL_FREE_RAGECLAW) { me->RemoveAurasDueToSpell(SPELL_CHAIN_OF_THE_SCURGE_LEFT); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -925,16 +926,22 @@ public: Reset(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != GYMERS_GRAB) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) return; - if (Vehicle* veh = caster->GetVehicleKit()) - if (veh->GetAvailableSeatCount() != 0) + if (spellInfo->Id != GYMERS_GRAB) + return; + + if (Vehicle* veh = unitCaster->GetVehicleKit()) { - me->CastSpell(caster, RIDE_VEHICLE, true); - me->CastSpell(caster, HEALING_WINDS, true); + if (veh->GetAvailableSeatCount() != 0) + { + me->CastSpell(caster, RIDE_VEHICLE, true); + me->CastSpell(caster, HEALING_WINDS, true); + } } } }; diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 4aacaf8072f..a8c47ca8cdc 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -236,9 +236,9 @@ struct boss_shade_of_akama : public BossAI _DespawnAtEvade(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL) + if (spellInfo->Id == SPELL_AKAMA_SOUL_CHANNEL) { events.ScheduleEvent(EVENT_START_CHANNELERS_AND_SPAWNERS, 1s); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); @@ -247,7 +247,7 @@ struct boss_shade_of_akama : public BossAI AttackStart(akama); } - if (spell->Id == SPELL_AKAMA_SOUL_RETRIEVE) + if (spellInfo->Id == SPELL_AKAMA_SOUL_RETRIEVE) DoCastSelf(SPELL_AKAMA_SOUL_EXPEL_CHANNEL); } @@ -381,9 +381,9 @@ struct npc_akama_shade : public ScriptedAI void EnterEvadeMode(EvadeReason /*why*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_THREAT && !_isInCombat) + if (spellInfo->Id == SPELL_THREAT && !_isInCombat) { _isInCombat = true; me->SetWalk(false); diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp index 16e357a9026..5488ba52c4e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -91,9 +91,9 @@ struct boss_najentus : public BossAI Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD)) + if (spellInfo->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD)) { me->RemoveAurasDueToSpell(SPELL_TIDAL_SHIELD); DoCastSelf(SPELL_TIDAL_BURST, true); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 7b37cddc7a5..2a52a685f6b 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -149,10 +149,10 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { //hack :( - if (spell->Id == SPELL_WARLORDS_RAGE_PROC) + if (spellInfo->Id == SPELL_WARLORDS_RAGE_PROC) if (instance->GetData(DATA_DISTILLER) == DONE) me->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp index bcf6d6fd42b..e71dc723172 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp @@ -513,7 +513,7 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI DoCastSelf(SPELL_FIND_OPENING_CHANNEL); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { switch (spellInfo->Id) { diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index 1c6d5afead0..da3b9fa92fe 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -122,11 +122,11 @@ class boss_gruul : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(Unit* target, SpellInfo const* pSpell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { //This to emulate effect1 (77) of SPELL_GROUND_SLAM, knock back to any direction //It's initially wrong, since this will cause fall damage, which is by comments, not intended. - if (pSpell->Id == SPELL_GROUND_SLAM) + if (spellInfo->Id == SPELL_GROUND_SLAM) { if (target->GetTypeId() == TYPEID_PLAYER) { @@ -144,7 +144,7 @@ class boss_gruul : public CreatureScript } //this part should be in the core - if (pSpell->Id == SPELL_SHATTER) + if (spellInfo->Id == SPELL_SHATTER) { /// @todo use eventmap to kill this stuff //clear this, if we are still performing diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 22d0d29af0f..f9829a0f5e9 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -111,9 +111,9 @@ class boss_nazan : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* entry) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (target && entry->Id == uint32(SPELL_FIREBALL)) + if (spellInfo->Id == uint32(SPELL_FIREBALL)) me->SummonCreature(NPC_LIQUID_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 30000); } diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 3eb07dbfeec..6a0b6f0e2b8 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -184,9 +184,9 @@ class boss_magtheridon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SHADOW_CAGE) + if (spellInfo->Id == SPELL_SHADOW_CAGE) Talk(SAY_BANISHED); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 88319294454..c0ae6c28057 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -217,9 +217,9 @@ class boss_alar : public CreatureScript } } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DIVE_BOMB_VISUAL) + if (spellInfo->Id == SPELL_DIVE_BOMB_VISUAL) { me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); me->SetDisplayId(11686); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 57514b64457..5817e0b2bff 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -358,9 +358,9 @@ struct advisorbase_ai : public ScriptedAI ScriptedAI::AttackStart(who); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_RESSURECTION) + if (spellInfo->Id == SPELL_RESSURECTION) { _hasRessurrected = true; me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 4c01fd9be54..6902ca23507 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -126,9 +126,13 @@ public: me->DespawnOrUnsummon(1); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_T_PHASE_MODULATOR) { const uint32 entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL}; int cid = rand32() % (4 - 1); @@ -153,7 +157,7 @@ public: IsNihil = true; } else - AttackStart(caster); + AttackStart(playerCaster); } } } @@ -843,15 +847,19 @@ class npc_simon_bunny : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + // Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target. // Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself // so player gets damage equal to calculated damage dbc basepoints for SPELL_BAD_PRESS_DAMAGE (~50) - if (spell->Id == SPELL_BAD_PRESS_TRIGGER) + if (spellInfo->Id == SPELL_BAD_PRESS_TRIGGER) { - int32 bp = (int32)((float)(fails)*0.33f*target->GetMaxHealth()); - target->CastSpell(target, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp)); + int32 bp = (int32)((float)(fails) * 0.33f * unitTarget->GetMaxHealth()); + unitTarget->CastSpell(unitTarget, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp)); } } diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 42273903322..8d244c3b240 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -142,9 +142,9 @@ public: } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CHAIN_LIGHTNING) + if (spellInfo->Id == SPELL_CHAIN_LIGHTNING) { if (rand32() % 10) return; @@ -334,9 +334,9 @@ public: summoned->AI()->AttackStart(me); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING) + if (spellInfo->Id == SPELL_KUR_CHAIN_LIGHTNING) { if (rand32() % 30) return; @@ -344,7 +344,7 @@ public: Talk(SAY_KUR_LIGHTNING); } - if (spell->Id == SPELL_KUR_FROST_SHOCK) + if (spellInfo->Id == SPELL_KUR_FROST_SHOCK) { if (rand32() % 30) return; @@ -442,7 +442,7 @@ public: scheduler.CancelAll(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_PLANT_WARMAUL_OGRE_BANNER || spellInfo->Id == SPELL_PLANT_KIL_SORROW_BANNER) bannered = true; diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 8d6c330c385..f121f6df72f 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -406,11 +406,6 @@ public: PlayerGUID = who->GetGUID(); } - //void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) override - //{ - // DoCast(me, SPELL_DE_MATERIALIZE); - //} - void UpdateAI(uint32 diff) override { if (!Materialize) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 74b29423c38..47af5874c11 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -162,9 +162,9 @@ public: caster->AI()->SetData(TYPE_INFERNAL, DATA_DIED); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUMMON_INFERNAL) + if (spellInfo->Id == SPELL_SUMMON_INFERNAL) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE); me->SetImmuneToPC(false); @@ -250,14 +250,14 @@ public: Initialize(); } - void SpellHit(Unit* pCaster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (bCanEat || bIsEating) return; - if (pCaster->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_PLACE_CARCASS && !me->HasAura(SPELL_JUST_EATEN)) + if (caster->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_PLACE_CARCASS && !me->HasAura(SPELL_JUST_EATEN)) { - uiPlayerGUID = pCaster->GetGUID(); + uiPlayerGUID = caster->GetGUID(); bCanEat = true; } } @@ -381,18 +381,19 @@ public: me->SetDisableGravity(false); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!caster) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) return; - if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped) + if (spellInfo->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped) { Tapped = true; - PlayerGUID = caster->GetGUID(); + PlayerGUID = playerCaster->GetGUID(); me->SetFaction(FACTION_FLAYER_HUNTER); - DoCast(caster, SPELL_FORCE_OF_NELTHARAKU, true); + DoCast(playerCaster, SPELL_FORCE_OF_NELTHARAKU, true); Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 50); if (Dragonmaw) @@ -401,7 +402,7 @@ public: AttackStart(Dragonmaw); } - me->GetThreatManager().ClearThreat(caster); + me->GetThreatManager().ClearThreat(playerCaster); } } @@ -508,12 +509,12 @@ public: Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (!caster) return; - if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == 40468 && !Tapped) + if (caster->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == 40468 && !Tapped) { PlayerGUID = caster->GetGUID(); @@ -1664,9 +1665,9 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_WHISTLE) + if (spellInfo->Id == SPELL_WHISTLE) { if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f)) { diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index b7340c26e39..63aaf99b146 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -73,13 +73,13 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript } // Fly away when dismissed - void SpellHit(Unit* source, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive()) + if (spellInfo->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive()) return; Unit* owner = me->GetOwner(); - if (!owner || owner != source) + if (!owner || owner != caster) return; // Stop Fighting diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 93d23db7ca2..98396dfb923 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -383,9 +383,9 @@ class boss_lethon : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DRAW_SPIRIT && target->GetTypeId() == TYPEID_PLAYER) + if (spellInfo->Id == SPELL_DRAW_SPIRIT && target->GetTypeId() == TYPEID_PLAYER) { Position targetPos = target->GetPosition(); me->SummonCreature(NPC_SPIRIT_SHADE, targetPos, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 50000); diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index c3704d1aed9..c746b862908 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -818,10 +818,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { Player* player = caster->ToPlayer(); - if (!player || !me->IsAlive() || spell->Id != 20804) + if (!player || !me->IsAlive() || spellInfo->Id != 20804) return; if (player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) @@ -1024,9 +1024,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_LESSER_HEAL_R2 || spell->Id == SPELL_FORTITUDE_R1) + if (spellInfo->Id == SPELL_LESSER_HEAL_R2 || spellInfo->Id == SPELL_FORTITUDE_R1) { //not while in combat if (me->IsInCombat()) @@ -1040,16 +1040,16 @@ public: { if (quest && player->GetQuestStatus(quest) == QUEST_STATUS_INCOMPLETE) { - if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) + if (IsHealed && !CanRun && spellInfo->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster); + Talk(SAY_THANKS, player); CanRun = true; } - else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) + else if (!IsHealed && spellInfo->Id == SPELL_LESSER_HEAL_R2) { - CasterGUID = caster->GetGUID(); + CasterGUID = player->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster); + Talk(SAY_HEALED, player); IsHealed = true; } } |