From 4034a56f87424ebd1de54db34b1f0e37561e2746 Mon Sep 17 00:00:00 2001 From: Petric Date: Mon, 31 Aug 2020 13:19:22 +0100 Subject: [PATCH] =?UTF-8?q?fix(CORE/Raid):=20Lich=20King=20=E2=80=9CPain?= =?UTF-8?q?=20and=20Suffering=E2=80=9D=20snapping=20and=20=E2=80=9CShadow?= =?UTF-8?q?=20Trap=E2=80=9D=20not=20targeting=20tanks=20(#3293)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Lich King was snapping to north after using Pain and Suffering when instead he should be facing the direction of last target. -Shadow Trap could not target tanks, it should be able to do so Closes https://github.com/azerothcore/azerothcore-wotlk/issues/2826 Co-authored-by: Francesco Borzì Co-authored-by: Stefano Borzì --- .../IcecrownCitadel/boss_the_lich_king.cpp | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index aec579db7..405aae564 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -359,6 +359,34 @@ void SendPacketToPlayers(WorldPacket const* data, Unit* source) } +struct ShadowTrapLKTargetSelector : public acore::unary_function +{ +public: + ShadowTrapLKTargetSelector(Creature* source, bool playerOnly = true, bool reqLOS = false, float maxDist = 0.0f) : _source(source), _playerOnly(playerOnly), _reqLOS(reqLOS), _maxDist(maxDist) { } + bool operator()(Unit const* target) const + { + if (!target) + return false; + if (!target->IsAlive()) + return false; + if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER) + return false; + if (_maxDist && _source->GetExactDist(target) > _maxDist) + return false; + if (_reqLOS && !_source->IsWithinLOSInMap(target)) + return false; + return true; + } + +private: + Creature const* _source; + bool _playerOnly; + bool _reqLOS; + float _maxDist; +}; + + + struct NonTankLKTargetSelector : public acore::unary_function { public: @@ -1033,7 +1061,7 @@ class boss_the_lich_king : public CreatureScript events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, 5000, EVENT_GROUP_ABILITIES); break; case EVENT_SHADOW_TRAP: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankLKTargetSelector(me, true, true, 100.0f))) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, ShadowTrapLKTargetSelector(me, true, true, 100.0f))) me->CastSpell(target, SPELL_SHADOW_TRAP, false); events.ScheduleEvent(EVENT_SHADOW_TRAP, 15500, EVENT_GROUP_ABILITIES); break; @@ -1041,7 +1069,7 @@ class boss_the_lich_king : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { //events.DelayEventsToMax(500, EVENT_GROUP_ABILITIES); - me->SetOrientation(me->GetAngle(target)); + me->SetFacingTo(me->GetAngle(target)); me->CastSpell(target, SPELL_PAIN_AND_SUFFERING, false); } events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, (IsHeroic() ? urand(1250, 1750) : urand(1750, 2250)), EVENT_GROUP_ABILITIES);