diff options
| author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-06-07 11:22:13 +0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-06 20:46:25 +0100 |
| commit | 3171cd3fa9dbcec43f5d70b74ab2f54a2aa44173 (patch) | |
| tree | 838c54078c04b1fdae4ec1aac6fdc70ebdae45b2 /src/server/scripts/Northrend | |
| parent | f0242d4ec7857a18145dd0a9965fcb8526e981c8 (diff) | |
Core/AI: refactor SpellHit and SpellHitTarget. (#24691)
* Core/AI: refactor SpellHit and SpellHitTarget.
- now caster/target is WorldObject instead of Unit
- remove SpellHitByGameObject / SpellHitTargetGameObject (handled by SpellHit / SpellHitTarget)
- rename parameters in scripts according parent methods
* Restore logic in Algalon script
* Changed check for REMORSELESS_WINTER hit to avoid dublicate call, because it has TARGET_UNIT_CASTER for effects 0/1 and TARGET_GAMEOBJECT_SRC_AREA for effect 2
* Fix build after merge
(cherry picked from commit e3b232fe0e5c21a87d3fe71813e9d750259823f1)
Diffstat (limited to 'src/server/scripts/Northrend')
57 files changed, 344 insertions, 274 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 3b6c5828ac5..58b13ee4701 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -111,9 +111,9 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_INSANITY) + if (spellInfo->Id == SPELL_INSANITY) { // Not good target or too many players if (target->GetTypeId() != TYPEID_PLAYER || insanityHandled > 4) diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 7ecb762775e..64eec2981e0 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -361,9 +361,9 @@ public: } } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBMERGE) + if (spellInfo->Id == SPELL_SUBMERGE) { me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 09350e9f091..00d176bfe9d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -294,15 +294,15 @@ class boss_krik_thir : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); } - void SpellHitTarget(Unit* /*who*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) Talk(SAY_SEND_GROUP); } @@ -381,9 +381,9 @@ struct npc_gatewatcher_petAI : public ScriptedAI JustEngagedWith(who); } - void SpellHit(Unit* /*whose*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) + if (spellInfo->Id == SPELL_SUBBOSS_AGGRO_TRIGGER) DoZoneInCombat(); } @@ -753,10 +753,14 @@ class npc_anub_ar_skirmisher : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CHARGE && target) - DoCast(target, SPELL_FIXATE_TRIGGER); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_CHARGE) + DoCast(unitTarget, SPELL_FIXATE_TRIGGER); } }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 6d2e270e819..5cbb464765d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -309,7 +309,7 @@ class boss_halion : public CreatureScript } } - void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TWILIGHT_MENDING) Talk(SAY_REGENERATE); @@ -494,9 +494,9 @@ class boss_twilight_halion : public CreatureScript } } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_TWILIGHT_DIVISION: if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER)) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index fcfaa3632d8..7aa07290872 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -643,7 +643,7 @@ struct npc_open_portal_target_toc : public ScriptedAI me->SetDisableGravity(true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_OPEN_PORTAL) { diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index b63f16cdb71..224ba8c25cf 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -221,9 +221,9 @@ class boss_devourer_of_souls : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == H_SPELL_PHANTOM_BLAST) + if (spellInfo->Id == H_SPELL_PHANTOM_BLAST) threeFaced = false; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 18a211e0553..0a143b0c48d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -171,11 +171,15 @@ class boss_garfrost : public CreatureScript events.ScheduleEvent(EVENT_RESUME_ATTACK, 5s); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_PERMAFROST_HELPER) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_PERMAFROST_HELPER) { - if (Aura* aura = target->GetAura(SPELL_PERMAFROST_HELPER)) + if (Aura* aura = unitTarget->GetAura(SPELL_PERMAFROST_HELPER)) _permafrostStack = std::max<uint32>(_permafrostStack, aura->GetStackAmount()); } } diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 73dab15acbf..0dbec20cf86 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -346,9 +346,9 @@ class boss_drakkari_elemental : public CreatureScript me->DespawnOrUnsummon(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_MERGE) + if (spellInfo->Id == SPELL_MERGE) { if (Creature* colossus = target->ToCreature()) { diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index d7c3b7a95f4..d9333de0ba0 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -174,7 +174,7 @@ class boss_gal_darah : public CreatureScript Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TRANSFORM_BACK) me->RemoveAurasDueToSpell(SPELL_TRANSFORM_RHINO); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index eaaf52bb5ce..d556818d1fb 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -126,7 +126,7 @@ class boss_moorabi : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TRANSFORMATION) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index d79ef91a1d8..631d6f120c7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -544,9 +544,9 @@ struct BloodPrincesBossAI : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SelectInvocationSpell()) + if (spellInfo->Id == SelectInvocationSpell()) DoAction(ACTION_CAST_INVOCATION); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 3b02a7274e4..303602c006f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -414,7 +414,7 @@ class boss_deathbringer_saurfang : public CreatureScript instance->HandleGameObject(instance->GetGuidData(GO_SAURFANG_S_DOOR), false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target->GetTransport()) { @@ -422,7 +422,7 @@ class boss_deathbringer_saurfang : public CreatureScript return; } - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_MARK_OF_THE_FALLEN_CHAMPION: Talk(SAY_MARK_OF_THE_FALLEN_CHAMPION); @@ -443,9 +443,9 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BLOOD_LINK_POWER) + if (spellInfo->Id == SPELL_BLOOD_LINK_POWER) if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) bloodPower->RecalculateAmountOfEffects(); } @@ -715,9 +715,9 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]); @@ -922,9 +922,9 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]); @@ -1004,9 +1004,9 @@ class npc_saurfang_event : public CreatureScript _index = data; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_GRIP_OF_AGONY) + if (spellInfo->Id == SPELL_GRIP_OF_AGONY) { me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[_index]); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 27cb145629d..4666aeba426 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -160,10 +160,14 @@ class boss_festergut : public CreatureScript Talk(SAY_KILL); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == PUNGENT_BLIGHT_HELPER) - target->RemoveAurasDueToSpell(INOCULATED_HELPER); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == PUNGENT_BLIGHT_HELPER) + unitTarget->RemoveAurasDueToSpell(INOCULATED_HELPER); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 3cb361ac63a..c25728b6bdf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -459,9 +459,9 @@ class boss_lady_deathwhisper : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SUMMON_SPIRITS) + if (spellInfo->Id == SPELL_SUMMON_SPIRITS) _nextVengefulShadeTargetGUID.push_back(target->GetGUID()); } @@ -628,9 +628,9 @@ class npc_cult_fanatic : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_DARK_TRANSFORMATION_T: me->InterruptNonMeleeSpells(true); @@ -735,9 +735,9 @@ class npc_cult_adherent : public CreatureScript }); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_DARK_EMPOWERMENT_T: me->UpdateEntry(NPC_EMPOWERED_ADHERENT); @@ -828,9 +828,9 @@ class npc_vengeful_shade : public CreatureScript _targetGUID = guid; } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_VENGEFUL_BLAST: case SPELL_VENGEFUL_BLAST_25N: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 94717c7dbd2..9992a599a7b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -726,9 +726,9 @@ class npc_putricide_oozeAI : public ScriptedAI npc_putricide_oozeAI(Creature* creature, uint32 auraSpellId, uint32 hitTargetSpellId) : ScriptedAI(creature), _auraSpellId(auraSpellId), _hitTargetSpellId(hitTargetSpellId), _newTargetSelectTimer(0), _instance(creature->GetInstanceScript()) { } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (!_newTargetSelectTimer && spell->Id == _hitTargetSpellId) + if (!_newTargetSelectTimer && spellInfo->Id == _hitTargetSpellId) { _newTargetSelectTimer = 1000; // go passive until next target selection @@ -745,9 +745,9 @@ class npc_putricide_oozeAI : public ScriptedAI DoCastAOE(_auraSpellId, true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TEAR_GAS_CREATURE) + if (spellInfo->Id == SPELL_TEAR_GAS_CREATURE) _newTargetSelectTimer = 1000; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index a0304bb468e..7dec66feb4b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -172,9 +172,9 @@ class boss_rotface : public CreatureScript professor->AI()->EnterEvadeMode(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SLIME_SPRAY) + if (spellInfo->Id == SPELL_SLIME_SPRAY) Talk(SAY_SLIME_SPRAY); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 8acc449bbe7..ff48f2635cc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -439,10 +439,14 @@ class boss_sindragosa : public CreatureScript summon->AI()->JustDied(summon); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == 70127) - if (Aura const* mysticBuffet = target->GetAura(spell->Id)) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == 70127) + if (Aura const* mysticBuffet = unitTarget->GetAura(spellInfo->Id)) _mysticBuffetStack = std::max<uint8>(_mysticBuffetStack, mysticBuffet->GetStackAmount()); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp index 21d447ccb28..766dbc50304 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp @@ -414,9 +414,9 @@ struct boss_sister_svalna : public BossAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) + if (spellInfo->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) { me->RemoveAurasDueToSpell(SPELL_AETHER_SHIELD); Talk(EMOTE_SVALNA_BROKEN_SHIELD, caster); @@ -436,17 +436,21 @@ struct boss_sister_svalna : public BossAI me->SetHover(false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_IMPALING_SPEAR_KILL: - Unit::Kill(me, target); + Unit::Kill(me, unitTarget); break; case SPELL_IMPALING_SPEAR: - if (TempSummon* summon = target->SummonCreature(NPC_IMPALING_SPEAR, *target)) + if (TempSummon* summon = unitTarget->SummonCreature(NPC_IMPALING_SPEAR, *unitTarget)) { - Talk(EMOTE_SVALNA_IMPALE, target); + Talk(EMOTE_SVALNA_IMPALE, unitTarget); CastSpellExtraArgs args; args.AddSpellBP0(1); summon->CastSpell(target, VEHICLE_SPELL_RIDE_HARDCODED, args); @@ -874,9 +878,9 @@ public: Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_REVIVE_CHAMPION && !IsUndead) + if (spellInfo->Id == SPELL_REVIVE_CHAMPION && !IsUndead) { IsUndead = true; me->setDeathState(JUST_RESPAWNED); @@ -901,7 +905,7 @@ public: Talk(SAY_CAPTAIN_RESURRECTED); me->UpdateEntry(newEntry, me->GetCreatureData()); - DoCast(me, SPELL_UNDEATH, true); + DoCastSelf(SPELL_UNDEATH, true); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 54d56a0b884..d7a8e89c0f2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -792,15 +792,12 @@ class boss_the_lich_king : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) + if (spellInfo->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) Talk(SAY_LK_FROSTMOURNE_KILL); - } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override - { - if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) + if (spellInfo->Id == REMORSELESS_WINTER_1 || spellInfo->Id == REMORSELESS_WINTER_2) { me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_DEFAULT, LIGHT_SNOWSTORM, 5000); me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_LIGHT_SNOW, 0.5f); @@ -1205,11 +1202,11 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ICE_LOCK) + if (spellInfo->Id == SPELL_ICE_LOCK) me->SetFacingTo(3.085098f); - else if (spell->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK) + else if (spellInfo->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK) me->LoadEquipment(1); // remove glow on ashbringer } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 481cf48f034..4efcceff275 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -378,9 +378,9 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DREAM_SLIP) + if (spellInfo->Id == SPELL_DREAM_SLIP) { DoCastSelf(SPELL_CLEAR_ALL); DoCastSelf(SPELL_REPUTATION_BOSS_KILL, true); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index b9024af2849..7f8fb391876 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -740,9 +740,9 @@ struct npc_icc_orb_controller : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ORB_CONTROLLER_ACTIVE) + if (spellInfo->Id == SPELL_ORB_CONTROLLER_ACTIVE) if (GameObject* orb = me->FindNearestGameObject(GO_EMPOWERING_BLOOD_ORB, 5.0f)) orb->AI()->SetGUID(caster->GetGUID(), DATA_GUID); } diff --git a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp index 19982f0e869..0f4532378c8 100644 --- a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp +++ b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp @@ -68,10 +68,14 @@ public: _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 15s); } - void SpellHit(Unit* caster, SpellInfo const* /*spell*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { - if (caster->IsVehicle()) - Unit::Kill(me, caster); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (unitCaster->IsVehicle()) + Unit::Kill(me, unitCaster); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index 8fb3897c717..54e137c666c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -124,13 +124,17 @@ class boss_faerlina : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_WIDOWS_EMBRACE_HELPER) { ++_frenzyDispels; Talk(EMOTE_WIDOW_EMBRACE, caster); - Unit::Kill(me, caster); + Unit::Kill(me, unitCaster); } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 47287928c80..e44371b464c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -46,31 +46,25 @@ enum Spells /* baron */ SPELL_BARON_MARK = 28834, - SPELL_UNHOLY_SHADOW = 28882, /* thane */ SPELL_THANE_MARK = 28832, - SPELL_METEOR = 28884, /* lady */ - SPELL_SHADOW_BOLT = 57374, SPELL_LADY_MARK = 28833, - SPELL_VOID_ZONE = 28863, SPELL_UNYIELDING_PAIN = 57381, /* sir */ - SPELL_HOLY_BOLT = 57376, SPELL_SIR_MARK = 28835, - SPELL_HOLY_WRATH = 28883, SPELL_CONDEMNATION = 57377 }; -#define SPELL_HELPER_UNHOLY_SHADOW RAID_MODE<uint32>(28882, 57369) // Rivendare: Unholy Shadow -#define SPELL_HELPER_METEOR RAID_MODE<uint32>(28884, 57467) // Korth'azz: Meteor -#define SPELL_HELPER_SHADOW_BOLT RAID_MODE<uint32>(57374, 57464) // Blaumeux : Shadow Bolt -#define SPELL_HELPER_VOID_ZONE RAID_MODE<uint32>(28863, 57463) // Blaumeux : Void Zone -#define SPELL_HELPER_HOLY_BOLT RAID_MODE<uint32>(57376, 57465) // Zeliek : Holy Bolt -#define SPELL_HELPER_HOLY_WRATH RAID_MODE<uint32>(28883, 57466) // Zeliek: Holy Wrath +#define SPELL_UNHOLY_SHADOW RAID_MODE<uint32>(28882, 57369) // Rivendare: Unholy Shadow +#define SPELL_METEOR RAID_MODE<uint32>(28884, 57467) // Korth'azz: Meteor +#define SPELL_SHADOW_BOLT RAID_MODE<uint32>(57374, 57464) // Blaumeux : Shadow Bolt +#define SPELL_VOID_ZONE RAID_MODE<uint32>(28863, 57463) // Blaumeux : Void Zone +#define SPELL_HOLY_BOLT RAID_MODE<uint32>(57376, 57465) // Zeliek : Holy Bolt +#define SPELL_HOLY_WRATH RAID_MODE<uint32>(28883, 57466) // Zeliek: Holy Wrath enum Actions { @@ -439,7 +433,7 @@ class boss_four_horsemen_baron : public CreatureScript events.Repeat(Seconds(12)); break; case EVENT_UNHOLYSHADOW: - DoCastVictim(SPELL_HELPER_UNHOLY_SHADOW); + DoCastVictim(SPELL_UNHOLY_SHADOW); events.Repeat(randtime(Seconds(10), Seconds(30))); break; } @@ -450,9 +444,9 @@ class boss_four_horsemen_baron : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HELPER_UNHOLY_SHADOW) + if (spellInfo->Id == SPELL_UNHOLY_SHADOW) Talk(SAY_SPECIAL); } }; @@ -513,7 +507,7 @@ class boss_four_horsemen_thane : public CreatureScript case EVENT_METEOR: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true)) { - DoCast(target, SPELL_HELPER_METEOR); + DoCast(target, SPELL_METEOR); _shouldSay = true; } events.Repeat(randtime(Seconds(13), Seconds(17))); @@ -526,9 +520,9 @@ class boss_four_horsemen_thane : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (_shouldSay && spell->Id == SPELL_HELPER_METEOR) + if (_shouldSay && spellInfo->Id == SPELL_METEOR) { Talk(SAY_SPECIAL); _shouldSay = false; @@ -588,7 +582,7 @@ class boss_four_horsemen_lady : public CreatureScript case EVENT_VOIDZONE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) { - DoCast(target, SPELL_HELPER_VOID_ZONE, true); + DoCast(target, SPELL_VOID_ZONE, true); Talk(SAY_SPECIAL); } events.Repeat(randtime(Seconds(12), Seconds(18))); @@ -600,7 +594,7 @@ class boss_four_horsemen_lady : public CreatureScript return; if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) - DoCast(target, SPELL_HELPER_SHADOW_BOLT); + DoCast(target, SPELL_SHADOW_BOLT); else { DoCastAOE(SPELL_UNYIELDING_PAIN); @@ -658,7 +652,7 @@ class boss_four_horsemen_sir : public CreatureScript case EVENT_HOLYWRATH: if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) { - DoCast(target, SPELL_HELPER_HOLY_WRATH, true); + DoCast(target, SPELL_HOLY_WRATH, true); _shouldSay = true; } events.Repeat(randtime(Seconds(10), Seconds(18))); @@ -670,7 +664,7 @@ class boss_four_horsemen_sir : public CreatureScript return; if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true)) - DoCast(target, SPELL_HELPER_HOLY_BOLT); + DoCast(target, SPELL_HOLY_BOLT); else { DoCastAOE(SPELL_CONDEMNATION); @@ -678,9 +672,9 @@ class boss_four_horsemen_sir : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (_shouldSay && spell->Id == SPELL_HELPER_HOLY_WRATH) + if (_shouldSay && spellInfo->Id == SPELL_HOLY_WRATH) { Talk(SAY_SPECIAL); _shouldSay = false; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 045f47bafcf..8d3186510a8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -909,12 +909,10 @@ public: return nullptr; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override - { - if (!spell) - return; - switch (spell->Id) + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + switch (spellInfo->Id) { case SPELL_ANCHOR_1_TRAINEE: DoCastAOE(SPELL_ANCHOR_2_TRAINEE, true); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index ea123ca992d..85e9fc14c98 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -65,9 +65,9 @@ class boss_grobbulus : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 12min); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SLIME_SPRAY) + if (spellInfo->Id == SPELL_SLIME_SPRAY) me->SummonCreature(NPC_FALLOUT_SLIME, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index f568aa836b7..8e8b8c03585 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -279,9 +279,9 @@ public: damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CHAINS_DUMMY) + if (spellInfo->Id == SPELL_CHAINS_DUMMY) { Talk(SAY_CHAINS); std::list<Unit*> targets; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 229d08ff336..75c8d5bad47 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -99,9 +99,9 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_UNDERSTUDY_TAUNT) + if (spellInfo->Id == SPELL_UNDERSTUDY_TAUNT) Talk(SAY_TAUNTED, caster); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 15172e682b8..ba7367b9488 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -187,12 +187,16 @@ class boss_sapphiron : public CreatureScript EnterPhaseGround(true); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch(spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch(spellInfo->Id) { case SPELL_CHECK_RESISTS: - if (target && target->GetResistance(SPELL_SCHOOL_MASK_FROST) > MAX_FROST_RESISTANCE) + if (unitTarget->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) _canTheHundredClub = false; break; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 19a71ccf656..53483222e0a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -599,35 +599,36 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!caster) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) return; - if (spell->Id != SPELL_STALAGG_TESLA_PERIODIC) + + if (spellInfo->Id != SPELL_STALAGG_TESLA_PERIODIC) return; if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); - if (Creature* creatureCaster = caster->ToCreature()) - creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + creatureCaster->SetImmuneToPC(false); + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); } if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) { - caster->CastStop(SPELL_TESLA_SHOCK); - caster->CastSpell(target, SPELL_TESLA_SHOCK,true); + creatureCaster->CastStop(SPELL_TESLA_SHOCK); + creatureCaster->CastSpell(target, SPELL_TESLA_SHOCK,true); } } else if (isOverloading || refreshBeam) { isOverloading = false; refreshBeam = false; - caster->CastStop(); - caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); - caster->SetImmuneToPC(true); + creatureCaster->CastStop(); + creatureCaster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); + creatureCaster->SetImmuneToPC(true); } } @@ -848,35 +849,37 @@ public: refreshBeam = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!caster) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) return; - if (spell->Id != SPELL_FEUGEN_TESLA_PERIODIC) + + if (spellInfo->Id != SPELL_FEUGEN_TESLA_PERIODIC) return; + if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) { if (!isOverloading) { isOverloading = true; - caster->SetImmuneToPC(false); - if (Creature* creatureCaster = caster->ToCreature()) - creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + creatureCaster->SetImmuneToPC(false); + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); } if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - caster->CastStop(SPELL_TESLA_SHOCK); - caster->CastSpell(target, SPELL_TESLA_SHOCK,true); + creatureCaster->CastStop(SPELL_TESLA_SHOCK); + creatureCaster->CastSpell(target, SPELL_TESLA_SHOCK,true); } } else if (isOverloading || refreshBeam) { isOverloading = false; refreshBeam = false; - caster->CastStop(); - caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); - caster->SetImmuneToPC(true); + creatureCaster->CastStop(); + creatureCaster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); + creatureCaster->SetImmuneToPC(true); } } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index c7933fc602c..3cba17226ce 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -627,16 +627,16 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_POWER_SPARK_MALYGOS) + if (spellInfo->Id == SPELL_POWER_SPARK_MALYGOS) { if (Creature* creature = caster->ToCreature()) creature->DespawnOrUnsummon(); Talk(SAY_BUFF_SPARK); } - else if (spell->Id == SPELL_MALYGOS_BERSERK) + else if (spellInfo->Id == SPELL_MALYGOS_BERSERK) Talk(EMOTE_HIT_BERSERKER_TIMER); } @@ -1028,9 +1028,9 @@ public: _instance = creature->GetInstanceScript(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_PORTAL_OPENED) + if (spellInfo->Id == SPELL_PORTAL_OPENED) { if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_MALYGOS))) { @@ -1479,12 +1479,12 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARCANE_BOMB_TRIGGER) + if (spellInfo->Id == SPELL_ARCANE_BOMB_TRIGGER) { DoCastAOE(SPELL_ARCANE_BOMB_KNOCKBACK_DAMAGE, true); - DoCast(me, SPELL_ARCANE_OVERLOAD_1, true); + DoCastSelf(SPELL_ARCANE_OVERLOAD_1, true); } } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 558c878990d..7c85a112068 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -296,7 +296,7 @@ class boss_urom : public CreatureScript EngagementOver(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { switch (spellInfo->Id) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index 42b0047a12d..773132afba2 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -203,9 +203,9 @@ class npc_azure_ring_captain : public CreatureScript me->SetReactState(REACT_AGGRESSIVE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ICE_BEAM) + if (spellInfo->Id == SPELL_ICE_BEAM) { target->CastSpell(target, SPELL_SUMMON_ARCANE_BEAM, true); me->DespawnOrUnsummon(); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index adc76ed213b..1f8c4996076 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -265,10 +265,10 @@ class npc_ruby_emerald_amber_drake : public CreatureScript Initialize(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) - if (spell->Id == SPELL_GPS) + if (spellInfo->Id == SPELL_GPS) { if (_instance->GetBossState(DATA_EREGOS) == DONE) Talk(WHISPER_GPS_END, creator); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index b1535ef9e99..94f25c86336 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -146,9 +146,9 @@ public: Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DISPERSE) + if (spellInfo->Id == SPELL_DISPERSE) { for (uint8 i = 0; i < DATA_MAX_SPARKS; ++i) me->CastSpell(me, SPELL_SUMMON_SPARK, true); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index de429ffedf2..8e69dbd9256 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -52,9 +52,10 @@ enum Spells // Molten Golem SPELL_BLAST_WAVE = 23113, SPELL_IMMOLATION_STRIKE = 52433, - SPELL_SHATTER = 52429, }; +#define SPELL_SHATTER DUNGEON_MODE<uint32>(52429,59527) + enum Events { EVENT_PAUSE = 1, @@ -440,10 +441,10 @@ public: } } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* pSpell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // This is the dummy effect of the spells - if (pSpell->Id == SPELL_SHATTER) + if (spellInfo->Id == SPELL_SHATTER) if (me->GetEntry() == NPC_BRITTLE_GOLEM) me->DespawnOrUnsummon(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 2d3972208c3..b2d101565ca 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -765,14 +765,18 @@ struct npc_living_constellation : public CreatureAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_CONSTELLATION_PHASE_EFFECT || caster->GetTypeId() != TYPEID_UNIT) + Creature* creatureCaster = caster->ToCreature(); + if (!creatureCaster) + return; + + if (spellInfo->Id != SPELL_CONSTELLATION_PHASE_EFFECT) return; _instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, EVENT_ID_SUPERMASSIVE_START); - caster->CastSpell(nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK); - DoCast(caster, SPELL_DESPAWN_BLACK_HOLE, TRIGGERED_FULL_MASK); + creatureCaster->CastSpell(nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK); + DoCast(creatureCaster, SPELL_DESPAWN_BLACK_HOLE, TRIGGERED_FULL_MASK); me->DespawnOrUnsummon(500ms); } @@ -825,9 +829,9 @@ struct npc_black_hole : public ScriptedAI _summons.Summon(summon); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DESPAWN_BLACK_HOLE) + if (spellInfo->Id == SPELL_DESPAWN_BLACK_HOLE) { _summons.DespawnAll(); me->DespawnOrUnsummon(1); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index b6654134c07..4066be2f034 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -333,16 +333,16 @@ class boss_flame_leviathan : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_START_THE_ENGINE) + if (spellInfo->Id == SPELL_START_THE_ENGINE) if (Vehicle* vehicleKit = me->GetVehicleKit()) vehicleKit->InstallAllAccessories(false); - if (spell->Id == SPELL_ELECTROSHOCK) + if (spellInfo->Id == SPELL_ELECTROSHOCK) me->InterruptSpell(CURRENT_CHANNELED_SPELL); - if (spell->Id == SPELL_OVERLOAD_CIRCUIT) + if (spellInfo->Id == SPELL_OVERLOAD_CIRCUIT) ++Shutdown; } @@ -478,15 +478,19 @@ class boss_flame_leviathan : public CreatureScript DoBatteringRamIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_PURSUED) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) return; - _pursueTarget = target->GetGUID(); - AttackStart(target); + if (spellInfo->Id != SPELL_PURSUED) + return; + + _pursueTarget = unitTarget->GetGUID(); + AttackStart(unitTarget); - for (SeatMap::const_iterator itr = target->GetVehicleKit()->Seats.begin(); itr != target->GetVehicleKit()->Seats.end(); ++itr) + for (SeatMap::const_iterator itr = unitTarget->GetVehicleKit()->Seats.begin(); itr != unitTarget->GetVehicleKit()->Seats.end(); ++itr) { if (Player* passenger = ObjectAccessor::GetPlayer(*me, itr->second.Passenger.Guid)) { @@ -908,9 +912,9 @@ class npc_pool_of_tar : public CreatureScript damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE)) + if (spellInfo->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE)) me->CastSpell(me, SPELL_BLAZE, true); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index cbbf40cb14f..e71c0efacbd 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1505,12 +1505,16 @@ class npc_unstable_sun_beam : public CreatureScript despawnTimer -= diff; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (target && spell->Id == SPELL_UNSTABLE_ENERGY) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_UNSTABLE_ENERGY) { - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); - target->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM_TRIGGERED); + unitTarget->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM); + unitTarget->RemoveAurasDueToSpell(SPELL_UNSTABLE_SUN_BEAM_TRIGGERED); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index ee6ce37bbcd..d085f830a42 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -219,9 +219,9 @@ class boss_general_vezax : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_SHADOW_CRASH_HIT) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_SHADOW_CRASH_HIT) shadowDodger = false; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index ab19d140553..8c98934e08d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -969,9 +969,9 @@ class npc_toasty_fire : public CreatureScript DoCast(me, SPELL_SINGED, true); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BLOCK_OF_ICE || spell->Id == SPELL_ICE_SHARD || spell->Id == SPELL_ICE_SHARD_HIT) + if (spellInfo->Id == SPELL_BLOCK_OF_ICE || spellInfo->Id == SPELL_ICE_SHARD || spellInfo->Id == SPELL_ICE_SHARD_HIT) { if (GameObject* ToastyFire = me->FindNearestGameObject(GO_TOASTY_FIRE, 1.0f)) me->RemoveGameObject(ToastyFire, true); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 687cfb9dd67..4f79b562e3f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1036,10 +1036,10 @@ class boss_vx_001 : public CreatureScript mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY); } - void SpellHit(Unit* caster, SpellInfo const* /*spellProto*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { if (caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING)) - DoCast(caster, SPELL_RAPID_BURST); + DoCast(caster->ToUnit(), SPELL_RAPID_BURST); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 79f3731eb5e..4de47589379 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -496,9 +496,9 @@ struct boss_razorscale : public BossAI } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HARPOON_TRIGGER) + if (spellInfo->Id == SPELL_HARPOON_TRIGGER) { _harpoonHitCount++; if (_harpoonHitCount == RAID_MODE(2, 4)) @@ -1450,9 +1450,9 @@ struct npc_razorscale_harpoon_fire_state : public ScriptedAI { npc_razorscale_harpoon_fire_state(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FIREBOLT) + if (spellInfo->Id == SPELL_FIREBOLT) { DoCastSelf(SPELL_HARPOON_FIRE_STATE); if (Creature* commander = _instance->GetCreature(DATA_EXPEDITION_COMMANDER)) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index ec831bfcd17..1c82686cb32 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -524,7 +524,7 @@ class boss_thorim : public CreatureScript Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TOUCH_OF_DOMINION_TRIGGERED) { @@ -537,9 +537,9 @@ class boss_thorim : public CreatureScript } } - void SpellHitTarget(Unit* who, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_LIGHTNING_RELEASE) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_LIGHTNING_RELEASE) _dontStandInTheLightning = false; } @@ -1576,7 +1576,7 @@ class npc_sif : public CreatureScript _events.Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_STORMHAMMER_SIF) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 20ef0952791..752bb7f4262 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -736,12 +736,12 @@ class boss_sara : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { if (!roll_chance_i(30) || _events.IsInPhase(PHASE_TRANSFORM)) return; - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_SARAS_FERVOR: Talk(SAY_SARA_FERVOR_HIT); @@ -947,10 +947,10 @@ class boss_yogg_saron : public CreatureScript me->AddLootMode(LOOT_MODE_HARD_MODE_1); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Val'anyr - if (spell->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) + if (spellInfo->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) me->AddLootMode(32); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 32af5e07c00..aaa13484d75 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -446,9 +446,9 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_LAUNCH_HARPOON) + if (spellInfo->Id == SPELL_LAUNCH_HARPOON) if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS)) skadi->AI()->DoAction(ACTION_HARPOON_HIT); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 363ab89f5ed..2157779fd25 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -220,7 +220,7 @@ class boss_svala : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_RITUAL_STRIKE_EFF_1 && !events.IsInPhase(NORMAL) && !events.IsInPhase(SVALADEAD)) { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 384a26f8a91..c883d735d22 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -148,9 +148,9 @@ public: events.ScheduleEvent(EVENT_ANCESTORS_VENGEANCE, DUNGEON_MODE(60000, 45000), EVENT_GROUP_BASE_SPELLS); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_BANE_HIT) + if (target->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_BANE_HIT) kingsBane = false; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 4e06922cf2e..ef419123100 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -248,13 +248,17 @@ class npc_ichor_globule : public CreatureScript creature->SetReactState(REACT_PASSIVE); } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (spellInfo->Id == SPELL_WATER_GLOBULE_VISUAL) { DoCast(me, SPELL_WATER_GLOBULE_TRANSFORM); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->GetMotionMaster()->MoveFollow(caster, 0.0f, 0.0f); + me->GetMotionMaster()->MoveFollow(unitCaster, 0.0f, 0.0f); } } diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index d776e0a5245..4925c379d97 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -121,9 +121,9 @@ class boss_xevozz : public CreatureScript _JustDied(); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARCANE_POWER || spell->Id == H_SPELL_ARCANE_POWER) + if (spellInfo->Id == SPELL_ARCANE_POWER || spellInfo->Id == H_SPELL_ARCANE_POWER) Talk(SAY_SUMMON_ENERGY); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 4190f6685c5..991c63a7754 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1313,18 +1313,21 @@ public: AttackStart(who); } - void SpellHit(Unit* pCaster, SpellInfo const* pSpell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (pSpell->Id == SPELL_ARCANE_CHAINS && pCaster->GetTypeId() == TYPEID_PLAYER && !HealthAbovePct(50) && !bEnslaved) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_ARCANE_CHAINS && !HealthAbovePct(50) && !bEnslaved) { EnterEvadeMode(); //We make sure that the npc is not attacking the player! me->SetReactState(REACT_PASSIVE); - StartFollow(pCaster->ToPlayer()); + StartFollow(playerCaster); me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER); DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF, true); - if (Player* player = pCaster->ToPlayer()) - player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER); + playerCaster->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER); bEnslaved = true; } @@ -1418,10 +1421,14 @@ public: { } - void SpellHit(Unit* unit, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if ((spell->Id == SPELL_NEURAL_NEEDLE || spell->Id == SPELL_PROTOTYPE_NEURAL_NEEDLE) && unit->GetTypeId() == TYPEID_PLAYER) - GotStinged(unit->ToPlayer(), spell->Id); + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_NEURAL_NEEDLE || spellInfo->Id == SPELL_PROTOTYPE_NEURAL_NEEDLE) + GotStinged(playerCaster, spellInfo->Id); } void GotStinged(Player* caster, uint32 spellId) diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 6ea26a2ce8e..3f17d2b3bc5 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -538,9 +538,9 @@ class npc_wyrmrest_defender : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_WYRMREST_DEFENDER_MOUNT: Talk(WHISPER_MOUNTED, me->GetCharmerOrOwner()); @@ -624,9 +624,9 @@ class npc_torturer_lecraft : public CreatureScript Talk (SAY_AGGRO, player); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) + if (spellInfo->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) return; if (Player* player = caster->ToPlayer()) diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index f85844228ca..27e825d885a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -298,13 +298,17 @@ public: _gender = Data; } - void SpellHit(Unit* Caster, SpellInfo const* Spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_OUTHOUSE_GROANS) - { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_OUTHOUSE_GROANS) + { ++_counter; if (_counter < 5) - DoCast(Caster, SPELL_CAMERA_SHAKE, true); + DoCast(unitCaster, SPELL_CAMERA_SHAKE, true); else _counter = 0; DoCast(me, SPELL_DUST_FIELD, true); @@ -495,13 +499,16 @@ public: me->DespawnOrUnsummon(_despawnTimer); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER - && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_RENEW_SKIRMISHER && playerCaster->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) { - DoCast(caster, SPELL_KILL_CREDIT); - Talk(SAY_RANDOM, caster); + DoCast(playerCaster, SPELL_KILL_CREDIT); + Talk(SAY_RANDOM, playerCaster); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); else @@ -616,9 +623,9 @@ public: DoMeleeAttackIfReady(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) + if (spellInfo->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToPC(true); @@ -908,7 +915,7 @@ public: FinishQuest(false, _faction); } - void SpellHit(Unit* caster, SpellInfo const* /*spellInfo*/) override + void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override { if (caster->GetEntry() == NPC_HORDE_LUMBERBOAT || caster->GetEntry() == NPC_ALLIANCE_LUMBERBOAT) FinishQuest(true, _faction); diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 3d28c33dace..1ea5565ae52 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -234,32 +234,36 @@ class npc_tournament_training_dummy : public CreatureScript events.RescheduleEvent(EVENT_DUMMY_RESET, 10000); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + switch (me->GetEntry()) { case NPC_CHARGE_TARGET: - if (spell->Id == SPELL_PLAYER_CHARGE) + if (spellInfo->Id == SPELL_PLAYER_CHARGE) if (isVulnerable) - DoCast(caster, SPELL_CHARGE_CREDIT, true); + DoCast(unitCaster, SPELL_CHARGE_CREDIT, true); break; case NPC_MELEE_TARGET: - if (spell->Id == SPELL_PLAYER_THRUST) + if (spellInfo->Id == SPELL_PLAYER_THRUST) { - DoCast(caster, SPELL_MELEE_CREDIT, true); + DoCast(unitCaster, SPELL_MELEE_CREDIT, true); - if (Unit* target = caster->GetVehicleBase()) + if (Unit* target = unitCaster->GetVehicleBase()) DoCast(target, SPELL_COUNTERATTACK, true); } break; case NPC_RANGED_TARGET: - if (spell->Id == SPELL_PLAYER_BREAK_SHIELD) + if (spellInfo->Id == SPELL_PLAYER_BREAK_SHIELD) if (isVulnerable) - DoCast(caster, SPELL_RANGED_CREDIT, true); + DoCast(unitCaster, SPELL_RANGED_CREDIT, true); break; } - if (spell->Id == SPELL_PLAYER_BREAK_SHIELD) + if (spellInfo->Id == SPELL_PLAYER_BREAK_SHIELD) if (!me->HasAura(SPELL_CHARGE_DEFEND) && !me->HasAura(SPELL_RANGED_DEFEND)) isVulnerable = true; } @@ -756,9 +760,9 @@ class npc_frostbrood_skytalon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_EXPLOSION: DoCast(me, SPELL_IMMOLATION); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index d0702789a66..e0df74454f9 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -304,7 +304,7 @@ public: sayTimer -= diff; } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (spellInfo->Id != SPELL_OFFER) return; @@ -574,16 +574,16 @@ public: { npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target == me) return; - if (spell->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (spellInfo->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) { me->UpdateEntry(NPC_HAIPHOON_AIR); } - else if (spell->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + else if (spellInfo->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) { me->UpdateEntry(NPC_HAIPHOON_WATER); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index e5ec9d5a6ad..19f12b9100c 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -226,15 +226,19 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_ICE_LANCE) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) return; - if (caster->GetVehicleKit()->GetAvailableSeatCount() != 0) + if (spellInfo->Id != SPELL_ICE_LANCE) + return; + + if (unitCaster->GetVehicleKit()->GetAvailableSeatCount() != 0) { me->CastSpell(me, SPELL_FREE_PRISONER, true); - me->CastSpell(caster, SPELL_RIDE_DRAKE, true); + me->CastSpell(unitCaster, SPELL_RIDE_DRAKE, true); me->CastSpell(me, SPELL_SHARD_IMPACT, true); freed = true; } @@ -751,7 +755,7 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (!_playerGuid.IsEmpty() || spellInfo->Id != SPELL_SPEAR_OF_HODIR) return; diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 7bc4aac1b53..a9a5d83a362 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -75,27 +75,28 @@ public: rageclaw->SetFacingToObject(me); } - void UnlockRageclaw(Unit* who, Creature* rageclaw) + void UnlockRageclaw(Creature* rageclaw) { - if (!who) - return; - // pointer check not needed DoCast(rageclaw, SPELL_FREE_RAGECLAW, true); me->setDeathState(DEAD); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_UNLOCK_SHACKLE) + Player* playerCaster = caster->ToPlayer(); + if (!playerCaster) + return; + + if (spellInfo->Id == SPELL_UNLOCK_SHACKLE) { - if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE) + if (playerCaster->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE) { if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID)) { - UnlockRageclaw(caster, rageclaw); - caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID); + UnlockRageclaw(rageclaw); + playerCaster->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID); me->RemoveAurasDueToSpell(SPELL_CHAIN_OF_THE_SCURGE_RIGHT); me->DespawnOrUnsummon(); } @@ -142,9 +143,9 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FREE_RAGECLAW) + if (spellInfo->Id == SPELL_FREE_RAGECLAW) { me->RemoveAurasDueToSpell(SPELL_CHAIN_OF_THE_SCURGE_LEFT); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -925,16 +926,22 @@ public: Reset(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id != GYMERS_GRAB) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) return; - if (Vehicle* veh = caster->GetVehicleKit()) - if (veh->GetAvailableSeatCount() != 0) + if (spellInfo->Id != GYMERS_GRAB) + return; + + if (Vehicle* veh = unitCaster->GetVehicleKit()) { - me->CastSpell(caster, RIDE_VEHICLE, true); - me->CastSpell(caster, HEALING_WINDS, true); + if (veh->GetAvailableSeatCount() != 0) + { + me->CastSpell(caster, RIDE_VEHICLE, true); + me->CastSpell(caster, HEALING_WINDS, true); + } } } }; |
