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/Outland | |
| 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/Outland')
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)) { |
