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/Northrend | |
| 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/Northrend')
9 files changed, 18 insertions, 14 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 30d28e2534f..8105d570cee 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -301,7 +301,7 @@ class boss_halion : public CreatureScript if (events.IsInPhase(PHASE_THREE)) { // Don't consider copied damage. - if (!me->IsInPhase(attacker)) + if (!attacker || !me->IsInPhase(attacker)) return; if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER)) @@ -482,7 +482,7 @@ class boss_twilight_halion : public CreatureScript if (events.IsInPhase(PHASE_THREE)) { // Don't consider copied damage. - if (!me->IsInPhase(attacker)) + if (!attacker || !me->IsInPhase(attacker)) return; if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER)) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 731f70b21bb..c29683fa748 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -975,7 +975,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript return false; } - void DamageTaken(Unit* , uint32& damage) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(65, damage) && !me->HasAura(SPELL_TASTE_OF_BLOOD)) DoCast(me, SPELL_TASTE_OF_BLOOD, true); @@ -1245,7 +1245,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript return false; } - void DamageTaken(Unit* , uint32& damage) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(65, damage) && me->HasAura(SPELL_TASTE_OF_BLOOD)) DoCast(me, SPELL_TASTE_OF_BLOOD, true); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 673bc276a11..5ff54b70d8b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -579,7 +579,7 @@ struct npc_gothik_minion_baseAI : public ScriptedAI void DamageTaken(Unit* attacker, uint32 &damage) override { // do not allow minions to take damage before the gate is opened - if (!_gateIsOpen && !isOnSameSide(attacker)) + if (!_gateIsOpen && (!attacker || !isOnSameSide(attacker))) damage = 0; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 82fde5eb24f..6c2b296d6ac 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -715,7 +715,7 @@ class boss_flame_leviathan_defense_turret : public CreatureScript bool CanAIAttack(Unit const* who) const override { - if (who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() != NPC_SEAT) + if (!who || who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() != NPC_SEAT) return false; return true; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 5c650b734b0..083c37d4763 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -838,9 +838,10 @@ class boss_elder_stonebark : public CreatureScript void DamageTaken(Unit* who, uint32& damage) override { - if (who == me) + if (!who || who == me) return; + ///HACK: should be handled by proc if (me->HasAura(SPELL_PETRIFIED_BARK)) { CastSpellExtraArgs args(TRIGGERED_FULL_MASK); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 2e9fa68bc89..16835d41efc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -716,7 +716,8 @@ class boss_leviathan_mk_ii : public CreatureScript { me->SetStandState(UNIT_STAND_STATE_DEAD); - if (IsEncounterFinished(who)) + Unit* ref = who ? who : me; + if (IsEncounterFinished(ref)) return; me->CastStop(); @@ -960,7 +961,8 @@ class boss_vx_001 : public CreatureScript me->SetStandState(UNIT_STAND_STATE_DEAD); me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - if (IsEncounterFinished(who)) + Unit* ref = who ? who : me; + if (IsEncounterFinished(ref)) return; me->CastStop(); @@ -1139,7 +1141,8 @@ class boss_aerial_command_unit : public CreatureScript { me->SetStandState(UNIT_STAND_STATE_DEAD); - if (IsEncounterFinished(who)) + Unit* ref = who ? who : me; + if (IsEncounterFinished(ref)) return; me->CastStop(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 187ae82ca45..ba93019b049 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -893,7 +893,7 @@ class boss_thorim : public CreatureScript bool CanStartPhase2(Unit* actor) const { - if (actor->GetTypeId() != TYPEID_PLAYER || !me->IsWithinDistInMap(actor, 10.0f)) + if (!actor || actor->GetTypeId() != TYPEID_PLAYER || !me->IsWithinDistInMap(actor, 10.0f)) return false; Creature* runicColossus = instance->GetCreature(DATA_RUNIC_COLOSSUS); @@ -1152,7 +1152,7 @@ class npc_thorim_pre_phase : public CreatureScript void DamageTaken(Unit* attacker, uint32& damage) override { // nullify spell damage - if (!attacker->GetAffectingPlayer()) + if (!attacker || !attacker->GetAffectingPlayer()) damage = 0; } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 568d6e6c092..334436bb49f 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -559,7 +559,7 @@ class npc_scourge_hulk : public CreatureScript void DamageTaken(Unit* attacker, uint32 &damage) override { - if (damage >= me->GetHealth() && attacker->GetEntry() == NPC_SVALA_SORROWGRAVE) + if (damage >= me->GetHealth() && attacker && attacker->GetEntry() == NPC_SVALA_SORROWGRAVE) killedByRitualStrike = true; } diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 00852bf9c26..5493011cf03 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -74,7 +74,7 @@ public: void DamageTaken(Unit* pDoneBy, uint32& uiDamage) override { - if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER) + if (uiDamage > me->GetHealth() && pDoneBy && pDoneBy->GetTypeId() == TYPEID_PLAYER) { uiDamage = 0; pDoneBy->CastSpell(pDoneBy, SPELL_KILL_CREDIT, true); |
