diff options
Diffstat (limited to 'src')
3 files changed, 25 insertions, 4 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 8c9e6538ce0..9457b8bfde7 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2427,8 +2427,9 @@ bool Creature::CanCreatureAttack(Unit const* victim, bool /*force*/) const if (!victim->isInAccessiblePlaceFor(this)) return false; - if (IsAIEnabled() && !AI()->CanAIAttack(victim)) - return false; + if (CreatureAI* ai = AI()) + if (!ai->CanAIAttack(victim)) + return false; // we cannot attack in evade mode if (IsInEvadeMode()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index cd2552458c3..2f06d6f0d09 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -340,6 +340,7 @@ class boss_lord_marrowgar : public CreatureScript _boneSpikeImmune.clear(); break; case ACTION_TALK_ENTER_ZONE: + if (me->IsAlive()) Talk(SAY_ENTER_ZONE); break; default: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 24f30d24ba8..f0093e7ca6b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -254,6 +254,14 @@ class boss_professor_putricide : public CreatureScript } } + void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override + { + if (why == EVADE_REASON_BOUNDARY && (events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT))) + return; + + BossAI::EnterEvadeMode(why); + } + void JustEngagedWith(Unit* who) override { if (events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) @@ -443,7 +451,6 @@ class boss_professor_putricide : public CreatureScript events.ScheduleEvent(EVENT_FESTERGUT_DIES, 4s, 0, PHASE_FESTERGUT); break; case ACTION_ROTFACE_COMBAT: - { SetPhase(PHASE_ROTFACE); me->SetSpeedRate(MOVE_RUN, _baseSpeed*2.0f); me->GetMotionMaster()->MovePoint(POINT_ROTFACE, rotfaceWatchPos); @@ -475,7 +482,6 @@ class boss_professor_putricide : public CreatureScript } } break; - } case ACTION_ROTFACE_OOZE: Talk(SAY_ROTFACE_OOZE_FLOOD); if (Creature* dummy = ObjectAccessor::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage])) @@ -710,6 +716,19 @@ class boss_professor_putricide : public CreatureScript { _phase = newPhase; events.SetPhase(newPhase); + + switch (newPhase) + { + case PHASE_FESTERGUT: + SetBoundary(instance->GetBossBoundary(DATA_FESTERGUT)); + break; + case PHASE_ROTFACE: + SetBoundary(instance->GetBossBoundary(DATA_ROTFACE)); + break; + default: + SetBoundary(instance->GetBossBoundary(DATA_PROFESSOR_PUTRICIDE)); + break; + } } ObjectGuid _oozeFloodDummyGUIDs[4]; |