From 9f9f797d5d587f26aac57e2f92188b5ddad58216 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 8 Jan 2013 23:00:40 +0100 Subject: Scripts/TOCR: Fix some faction champions crash Closes #8393 --- .../TrialOfTheCrusader/boss_faction_champions.cpp | 48 ++++++++++++++-------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'src/server/scripts/Northrend') diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 32d4c621450..ba554c3703d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -29,7 +29,7 @@ enum Yells SAY_KILL_PLAYER = 6 }; -enum eAIs +enum AIs { AI_MELEE = 0, AI_RANGED = 1, @@ -1484,8 +1484,11 @@ class mob_toc_hunter : public CreatureScript events.ScheduleEvent(EVENT_STEADY_SHOT, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS)); return; case EVENT_WING_CLIP: - if (me->GetDistance2d(me->getVictim()) < 6.0f) - DoCastVictim(SPELL_WING_CLIP); + if (Unit* target = me->getVictim()) + { + if (me->GetDistance2d(target) < 6.0f) + DoCast(target, SPELL_WING_CLIP); + } events.ScheduleEvent(EVENT_WING_CLIP, urand(15*IN_MILLISECONDS, 25*IN_MILLISECONDS)); return; case EVENT_WYVERN_STING: @@ -1670,13 +1673,16 @@ class mob_toc_warrior : public CreatureScript events.ScheduleEvent(EVENT_SUNDER_ARMOR, urand(2*IN_MILLISECONDS, 5*IN_MILLISECONDS)); return; case EVENT_SHATTERING_THROW: - if (me->getVictim()->HasAuraWithMechanic(1<getVictim()) { - DoCastVictim(SPELL_SHATTERING_THROW); - events.RescheduleEvent(EVENT_SHATTERING_THROW, 5*MINUTE*IN_MILLISECONDS); + if (target->HasAuraWithMechanic(1 << MECHANIC_IMMUNE_SHIELD)) + { + DoCast(target, SPELL_SHATTERING_THROW); + events.RescheduleEvent(EVENT_SHATTERING_THROW, 5*MINUTE*IN_MILLISECONDS); + return; + } } - else - events.RescheduleEvent(EVENT_SHATTERING_THROW, 3*IN_MILLISECONDS); + events.RescheduleEvent(EVENT_SHATTERING_THROW, 3*IN_MILLISECONDS); return; case EVENT_RETALIATION: if (HealthBelowPct(50)) @@ -1746,13 +1752,16 @@ class mob_toc_dk : public CreatureScript events.ScheduleEvent(EVENT_DEATH_COIL, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS)); return; case EVENT_DEATH_GRIP: - if (me->IsInRange(me->getVictim(), 5.0f, 30.0f, false)) + if (Unit* target = me->getVictim()) { - DoCast(me->getVictim(), SPELL_DEATH_GRIP); - events.RescheduleEvent(EVENT_DEATH_GRIP, 35*IN_MILLISECONDS); + if (me->IsInRange(target, 5.0f, 30.0f, false)) + { + DoCast(target, SPELL_DEATH_GRIP); + events.RescheduleEvent(EVENT_DEATH_GRIP, 35*IN_MILLISECONDS); + return; + } } - else - events.RescheduleEvent(EVENT_DEATH_GRIP, 3*IN_MILLISECONDS); + events.RescheduleEvent(EVENT_DEATH_GRIP, 3*IN_MILLISECONDS); return; case EVENT_FROST_STRIKE: DoCastVictim(SPELL_FROST_STRIKE); @@ -1862,13 +1871,16 @@ class mob_toc_rogue : public CreatureScript events.RescheduleEvent(EVENT_BLADE_FLURRY, 5*IN_MILLISECONDS); return; case EVENT_SHADOWSTEP: - if (me->IsInRange(me->getVictim(), 10.0f, 40.0f, false)) + if (Unit* target = me->getVictim()) { - DoCast(me->getVictim(), SPELL_SHADOWSTEP); - events.RescheduleEvent(EVENT_SHADOWSTEP, 30*IN_MILLISECONDS); + if (me->IsInRange(target, 10.0f, 40.0f, false)) + { + DoCast(target, SPELL_SHADOWSTEP); + events.RescheduleEvent(EVENT_SHADOWSTEP, 30*IN_MILLISECONDS); + return; + } } - else - events.RescheduleEvent(EVENT_SHADOWSTEP, 5*IN_MILLISECONDS); + events.RescheduleEvent(EVENT_SHADOWSTEP, 5*IN_MILLISECONDS); return; case EVENT_HEMORRHAGE: DoCastVictim(SPELL_HEMORRHAGE); -- cgit v1.2.3