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/Kalimdor | |
| 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/Kalimdor')
14 files changed, 53 insertions, 49 deletions
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index 1fb6a1350d5..66916abf9fa 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -128,9 +128,9 @@ class boss_epoch : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* info) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (info->Id == SPELL_TIME_STEP_DUMMY && me->IsHostileTo(target)) + if (spellInfo->Id == SPELL_TIME_STEP_DUMMY && me->IsHostileTo(target)) { _stepTargets.push_back(target->GetGUID()); events.RescheduleEvent(EVENT_TIME_STEP, Milliseconds(500)); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index 3286e02d707..f2dbe13b2c0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -69,9 +69,9 @@ class boss_infinite_corruptor : public CreatureScript DoCastAOE(SPELL_CORRUPTION_OF_TIME_CHANNEL); // implicitly targets the Guardian } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_CORRUPTION_OF_TIME_CHANNEL) + if (spellInfo->Id == SPELL_CORRUPTION_OF_TIME_CHANNEL) target->CastSpell(target, SPELL_CORRUPTION_OF_TIME_TARGET, true); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 171d9c885f1..ecae7ab189d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1408,9 +1408,9 @@ public: current = candidate; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (!_crateRevealed && spell->Id == SPELL_ARCANE_DISRUPTION) + if (!_crateRevealed && spellInfo->Id == SPELL_ARCANE_DISRUPTION) { _crateRevealed = true; if (InstanceScript* instance = me->GetInstanceScript()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 10d3891e109..7ef04d01913 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -140,15 +140,15 @@ public: void JustEngagedWith(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { if (SpellCorrupt_Timer) return; - if (spell->Id == SPELL_CORRUPT_AEONUS) + if (spellInfo->Id == SPELL_CORRUPT_AEONUS) SpellCorrupt_Timer = 1000; - if (spell->Id == SPELL_CORRUPT) + if (spellInfo->Id == SPELL_CORRUPT) SpellCorrupt_Timer = 3000; } diff --git a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp index 484548f59f9..6c36ade96d9 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp @@ -291,9 +291,9 @@ struct npc_shard_of_torment : public NullCreatureAI }); } - void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override { - if (spell->Id != SPELL_TORMENT) + if (spellInfo->Id != SPELL_TORMENT) return; scheduler.CancelAll(); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 073dfc27886..07ed8f3a359 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -196,14 +196,14 @@ public: Talk(SAY_KILL); } - void SpellHit(Unit* /*pCaster*/, SpellInfo const* Spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (Spell->Id == SPELL_BREATH_EAST_TO_WEST || - Spell->Id == SPELL_BREATH_WEST_TO_EAST || - Spell->Id == SPELL_BREATH_SE_TO_NW || - Spell->Id == SPELL_BREATH_NW_TO_SE || - Spell->Id == SPELL_BREATH_SW_TO_NE || - Spell->Id == SPELL_BREATH_NE_TO_SW) + if (spellInfo->Id == SPELL_BREATH_EAST_TO_WEST || + spellInfo->Id == SPELL_BREATH_WEST_TO_EAST || + spellInfo->Id == SPELL_BREATH_SE_TO_NW || + spellInfo->Id == SPELL_BREATH_NW_TO_SE || + spellInfo->Id == SPELL_BREATH_SW_TO_NE || + spellInfo->Id == SPELL_BREATH_NE_TO_SW) { PointData = GetMoveData(); MovePoint = PointData->LocIdEnd; @@ -274,20 +274,20 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* Spell) override + void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override { //Workaround - Couldn't find a way to group this spells (All Eruption) - if (((Spell->Id >= 17086 && Spell->Id <= 17095) || - (Spell->Id == 17097) || - (Spell->Id >= 18351 && Spell->Id <= 18361) || - (Spell->Id >= 18564 && Spell->Id <= 18576) || - (Spell->Id >= 18578 && Spell->Id <= 18607) || - (Spell->Id == 18609) || - (Spell->Id >= 18611 && Spell->Id <= 18628) || - (Spell->Id >= 21132 && Spell->Id <= 21133) || - (Spell->Id >= 21135 && Spell->Id <= 21139) || - (Spell->Id >= 22191 && Spell->Id <= 22202) || - (Spell->Id >= 22267 && Spell->Id <= 22268)) && + if (((spellInfo->Id >= 17086 && spellInfo->Id <= 17095) || + (spellInfo->Id == 17097) || + (spellInfo->Id >= 18351 && spellInfo->Id <= 18361) || + (spellInfo->Id >= 18564 && spellInfo->Id <= 18576) || + (spellInfo->Id >= 18578 && spellInfo->Id <= 18607) || + (spellInfo->Id == 18609) || + (spellInfo->Id >= 18611 && spellInfo->Id <= 18628) || + (spellInfo->Id >= 21132 && spellInfo->Id <= 21133) || + (spellInfo->Id >= 21135 && spellInfo->Id <= 21139) || + (spellInfo->Id >= 22191 && spellInfo->Id <= 22202) || + (spellInfo->Id >= 22267 && spellInfo->Id <= 22268)) && (target->GetTypeId() == TYPEID_PLAYER)) { instance->SetData(DATA_SHE_DEEP_BREATH_MORE, FAIL); diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 2a714c2f029..46645487965 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -122,11 +122,11 @@ class boss_ossirian : public CreatureScript Initialize(); } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { for (uint8 i = 0; i < NUM_WEAKNESS; ++i) { - if (spell->Id == SpellWeakness[i]) + if (spellInfo->Id == SpellWeakness[i]) { me->RemoveAurasDueToSpell(SPELL_SUPREME); // Despawn used crystal diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 155a1e22edd..23f21777528 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -164,13 +164,13 @@ struct boss_twinemperorsAI : public BossAI } } - void SpellHit(Unit* caster, SpellInfo const* entry) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { if (caster == me) return; Creature* pOtherBoss = GetOtherBoss(); - if (entry->Id != SPELL_HEAL_BROTHER || !pOtherBoss) + if (spellInfo->Id != SPELL_HEAL_BROTHER || !pOtherBoss) return; // add health so we keep same percentage for both brothers diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index ac0f5471c22..a2d832bfb88 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -151,9 +151,9 @@ class boss_viscidus : public CreatureScript Talk(EMOTE_CRACK); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) + if ((spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) { ++_hitcounter; diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 81dd54d7e8d..6f506da40d8 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -106,9 +106,9 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->SpellFamilyFlags[2] & 0x80000000 && !_tappedBySpell) + if (spellInfo->SpellFamilyFlags[2] & 0x80000000 && !_tappedBySpell) { _events.Reset(); _tappedBySpell = true; diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 9ae1fb8d987..7affabe89e3 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -73,14 +73,18 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_KODO_KOMBO_ITEM) + Unit* unitCaster = caster->ToUnit(); + if (!unitCaster) + return; + + if (spellInfo->Id == SPELL_KODO_KOMBO_ITEM) { - if (!(caster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) + if (!(unitCaster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) && (me->GetEntry() == NPC_AGED_KODO || me->GetEntry() == NPC_DYING_KODO || me->GetEntry() == NPC_ANCIENT_KODO)) { - caster->CastSpell(caster, SPELL_KODO_KOMBO_PLAYER_BUFF, true); + unitCaster->CastSpell(unitCaster, SPELL_KODO_KOMBO_PLAYER_BUFF, true); DoCast(me, SPELL_KODO_KOMBO_DESPAWN_BUFF, true); me->UpdateEntry(NPC_TAMED_KODO); @@ -90,12 +94,12 @@ public: EngagementOver(); - me->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, me->GetFollowAngle()); + me->GetMotionMaster()->MoveFollow(unitCaster, PET_FOLLOW_DIST, me->GetFollowAngle()); me->setActive(true); me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } } - else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) + else if (spellInfo->Id == SPELL_KODO_KOMBO_GOSSIP) { me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index de3c914722e..fa5565b194f 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -79,7 +79,7 @@ public: work = true; } - void SpellHit(Unit* caster, SpellInfo const* spell) override + void SpellHit(WorldObject* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_AWAKEN_PEON) return; diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index a97afda5025..f01a8443c5f 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -84,9 +84,9 @@ public: DoCast(SPELL_OMEN_SUMMON_SPOTLIGHT); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_ELUNE_CANDLE) + if (spellInfo->Id == SPELL_ELUNE_CANDLE) { if (me->HasAura(SPELL_OMEN_STARFALL)) me->RemoveAurasDueToSpell(SPELL_OMEN_STARFALL); diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 60e3416fb01..ae2e44dc78f 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -187,9 +187,9 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override { - if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY) + if (spellInfo->Id == SPELL_FLARE || spellInfo->Id == SPELL_FOLLY) { ++FlareCount; |
