diff options
| author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-06-07 11:22:13 +0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-06 20:46:25 +0100 |
| commit | 3171cd3fa9dbcec43f5d70b74ab2f54a2aa44173 (patch) | |
| tree | 838c54078c04b1fdae4ec1aac6fdc70ebdae45b2 | |
| parent | f0242d4ec7857a18145dd0a9965fcb8526e981c8 (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
(cherry picked from commit e3b232fe0e5c21a87d3fe71813e9d750259823f1)
111 files changed, 609 insertions, 517 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 8a28e192a65..7ba7d955bc4 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -97,12 +97,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 1b6c9cce090..53f2e71e2bf 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -134,12 +134,10 @@ class TC_GAME_API CreatureAI : public UnitAI virtual void JustUnregisteredAreaTrigger(AreaTrigger* /*areaTrigger*/) { } // 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 a26aa46f5bf..40cf810295e 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -615,24 +615,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) @@ -1102,9 +1092,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 bc112d8641f..9ecf7703def 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -99,12 +99,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; @@ -270,7 +268,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 4690176be01..4975457c2d6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2695,12 +2695,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); @@ -2744,19 +2739,14 @@ void Spell::GOTargetInfo::DoTargetSpellHit(Spell* spell, SpellEffectInfo const& spell->HandleEffects(nullptr, nullptr, go, spellEffectInfo, 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 2a164bd4899..943484303f3 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/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 ea01e96025c..1446559daa5 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->GetNativeDisplayId()); me->AddUnitFlag(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 112c81409c0..640c9302239 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -499,7 +499,7 @@ public: DrinkInturrupted = true; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) 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 (!spellInfo->HasEffect(SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) 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 7c6fb0e4689..29a879b49a3 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 2104ee537d9..d7747fa4676 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -217,13 +217,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]() { @@ -235,8 +239,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 6ad9f9d265c..9b9d5808e71 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -577,12 +577,12 @@ public: me->AddUnitFlag(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; } } @@ -758,9 +758,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 800d63776d3..2effc6e0da3 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -205,7 +205,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); @@ -327,17 +327,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->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); @@ -348,9 +352,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); }); } } @@ -609,10 +613,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 @@ -633,8 +641,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; @@ -652,8 +664,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) { @@ -830,9 +842,9 @@ struct npc_pulsing_pumpkin : public ScriptedAI me->AddUnitFlag(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 f6a17c53a2f..3f2c21135c6 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -181,10 +181,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*/) { @@ -400,7 +400,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 1e957500085..5c18c1e1c6c 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -249,9 +249,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 21824b23ced..c47024e7f7d 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->RemoveDynamicFlag(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->RemoveDynamicFlag(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 06daddd4086..22bbe3f3a16 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 b68a4e1b85e..d5d97000f8d 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -473,12 +473,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 d209fdac0bd..7bd73347679 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 4436e4a9b49..cd806150d53 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -128,7 +128,7 @@ class boss_archaedas : public CreatureScript me->SetControlled(false, UNIT_STATE_ROOT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Being woken up from the altar, start the awaken sequence if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) @@ -279,7 +279,7 @@ class npc_archaedas_minions : public CreatureScript bAmIAwake = true; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // time to wake up, start animation if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) diff --git a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp index 9b0d1220ebe..46e17f3fa06 100644 --- a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp +++ b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp @@ -57,7 +57,7 @@ public: _tapped = false; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (_tapped) return; @@ -151,7 +151,7 @@ public: me->SetHealth(me->CountPctFromMaxHealth(_percentHP)); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (!_hitBySpell) { 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 1fb6a1350d5..66916abf9fa 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 @@ -128,9 +128,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 171d9c885f1..ecae7ab189d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1408,9 +1408,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 10d3891e109..7ef04d01913 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/Firelands/boss_baleroc.cpp b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp index 484548f59f9..6c36ade96d9 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp @@ -291,9 +291,9 @@ struct npc_shard_of_torment : public NullCreatureAI }); } - void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_TORMENT) + if (spellInfo->Id != SPELL_TORMENT) return; scheduler.CancelAll(); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 073dfc27886..07ed8f3a359 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 2a714c2f029..46645487965 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -122,11 +122,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 155a1e22edd..23f21777528 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -164,13 +164,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 ac0f5471c22..a2d832bfb88 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 81dd54d7e8d..6f506da40d8 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -106,9 +106,9 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->SpellFamilyFlags[2] & 0x80000000 && !_tappedBySpell) + if (spellInfo->SpellFamilyFlags[2] & 0x80000000 && !_tappedBySpell) { _events.Reset(); _tappedBySpell = true; diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 9ae1fb8d987..7affabe89e3 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -73,14 +73,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); @@ -90,12 +94,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->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } } - else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) + else if (spellInfo->Id == SPELL_KODO_KOMBO_GOSSIP) { me->AddNpcFlag(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 de3c914722e..fa5565b194f 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -79,7 +79,7 @@ public: work = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_AWAKEN_PEON) return; diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index a97afda5025..f01a8443c5f 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -84,9 +84,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 60e3416fb01..ae2e44dc78f 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -187,9 +187,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 3b6c5828ac5..58b13ee4701 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -111,9 +111,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 7ecb762775e..64eec2981e0 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->AddUnitFlag(UnitFlags(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 6d2e270e819..5cbb464765d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -309,7 +309,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); @@ -494,9 +494,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 fcfaa3632d8..7aa07290872 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 b63f16cdb71..224ba8c25cf 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 @@ -221,9 +221,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 eaaf52bb5ce..d556818d1fb 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -126,7 +126,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 d79ef91a1d8..631d6f120c7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -544,9 +544,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 3b02a7274e4..303602c006f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -414,7 +414,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()) { @@ -422,7 +422,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); @@ -443,9 +443,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(); } @@ -715,9 +715,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]); @@ -922,9 +922,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]); @@ -1004,9 +1004,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 27cb145629d..4666aeba426 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -160,10 +160,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 3cb361ac63a..c25728b6bdf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -459,9 +459,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()); } @@ -628,9 +628,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); @@ -735,9 +735,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); @@ -828,9 +828,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 94717c7dbd2..9992a599a7b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -726,9 +726,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 == _hitTargetSpellId) + if (!_newTargetSelectTimer && spellInfo->Id == _hitTargetSpellId) { _newTargetSelectTimer = 1000; // go passive until next target selection @@ -745,9 +745,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 a0304bb468e..7dec66feb4b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -172,9 +172,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 8acc449bbe7..ff48f2635cc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -439,10 +439,14 @@ 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 { - if (spell->Id == 70127) - if (Aura const* mysticBuffet = target->GetAura(spell->Id)) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == 70127) + if (Aura const* mysticBuffet = unitTarget->GetAura(spellInfo->Id)) _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 21d447ccb28..766dbc50304 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp @@ -414,9 +414,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); @@ -436,17 +436,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); @@ -874,9 +878,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); @@ -901,7 +905,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 54d56a0b884..d7a8e89c0f2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -792,15 +792,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); @@ -1205,11 +1202,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 481cf48f034..4efcceff275 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -378,9 +378,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 b9024af2849..7f8fb391876 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -740,9 +740,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 19982f0e869..0f4532378c8 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 47287928c80..e44371b464c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -46,31 +46,25 @@ enum Spells /* baron */ SPELL_BARON_MARK = 28834, - SPELL_UNHOLY_SHADOW = 28882, /* thane */ SPELL_THANE_MARK = 28832, - SPELL_METEOR = 28884, /* lady */ - SPELL_SHADOW_BOLT = 57374, SPELL_LADY_MARK = 28833, - SPELL_VOID_ZONE = 28863, SPELL_UNYIELDING_PAIN = 57381, /* sir */ - SPELL_HOLY_BOLT = 57376, SPELL_SIR_MARK = 28835, - SPELL_HOLY_WRATH = 28883, SPELL_CONDEMNATION = 57377 }; -#define SPELL_HELPER_UNHOLY_SHADOW RAID_MODE<uint32>(28882, 57369) // Rivendare: Unholy Shadow -#define SPELL_HELPER_METEOR RAID_MODE<uint32>(28884, 57467) // Korth'azz: Meteor -#define SPELL_HELPER_SHADOW_BOLT RAID_MODE<uint32>(57374, 57464) // Blaumeux : Shadow Bolt -#define SPELL_HELPER_VOID_ZONE RAID_MODE<uint32>(28863, 57463) // Blaumeux : Void Zone -#define SPELL_HELPER_HOLY_BOLT RAID_MODE<uint32>(57376, 57465) // Zeliek : Holy Bolt -#define SPELL_HELPER_HOLY_WRATH RAID_MODE<uint32>(28883, 57466) // Zeliek: Holy Wrath +#define SPELL_UNHOLY_SHADOW RAID_MODE<uint32>(28882, 57369) // Rivendare: Unholy Shadow +#define SPELL_METEOR RAID_MODE<uint32>(28884, 57467) // Korth'azz: Meteor +#define SPELL_SHADOW_BOLT RAID_MODE<uint32>(57374, 57464) // Blaumeux : Shadow Bolt +#define SPELL_VOID_ZONE RAID_MODE<uint32>(28863, 57463) // Blaumeux : Void Zone +#define SPELL_HOLY_BOLT RAID_MODE<uint32>(57376, 57465) // Zeliek : Holy Bolt +#define SPELL_HOLY_WRATH RAID_MODE<uint32>(28883, 57466) // Zeliek: Holy Wrath enum Actions { @@ -439,7 +433,7 @@ class boss_four_horsemen_baron : public CreatureScript events.Repeat(Seconds(12)); break; case EVENT_UNHOLYSHADOW: - DoCastVictim(SPELL_HELPER_UNHOLY_SHADOW); + DoCastVictim(SPELL_UNHOLY_SHADOW); events.Repeat(randtime(Seconds(10), Seconds(30))); break; } @@ -450,9 +444,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_HELPER_UNHOLY_SHADOW) + if (spellInfo->Id == SPELL_UNHOLY_SHADOW) Talk(SAY_SPECIAL); } }; @@ -513,7 +507,7 @@ class boss_four_horsemen_thane : public CreatureScript case EVENT_METEOR: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true)) { - DoCast(target, SPELL_HELPER_METEOR); + DoCast(target, SPELL_METEOR); _shouldSay = true; } events.Repeat(randtime(Seconds(13), Seconds(17))); @@ -526,9 +520,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_HELPER_METEOR) + if (_shouldSay && spellInfo->Id == SPELL_METEOR) { Talk(SAY_SPECIAL); _shouldSay = false; @@ -588,7 +582,7 @@ class boss_four_horsemen_lady : public CreatureScript case EVENT_VOIDZONE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) { - DoCast(target, SPELL_HELPER_VOID_ZONE, true); + DoCast(target, SPELL_VOID_ZONE, true); Talk(SAY_SPECIAL); } events.Repeat(randtime(Seconds(12), Seconds(18))); @@ -600,7 +594,7 @@ class boss_four_horsemen_lady : public CreatureScript return; if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) - DoCast(target, SPELL_HELPER_SHADOW_BOLT); + DoCast(target, SPELL_SHADOW_BOLT); else { DoCastAOE(SPELL_UNYIELDING_PAIN); @@ -658,7 +652,7 @@ class boss_four_horsemen_sir : public CreatureScript case EVENT_HOLYWRATH: if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) { - DoCast(target, SPELL_HELPER_HOLY_WRATH, true); + DoCast(target, SPELL_HOLY_WRATH, true); _shouldSay = true; } events.Repeat(randtime(Seconds(10), Seconds(18))); @@ -670,7 +664,7 @@ class boss_four_horsemen_sir : public CreatureScript return; if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) - DoCast(target, SPELL_HELPER_HOLY_BOLT); + DoCast(target, SPELL_HOLY_BOLT); else { DoCastAOE(SPELL_CONDEMNATION); @@ -678,9 +672,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_HELPER_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 045f47bafcf..8d3186510a8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -909,12 +909,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 ea123ca992d..85e9fc14c98 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -65,9 +65,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 f568aa836b7..8e8b8c03585 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -279,9 +279,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 229d08ff336..75c8d5bad47 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 15172e682b8..ba7367b9488 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_MASK_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 19a71ccf656..53483222e0a 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 c7933fc602c..3cba17226ce 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -627,16 +627,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); } @@ -1028,9 +1028,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))) { @@ -1479,12 +1479,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 558c878990d..7c85a112068 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -296,7 +296,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 42b0047a12d..773132afba2 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 adc76ed213b..1f8c4996076 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -265,10 +265,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 b1535ef9e99..94f25c86336 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 de429ffedf2..8e69dbd9256 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -52,9 +52,10 @@ enum Spells // Molten Golem SPELL_BLAST_WAVE = 23113, SPELL_IMMOLATION_STRIKE = 52433, - SPELL_SHATTER = 52429, }; +#define SPELL_SHATTER DUNGEON_MODE<uint32>(52429,59527) + enum Events { EVENT_PAUSE = 1, @@ -440,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 == SPELL_SHATTER) + if (spellInfo->Id == SPELL_SHATTER) 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 2d3972208c3..b2d101565ca 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->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, 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 b6654134c07..4066be2f034 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -333,16 +333,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; } @@ -478,15 +478,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)) { @@ -908,9 +912,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 cbbf40cb14f..e71c0efacbd 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 ee6ce37bbcd..d085f830a42 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 ab19d140553..8c98934e08d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -969,9 +969,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 687cfb9dd67..4f79b562e3f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1036,10 +1036,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 79f3731eb5e..4de47589379 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -496,9 +496,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)) @@ -1450,9 +1450,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 ec831bfcd17..1c82686cb32 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -524,7 +524,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) { @@ -537,9 +537,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; } @@ -1576,7 +1576,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 20ef0952791..752bb7f4262 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -736,12 +736,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); @@ -947,10 +947,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 32af5e07c00..aaa13484d75 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -446,9 +446,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 363ab89f5ed..2157779fd25 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 384a26f8a91..c883d735d22 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 4e06922cf2e..ef419123100 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->RemoveUnitFlag(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 d776e0a5245..4925c379d97 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 4190f6685c5..991c63a7754 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1313,18 +1313,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; } @@ -1418,10 +1421,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 6ea26a2ce8e..3f17d2b3bc5 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -538,9 +538,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()); @@ -624,9 +624,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 f85844228ca..27e825d885a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -298,13 +298,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); @@ -495,13 +499,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 @@ -616,9 +623,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->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToPC(true); @@ -908,7 +915,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 d0702789a66..e0df74454f9 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; @@ -574,16 +574,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 e5ec9d5a6ad..19f12b9100c 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -226,15 +226,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; } @@ -751,7 +755,7 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (!_playerGuid.IsEmpty() || 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 7bc4aac1b53..a9a5d83a362 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 8e11c9eb1a0..5c35dbf8de2 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->SetEmoteState(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 ffa022b73d8..4bf3c1bd840 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -92,9 +92,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 7f1672fe609..4480183ee7b 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 b268366da4c..cde14374090 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp @@ -514,7 +514,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 e8c4b6ab210..62340af1e3c 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) { @@ -146,7 +146,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 ebe371fff15..2bec89430ca 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 bd34e9d25ad..11e56ac9d91 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 b1507498aee..b5e3ff5239e 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -357,9 +357,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->RemoveUnitFlag(UnitFlags(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 e237e08e2b2..05bea7679df 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -124,9 +124,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); @@ -151,7 +155,7 @@ public: IsNihil = true; } else - AttackStart(caster); + AttackStart(playerCaster); } } } @@ -841,15 +845,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 b7c13cad870..d15d8884707 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 1610d1063fc..a71daccef04 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->RemoveUnitFlag(UnitFlags(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 547b97df956..eaa850a1671 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -72,13 +72,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 3d756b2a352..05118162c85 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -382,9 +382,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 ebb22ca63d9..ea3a204d301 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -814,10 +814,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) @@ -1020,9 +1020,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()) @@ -1036,16 +1036,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; } } |
