From c6711adf8bee68589c2faa264b7d2df647aca400 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Thu, 22 Sep 2022 10:33:13 +0200 Subject: [PATCH] Core/AI: ported SpellHit and SpellHitTarget refactor from 335 branch --- src/server/game/AI/CoreAI/GameObjectAI.h | 6 +- src/server/game/AI/CreatureAI.h | 6 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 12 +-- src/server/game/AI/SmartScripts/SmartAI.h | 9 +- src/server/game/Spells/Spell.cpp | 18 +--- .../BaradinHold/boss_alizabal.cpp | 2 +- .../BaradinHold/boss_pit_lord_argaloth.cpp | 2 +- .../boss_ascendant_council.cpp | 34 ++++--- .../BastionOfTwilight/boss_chogall.cpp | 4 +- .../boss_halfus_wyrmbreaker.cpp | 4 +- .../boss_theralion_and_valiona.cpp | 14 +-- .../BlackrockCaverns/blackrock_caverns.cpp | 2 +- .../boss_pyroguard_emberseer.cpp | 2 +- .../BlackwingDescent/blackwing_descent.cpp | 2 +- .../BlackwingDescent/boss_magmaw.cpp | 2 +- .../BlackwingDescent/boss_nefarians_end.cpp | 2 +- .../boss_omnotron_defense_system.cpp | 16 ++-- .../Deadmines/boss_admiral_ripsnarl.cpp | 2 +- .../Deadmines/boss_foe_reaper_5000.cpp | 2 +- .../Deadmines/boss_helix_gearbreaker.cpp | 6 +- .../Gilneas/gilneas_chapter_1.cpp | 2 +- .../Gilneas/gilneas_chapter_2.cpp | 20 ++-- .../GrimBatol/boss_general_umbriss.cpp | 4 +- .../EasternKingdoms/GrimBatol/grim_batol.cpp | 2 +- .../Karazhan/boss_midnight.cpp | 2 +- .../Karazhan/boss_prince_malchezaar.cpp | 2 +- .../Karazhan/boss_shade_of_aran.cpp | 2 +- .../Karazhan/boss_terestian_illhoof.cpp | 2 +- .../EasternKingdoms/Karazhan/bosses_opera.cpp | 4 +- .../boss_felblood_kaelthas.cpp | 18 ++-- .../the_scarlet_enclave_chapter_1.cpp | 18 ++-- .../boss_headless_horseman.cpp | 31 ++++--- .../EasternKingdoms/Stratholme/stratholme.cpp | 4 +- .../SunwellPlateau/boss_eredar_twins.cpp | 91 +++++++++++++------ .../SunwellPlateau/boss_felmyst.cpp | 15 ++- .../SunwellPlateau/boss_kalecgos.cpp | 7 +- .../SunwellPlateau/boss_muru.cpp | 2 +- .../boss_commander_ulthok.cpp | 2 +- .../ThroneOfTheTides/boss_ozumat.cpp | 9 +- .../ThroneOfTheTides/throne_of_the_tides.cpp | 2 +- .../Uldaman/boss_archaedas.cpp | 4 +- .../ZulGurub/boss_bloodlord_mandokir.cpp | 2 +- .../EasternKingdoms/ZulGurub/boss_zanzil.cpp | 8 +- .../EasternKingdoms/ZulGurub/zulgurub.cpp | 13 ++- .../zone_dun_morogh_area_coldridge_valley.cpp | 4 +- .../EasternKingdoms/zone_elwynn_forest.cpp | 2 +- .../zone_hillsbrad_foothills.cpp | 10 +- .../boss_chrono_lord_epoch.cpp | 2 +- .../boss_infinite_corruptor.cpp | 2 +- .../culling_of_stratholme.cpp | 2 +- .../TheBlackMorass/the_black_morass.cpp | 2 +- .../Kalimdor/Firelands/boss_baleroc.cpp | 2 +- .../boss_earthrager_ptah.cpp | 2 +- .../Kalimdor/HallsOfOrigination/boss_rajh.cpp | 2 +- .../HallsOfOrigination/boss_setesh.cpp | 8 +- .../Kalimdor/OnyxiasLair/boss_onyxia.cpp | 4 +- .../RuinsOfAhnQiraj/boss_ossirian.cpp | 6 +- .../TempleOfAhnQiraj/boss_twinemperors.cpp | 2 +- .../TempleOfAhnQiraj/boss_viscidus.cpp | 2 +- .../ThroneOfTheFourWinds/boss_alakir.cpp | 2 +- .../boss_conclave_of_wind.cpp | 18 ++-- .../VortexPinnacle/vortex_pinnacle.cpp | 2 +- .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 4 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 11 ++- .../scripts/Kalimdor/zone_moonglade.cpp | 2 +- .../scripts/Kalimdor/zone_mount_hyjal.cpp | 4 +- src/server/scripts/Kalimdor/zone_mulgore.cpp | 2 +- .../scripts/Kalimdor/zone_the_barrens.cpp | 2 +- src/server/scripts/Kalimdor/zone_uldum.cpp | 16 ++-- .../Maelstrom/Stonecore/boss_corborus.cpp | 2 +- .../Ahnkahet/boss_herald_volazj.cpp | 2 +- .../AzjolNerub/AzjolNerub/boss_anubarak.cpp | 2 +- .../boss_krikthir_the_gatewatcher.cpp | 12 +-- .../RubySanctum/boss_halion.cpp | 4 +- .../boss_northrend_beasts.cpp | 2 +- .../ForgeOfSouls/boss_devourer_of_souls.cpp | 2 +- .../PitOfSaron/boss_forgemaster_garfrost.cpp | 6 +- .../Gundrak/boss_drakkari_colossus.cpp | 2 +- .../Northrend/Gundrak/boss_gal_darah.cpp | 2 +- .../Northrend/Gundrak/boss_moorabi.cpp | 2 +- .../boss_blood_prince_council.cpp | 2 +- .../boss_deathbringer_saurfang.cpp | 10 +- .../IcecrownCitadel/boss_festergut.cpp | 6 +- .../boss_lady_deathwhisper.cpp | 8 +- .../boss_professor_putricide.cpp | 4 +- .../IcecrownCitadel/boss_rotface.cpp | 2 +- .../IcecrownCitadel/boss_sindragosa.cpp | 6 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 6 +- .../boss_valithria_dreamwalker.cpp | 2 +- .../IcecrownCitadel/icecrown_citadel.cpp | 9 +- .../boss_ioc_horde_alliance.cpp | 7 +- .../Northrend/Naxxramas/boss_faerlina.cpp | 6 +- .../Naxxramas/boss_four_horsemen.cpp | 6 +- .../Northrend/Naxxramas/boss_gothik.cpp | 2 +- .../Northrend/Naxxramas/boss_grobbulus.cpp | 2 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Northrend/Naxxramas/boss_razuvious.cpp | 2 +- .../Northrend/Naxxramas/boss_sapphiron.cpp | 4 +- .../Northrend/Naxxramas/boss_thaddius.cpp | 36 ++++---- .../Nexus/EyeOfEternity/boss_malygos.cpp | 6 +- .../Northrend/Nexus/Oculus/boss_urom.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_varos.cpp | 2 +- .../scripts/Northrend/Nexus/Oculus/oculus.cpp | 2 +- .../Ulduar/HallsOfLightning/boss_ionar.cpp | 2 +- .../Ulduar/HallsOfLightning/boss_volkhan.cpp | 2 +- .../Ulduar/boss_algalon_the_observer.cpp | 2 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 18 ++-- .../Northrend/Ulduar/Ulduar/boss_freya.cpp | 8 +- .../Ulduar/Ulduar/boss_general_vezax.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_hodir.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 6 +- .../Ulduar/Ulduar/boss_razorscale.cpp | 4 +- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 6 +- .../Ulduar/Ulduar/boss_yogg_saron.cpp | 4 +- .../UtgardePinnacle/boss_skadi.cpp | 2 +- .../UtgardePinnacle/boss_svala.cpp | 2 +- .../UtgardePinnacle/boss_ymiron.cpp | 2 +- .../Northrend/VioletHold/boss_ichoron.cpp | 7 +- .../Northrend/VioletHold/boss_xevozz.cpp | 2 +- .../scripts/Northrend/zone_borean_tundra.cpp | 6 +- .../scripts/Northrend/zone_dragonblight.cpp | 4 +- .../scripts/Northrend/zone_grizzly_hills.cpp | 16 ++-- .../scripts/Northrend/zone_icecrown.cpp | 15 +-- .../scripts/Northrend/zone_sholazar_basin.cpp | 10 +- .../scripts/Northrend/zone_storm_peaks.cpp | 8 +- src/server/scripts/Northrend/zone_zuldrak.cpp | 20 ++-- .../BlackTemple/boss_shade_of_akama.cpp | 4 +- .../BlackTemple/boss_warlord_najentus.cpp | 2 +- .../SteamVault/boss_warlord_kalithresh.cpp | 2 +- .../TheSlavePens/boss_ahune.cpp | 2 +- .../scripts/Outland/GruulsLair/boss_gruul.cpp | 2 +- .../boss_vazruden_the_herald.cpp | 2 +- .../MagtheridonsLair/boss_magtheridon.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_alar.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 15 +-- src/server/scripts/Outland/zone_nagrand.cpp | 4 +- .../Outland/zone_shadowmoon_valley.cpp | 16 ++-- src/server/scripts/Pet/pet_dk.cpp | 2 +- src/server/scripts/Pet/pet_mage.cpp | 14 +-- src/server/scripts/World/npcs_special.cpp | 10 +- 141 files changed, 507 insertions(+), 424 deletions(-) diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index df95e1173e..23d17af112 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -88,12 +88,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 SpellHit(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 SpellHitTarget(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* /*spellInfo*/) { } }; class TC_GAME_API NullGameObjectAI : public GameObjectAI diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 432c3a4e41..4c8b1c72d5 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -142,12 +142,10 @@ class TC_GAME_API CreatureAI : public UnitAI virtual void JustUnregisteredDynObject(DynamicObject* /*dynObject*/) { } // Called when hit by a spell - virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spellInfo*/) { } - virtual void SpellHit(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 SpellHitTarget(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { } + virtual void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* /*spellInfo*/) { } // Should return true if the NPC is currently being escorted virtual bool IsEscorted() const { return false; } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index e59b127b59..f3c007cd0e 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -661,14 +661,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); } -void SmartAI::SpellHitTarget(Unit* target, SpellInfo const* spellInfo) +void SmartAI::SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) { - GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT_TARGET, target, 0, 0, false, spellInfo); + GetScript()->ProcessEventsFor(SMART_EVENT_SPELLHIT_TARGET, target->ToUnit(), 0, 0, false, spellInfo); } void SmartAI::DamageTaken(Unit* doneBy, uint32& damage) @@ -1077,9 +1077,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); } class SmartTrigger : public AreaTriggerScript diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 9e0584f9ac..37bbb51a0a 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -104,10 +104,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 SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override; // Called when spell hits a target - void SpellHitTarget(Unit* target, 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; @@ -268,7 +268,10 @@ 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; + void SetGossipReturn(bool val) { _gossipReturn = val; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index a7c8058425..e5fce94b20 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2768,15 +2768,8 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell) { //AI functions if (_spellHitTarget->GetTypeId() == TYPEID_UNIT) - { if (_spellHitTarget->ToCreature()->IsAIEnabled()) - { - if (spell->m_caster->GetTypeId() == TYPEID_GAMEOBJECT) - _spellHitTarget->ToCreature()->AI()->SpellHit(spell->m_caster->ToGameObject(), spell->m_spellInfo); - else - _spellHitTarget->ToCreature()->AI()->SpellHit(spell->m_caster->ToUnit(), spell->m_spellInfo); - } - } + _spellHitTarget->ToCreature()->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()->SpellHitTarget(_spellHitTarget, spell->m_spellInfo); @@ -2820,14 +2813,9 @@ void Spell::GOTargetInfo::DoTargetSpellHit(Spell* spell, uint8 effIndex) spell->HandleEffects(nullptr, nullptr, go, nullptr, effIndex, SPELL_EFFECT_HANDLE_HIT_TARGET); - //AI functions + // AI functions if (go->AI()) - { - if (spell->m_caster->GetTypeId() == TYPEID_GAMEOBJECT) - go->AI()->SpellHit(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()->SpellHitTarget(go, spell->m_spellInfo); diff --git a/src/server/scripts/EasternKingdoms/BaradinHold/boss_alizabal.cpp b/src/server/scripts/EasternKingdoms/BaradinHold/boss_alizabal.cpp index aca7da9bc2..d923da13d5 100644 --- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_alizabal.cpp +++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_alizabal.cpp @@ -121,7 +121,7 @@ struct boss_alizabal : public BossAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_SEETHING_HATE_TARGETING) Talk(SAY_SEETHING_HATE, target); diff --git a/src/server/scripts/EasternKingdoms/BaradinHold/boss_pit_lord_argaloth.cpp b/src/server/scripts/EasternKingdoms/BaradinHold/boss_pit_lord_argaloth.cpp index b9a791b891..af2b8a0042 100644 --- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_pit_lord_argaloth.cpp +++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_pit_lord_argaloth.cpp @@ -104,7 +104,7 @@ struct boss_pit_lord_argaloth : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_FEL_FIRESTORM) { diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp index 8b9ed9405f..a9bbcd50d7 100644 --- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp +++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp @@ -743,7 +743,7 @@ struct npc_ignacious final : public ScriptedAI damage = me->GetHealth() - 1; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_AEGIS_OF_FLAME) Talk(SAY_ABILITY); @@ -1329,14 +1329,18 @@ struct npc_elementium_monstrosity final : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + Creature* creatureTarget = target->ToCreature(); + if (!creatureTarget) + return; + if (spell->Id == SPELL_MERGE_HEALTH) { - _mergedHealth += target->GetHealth(); + _mergedHealth += creatureTarget->GetHealth(); _mergedTargets++; - if (Creature* creature = target->ToCreature()) + if (Creature* creature = creatureTarget->ToCreature()) creature->DespawnOrUnsummon(); if (_mergedTargets == 4) @@ -1404,7 +1408,7 @@ struct npc_ascendant_council_violent_cyclone final : public ScriptedAI _events.ScheduleEvent(EVENT_CYCLONE_AGGRO, 2s + 300ms); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { // According to sniffs the cyclone uses the positions of the Ascendant Council Target Stalkers // as potential waypoints so he stays within a certain area rather than moving arround the room @@ -1527,7 +1531,7 @@ struct npc_ascendant_council_plume_stalker final : public NullCreatureAI { npc_ascendant_council_plume_stalker(Creature* creature) : NullCreatureAI(creature) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LAVA_SEED_DUMMY) { @@ -1625,7 +1629,7 @@ struct npc_ascendant_council_frozen_orb final : public ScriptedAI feludius->AI()->JustSummoned(me); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch (spell->Id) { @@ -1691,7 +1695,7 @@ struct npc_ascendant_council_flame_strike final : public ScriptedAI summoner->CastSpell(me, SPELL_FLAME_STRIKE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_FLAME_STRIKE) { @@ -1700,13 +1704,17 @@ struct npc_ascendant_council_flame_strike final : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* /*spell*/) override + void SpellHitTarget(WorldObject* target, SpellInfo const* /*spell*/) override { - if (target->GetEntry() == NPC_FROZEN_ORB) + Creature* creatureTarget = target->ToCreature(); + if (!creatureTarget) + return; + + if (creatureTarget->GetEntry() == NPC_FROZEN_ORB) { - target->GetMotionMaster()->Clear(); - target->RemoveAllAuras(); - target->ToCreature()->DespawnOrUnsummon(2s + 300ms); + creatureTarget->GetMotionMaster()->Clear(); + creatureTarget->RemoveAllAuras(); + creatureTarget->DespawnOrUnsummon(2s + 300ms); me->RemoveAllAuras(); me->DespawnOrUnsummon(2s + 300ms); } diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp index b28763e644..e19b330b2d 100644 --- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp +++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp @@ -350,7 +350,7 @@ struct boss_chogall final : public BossAI Talk(SAY_DEATH_NORMAL); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -592,7 +592,7 @@ struct npc_chogall_corrupting_adherent final : public ScriptedAI } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_CONSUME_BLOOD_OF_THE_OLD_GODS) { diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp index cd3d30e53a..1585b6ccd2 100644 --- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp +++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp @@ -217,7 +217,7 @@ struct boss_halfus_wyrmbreaker final : public BossAI _DespawnAtEvade(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (!caster) return; @@ -439,7 +439,7 @@ struct npc_halfus_enslaved_dragon final : public ScriptedAI protoBehemoth->AI()->DoAction(ACTION_CAST_DRAGONS_VENGEANCE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->HasEffect(SPELL_EFFECT_SEND_EVENT)) { diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp index 4c1dc3e896..9f141e8d43 100644 --- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp +++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp @@ -277,15 +277,15 @@ struct boss_theralion final : public BossAI _DespawnAtEvade(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; switch (spell->Id) { case SPELL_SHARE_HEALTH_2: - if (!caster->HasAura(SPELL_SHARE_HEALTH_1)) + if (!caster->ToUnit()->HasAura(SPELL_SHARE_HEALTH_1)) DoCastAOE(SPELL_SHARE_HEALTH_1, true); break; case SPELL_TRIGGER_ACTION_THERALION: @@ -517,15 +517,15 @@ struct boss_valiona final : public BossAI _DespawnAtEvade(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; switch (spell->Id) { case SPELL_SHARE_HEALTH_1: - if (!caster->HasAura(SPELL_SHARE_HEALTH_2)) + if (!caster->ToUnit()->HasAura(SPELL_SHARE_HEALTH_2)) DoCastAOE(SPELL_SHARE_HEALTH_2, true); break; case SPELL_TRIGGER_ACTION_VALIONA: @@ -771,7 +771,7 @@ struct npc_theralion_and_valiona_unstable_twilight final : public ScriptedAI _events.ScheduleEvent(EVENT_MOVE_RANDOM, 1ms, 1s); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp index 20a7a71fec..9c798c07a8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp @@ -631,7 +631,7 @@ struct npc_raz_the_crazed : public EscortAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_STOP_HEART) _events.ScheduleEvent(EVENT_KILL_RAZ, 4s); 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 47fe9907c6..55df654130 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -143,7 +143,7 @@ public: instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ENCAGE_EMBERSEER) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.cpp index 73bfaf3639..1826f68542 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.cpp @@ -399,7 +399,7 @@ struct npc_bwd_dwarven_spirit : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { uint32 triggeredEventId = 0; switch (spell->Id) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp index 0da52a13b3..1507aedae6 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp @@ -694,7 +694,7 @@ struct npc_magmaw_lava_parasite : public ScriptedAI me->DespawnOrUnsummon(2s + 500ms); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LAVA_PARASITE_RIDE_VEHICLE) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp index f4d0a848af..c3c56b5517 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp @@ -1313,7 +1313,7 @@ struct npc_nefarians_end_shadowblaze : public NullCreatureAI nefarian->AI()->JustSummoned(me); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp index e00e95e254..00c233d777 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp @@ -481,7 +481,7 @@ struct npc_omnotron_electron : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ACTIVATED) { @@ -491,7 +491,7 @@ struct npc_omnotron_electron : public ScriptedAI } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LIGHTNING_CONDUCTOR) if (IsHeroic()) @@ -624,7 +624,7 @@ struct npc_omnotron_magmatron : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ACTIVATED) { @@ -634,7 +634,7 @@ struct npc_omnotron_magmatron : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_ACQUIRING_TARGET && target) { @@ -767,7 +767,7 @@ struct npc_omnotron_toxitron : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ACTIVATED) { @@ -901,7 +901,7 @@ struct npc_omnotron_arcanotron : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ACTIVATED) { @@ -917,7 +917,7 @@ struct npc_omnotron_arcanotron : public ScriptedAI me->MakeInterruptable(false); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ARCANE_ANNIHILATION) if (!_instance->instance->GetWorldStateValue(WORLD_STATE_ID_ARCANE_ANNIHILATOR)) @@ -1145,7 +1145,7 @@ struct npc_omnotron_poison_bomb : public ScriptedAI me->DespawnOrUnsummon(2s + 500ms); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_QUIETE_SUICIDE) { diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_admiral_ripsnarl.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_admiral_ripsnarl.cpp index 894eef6e49..7f30567cc7 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_admiral_ripsnarl.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_admiral_ripsnarl.cpp @@ -313,7 +313,7 @@ class npc_ripsnarl_vapor : public CreatureScript me->DespawnOrUnsummon(Seconds(5)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_VAPOR_ANIMUS) DoCastAOE(SPELL_COALESCE, true); diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp index 2ccca734d5..8e86f98cea 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_foe_reaper_5000.cpp @@ -226,7 +226,7 @@ class boss_foe_reaper_5000 : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_helix_gearbreaker.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_helix_gearbreaker.cpp index ffeb5d5127..3fb0fa528d 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_helix_gearbreaker.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_helix_gearbreaker.cpp @@ -258,10 +258,10 @@ struct boss_helix_gearbreaker : public BossAI damage = me->GetHealth() - 1; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_RIDE_VEHICLE) - AttackStart(target); + if (spell->Id == SPELL_RIDE_VEHICLE && target->IsUnit()) + AttackStart(target->ToUnit()); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_1.cpp b/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_1.cpp index 7171dc7386..217497bd09 100644 --- a/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_1.cpp +++ b/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_1.cpp @@ -620,7 +620,7 @@ struct npc_gilnean_crow : public PassiveAI { npc_gilnean_crow(Creature* creature) : PassiveAI(creature) { } - void SpellHit(GameObject* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GILNEAN_CROW) _events.ScheduleEvent(EVENT_APPLY_HOVER_BYTES, 500ms); diff --git a/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_2.cpp b/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_2.cpp index af53bf402c..d6c0731739 100644 --- a/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_2.cpp +++ b/src/server/scripts/EasternKingdoms/Gilneas/gilneas_chapter_2.cpp @@ -87,7 +87,7 @@ struct npc_gilneas_horrid_abomination : public ScriptedAI me->GetMotionMaster()->MoveRandom(6.0f); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { switch (spell->Id) { @@ -244,7 +244,7 @@ struct npc_gilneas_save_the_children : public ScriptedAI _events.ScheduleEvent(EVENT_CRY, Seconds(1)); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { switch (spell->Id) { @@ -392,7 +392,7 @@ struct npc_gilneas_forsaken_catapult : public VehicleAI _events.ScheduleEvent(EVENT_CHECK_AREA, Milliseconds(1)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -409,17 +409,21 @@ struct npc_gilneas_forsaken_catapult : public VehicleAI _targetPos = pos; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + switch (spell->Id) { case SPELL_LAUNCH: - if (target->GetVehicleCreatureBase()) + if (unitTarget->GetVehicleCreatureBase()) { - Position pos = target->GetPosition(); + Position pos = unitTarget->GetPosition(); pos.m_positionZ += 6.0f; - target->ExitVehicle(&pos); - target->GetMotionMaster()->MoveJump(_targetPos, 58.62504f, 12.75955f); + unitTarget->ExitVehicle(&pos); + unitTarget->GetMotionMaster()->MoveJump(_targetPos, 58.62504f, 12.75955f); } break; default: diff --git a/src/server/scripts/EasternKingdoms/GrimBatol/boss_general_umbriss.cpp b/src/server/scripts/EasternKingdoms/GrimBatol/boss_general_umbriss.cpp index cc5aee766a..20e8145bae 100644 --- a/src/server/scripts/EasternKingdoms/GrimBatol/boss_general_umbriss.cpp +++ b/src/server/scripts/EasternKingdoms/GrimBatol/boss_general_umbriss.cpp @@ -175,7 +175,7 @@ struct boss_general_umbriss : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_FRENZY) Talk(SAY_ANNOUNCE_FRENZY); @@ -244,7 +244,7 @@ struct npc_umbriss_skardyn : public ScriptedAI _events.ScheduleEvent(EVENT_ATTACK_PLAYER, Milliseconds(1)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_MODGUDS_MALICE || spell->Id == SPELL_MODGUDS_MALICE_HC) _infected = true; diff --git a/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp index 27d06283a1..aa6432e2c5 100644 --- a/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp +++ b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp @@ -68,7 +68,7 @@ struct npc_grim_batol_twilight_beguiler : public ScriptedAI me->InterruptNonMeleeSpells(true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRONN_KNOCKBACK_COSMETIC) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index b5182ae0e4..d9cc4b25db 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -222,7 +222,7 @@ public: std::bind(&BossAI::DoMeleeAttackIfReady, this)); } - void SpellHit(Unit* /*source*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*source*/, SpellInfo const* spell) override { if (spell->Mechanic == MECHANIC_DISARM) Talk(SAY_DISARMED); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 25dcfe447e..a4ee76ddb7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -149,7 +149,7 @@ public: creature->AI()->KilledUnit(who); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*who*/, SpellInfo const* spell) override { if (spell->Id == SPELL_INFERNAL_RELAY) { 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 626c3e9f91..81d16b0a5b 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -473,7 +473,7 @@ public: DrinkInturrupted = true; } - void SpellHit(Unit* /*pAttacker*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*pAttacker*/, SpellInfo const* Spell) override { //We only care about interrupt effects and only if they are durring a spell currently being cast if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 30c90fa894..4c69217676 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -92,7 +92,7 @@ public: Talk(SAY_AGGRO); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_BROKEN_PACT) events.ScheduleEvent(EVENT_SUMMON_KILREK, Seconds(32)); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index bd7b5c7117..bb63899744 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -367,7 +367,7 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* Spell) override { if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10))) { @@ -1132,7 +1132,7 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* Spell) override { if (Spell->Id == SPELL_DRINK_POISON) { diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 49a837fe12..d65db685e1 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -218,26 +218,30 @@ struct boss_felblood_kaelthas : public BossAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + switch (spell->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]() + unitTarget->m_Events.AddEventAtOffset([unitTarget, gravityLapseDamageSpell]() { - target->CastSpell(target, gravityLapseDamageSpell); - target->CastSpell(target, SPELL_GRAVITY_LAPSE_FLY); + unitTarget->CastSpell(unitTarget, gravityLapseDamageSpell); + unitTarget->CastSpell(unitTarget, SPELL_GRAVITY_LAPSE_FLY); }, 400ms); _gravityLapseTargetCount++; 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/the_scarlet_enclave_chapter_1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave_chapter_1.cpp index a48ae985f0..9a9192c46a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave_chapter_1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave_chapter_1.cpp @@ -537,7 +537,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SWIMMING); } - void SpellHit(Unit* pCaster, SpellInfo const* pSpell) override + void SpellHit(WorldObject* pCaster, SpellInfo const* pSpell) override { if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL) { @@ -795,22 +795,24 @@ public: return false; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_DELIVER_STOLEN_HORSE) { - if (caster->GetTypeId() == TYPEID_UNIT && caster->IsVehicle()) + if (caster->GetTypeId() == TYPEID_UNIT && caster->ToCreature()->IsVehicle()) { - if (Unit* charmer = caster->GetCharmer()) + Creature* creatureCaster = caster->ToCreature(); + + if (Unit* charmer = creatureCaster->GetCharmer()) { if (charmer->HasAura(SPELL_EFFECT_STOLEN_HORSE)) { charmer->RemoveAurasDueToSpell(SPELL_EFFECT_STOLEN_HORSE); - caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - caster->SetFaction(FACTION_FRIENDLY); - DoCast(caster, SPELL_CALL_DARK_RIDER, true); + creatureCaster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + creatureCaster->SetFaction(FACTION_FRIENDLY); + DoCast(creatureCaster, SPELL_CALL_DARK_RIDER, true); if (Creature* Dark_Rider = me->FindNearestCreature(NPC_DARK_RIDER_OF_ACHERUS, 15)) - ENSURE_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster); + ENSURE_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(creatureCaster); } } } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index f19f7eacd3..1f95645330 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -183,7 +183,7 @@ public: DoCast(me, _spell); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_WISP_FLIGHT_PORT && Creaturetype == 4) me->SetDisplayId(2027); @@ -298,9 +298,9 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!withbody) + if (!withbody || !caster->IsUnit()) return; if (spell->Id == SPELL_FLYING_HEAD) @@ -319,7 +319,7 @@ public: DoCast(me, SPELL_HEAD, false); SaySound(SAY_LOST_HEAD); me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFleeing(caster->GetVictim()); + me->GetMotionMaster()->MoveFleeing(caster->ToUnit()->GetVictim()); } } @@ -528,7 +528,7 @@ public: } } - void SaySound(uint8 textEntry, Unit* target = 0) + void SaySound(uint8 textEntry, WorldObject* target = 0) { Talk(textEntry, target); laugh += 4000; @@ -555,10 +555,13 @@ public: return nullptr; } - void SpellHitTarget(Unit* unit, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_CONFLAGRATION && unit->HasAura(SPELL_CONFLAGRATION)) - SaySound(SAY_CONFLAGRATION, unit); + if (!target->IsUnit()) + return; + + if (spell->Id == SPELL_CONFLAGRATION && target->ToUnit()->HasAura(SPELL_CONFLAGRATION)) + SaySound(SAY_CONFLAGRATION, target); } void JustDied(Unit* /*killer*/) override @@ -581,8 +584,11 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster->IsCreature()) + return; + if (withhead) return; @@ -598,8 +604,9 @@ public: me->SetFullHealth(); SaySound(SAY_REJOINED); DoCast(me, SPELL_HEAD); - caster->GetMotionMaster()->Clear(false); - caster->GetMotionMaster()->MoveFollow(me, 6, float(urand(0, 5))); + + caster->ToCreature()->GetMotionMaster()->Clear(false); + caster->ToCreature()->GetMotionMaster()->MoveFollow(me, 6, float(urand(0, 5))); } } @@ -812,7 +819,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SPROUTING) { diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index d0b2365a30..e19d756215 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -148,7 +148,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (Tagged || spell->Id != SPELL_EGAN_BLASTER) return; @@ -239,7 +239,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (!Tagged && spell->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 50facc4b30..5e9b2de338 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -162,7 +162,7 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch (spell->Id) { @@ -178,30 +178,43 @@ public: } } - void HandleTouchedSpells(Unit* target, uint32 TouchedType) + void HandleTouchedSpells(WorldObject* target, uint32 TouchedType) { + if (!target->IsUnit()) + return; + switch (TouchedType) { case SPELL_FLAME_TOUCHED: - if (!target->HasAura(SPELL_DARK_FLAME)) + { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget->HasAura(SPELL_DARK_FLAME)) { - if (target->HasAura(SPELL_DARK_TOUCHED)) + if (unitTarget->HasAura(SPELL_DARK_TOUCHED)) { - target->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); - target->CastSpell(target, SPELL_DARK_FLAME, true); - } else target->CastSpell(target, SPELL_FLAME_TOUCHED, true); + unitTarget->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); + unitTarget->CastSpell(unitTarget, SPELL_DARK_FLAME, true); + } + else unitTarget->CastSpell(unitTarget, SPELL_FLAME_TOUCHED, true); } break; + } case SPELL_DARK_TOUCHED: - if (!target->HasAura(SPELL_DARK_FLAME)) + { + Unit* unitTarget = target->ToUnit(); + 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; + } + default: + break; } } @@ -438,7 +451,7 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch (spell->Id) { @@ -455,34 +468,45 @@ public: } } - void HandleTouchedSpells(Unit* target, uint32 TouchedType) + void HandleTouchedSpells(WorldObject* target, uint32 TouchedType) { + if (!target->IsUnit()) + return; + switch (TouchedType) { case SPELL_FLAME_TOUCHED: - if (!target->HasAura(SPELL_DARK_FLAME)) + { + Unit* unitTarget = target->ToUnit(); + if (!unitTarget->HasAura(SPELL_DARK_FLAME)) { - if (target->HasAura(SPELL_DARK_TOUCHED)) + if (unitTarget->HasAura(SPELL_DARK_TOUCHED)) { - target->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); - target->CastSpell(target, SPELL_DARK_FLAME, true); + unitTarget->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); + unitTarget->CastSpell(unitTarget, SPELL_DARK_FLAME, true); } else - target->CastSpell(target, SPELL_FLAME_TOUCHED, true); + unitTarget->CastSpell(unitTarget, SPELL_FLAME_TOUCHED, true); } break; + } case SPELL_DARK_TOUCHED: - if (!target->HasAura(SPELL_DARK_FLAME)) + { + Unit* unitTarget = target->ToUnit(); + 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); + unitTarget->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); + unitTarget->CastSpell(unitTarget, SPELL_DARK_FLAME, true); } else - target->CastSpell(target, SPELL_DARK_TOUCHED, true); + unitTarget->CastSpell(unitTarget, SPELL_DARK_TOUCHED, true); } break; + } + default: + break; } } @@ -675,21 +699,28 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + if (!target->IsUnit()) + return; + switch (spell->Id) { case SPELL_SHADOW_FURY: case SPELL_DARK_STRIKE: - if (!target->HasAura(SPELL_DARK_FLAME)) + { + Unit* unitTarget = target->ToUnit(); + 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 e14d9dc229..6189a5cd1e 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -198,8 +198,13 @@ public: instance->SetBossState(DATA_FELMYST, DONE); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster || !caster->IsUnit()) + return; + + Unit* unitCaster = caster->ToUnit(); + // workaround for linked aura /*if (spell->Id == SPELL_VAPOR_FORCE) { @@ -209,15 +214,15 @@ public: if (spell->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 06127cf9b1..cff4eb80bf 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -473,12 +473,15 @@ struct boss_sathrovarr : public BossAI kalecgos->AI()->EnterEvadeMode(why); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster || !caster->IsUnit()) + return; + if (spell->Id == SPELL_TAP_CHECK_DAMAGE) { DoCastSelf(SPELL_TELEPORT_BACK, true); - Unit::Kill(caster, me); + Unit::Kill(caster->ToUnit(), me); } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index e69170b7df..7ef1c7b428 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -353,7 +353,7 @@ 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* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp index 5d86edcf1a..baead96d9b 100644 --- a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp +++ b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp @@ -126,7 +126,7 @@ struct boss_commander_ulthok : public BossAI instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (!target) return; diff --git a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_ozumat.cpp b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_ozumat.cpp index b83652d62e..dbba3bc51a 100644 --- a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_ozumat.cpp +++ b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_ozumat.cpp @@ -451,7 +451,7 @@ struct npc_ozumat_neptulon : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ENTANGLING_GRASP) { @@ -678,10 +678,13 @@ struct npc_ozumat_unyielding_behemoth : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + if (!target->IsUnit()) + return; + if (spell->Id == SPELL_SHADOW_BLAST_VISUAL) - target->RemoveAurasDueToSpell(SPELL_SHRINK); + target->ToUnit()->RemoveAurasDueToSpell(SPELL_SHRINK); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/throne_of_the_tides.cpp b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/throne_of_the_tides.cpp index 1564b45eb8..73e5a04393 100644 --- a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/throne_of_the_tides.cpp +++ b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/throne_of_the_tides.cpp @@ -193,7 +193,7 @@ struct npc_tott_lady_nazjar : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { bool useLeftGUIDs = false; if (spell->Id == SPELL_TRIGGER_MURLOC) diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index 4908382df5..d2eb318916 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -124,7 +124,7 @@ class boss_archaedas : public CreatureScript me->SetControlled(false, UNIT_STATE_ROOT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { // Being woken up from the altar, start the awaken sequence if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) @@ -271,7 +271,7 @@ class npc_archaedas_minions : public CreatureScript bAmIAwake = true; } - void SpellHit(Unit * /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { // time to wake up, start animation if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp index c4e597c9bc..4c5ac8ddc8 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp @@ -351,7 +351,7 @@ struct npc_mandokir_ohgan : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (target && spell->Id == SPELL_OHGAN_ORDERS) _events.CancelEvent(EVENT_ATTACK_PLAYERS); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp index 3feca697f5..9b95b167d7 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp @@ -408,7 +408,7 @@ struct npc_zanzil_zanzili_berserker : public ScriptedAI _elixirHits = 0; } - void SpellHit(Unit* /*caster*/, const SpellInfo* spellInfo) override + void SpellHit(WorldObject* /*caster*/, const SpellInfo* spellInfo) override { if (spellInfo->Id == SPELL_ZANZILS_RESURRECTION_ELIXIR_TRIGGERED) { @@ -426,15 +426,15 @@ struct npc_zanzil_zanzili_berserker : public ScriptedAI } } - void SpellHitTarget(Unit* victim, const SpellInfo* spellInfo) override + void SpellHitTarget(WorldObject* victim, const SpellInfo* spellInfo) override { - if (!victim) + if (!victim || !victim->IsUnit()) return; if (spellInfo->Id == SPELL_PURSUIT) { me->GetThreatManager().ResetAllThreat(); - AddThreat(victim, spellInfo->Effects[EFFECT_1].BasePoints); + AddThreat(victim->ToUnit(), spellInfo->Effects[EFFECT_1].CalcValue()); Talk(SAY_WHISPER_PURSUIT_PLAYER, victim); Talk(SAY_ANNOUNCE_PURSUIT_PLAYER, victim); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp index 0cdfe58ac1..958e55857c 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp @@ -135,13 +135,16 @@ struct npc_zulgurub_berserking_boulder_roller : public ScriptedAI me->GetMotionMaster()->MoveTargetedHome(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { + if (!target->IsUnit()) + return; + if (spell->Id == SPELL_ROLLING_BOULDERS_SEARCH_EFFECT) { me->SetReactState(REACT_AGGRESSIVE); me->RemoveAurasDueToSpell(SPELL_ROLLING_BOULDERS_PERIODIC_AURA); - AttackStart(target); + AttackStart(target->ToUnit()); } } @@ -586,15 +589,15 @@ struct npc_zulgurub_gurubashi_berserker: public ScriptedAI me->GetMotionMaster()->MoveTargetedHome(); } - void SpellHitTarget(Unit* victim, const SpellInfo* spellInfo) override + void SpellHitTarget(WorldObject* victim, const SpellInfo* spellInfo) override { - if (!victim) + if (!victim->IsUnit()) return; if (spellInfo->Id == SPELL_PURSUIT) { me->GetThreatManager().ResetAllThreat(); - AddThreat(victim, spellInfo->Effects[EFFECT_1].BasePoints); + AddThreat(victim->ToUnit(), spellInfo->Effects[EFFECT_1].CalcValue()); Talk(SAY_WHISPER_PURSUIT_PLAYER, victim); Talk(SAY_ANNOUNCE_PURSUIT_PLAYER, victim); } 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 5e8d3f85d2..e84b12e3d2 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 @@ -56,7 +56,7 @@ public: _tapped = false; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (_tapped) return; @@ -150,7 +150,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/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp index 2dcaaa93d8..202d79f9ba 100644 --- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp @@ -326,7 +326,7 @@ struct npc_hogger : public ScriptedAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_UPSET_STOMACH) { diff --git a/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp b/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp index c8e879edfc..ad1dcaadf7 100644 --- a/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp @@ -306,7 +306,7 @@ struct npc_brazie_the_bonatist_vehicle : public VehicleAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { switch (spell->Id) { @@ -872,7 +872,7 @@ struct npc_brazie_spot : public ScriptedAI return 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -1137,15 +1137,15 @@ struct npc_brazie_vehicle_notifier : public ScriptedAI vehicle->AI()->JustSummoned(me); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; switch (spell->Id) { case SPELL_GAIN_SOLAR_POWER_SPELLCLICK: - if (Unit* vehicle = caster->GetVehicleCreatureBase()) + if (Unit* vehicle = caster->ToUnit()->GetVehicleCreatureBase()) DoCast(vehicle, SPELL_GAIN_SOLAR_POWER_ENERGIZE, true); me->GetMotionMaster()->MoveJump(SolarPowerJumpPos, 45.0f, 20.0f); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); 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 2c8b3615ec..20c0259ecb 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -127,7 +127,7 @@ class boss_epoch : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* info) override + void SpellHitTarget(WorldObject* target, SpellInfo const* info) override { if (info->Id == SPELL_TIME_STEP_DUMMY && me->IsHostileTo(target)) { 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 4109b2894a..e01b6afb38 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -69,7 +69,7 @@ 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* spell) override { if (spell->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 e164fc70f3..49e3ba8e93 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1407,7 +1407,7 @@ public: current = candidate; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (!_crateRevealed && spell->Id == SPELL_ARCANE_DISRUPTION) { 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 f812474c67..77f5f5af68 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -137,7 +137,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (SpellCorrupt_Timer) return; diff --git a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp index 019f11a1a4..1f2402e99e 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp @@ -119,7 +119,7 @@ class boss_baleroc : public CreatureScript me->SetCanDualWield(true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp index 4c25e244b0..af11edde9e 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp @@ -269,7 +269,7 @@ struct npc_ptah_beetle_stalker : public ScriptedAI { npc_ptah_beetle_stalker(Creature* creature) : ScriptedAI(creature) { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spellInfo) override + void SpellHit(WorldObject* /*caster*/, const SpellInfo* spellInfo) override { if (spellInfo->Id == SPELL_BEETLE_BURROW) _events.ScheduleEvent(EVENT_SUMMON_JEWELED_SCARAB, Seconds(5), Seconds(6)); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp index 1c50c7d620..31044a781e 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp @@ -317,7 +317,7 @@ struct npc_rajh_orb_of_the_sun : public ScriptedAI _events.ScheduleEvent(EVENT_GROW, 1s); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_RIDE_VEHICLE) _events.ScheduleEvent(EVENT_BLAZING_INFERNO, 500ms); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_setesh.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_setesh.cpp index 7e3513997b..3ffb0ef420 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_setesh.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_setesh.cpp @@ -303,7 +303,7 @@ public: setesh->CastSpell(me, SPELL_CHAOS_BLAST_MISSLE, true); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spellInfo) override + void SpellHit(WorldObject* /*caster*/, const SpellInfo* spellInfo) override { if (spellInfo->Id != SPELL_CHAOS_BLAST_MISSLE) return; @@ -392,12 +392,12 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void SpellHit(Unit* caster, const SpellInfo* spellInfo) override + void SpellHit(WorldObject* caster, const SpellInfo* spellInfo) override { - if (spellInfo->Id != SPELL_CHANNEL_CHAOS_PORTAL) + if (!caster || !caster->IsUnit() || spellInfo->Id != SPELL_CHANNEL_CHAOS_PORTAL) return; - caster->InterruptNonMeleeSpells(true, SPELL_CHANNEL_CHAOS_PORTAL); + caster->ToUnit()->InterruptNonMeleeSpells(true, SPELL_CHANNEL_CHAOS_PORTAL); me->RemoveAurasDueToSpell(SPELL_DUMMY_AURA); events.ScheduleEvent(EVENT_CAST_VISUAL, Seconds(1)); } diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 60beda6a41..8689489e57 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -196,7 +196,7 @@ public: Talk(SAY_KILL); } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*pCaster*/, SpellInfo const* Spell) override { if (Spell->Id == SPELL_BREATH_EAST_TO_WEST || Spell->Id == SPELL_BREATH_WEST_TO_EAST || @@ -272,7 +272,7 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* Spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* Spell) override { //Workaround - Couldn't find a way to group this spells (All Eruption) if (((Spell->Id >= 17086 && Spell->Id <= 17095) || diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 71147204d2..292b068f23 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -117,14 +117,16 @@ class boss_ossirian : public CreatureScript Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster || !caster->IsCreature() || !caster->ToCreature()->IsSummon()) + for (uint8 i = 0; i < NUM_WEAKNESS; ++i) { if (spell->Id == SpellWeakness[i]) { me->RemoveAurasDueToSpell(SPELL_SUPREME); - caster->ToTempSummon()->UnSummon(); + caster->ToCreature()->ToTempSummon()->UnSummon(); SpawnNextCrystal(); } } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 34649874f0..c60544bc59 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -164,7 +164,7 @@ struct boss_twinemperorsAI : public BossAI } } - void SpellHit(Unit* caster, SpellInfo const* entry) override + void SpellHit(WorldObject* caster, SpellInfo const* entry) override { if (caster == me) return; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 6596a51829..e19d1e30f5 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -151,7 +151,7 @@ class boss_viscidus : public CreatureScript Talk(EMOTE_CRACK); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) { diff --git a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp index b8d111e23b..c92f0d30b7 100644 --- a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp +++ b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp @@ -622,7 +622,7 @@ struct npc_alakir_ice_storm : public ScriptedAI _events.ScheduleEvent(EVENT_PING_ICE_STORM_TRIGGERS, 1s); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_ICE_STORM_PING && target->GetExactDist2d(me) > 20.0f) _iceStormPositions.push_back(target->GetPosition()); diff --git a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp index ccbd6988ba..2ab0ff966d 100644 --- a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp +++ b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp @@ -349,7 +349,7 @@ struct boss_anshal : public BossAI } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_WIND_DISTANCE_CHECKER) { @@ -359,7 +359,7 @@ struct boss_anshal : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GATHER_STRENGTH) { @@ -597,7 +597,7 @@ struct boss_nezir : public BossAI } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_WIND_DISTANCE_CHECKER) { @@ -607,7 +607,7 @@ struct boss_nezir : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GATHER_STRENGTH) { @@ -836,7 +836,7 @@ struct boss_rohash : public BossAI } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -850,7 +850,7 @@ struct boss_rohash : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GATHER_STRENGTH) { @@ -1032,10 +1032,10 @@ struct npc_conclave_of_wind_ravenous_creeper : public ScriptedAI */ } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_AI_CLEAR_TARGET) - ModifyThreatByPercent(target, -100); + if (target->IsUnit() && spell->Id == SPELL_AI_CLEAR_TARGET) + ModifyThreatByPercent(target->ToUnit(), -100); } void EnterEvadeMode(EvadeReason /*why*/) override diff --git a/src/server/scripts/Kalimdor/VortexPinnacle/vortex_pinnacle.cpp b/src/server/scripts/Kalimdor/VortexPinnacle/vortex_pinnacle.cpp index 89643dc066..4f541ce7a9 100644 --- a/src/server/scripts/Kalimdor/VortexPinnacle/vortex_pinnacle.cpp +++ b/src/server/scripts/Kalimdor/VortexPinnacle/vortex_pinnacle.cpp @@ -117,7 +117,7 @@ struct npc_lurking_tempest : public NullCreatureAI DoCastSelf(SPELL_LURK_SEARCH_PERIODIC); } - void SpellHit(Unit* /*unit*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*unit*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_FEIGN_DEATH) Talk(SAY_FEIGN_DEATH); diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index d875da321f..1636d64a23 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -111,7 +111,7 @@ public: } } - void SpellHit(Unit* Caster, SpellInfo const* Spell) override + void SpellHit(WorldObject* caster, SpellInfo const* Spell) override { if (Spell->SpellFamilyFlags[2] & 0x080000000) { @@ -120,7 +120,7 @@ public: DoCast(me, SPELL_STUNNED, true); - pCaster = Caster->GetGUID(); + pCaster = caster->GetGUID(); SayThanksTimer = 5000; } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 032184e111..e2beb7fea9 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -73,11 +73,16 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster || !caster->IsUnit()) + return; + + Unit* unitCaster = caster->ToUnit(); + if (spell->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); @@ -89,7 +94,7 @@ public: EngagementOver(); - me->FollowTarget(caster); + me->FollowTarget(unitCaster); me->setActive(true); } } diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index e1a861bc38..0705b8eafc 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -86,7 +86,7 @@ public: DoCast(SPELL_OMEN_SUMMON_SPOTLIGHT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ELUNE_CANDLE) { diff --git a/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp b/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp index 169445ece1..bb75ff2909 100644 --- a/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp +++ b/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp @@ -248,7 +248,7 @@ struct npc_mh_faerie_dragon : public ScriptedAI me->GetMotionMaster()->MoveRandom(7.0f); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (!caster) return; @@ -605,7 +605,7 @@ struct npc_mh_arch_druid_fandral_staghelm : public PassiveAI me->FollowTarget(summoner); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_CUE_FANDRAL_TO_DESPAWN) me->DespawnOrUnsummon(); diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp index 53ea84f390..e578435779 100644 --- a/src/server/scripts/Kalimdor/zone_mulgore.cpp +++ b/src/server/scripts/Kalimdor/zone_mulgore.cpp @@ -86,7 +86,7 @@ struct npc_mulgore_captured_brave : public ScriptedAI { npc_mulgore_captured_brave(Creature* creature) : ScriptedAI(creature) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id != SPELL_UNLOCKING) return; diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index c484040f92..7e710b7620 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -231,7 +231,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY) { diff --git a/src/server/scripts/Kalimdor/zone_uldum.cpp b/src/server/scripts/Kalimdor/zone_uldum.cpp index ff596e8208..8da04443c8 100644 --- a/src/server/scripts/Kalimdor/zone_uldum.cpp +++ b/src/server/scripts/Kalimdor/zone_uldum.cpp @@ -235,18 +235,20 @@ struct npc_uldum_uldum_camera_bunny_04 : public ScriptedAI _pingCount = 0; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; + Unit* unitCaster = caster->ToUnit(); + switch (spell->Id) { case SPELL_PING_CAMERA_00: if (_pingCount == PING_INDEX_PING_ALL_ACTORS) { - _clonedImageGUID = caster->GetGUID(); - DoCast(caster, SPELL_INVISIBLE_BEAM); + _clonedImageGUID = unitCaster->GetGUID(); + DoCast(unitCaster, SPELL_INVISIBLE_BEAM); DoCastSelf(SPELL_REVERSE_CAST_RIDE_VEHICLE, true); DoCastSelf(SPELL_MASTER_PING_ALL_ACTORS, true); _events.ScheduleEvent(EVENT_MOVE_PATH_1, 11s); @@ -258,9 +260,9 @@ struct npc_uldum_uldum_camera_bunny_04 : public ScriptedAI break; case SPELL_PING_CAMERA_01: me->CastStop(); - DoCast(caster, SPELL_INVISIBLE_BEAM, true); + DoCast(unitCaster, SPELL_INVISIBLE_BEAM, true); me->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_CAMERA_PATH_2, true); - caster->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1, false); + unitCaster->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1, false); _events.ScheduleEvent(EVENT_FADE_TO_BLACK_1, 8s + 500ms); break; case SPELL_PING_CAMERA_02: @@ -272,7 +274,7 @@ struct npc_uldum_uldum_camera_bunny_04 : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_PING_BEAM_TARGET) target->CastSpell(me, SPELL_PING_CAMERA_01, true); diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp index bc2c2d4c6e..b34caea0b3 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp @@ -371,7 +371,7 @@ class npc_crystal_shard : public CreatureScript _events.ScheduleEvent(EVENT_REMOVE_SHRINK_AURA, Seconds(1) + Milliseconds(200)); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_CRYSTAL_SHARDS_TARGET) { 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 82ca8eb7dd..546918af8c 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -111,7 +111,7 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_INSANITY) { diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index c7378939d3..db1f5cf6b2 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -360,7 +360,7 @@ public: } } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*whose*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SUBMERGE) { 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 758b8bca86..d08fdca4f8 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,13 +294,13 @@ class boss_krik_thir : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*whose*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); } - void SpellHitTarget(Unit* /*who*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*who*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) Talk(SAY_SEND_GROUP); @@ -380,7 +380,7 @@ struct npc_gatewatcher_petAI : public ScriptedAI JustEngagedWith(who); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*whose*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); @@ -752,10 +752,10 @@ class npc_anub_ar_skirmisher : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_CHARGE && target) - DoCast(target, SPELL_FIXATE_TRIGGER); + if (spell->Id == SPELL_CHARGE && target->IsUnit()) + DoCast(target->ToUnit(), 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 f0610820c1..d3ea715712 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* /*who*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TWILIGHT_MENDING) Talk(SAY_REGENERATE); @@ -493,7 +493,7 @@ class boss_twilight_halion : public CreatureScript } } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*who*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 9b90211794..426c994e8f 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -973,7 +973,7 @@ class boss_icehowl : public CreatureScript instance->SetData(TYPE_NORTHREND_BEASTS, ICEHOWL_IN_PROGRESS); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_TRAMPLE && target->GetTypeId() == TYPEID_PLAYER) { 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 31ccaf0c19..3aeb7d1302 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -222,7 +222,7 @@ class boss_devourer_of_souls : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->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 193fcc90cb..2dad966e1a 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,11 @@ class boss_garfrost : public CreatureScript events.ScheduleEvent(EVENT_RESUME_ATTACK, 5000); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_PERMAFROST_HELPER) + if (spell->Id == SPELL_PERMAFROST_HELPER && target->IsUnit()) { - if (Aura* aura = target->GetAura(SPELL_PERMAFROST_HELPER)) + if (Aura* aura = target->ToUnit()->GetAura(SPELL_PERMAFROST_HELPER)) _permafrostStack = std::max(_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 ffc03e87d4..51722622f4 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -346,7 +346,7 @@ class boss_drakkari_elemental : public CreatureScript me->DespawnOrUnsummon(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_MERGE) { diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 4a2ca89757..13c6aeb0f7 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -169,7 +169,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 e922ae576e..ddf9dee432 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -125,7 +125,7 @@ class boss_moorabi : public CreatureScript Talk(EMOTE_ACTIVATE_ALTAR); } - 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 a81f2d4795..5cd5ee012f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -540,7 +540,7 @@ struct BloodPrincesBossAI : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->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 ff504972e4..8c643447ac 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -417,7 +417,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* spell) override { if (target->GetTransport()) { @@ -442,7 +442,7 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_BLOOD_LINK_POWER) if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) @@ -714,7 +714,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { @@ -921,7 +921,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { @@ -1003,7 +1003,7 @@ class npc_saurfang_event : public CreatureScript _index = data; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 7ebdb6291b..cbccc7324e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -162,10 +162,10 @@ class boss_festergut : public CreatureScript Talk(SAY_KILL); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == PUNGENT_BLIGHT_HELPER) - target->RemoveAurasDueToSpell(INOCULATED_HELPER); + if (spell->Id == PUNGENT_BLIGHT_HELPER && target->IsUnit()) + target->ToUnit()->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 8925590b27..0e6b4a2109 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -386,7 +386,7 @@ class boss_lady_deathwhisper : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->Id == SPELL_SUMMON_SPIRITS) _nextVengefulShadeTargetGUID.push_back(target->GetGUID()); @@ -545,7 +545,7 @@ class npc_cult_fanatic : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -652,7 +652,7 @@ class npc_cult_adherent : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -745,7 +745,7 @@ class npc_vengeful_shade : public CreatureScript _targetGUID = guid; } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index a9eb71b09f..8d2ed0a9cf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -732,7 +732,7 @@ 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* spell) override { if (!_newTargetSelectTimer && spell->Id == sSpellMgr->GetSpellIdForDifficulty(_hitTargetSpellId, me)) _newTargetSelectTimer = 1000; @@ -747,7 +747,7 @@ class npc_putricide_oozeAI : public ScriptedAI DoCastAOE(_auraSpellId, true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->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 e50108a003..3725988dbb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -166,7 +166,7 @@ class boss_rotface : public CreatureScript professor->AI()->EnterEvadeMode(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->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 fea57328fd..b98748edff 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -428,11 +428,11 @@ class boss_sindragosa : public CreatureScript summon->AI()->JustDied(summon); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(70127, me)) - if (spellId == spell->Id) - if (Aura const* mysticBuffet = target->GetAura(spell->Id)) + if (spellId == spell->Id && target->IsUnit()) + if (Aura const* mysticBuffet = target->ToUnit()->GetAura(spell->Id)) _mysticBuffetStack = std::max(_mysticBuffetStack, mysticBuffet->GetStackAmount()); } 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 e44b43ecd3..b7946a4dfd 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -782,13 +782,13 @@ class boss_the_lich_king : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) Talk(SAY_LK_FROSTMOURNE_KILL); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) { @@ -1194,7 +1194,7 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ICE_LOCK) me->SetFacingTo(3.085098f); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 3342e5083c..e87432eb54 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -378,7 +378,7 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DREAM_SLIP) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 85cb7cc8be..7320953b11 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -745,7 +745,7 @@ class boss_sister_svalna : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) { @@ -766,12 +766,13 @@ class boss_sister_svalna : public CreatureScript me->SetHover(false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch (spell->Id) { case SPELL_IMPALING_SPEAR_KILL: - Unit::Kill(me, target); + if (target->IsUnit()) + Unit::Kill(me, target->ToUnit()); break; case SPELL_IMPALING_SPEAR: if (TempSummon* summon = target->SummonCreature(NPC_IMPALING_SPEAR, *target)) @@ -1218,7 +1219,7 @@ struct npc_argent_captainAI : public ScriptedAI Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_REVIVE_CHAMPION && !IsUndead) { 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 27e9b9c611..2a8dfcbf2a 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,11 @@ public: _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 15 * IN_MILLISECONDS); } - void SpellHit(Unit* caster, SpellInfo const* /*spell*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spell*/) override { - if (caster->IsVehicle()) - Unit::Kill(me, caster); + + if (caster && caster->IsUnit() && caster->ToUnit()->IsVehicle()) + Unit::Kill(me, caster->ToUnit()); } 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 618ea02ea4..addcd562a3 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -125,13 +125,13 @@ class boss_faerlina : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) + if (caster && caster->IsUnit() && spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) { ++_frenzyDispels; Talk(EMOTE_WIDOW_EMBRACE, caster); - Unit::Kill(me, caster); + Unit::Kill(me, caster->ToUnit()); } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index e0c38ca89b..ac5d6a3d8e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -443,7 +443,7 @@ class boss_four_horsemen_baron : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_UNHOLY_SHADOW) Talk(SAY_SPECIAL); @@ -519,7 +519,7 @@ class boss_four_horsemen_thane : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (_shouldSay && spell->Id == SPELL_METEOR) { @@ -671,7 +671,7 @@ class boss_four_horsemen_sir : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (_shouldSay && spell->Id == SPELL_HOLY_WRATH) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 4da94de067..4c90c9fd80 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -908,7 +908,7 @@ public: return nullptr; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (!spell) return; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index dc9f470d43..7ae1098331 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -63,7 +63,7 @@ class boss_grobbulus : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, Minutes(12)); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (spell->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 e8d207d719..9d62c56eec 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -282,7 +282,7 @@ public: damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_CHAINS_DUMMY) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 501ab2f2ff..8dbc9bd168 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -94,7 +94,7 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->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 48e9fdad03..6caec78f45 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -187,12 +187,12 @@ class boss_sapphiron : public CreatureScript EnterPhaseGround(true); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { switch(spell->Id) { case SPELL_CHECK_RESISTS: - if (target && target->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) + if (target && target->IsUnit() && target->ToUnit()->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 27ed687c9d..d949da4b2d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -604,35 +604,37 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; if (spell->Id != SPELL_STALAGG_TESLA_PERIODIC) return; + + Unit* unitCaster = caster->ToUnit(); if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); + unitCaster->SetImmuneToPC(false); if (Creature* creatureCaster = caster->ToCreature()) 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); + unitCaster->CastStop(SPELL_TESLA_SHOCK); + unitCaster->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); + unitCaster->CastStop(); + unitCaster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); + unitCaster->SetImmuneToPC(true); } } @@ -853,35 +855,37 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; if (spell->Id != SPELL_FEUGEN_TESLA_PERIODIC) return; + + Unit* unitCaster = caster->ToUnit(); if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); + unitCaster->SetImmuneToPC(false); if (Creature* creatureCaster = caster->ToCreature()) 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); + unitCaster->CastStop(SPELL_TESLA_SHOCK); + unitCaster->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); + unitCaster->CastStop(); + unitCaster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); + unitCaster->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 0a89249d0f..cf68c1ed5b 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -629,7 +629,7 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_POWER_SPARK_MALYGOS) { @@ -1025,7 +1025,7 @@ public: _instance = creature->GetInstanceScript(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_PORTAL_OPENED) { @@ -1476,7 +1476,7 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ARCANE_BOMB_TRIGGER) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 4804277049..947e4bf7d6 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -293,7 +293,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 e8830c1f6b..04eb7f124b 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -203,7 +203,7 @@ 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* spell) override { if (spell->Id == SPELL_ICE_BEAM) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 77b277a626..ec99f8cb27 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -266,7 +266,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript Initialize(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) if (spell->Id == SPELL_GPS) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 412a9b322f..7c82b054b9 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -146,7 +146,7 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DISPERSE) { diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index f46335dcbd..db6531d916 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -437,7 +437,7 @@ public: } } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* pSpell) override + void SpellHit(WorldObject* /*pCaster*/, SpellInfo const* pSpell) override { // This is the dummy effect of the spells if (pSpell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SHATTER, me)) 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 f0715a4d02..0b714e114c 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 @@ -780,7 +780,7 @@ class npc_living_constellation : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_CONSTELLATION_PHASE_EFFECT || caster->GetTypeId() != TYPEID_UNIT) return; 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 d3c4db460e..1d2f6e0e1d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -330,7 +330,7 @@ class boss_flame_leviathan : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_START_THE_ENGINE) if (Vehicle* vehicleKit = me->GetVehicleKit()) @@ -476,16 +476,18 @@ class boss_flame_leviathan : public CreatureScript DoBatteringRamIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id != SPELL_PURSUED) + if (spell->Id != SPELL_PURSUED || !target->IsUnit()) return; - _pursueTarget = target->GetGUID(); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveChase(target); + Unit* unitTarget = target->ToUnit(); - for (SeatMap::const_iterator itr = target->GetVehicleKit()->Seats.begin(); itr != target->GetVehicleKit()->Seats.end(); ++itr) + _pursueTarget = unitTarget->GetGUID(); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveChase(unitTarget); + + 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)) { @@ -907,7 +909,7 @@ class npc_pool_of_tar : public CreatureScript damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->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 9c2ab02980..46981f3c75 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1499,12 +1499,12 @@ class npc_unstable_sun_beam : public CreatureScript despawnTimer -= diff; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (target && spell->Id == SPELL_UNSTABLE_ENERGY) + if (target->IsUnit() && spell->Id == SPELL_UNSTABLE_ENERGY) { - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM_TRIGGERED); + target->ToUnit()->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); + target->ToUnit()->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 8976d28fc6..613eb2f541 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -219,7 +219,7 @@ class boss_general_vezax : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* who, SpellInfo const* spell) override { if (who && who->GetTypeId() == TYPEID_PLAYER && spell->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 221bf89d23..622bfda433 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -959,7 +959,7 @@ class npc_toasty_fire : public CreatureScript DoCast(me, SPELL_SINGED, true); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*who*/, SpellInfo const* spell) override { if (spell->Id == SPELL_BLOCK_OF_ICE || spell->Id == SPELL_ICE_SHARD || spell->Id == SPELL_ICE_SHARD_HIT) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 05842a4502..2b6cd0eee6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1030,10 +1030,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* /*spellProto*/) override { - if (caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING)) - DoCast(caster, SPELL_RAPID_BURST); + if (caster && caster->IsCreature() && caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING)) + DoCast(caster->ToCreature(), 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 108a1a863e..10fcc46073 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -211,7 +211,7 @@ class boss_razorscale_controller : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -408,7 +408,7 @@ class boss_razorscale : public CreatureScript controller->AI()->Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_HARPOON_TRIGGER) ++HarpoonCounter; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 56776603d3..9c4b096078 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -543,7 +543,7 @@ class boss_thorim : public CreatureScript Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TOUCH_OF_DOMINION_TRIGGERED) { @@ -556,7 +556,7 @@ class boss_thorim : public CreatureScript } } - void SpellHitTarget(Unit* who, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* who, SpellInfo const* spellInfo) override { if (who->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_LIGHTNING_RELEASE) _dontStandInTheLightning = false; @@ -1590,7 +1590,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 4115146085..00a6087bf6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -734,7 +734,7 @@ class boss_sara : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (!roll_chance_i(30) || _events.IsInPhase(PHASE_TRANSFORM)) return; @@ -937,7 +937,7 @@ 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* spell) override { // Val'anyr if (spell->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 8d9e63e96f..67cd99f98d 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -440,7 +440,7 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LAUNCH_HARPOON) if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS)) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index d99e7d181c..ab5f94b396 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 86b2d91c9e..58978496ba 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -148,7 +148,7 @@ 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* who, SpellInfo const* spell) override { if (who && who->GetTypeId() == TYPEID_PLAYER && spell->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 02533d0d5d..760546260b 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -248,13 +248,16 @@ 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 { + if (!caster || !caster->IsUnit()) + return; + if (spellInfo->Id == SPELL_WATER_GLOBULE_VISUAL) { DoCast(me, SPELL_WATER_GLOBULE_TRANSFORM); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->GetMotionMaster()->MoveFollow(caster, 0.0f, 0.0f); + me->GetMotionMaster()->MoveFollow(caster->ToUnit(), 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 358b1e317e..de0ea2b691 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -121,7 +121,7 @@ class boss_xevozz : public CreatureScript _JustDied(); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*who*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ARCANE_POWER || spell->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 d3538e0517..2f09fbcbef 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -91,7 +91,7 @@ public: Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (phase || spell->Id != SPELL_SET_CART) return; @@ -1441,7 +1441,7 @@ struct npc_beryl_sorcerer : public FollowerAI _enslaved = false; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_ARCANE_CHAINS || !caster->IsPlayer() || HealthAbovePct(50) || _enslaved) return; @@ -1551,7 +1551,7 @@ public: { } - void SpellHit(Unit* unit, SpellInfo const* spell) override + void SpellHit(WorldObject* unit, SpellInfo const* spell) override { if (spell->Id == SPELL_NEURAL_NEEDLE && unit->GetTypeId() == TYPEID_PLAYER) if (Player* player = unit->ToPlayer()) diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index a958ef0c05..eae3dce0ef 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -566,7 +566,7 @@ class npc_wyrmrest_defender : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -636,7 +636,7 @@ class npc_torturer_lecraft : public CreatureScript Talk (SAY_AGGRO, player); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) return; diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index c9f925e16c..b416b13ade 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -298,13 +298,13 @@ public: _gender = Data; } - void SpellHit(Unit* Caster, SpellInfo const* Spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (Spell->Id == SPELL_OUTHOUSE_GROANS) + if (caster && caster->IsUnit() && spell->Id == SPELL_OUTHOUSE_GROANS) { ++_counter; if (_counter < 5) - DoCast(Caster, SPELL_CAMERA_SHAKE, true); + DoCast(caster->ToUnit(), SPELL_CAMERA_SHAKE, true); else _counter = 0; DoCast(me, SPELL_DUST_FIELD, true); @@ -493,12 +493,12 @@ public: me->DespawnOrUnsummon(_despawnTimer); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER + if (spell->Id == SPELL_RENEW_SKIRMISHER && caster && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) { - DoCast(caster, SPELL_KILL_CREDIT); + DoCast(caster->ToUnit(), SPELL_KILL_CREDIT); Talk(SAY_RANDOM); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); @@ -614,7 +614,7 @@ public: DoMeleeAttackIfReady(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { @@ -902,7 +902,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 83895c507d..f82e31fd6f 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -235,28 +235,31 @@ 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* spell) override { + if (!caster || !caster->IsUnit()) + return; + switch (me->GetEntry()) { case NPC_CHARGE_TARGET: if (spell->Id == SPELL_PLAYER_CHARGE) if (isVulnerable) - DoCast(caster, SPELL_CHARGE_CREDIT, true); + DoCast(caster->ToUnit(), SPELL_CHARGE_CREDIT, true); break; case NPC_MELEE_TARGET: if (spell->Id == SPELL_PLAYER_THRUST) { - DoCast(caster, SPELL_MELEE_CREDIT, true); + DoCast(caster->ToUnit(), SPELL_MELEE_CREDIT, true); - if (Unit* target = caster->GetVehicleBase()) + if (Unit* target = caster->ToUnit()->GetVehicleBase()) DoCast(target, SPELL_COUNTERATTACK, true); } break; case NPC_RANGED_TARGET: if (spell->Id == SPELL_PLAYER_BREAK_SHIELD) if (isVulnerable) - DoCast(caster, SPELL_RANGED_CREDIT, true); + DoCast(caster->ToUnit(), SPELL_RANGED_CREDIT, true); break; } @@ -757,7 +760,7 @@ class npc_frostbrood_skytalon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index f74017b5b1..ba4b5fe447 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -321,7 +321,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; @@ -588,19 +588,15 @@ public: { npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { if (target == me) return; if (spell->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) - { me->UpdateEntry(NPC_HAIPHOON_AIR); - } else if (spell->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) - { me->UpdateEntry(NPC_HAIPHOON_WATER); - } } }; @@ -692,7 +688,7 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LAND) { diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 54a13501f9..77f91d31a4 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -225,12 +225,12 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (spell->Id != SPELL_ICE_LANCE) + if (!caster || !caster->IsUnit() || spell->Id != SPELL_ICE_LANCE) return; - if (caster->GetVehicleKit()->GetAvailableSeatCount() != 0) + if (caster->ToUnit()->GetVehicleKit()->GetAvailableSeatCount() != 0) { me->CastSpell(me, SPELL_FREE_PRISONER, true); me->CastSpell(caster, SPELL_RIDE_DRAKE, true); @@ -751,7 +751,7 @@ class npc_wild_wyrm : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (_playerGuid || spellInfo->Id != SPELL_SPEAR_OF_HODIR) return; diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 1f04c8d7ef..7c58d30b25 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -77,7 +77,7 @@ public: DoCast(rageclaw, SPELL_RIGHT_CHAIN, true); } - void UnlockRageclaw(Unit* who, Creature* rageclaw) + void UnlockRageclaw(WorldObject* who, Creature* rageclaw) { if (!who) return; @@ -88,7 +88,7 @@ public: me->setDeathState(DEAD); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_UNLOCK_SHACKLE) { @@ -144,7 +144,7 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_FREE_RAGECLAW) { @@ -923,16 +923,18 @@ public: Reset(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (spell->Id != GYMERS_GRAB) + if (!caster || !caster->IsUnit() || spell->Id != GYMERS_GRAB) return; - if (Vehicle* veh = caster->GetVehicleKit()) - if (veh->GetAvailableSeatCount() != 0) + if (Vehicle* veh = caster->ToUnit()->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 9ba9668ae3..7a2b0cef46 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -236,7 +236,7 @@ struct boss_shade_of_akama : public BossAI _DespawnAtEvade(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_AKAMA_SOUL_CHANNEL) { @@ -381,7 +381,7 @@ struct npc_akama_shade : public ScriptedAI void EnterEvadeMode(EvadeReason /*why*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_THREAT && !_isInCombat) { diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp index df1ad4581b..aa1cd5fa17 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -91,7 +91,7 @@ struct boss_najentus : public BossAI Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD)) { 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 7b37cddc7a..9aa46b0cc6 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -149,7 +149,7 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { //hack :( if (spell->Id == 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 662800705a..3d30b918d8 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp @@ -567,7 +567,7 @@ public: DoCast(me, 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 a53237ec05..0318eea193 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -122,7 +122,7 @@ class boss_gruul : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(Unit* target, SpellInfo const* pSpell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* pSpell) 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. 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 65f49334fc..bd7b657980 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 @@ -110,7 +110,7 @@ class boss_nazan : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* entry) override + void SpellHitTarget(WorldObject* target, SpellInfo const* entry) override { if (target && entry->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 c0f6b4058f..e3de302daf 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -184,7 +184,7 @@ class boss_magtheridon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->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 a64d530cd0..8caeb89d28 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -188,7 +188,7 @@ class boss_alar : public CreatureScript } } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DIVE_BOMB_VISUAL) { diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 9dcc1302f1..b08d1a3acc 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -358,7 +358,7 @@ struct advisorbase_ai : public ScriptedAI ScriptedAI::AttackStart(who); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_RESSURECTION) { diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 64dfc91c7f..8557c2f36e 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -124,8 +124,11 @@ public: me->DespawnOrUnsummon(1); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { + if (!caster) + return; + if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER) { uint32 const entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL}; @@ -150,8 +153,8 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); IsNihil = true; } - else - AttackStart(caster); + else if (caster->IsUnit()) + AttackStart(caster->ToUnit()); } } } @@ -841,14 +844,14 @@ class npc_simon_bunny : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { // 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 (target->IsUnit() && spell->Id == SPELL_BAD_PRESS_TRIGGER) { - int32 bp = (int32)((float)(fails)*0.33f*target->GetMaxHealth()); + int32 bp = (int32)((float)(fails) * 0.33f * target->ToUnit()->GetMaxHealth()); target->CastSpell(target, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(bp)); } } diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index bd609e29d8..9b162419c4 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -163,7 +163,7 @@ public: } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_CHAIN_LIGHTNING) { @@ -535,7 +535,7 @@ public: summoned->AI()->AttackStart(me); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING) { diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 6fddfb5bee..778783ca66 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -162,7 +162,7 @@ public: caster->AI()->SetData(TYPE_INFERNAL, DATA_DIED); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SUMMON_INFERNAL) { @@ -250,7 +250,7 @@ public: Initialize(); } - void SpellHit(Unit* pCaster, SpellInfo const* spell) override + void SpellHit(WorldObject* pCaster, SpellInfo const* spell) override { if (bCanEat || bIsEating) return; @@ -382,9 +382,9 @@ public: me->SetDisableGravity(false); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (!caster) + if (!caster || !caster->IsUnit()) return; if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped) @@ -393,7 +393,7 @@ public: PlayerGUID = caster->GetGUID(); me->SetFaction(FACTION_FLAYER_HUNTER); - DoCast(caster, SPELL_FORCE_OF_NELTHARAKU, true); + DoCast(caster->ToUnit(), SPELL_FORCE_OF_NELTHARAKU, true); Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 50); if (Dragonmaw) @@ -402,7 +402,7 @@ public: AttackStart(Dragonmaw); } - me->GetThreatManager().ClearThreat(caster); + me->GetThreatManager().ClearThreat(caster->ToUnit()); } } @@ -508,7 +508,7 @@ public: Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (!caster) return; @@ -1658,7 +1658,7 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_WHISTLE) { diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index a7edcaa936..734486683a 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -73,7 +73,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript } // Fly away when dismissed - void SpellHit(Unit* source, SpellInfo const* spell) override + void SpellHit(WorldObject* source, SpellInfo const* spell) override { if (spell->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive()) return; diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 59bac822f4..a8ae9491f2 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -76,23 +76,25 @@ struct npc_pet_mage_mirror_image : ScriptedAI me->FollowTarget(summoner); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_INHERIT_MASTERS_THREAT_LIST) + if (spell->Id == SPELL_INHERIT_MASTERS_THREAT_LIST && target->IsUnit()) { Unit* summoner = me->ToTempSummon()->GetSummoner(); if (!summoner) return; - if (target->IsInCombatWith(summoner)) + Unit* unitTarget = target->ToUnit(); + + if (unitTarget->IsInCombatWith(summoner)) { - AddThreat(me, target->GetThreatManager().GetThreat(summoner), target); - me->EngageWithTarget(target); + AddThreat(me, unitTarget->GetThreatManager().GetThreat(summoner), unitTarget); + me->EngageWithTarget(unitTarget); } } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_INITIALIZE_IMAGES) { diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index f31d1c10c6..2d6ffe21d6 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -829,7 +829,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { Player* player = caster->ToPlayer(); if (!player || !me->IsAlive() || spell->Id != 20804) @@ -1035,7 +1035,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_LESSER_HEAL_R2 || spell->Id == SPELL_FORTITUDE_R1) { @@ -1744,7 +1744,7 @@ struct npc_training_dummy : NullCreatureAI } // Todo: the involved training dummys have a proc aura for that. Drop this part here, once converted. - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { switch (spell->Id) { @@ -3071,9 +3071,9 @@ struct npc_darkmoon_island_gnoll : public ScriptedAI _events.ScheduleEvent(EVENT_REGULAR_SUBMERGE, 3s + 500ms); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { - if (_hit) + if (!caster || _hit) return; if (spell->Id == SPELL_WHACK)