diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2019-07-31 16:01:56 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-12-17 22:46:06 +0100 |
| commit | 917d9b76213368354c41b552a085618638458f85 (patch) | |
| tree | 546fe025ce6b3c7d7909646562a53baf44c98b8a | |
| parent | 6b1ca0ca128425677043d36a147a019f6d2ac6e6 (diff) | |
Scripts/ICC: Prevent Professor Putricide from displaying weird behavior during the Rotface/Festergut encounters as a result of his boss boundary
(cherry picked from commit 7fa990edc6cbae05e8b68da58313fd675ac5fa81)
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 dd5cb8ec621..00990b08d1f 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2601,8 +2601,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 cb02f0df035..3edb8f86a61 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -339,6 +339,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 a97653ec317..44e0178fa06 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -251,6 +251,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)) @@ -440,7 +448,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); @@ -472,7 +479,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])) @@ -708,6 +714,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]; |
