aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-06-07 11:22:13 +0300
committerGitHub <noreply@github.com>2020-06-07 10:22:13 +0200
commite3b232fe0e5c21a87d3fe71813e9d750259823f1 (patch)
tree58f7306a85e196080ec33a9aa97ba755af955618 /src/server/scripts/EasternKingdoms
parent1181b636c0cec174367906808c999641ca7897fc (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')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp46
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp10
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