diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-01-18 13:58:40 -0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-06-16 12:02:14 +0200 |
| commit | 62c571076e5319c07c7222e139dbfc7c8bb4543f (patch) | |
| tree | 234a3a61c51a3dec6517ab29f3904005f4cb66b8 /src/server/scripts/Outland | |
| parent | ea79b5569809515e680d8e38dd8126f11f5fa666 (diff) | |
Core/Scripts: added nullptr checks to DamageTaken hooks
Since cb9e72e521d3cc415dd15bf6912c87f89e41b92a attacker may not be in world when hook is called
(cherry picked from commit 0db5c2df3fe56f42293865e87ec781cd4d41598b)
Diffstat (limited to 'src/server/scripts/Outland')
5 files changed, 11 insertions, 9 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 0eb318acc6e..6abc09dee88 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -703,8 +703,7 @@ struct boss_illidan_stormrage : public BossAI void DamageTaken(Unit* who, uint32 &damage) override { - - if (damage >= me->GetHealth() && who->GetGUID() != me->GetGUID()) + if (damage >= me->GetHealth() && (!who || who->GetGUID() != me->GetGUID())) { damage = me->GetHealth() - 1; if (!_dead) diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp index 9594465ea83..1009106b426 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp @@ -275,7 +275,7 @@ struct IllidariCouncilBossAI : public BossAI void DamageTaken(Unit* who, uint32 &damage) override { - if (damage >= me->GetHealth() && who->GetGUID() != me->GetGUID()) + if (damage >= me->GetHealth() && (!who || who->GetGUID() != me->GetGUID())) damage = me->GetHealth() - 1; } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 57bd9af5500..829d211fd84 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -128,7 +128,7 @@ public: void DamageTaken(Unit* done_by, uint32 &damage) override { - if (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID()) + if (!done_by || (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID())) { damage = 0; ModifyThreatByPercent(done_by, -100); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index d6e88a17fab..7db59f845a3 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -368,7 +368,7 @@ struct advisorbase_ai : public ScriptedAI } } - void DamageTaken(Unit* killer, uint32 &damage) override + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (damage >= me->GetHealth() && !_inFakeDeath && !_hasRessurrected) { @@ -387,7 +387,7 @@ struct advisorbase_ai : public ScriptedAI me->SetTarget(ObjectGuid::Empty); me->SetStandState(UNIT_STAND_STATE_DEAD); me->GetMotionMaster()->Clear(); - JustDied(killer); + JustDied(nullptr); } } @@ -572,7 +572,9 @@ class boss_kaelthas : public CreatureScript if (_phase == PHASE_NONE) { DoAction(ACTION_START_ENCOUNTER); - me->SetTarget(attacker->GetGUID()); + + if (attacker) + me->SetTarget(attacker->GetGUID()); } if (!_hasFullPower && me->HealthBelowPctDamaged(50, damage)) diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 590342d4a8f..4cf8b780204 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -99,9 +99,10 @@ public: void DamageTaken(Unit* done_by, uint32 &damage) override { - Player* player = done_by->ToPlayer(); + if (!done_by || !me->HealthBelowPctDamaged(30, damage)) + return; - if (player && me->HealthBelowPctDamaged(30, damage)) + if (Player* player = done_by->ToPlayer()) { if (Group* group = player->GetGroup()) { |
