From 9e122a0cad6dc57e22e6d689ea7a763c430a6d78 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 16 Jun 2024 13:57:51 -0300 Subject: [PATCH] =?UTF-8?q?fix(Core/AI):=20Fix=20bosses=20being=20stuck=20?= =?UTF-8?q?IN=5FPROGRESS=20if=20despawnonevade=20fl=E2=80=A6=20(#19070)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Core/AI): Fix bosses being stuck IN_PROGRESS if despawnonevade flag is used --- src/server/game/AI/CreatureAI.cpp | 4 ++-- src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 10 ++++++++++ src/server/game/AI/ScriptedAI/ScriptedCreature.h | 2 ++ .../scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 17d48bf54..1f97131cb 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -223,14 +223,14 @@ void CreatureAI::EnterEvadeMode(EvadeReason why) me->GetVehicleKit()->Reset(true); } + sScriptMgr->OnUnitEnterEvadeMode(me, why); + // despawn bosses at reset - only verified tbc/woltk bosses with this reset type CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(me->GetEntry()); if (cInfo && cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_HARD_RESET)) { me->DespawnOnEvade(); } - - sScriptMgr->OnUnitEnterEvadeMode(me, why); } /*void CreatureAI::AttackedBy(Unit* attacker) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index dbfd88504..9dbd754ff 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -650,6 +650,16 @@ void BossAI::_JustEngagedWith() } } +void BossAI::_EnterEvadeMode(EvadeReason why) +{ + CreatureAI::EnterEvadeMode(why); + if (instance) + { + instance->SetBossState(_bossId, NOT_STARTED); + instance->SaveToDB(); + } +} + void BossAI::TeleportCheaters() { float x, y, z; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 55a838d24..be04450d0 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -488,6 +488,7 @@ public: void Reset() override { _Reset(); } void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); } + void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override { _EnterEvadeMode(why); } void JustDied(Unit* /*killer*/) override { _JustDied(); } void JustReachedHome() override { _JustReachedHome(); } @@ -496,6 +497,7 @@ protected: void _JustEngagedWith(); void _JustDied(); void _JustReachedHome() { me->setActive(false); } + void _EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER); [[nodiscard]] bool _ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const; void TeleportCheaters(); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index c9b6f89b4..403f690a4 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -94,7 +94,7 @@ struct boss_jindo : public BossAI void EnterEvadeMode(EvadeReason evadeReason) override { - if (_EnterEvadeMode(evadeReason)) + if (CreatureAI::_EnterEvadeMode(evadeReason)) { Reset(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DANCE);