Scripts/ICC: Prevent Professor Putricide from displaying weird behavior during the Rotface/Festergut encounters as a result of his boss boundary

This commit is contained in:
Treeston
2019-07-31 16:01:56 +02:00
parent 1506af08ad
commit 7fa990edc6
3 changed files with 25 additions and 4 deletions

View File

@@ -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())

View File

@@ -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:

View File

@@ -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];