diff options
| author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-06-07 11:22:13 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-07 10:22:13 +0200 |
| commit | e3b232fe0e5c21a87d3fe71813e9d750259823f1 (patch) | |
| tree | 58f7306a85e196080ec33a9aa97ba755af955618 /src/server/scripts/EasternKingdoms | |
| parent | 1181b636c0cec174367906808c999641ca7897fc (diff) | |
Core/AI: refactor SpellHit and SpellHitTarget. (#24691)
* Core/AI: refactor SpellHit and SpellHitTarget.
- now caster/target is WorldObject instead of Unit
- remove SpellHitByGameObject / SpellHitTargetGameObject (handled by SpellHit / SpellHitTarget)
- rename parameters in scripts according parent methods
* Restore logic in Algalon script
* Changed check for REMORSELESS_WINTER hit to avoid dublicate call, because it has TARGET_UNIT_CASTER for effects 0/1 and TARGET_GAMEOBJECT_SRC_AREA for effect 2
* Fix build after merge
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
24 files changed, 148 insertions, 102 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 1c33719aa5c..4b8a78933de 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -123,9 +123,9 @@ public: instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ENCAGE_EMBERSEER) + if (spellInfo->Id == SPELL_ENCAGE_EMBERSEER) { if (!me->GetAuraCount(SPELL_ENCAGED_EMBERSEER)) { @@ -134,7 +134,7 @@ public: } } - if (spell->Id == SPELL_EMBERSEER_GROWING_TRIGGER) + if (spellInfo->Id == SPELL_EMBERSEER_GROWING_TRIGGER) { if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 10) Talk(EMOTE_TEN_STACK); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index d2e59177be3..4550c6ec198 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -85,10 +85,10 @@ struct boss_the_beast : public BossAI me->GetMotionMaster()->MovePath(BEAST_MOVEMENT_ID, true); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (spell->Effects[i].IsEffect(SPELL_EFFECT_SKINNING)) + if (spellInfo->Effects[i].IsEffect(SPELL_EFFECT_SKINNING)) if (!me->IsAlive()) // can that even happen? DoCastAOE(SPELL_FINKLE_IS_EINHORN, true); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 3e11a414454..e05535fb9a4 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -222,12 +222,12 @@ public: std::bind(&BossAI::DoMeleeAttackIfReady, this)); } - void SpellHit(Unit* /*source*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Mechanic == MECHANIC_DISARM) + if (spellInfo->Mechanic == MECHANIC_DISARM) Talk(SAY_DISARMED); - if (spell->Id == SPELL_MOUNT) + if (spellInfo->Id == SPELL_MOUNT) { if (Creature* midnight = ObjectAccessor::GetCreature(*me, _midnightGUID)) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 2309b4a5e3f..77f7edc16c0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -154,9 +154,9 @@ public: creature->AI()->KilledUnit(who); } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_INFERNAL_RELAY) + if (spellInfo->Id == SPELL_INFERNAL_RELAY) { me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index a8c2c89cbac..324a82f0a06 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -478,12 +478,12 @@ public: DrinkInturrupted = true; } - void SpellHit(Unit* /*pAttacker*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { //We only care about interrupt effects and only if they are durring a spell currently being cast - if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && - Spell->Effects[1].Effect != SPELL_EFFECT_INTERRUPT_CAST && - Spell->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) + if ((spellInfo->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && + spellInfo->Effects[1].Effect != SPELL_EFFECT_INTERRUPT_CAST && + spellInfo->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) return; //Interrupt effect diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 5761c180729..fdd33a4bca9 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -92,9 +92,9 @@ public: Talk(SAY_AGGRO); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_BROKEN_PACT) + if (spellInfo->Id == SPELL_BROKEN_PACT) events.ScheduleEvent(EVENT_SUMMON_KILREK, 32s); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 6b09acea438..b5b546d5e0b 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -372,9 +372,9 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10))) + if ((spellInfo->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10))) { /* if (not direct damage(aoe, dot)) @@ -1136,9 +1136,9 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_DRINK_POISON) + if (spellInfo->Id == SPELL_DRINK_POISON) { Talk(SAY_JULIANNE_DEATH01); DrinkPoisonTimer = 2500; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 41717966e0a..dedeb2aebb9 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -218,13 +218,17 @@ struct boss_felblood_kaelthas : public BossAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_GRAVITY_LAPSE_INITIAL: { - DoCast(target, gravityLapseTeleportSpells[_gravityLapseTargetCount], true); + DoCast(unitTarget, gravityLapseTeleportSpells[_gravityLapseTargetCount], true); uint32 gravityLapseDamageSpell = SPELL_GRAVITY_LAPSE_DAMAGE; target->m_Events.AddEventAtOffset([target, gravityLapseDamageSpell]() { @@ -236,8 +240,8 @@ struct boss_felblood_kaelthas : public BossAI break; } case SPELL_CLEAR_FLIGHT: - target->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); - target->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DAMAGE); + unitTarget->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); + unitTarget->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DAMAGE); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 19513b177f7..38d328892b5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -571,12 +571,12 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SWIMMING); } - void SpellHit(Unit* pCaster, SpellInfo const* pSpell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL) + if (!m_bIsDuelInProgress && spellInfo->Id == SPELL_DUEL) { - m_uiDuelerGUID = pCaster->GetGUID(); - Talk(SAY_DUEL, pCaster); + m_uiDuelerGUID = caster->GetGUID(); + Talk(SAY_DUEL, caster); m_bIsDuelInProgress = true; } } @@ -752,9 +752,9 @@ struct npc_dark_rider_of_acherus : public ScriptedAI } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DESPAWN_HORSE && target->GetGUID() == _horseGUID) + if (spellInfo->Id == SPELL_DESPAWN_HORSE && target->GetGUID() == _horseGUID) if (Creature* creature = target->ToCreature()) creature->DespawnOrUnsummon(2s); } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index cbd65529da0..6e93fcdaef0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -206,7 +206,7 @@ struct npc_wisp_invis : public ScriptedAI DoCastSelf(_firstSpell); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_HEADLESS_HORSEMAN___WISP_FLIGHT_PORT && _creatureType == 4) me->SetDisplayId(DISPLAYID_INVIS_WISP_MAN); @@ -328,17 +328,21 @@ struct npc_head : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (!_withBody) return; - if (spell->Id == SPELL_HEADLESS_HORSEMAN_CLIMAX___SEND_HEAD) + if (spellInfo->Id == SPELL_HEADLESS_HORSEMAN_CLIMAX___SEND_HEAD) { _withBody = false; if (!_bodyGUID) - _bodyGUID = caster->GetGUID(); + _bodyGUID = unitCaster->GetGUID(); me->RemoveAllAuras(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -349,9 +353,9 @@ struct npc_head : public ScriptedAI DoTalk(SAY_LOST_HEAD); - _scheduler.Schedule(2s, [caster, this](TaskContext /*context*/) + _scheduler.Schedule(2s, [unitCaster, this](TaskContext /*context*/) { - me->GetMotionMaster()->MoveFleeing(caster); + me->GetMotionMaster()->MoveFleeing(unitCaster); }); } } @@ -610,10 +614,14 @@ struct boss_headless_horseman : public ScriptedAI head->AI()->SetData(DATA_HEAD_TALK, SAY_PLAYER_DEATH); } - void SpellHitTarget(Unit* unit, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CONFLAGRATION && unit->HasAura(SPELL_CONFLAGRATION)) - DoTalk(SAY_CONFLAGRATION, unit); + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + if (spellInfo->Id == SPELL_CONFLAGRATION && unitTarget->HasAura(SPELL_CONFLAGRATION)) + DoTalk(SAY_CONFLAGRATION, unitTarget); } void JustDied(Unit* /*killer*/) override @@ -634,8 +642,12 @@ struct boss_headless_horseman : public ScriptedAI } } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + if (_withHead) return; @@ -653,8 +665,8 @@ struct boss_headless_horseman : public ScriptedAI DoTalk(SAY_REJOINED); DoCastSelf(SPELL_HEADLESS_HORSEMAN_CLIMAX___HEAD_VISUAL); - caster->GetMotionMaster()->Clear(); - caster->GetMotionMaster()->MoveFollow(me, 6.f, 0.f); + unitCaster->GetMotionMaster()->Clear(); + unitCaster->GetMotionMaster()->MoveFollow(me, 6.f, 0.f); switch (_phase) { @@ -831,9 +843,9 @@ struct npc_pulsing_pumpkin : public ScriptedAI me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_SPROUTING) + if (spellInfo->Id == SPELL_SPROUTING) { _sprouted = true; me->RemoveAllAuras(); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index 9f7ac20331d..f00a7c1c3db 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -182,10 +182,10 @@ public: damage = 0; } - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Casted from Whitemane - if (spell->Id == SPELL_SCARLET_RESURRECTION) + if (spellInfo->Id == SPELL_SCARLET_RESURRECTION) { scheduler.Schedule(3s, [this](TaskContext /*context*/) { @@ -401,7 +401,7 @@ public: }); } - void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { if (target->GetEntry() == NPC_MOGRAINE && spellInfo->Id == SPELL_SCARLET_RESURRECTION) MograineResurrected(); diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 0c3c37d4c43..0a0744080d1 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -244,9 +244,9 @@ class boss_archmage_arugal : public CreatureScript Talk(SAY_SLAY); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ARUGAL_CURSE) + if (spellInfo->Id == SPELL_ARUGAL_CURSE) Talk(SAY_TRANSFORM); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 5702f0b68be..92da0c408a3 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -156,9 +156,9 @@ struct npc_summoned_skeleton : public ScriptedAI { npc_summoned_skeleton(Creature* creature) : ScriptedAI(creature) { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_DEATH_PACT_2) + if (spellInfo->Id == SPELL_DEATH_PACT_2) DoCastSelf(SPELL_DEATH_PACT_3, true); } }; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index cc4275cf622..2634441d8b4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -146,9 +146,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (Tagged || spell->Id != SPELL_EGAN_BLASTER) + if (Tagged || spellInfo->Id != SPELL_EGAN_BLASTER) return; Player* player = caster->ToPlayer(); @@ -242,9 +242,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (!Tagged && spell->Id == SPELL_EGAN_BLASTER) + if (!Tagged && spellInfo->Id == SPELL_EGAN_BLASTER) Tagged = true; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 50f2b0d4085..6a3d40ef67c 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -161,18 +161,22 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_SHADOW_BLADES: case SPELL_SHADOW_NOVA: case SPELL_CONFOUNDING_BLOW: case SPELL_SHADOW_FURY: - HandleTouchedSpells(target, SPELL_DARK_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_DARK_TOUCHED); break; case SPELL_CONFLAGRATION: - HandleTouchedSpells(target, SPELL_FLAME_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_FLAME_TOUCHED); break; } } @@ -437,19 +441,23 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_BLAZE: - target->CastSpell(target, SPELL_BLAZE_SUMMON, true); + target->CastSpell(unitTarget, SPELL_BLAZE_SUMMON, true); break; case SPELL_CONFLAGRATION: case SPELL_FLAME_SEAR: - HandleTouchedSpells(target, SPELL_FLAME_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_FLAME_TOUCHED); break; case SPELL_SHADOW_NOVA: - HandleTouchedSpells(target, SPELL_DARK_TOUCHED); + HandleTouchedSpells(unitTarget, SPELL_DARK_TOUCHED); break; } } @@ -674,19 +682,25 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - switch (spell->Id) + Unit* unitTarget = target->ToUnit(); + if (!unitTarget) + return; + + switch (spellInfo->Id) { case SPELL_SHADOW_FURY: case SPELL_DARK_STRIKE: - if (!target->HasAura(SPELL_DARK_FLAME)) + if (!unitTarget->HasAura(SPELL_DARK_FLAME)) { - if (target->HasAura(SPELL_FLAME_TOUCHED)) + if (unitTarget->HasAura(SPELL_FLAME_TOUCHED)) { - target->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - target->CastSpell(target, SPELL_DARK_FLAME, true); - } else target->CastSpell(target, SPELL_DARK_TOUCHED, true); + unitTarget->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); + unitTarget->CastSpell(unitTarget, SPELL_DARK_FLAME, true); + } + else + unitTarget->CastSpell(unitTarget, SPELL_DARK_TOUCHED, true); } break; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 58b76ecd122..b7f7b41c4a8 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -198,26 +198,30 @@ public: instance->SetBossState(DATA_FELMYST, DONE); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + // workaround for linked aura /*if (spell->Id == SPELL_VAPOR_FORCE) { caster->CastSpell(caster, SPELL_VAPOR_TRIGGER, true); }*/ // workaround for mind control - if (spell->Id == SPELL_FOG_INFORM) + if (spellInfo->Id == SPELL_FOG_INFORM) { float x, y, z; - caster->GetPosition(x, y, z); + unitCaster->GetPosition(x, y, z); if (Unit* summon = me->SummonCreature(NPC_DEAD, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) { - summon->SetMaxHealth(caster->GetMaxHealth()); - summon->SetHealth(caster->GetMaxHealth()); + summon->SetMaxHealth(unitCaster->GetMaxHealth()); + summon->SetHealth(unitCaster->GetMaxHealth()); summon->CastSpell(summon, SPELL_FOG_CHARM, true); summon->CastSpell(summon, SPELL_FOG_CHARM2, true); } - Unit::DealDamage(me, caster, caster->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); + Unit::DealDamage(me, unitCaster, unitCaster->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 1e3670cffd5..83d84a99eaf 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -474,12 +474,16 @@ struct boss_sathrovarr : public BossAI kalecgos->AI()->EnterEvadeMode(why); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TAP_CHECK_DAMAGE) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_TAP_CHECK_DAMAGE) { DoCastSelf(SPELL_TELEPORT_BACK, true); - Unit::Kill(caster, me); + Unit::Kill(unitCaster, me); } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index c0034cebb38..9633e9458e2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -353,9 +353,9 @@ public: summon->m_Events.AddEvent(new VoidSpawnSummon(summon), summon->m_Events.CalculateTime(1500)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - switch (spell->Id) + switch (spellInfo->Id) { case SPELL_OPEN_ALL_PORTALS: DoCastAOE(SPELL_OPEN_PORTAL, true); diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index f0f4c4f3d19..2c29edfb8f6 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -128,10 +128,10 @@ class boss_archaedas : public CreatureScript me->SetControlled(false, UNIT_STATE_ROOT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // Being woken up from the altar, start the awaken sequence - if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) + if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) { Talk(SAY_AGGRO); iAwakenTimer = 4000; @@ -279,10 +279,10 @@ class npc_archaedas_minions : public CreatureScript bAmIAwake = true; } - void SpellHit(Unit * /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { // time to wake up, start animation - if (spell->Id == SPELL_ARCHAEDAS_AWAKEN) + if (spellInfo->Id == SPELL_ARCHAEDAS_AWAKEN) { iAwakenTimer = 5000; bWakingUp = true; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index f0c8327de53..f0d930cefd1 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -135,9 +135,9 @@ class boss_halazzi : public CreatureScript damage = 0; } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_TRANSFORM_SPLIT2) + if (spellInfo->Id == SPELL_TRANSFORM_SPLIT2) EnterPhase(PHASE_HUMAN); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 8f0eee9e7d1..ff42de1e54b 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -444,10 +444,10 @@ class npc_janalai_firebomb : public CreatureScript void Reset() override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FIRE_BOMB_THROW) - DoCast(me, SPELL_FIRE_BOMB_DUMMY, true); + if (spellInfo->Id == SPELL_FIRE_BOMB_THROW) + DoCastSelf(SPELL_FIRE_BOMB_DUMMY, true); } void JustEngagedWith(Unit* /*who*/) override { } @@ -670,9 +670,9 @@ class npc_janalai_egg : public CreatureScript void UpdateAI(uint32 /*diff*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_HATCH_EGG) + if (spellInfo->Id == SPELL_HATCH_EGG) DoCast(SPELL_SUMMON_HATCHLING); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index 62a8238881c..367b64cc3c5 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -582,10 +582,14 @@ class npc_zuljin_vortex : public CreatureScript void JustEngagedWith(Unit* /*target*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ZAP_INFORM) - DoCast(caster, SPELL_ZAP_DAMAGE, true); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_ZAP_INFORM) + DoCast(unitCaster, SPELL_ZAP_DAMAGE, true); } void UpdateAI(uint32 /*diff*/) override diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 1c52aefd14e..b9d5fe7da42 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -206,9 +206,9 @@ class npc_harrison_jones : public CreatureScript return false; } - void SpellHit(Unit*, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_COSMETIC_SPEAR_THROW) + if (spellInfo->Id == SPELL_COSMETIC_SPEAR_THROW) { me->RemoveAllAuras(); me->SetEntry(NPC_HARRISON_JONES_2); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index c16c9a51fce..2261fa84bb3 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -375,10 +375,14 @@ class npc_zulian_prowler : public CreatureScript me->RemoveAura(SPELL_SNEAK_RANK_1_2); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight - me->Attack(caster, true); + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight + me->Attack(unitCaster, true); } void JustDied(Unit* /*killer*/) override |
