From 2c88471fe302fc38d36eb56d8d80e7ed4dfcb684 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Wed, 22 Jul 2020 19:20:54 +0200 Subject: [PATCH] Scripts/Misc: more followups --- src/server/game/Entities/Creature/Creature.cpp | 15 +++++++++++---- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 1 + .../IcecrownCitadel/boss_professor_putricide.cpp | 8 ++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 652cb470335..807ebf275bb 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -664,6 +664,13 @@ void Creature::Update(uint32 diff) if (m_deathState != CORPSE) break; + if (IsEngaged()) + { + m_AI_locked = true; + i_AI->UpdateAI(diff); + m_AI_locked = false; + } + if (m_groupLootTimer && lootingGroupLowGUID) { if (m_groupLootTimer <= diff) @@ -759,7 +766,6 @@ void Creature::Update(uint32 diff) { // do not allow the AI to be changed during update m_AI_locked = true; - i_AI->UpdateAI(diff); m_AI_locked = false; } @@ -2448,8 +2454,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; if (GetMap()->IsDungeon()) return true; @@ -3230,7 +3237,7 @@ void Creature::AtDisengage() Unit::AtDisengage(); ClearUnitState(UNIT_STATE_ATTACK_PLAYER); - if (HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) + if (IsAlive() && HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) SetUInt32Value(UNIT_DYNAMIC_FLAGS, GetCreatureTemplate()->dynamicflags); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index f7d83e07a65..4df8c339a2b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -331,6 +331,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 f61189aa2af..01552e2ba88 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))