diff options
| author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-06-07 11:22:13 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-07 10:22:13 +0200 | 
| commit | e3b232fe0e5c21a87d3fe71813e9d750259823f1 (patch) | |
| tree | 58f7306a85e196080ec33a9aa97ba755af955618 | |
| parent | 1181b636c0cec174367906808c999641ca7897fc (diff) | |
Core/AI: refactor SpellHit and SpellHitTarget. (#24691)
* Core/AI: refactor SpellHit and SpellHitTarget.
- now caster/target is WorldObject instead of Unit
- remove SpellHitByGameObject / SpellHitTargetGameObject (handled by SpellHit / SpellHitTarget)
- rename parameters in scripts according parent methods
* Restore logic in Algalon script
* Changed check for REMORSELESS_WINTER hit to avoid dublicate call, because it has TARGET_UNIT_CASTER for effects 0/1 and TARGET_GAMEOBJECT_SRC_AREA for effect 2
* Fix build after merge
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;                          }                      }  | 
