aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Outland
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-06-07 11:22:13 +0300
committerShauren <shauren.trinity@gmail.com>2022-01-06 20:46:25 +0100
commit3171cd3fa9dbcec43f5d70b74ab2f54a2aa44173 (patch)
tree838c54078c04b1fdae4ec1aac6fdc70ebdae45b2 /src/server/scripts/Outland
parentf0242d4ec7857a18145dd0a9965fcb8526e981c8 (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/Outland')
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp10
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp6
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp4
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp22
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp12
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp5
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp31
13 files changed, 58 insertions, 54 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 8e11c9eb1a0..5c35dbf8de2 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -236,9 +236,9 @@ struct boss_shade_of_akama : public BossAI
_DespawnAtEvade();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL)
+ if (spellInfo->Id == SPELL_AKAMA_SOUL_CHANNEL)
{
events.ScheduleEvent(EVENT_START_CHANNELERS_AND_SPAWNERS, 1s);
me->SetEmoteState(EMOTE_STATE_NONE);
@@ -247,7 +247,7 @@ struct boss_shade_of_akama : public BossAI
AttackStart(akama);
}
- if (spell->Id == SPELL_AKAMA_SOUL_RETRIEVE)
+ if (spellInfo->Id == SPELL_AKAMA_SOUL_RETRIEVE)
DoCastSelf(SPELL_AKAMA_SOUL_EXPEL_CHANNEL);
}
@@ -381,9 +381,9 @@ struct npc_akama_shade : public ScriptedAI
void EnterEvadeMode(EvadeReason /*why*/) override { }
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_THREAT && !_isInCombat)
+ if (spellInfo->Id == SPELL_THREAT && !_isInCombat)
{
_isInCombat = true;
me->SetWalk(false);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index ffa022b73d8..4bf3c1bd840 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -92,9 +92,9 @@ struct boss_najentus : public BossAI
Talk(SAY_DEATH);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD))
+ if (spellInfo->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD))
{
me->RemoveAurasDueToSpell(SPELL_TIDAL_SHIELD);
DoCastSelf(SPELL_TIDAL_BURST, true);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
index 7f1672fe609..4480183ee7b 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
@@ -149,10 +149,10 @@ public:
Talk(SAY_SLAY);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
//hack :(
- if (spell->Id == SPELL_WARLORDS_RAGE_PROC)
+ if (spellInfo->Id == SPELL_WARLORDS_RAGE_PROC)
if (instance->GetData(DATA_DISTILLER) == DONE)
me->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
index b268366da4c..cde14374090 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
@@ -514,7 +514,7 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI
DoCastSelf(SPELL_FIND_OPENING_CHANNEL);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
switch (spellInfo->Id)
{
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index e8c4b6ab210..62340af1e3c 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -122,11 +122,11 @@ class boss_gruul : public CreatureScript
Talk(SAY_DEATH);
}
- void SpellHitTarget(Unit* target, SpellInfo const* pSpell) override
+ void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override
{
//This to emulate effect1 (77) of SPELL_GROUND_SLAM, knock back to any direction
//It's initially wrong, since this will cause fall damage, which is by comments, not intended.
- if (pSpell->Id == SPELL_GROUND_SLAM)
+ if (spellInfo->Id == SPELL_GROUND_SLAM)
{
if (target->GetTypeId() == TYPEID_PLAYER)
{
@@ -146,7 +146,7 @@ class boss_gruul : public CreatureScript
}
//this part should be in the core
- if (pSpell->Id == SPELL_SHATTER)
+ if (spellInfo->Id == SPELL_SHATTER)
{
/// @todo use eventmap to kill this stuff
//clear this, if we are still performing
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index 22d0d29af0f..f9829a0f5e9 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -111,9 +111,9 @@ class boss_nazan : public CreatureScript
}
}
- void SpellHitTarget(Unit* target, SpellInfo const* entry) override
+ void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override
{
- if (target && entry->Id == uint32(SPELL_FIREBALL))
+ if (spellInfo->Id == uint32(SPELL_FIREBALL))
me->SummonCreature(NPC_LIQUID_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 30000);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index ebe371fff15..2bec89430ca 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -184,9 +184,9 @@ class boss_magtheridon : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_SHADOW_CAGE)
+ if (spellInfo->Id == SPELL_SHADOW_CAGE)
Talk(SAY_BANISHED);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index bd34e9d25ad..11e56ac9d91 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -217,9 +217,9 @@ class boss_alar : public CreatureScript
}
}
- void SpellHit(Unit*, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_DIVE_BOMB_VISUAL)
+ if (spellInfo->Id == SPELL_DIVE_BOMB_VISUAL)
{
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
me->SetDisplayId(11686);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index b1507498aee..b5e3ff5239e 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -357,9 +357,9 @@ struct advisorbase_ai : public ScriptedAI
ScriptedAI::AttackStart(who);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_RESSURECTION)
+ if (spellInfo->Id == SPELL_RESSURECTION)
{
_hasRessurrected = true;
me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index e237e08e2b2..05bea7679df 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -124,9 +124,13 @@ public:
me->DespawnOrUnsummon(1);
}
- void SpellHit(Unit* caster, SpellInfo const* spell) override
+ void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER)
+ Player* playerCaster = caster->ToPlayer();
+ if (!playerCaster)
+ return;
+
+ if (spellInfo->Id == SPELL_T_PHASE_MODULATOR)
{
const uint32 entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL};
int cid = rand32() % (4 - 1);
@@ -151,7 +155,7 @@ public:
IsNihil = true;
}
else
- AttackStart(caster);
+ AttackStart(playerCaster);
}
}
}
@@ -841,15 +845,19 @@ class npc_simon_bunny : public CreatureScript
}
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) override
+ void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override
{
+ Unit* unitTarget = target->ToUnit();
+ if (!unitTarget)
+ return;
+
// Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target.
// Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself
// so player gets damage equal to calculated damage dbc basepoints for SPELL_BAD_PRESS_DAMAGE (~50)
- if (spell->Id == SPELL_BAD_PRESS_TRIGGER)
+ if (spellInfo->Id == SPELL_BAD_PRESS_TRIGGER)
{
- int32 bp = (int32)((float)(fails)*0.33f*target->GetMaxHealth());
- target->CastSpell(target, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp));
+ int32 bp = (int32)((float)(fails) * 0.33f * unitTarget->GetMaxHealth());
+ unitTarget->CastSpell(unitTarget, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp));
}
}
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index 42273903322..8d244c3b240 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -142,9 +142,9 @@ public:
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
+ void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_CHAIN_LIGHTNING)
+ if (spellInfo->Id == SPELL_CHAIN_LIGHTNING)
{
if (rand32() % 10)
return;
@@ -334,9 +334,9 @@ public:
summoned->AI()->AttackStart(me);
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
+ void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING)
+ if (spellInfo->Id == SPELL_KUR_CHAIN_LIGHTNING)
{
if (rand32() % 30)
return;
@@ -344,7 +344,7 @@ public:
Talk(SAY_KUR_LIGHTNING);
}
- if (spell->Id == SPELL_KUR_FROST_SHOCK)
+ if (spellInfo->Id == SPELL_KUR_FROST_SHOCK)
{
if (rand32() % 30)
return;
@@ -442,7 +442,7 @@ public:
scheduler.CancelAll();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_PLANT_WARMAUL_OGRE_BANNER || spellInfo->Id == SPELL_PLANT_KIL_SORROW_BANNER)
bannered = true;
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index b7c13cad870..d15d8884707 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -406,11 +406,6 @@ public:
PlayerGUID = who->GetGUID();
}
- //void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) override
- //{
- // DoCast(me, SPELL_DE_MATERIALIZE);
- //}
-
void UpdateAI(uint32 diff) override
{
if (!Materialize)
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index 1610d1063fc..a71daccef04 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -162,9 +162,9 @@ public:
caster->AI()->SetData(TYPE_INFERNAL, DATA_DIED);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_SUMMON_INFERNAL)
+ if (spellInfo->Id == SPELL_SUMMON_INFERNAL)
{
me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE));
me->SetImmuneToPC(false);
@@ -250,14 +250,14 @@ public:
Initialize();
}
- void SpellHit(Unit* pCaster, SpellInfo const* spell) override
+ void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
{
if (bCanEat || bIsEating)
return;
- if (pCaster->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_PLACE_CARCASS && !me->HasAura(SPELL_JUST_EATEN))
+ if (caster->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == SPELL_PLACE_CARCASS && !me->HasAura(SPELL_JUST_EATEN))
{
- uiPlayerGUID = pCaster->GetGUID();
+ uiPlayerGUID = caster->GetGUID();
bCanEat = true;
}
}
@@ -381,18 +381,19 @@ public:
me->SetDisableGravity(false);
}
- void SpellHit(Unit* caster, SpellInfo const* spell) override
+ void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
{
- if (!caster)
+ Player* playerCaster = caster->ToPlayer();
+ if (!playerCaster)
return;
- if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped)
+ if (spellInfo->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped)
{
Tapped = true;
- PlayerGUID = caster->GetGUID();
+ PlayerGUID = playerCaster->GetGUID();
me->SetFaction(FACTION_FLAYER_HUNTER);
- DoCast(caster, SPELL_FORCE_OF_NELTHARAKU, true);
+ DoCast(playerCaster, SPELL_FORCE_OF_NELTHARAKU, true);
Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 50);
if (Dragonmaw)
@@ -401,7 +402,7 @@ public:
AttackStart(Dragonmaw);
}
- me->GetThreatManager().ClearThreat(caster);
+ me->GetThreatManager().ClearThreat(playerCaster);
}
}
@@ -508,12 +509,12 @@ public:
Initialize();
}
- void SpellHit(Unit* caster, SpellInfo const* spell) override
+ void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
{
if (!caster)
return;
- if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == 40468 && !Tapped)
+ if (caster->GetTypeId() == TYPEID_PLAYER && spellInfo->Id == 40468 && !Tapped)
{
PlayerGUID = caster->GetGUID();
@@ -1664,9 +1665,9 @@ public:
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
{
- if (spell->Id == SPELL_WHISTLE)
+ if (spellInfo->Id == SPELL_WHISTLE)
{
if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f))
{