From 4b31a4dfc0cc882746802d1ca37933caf83911e1 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Fri, 6 Jan 2023 00:51:08 +0100 Subject: [PATCH] fix(Scripts/Karazhan): Barnes should respawn on wipe. (#13953) * fix(Scripts/Karazhan): Barnes should respawn on wipe. Fixes #4437 * Update. --- .../EasternKingdoms/Karazhan/bosses_opera.cpp | 28 +++++++++++++++++++ .../Karazhan/instance_karazhan.cpp | 19 +++++++++++++ .../EasternKingdoms/Karazhan/karazhan.h | 3 +- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 482a3b0c5..a9be06b0a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -709,6 +709,13 @@ public: DoZoneInCombat(); } + void EnterEvadeMode(EvadeReason reason) override + { + ScriptedAI::EnterEvadeMode(reason); + + instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL); + } + void JustDied(Unit* /*killer*/) override { Talk(SAY_CRONE_DEATH); @@ -891,6 +898,13 @@ public: me->DespawnOrUnsummon(); } + void EnterEvadeMode(EvadeReason reason) override + { + ScriptedAI::EnterEvadeMode(reason); + + instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL); + } + void JustDied(Unit* /*killer*/) override { DoPlaySoundToSet(me, SOUND_WOLF_DEATH); @@ -1138,6 +1152,13 @@ public: void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override; + void EnterEvadeMode(EvadeReason reason) override + { + ScriptedAI::EnterEvadeMode(reason); + + instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL); + } + void JustDied(Unit*) override { Talk(SAY_JULIANNE_DEATH02); @@ -1287,6 +1308,13 @@ public: ScriptedAI::MoveInLineOfSight(who); } + void EnterEvadeMode(EvadeReason reason) override + { + ScriptedAI::EnterEvadeMode(reason); + + instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL); + } + void JustDied(Unit* /*killer*/) override { Talk(SAY_ROMULO_DEATH); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 0f29956ee..2d116dc85 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -73,7 +73,18 @@ public: case NPC_RELAY: m_uiRelayGUID = creature->GetGUID(); break; + case NPC_BARNES: + _barnesGUID = creature->GetGUID(); + if (GetBossState(DATA_OPERA_PERFORMANCE) != DONE && !creature->IsAlive()) + { + creature->Respawn(true); + } + break; + default: + break; } + + InstanceScript::OnCreatureCreate(creature); } void OnUnitDeath(Unit* unit) override @@ -162,6 +173,13 @@ public: sideEntrance->RemoveGameObjectFlag(GO_FLAG_LOCKED); instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, nullptr); } + else if (state == FAIL) + { + HandleGameObject(m_uiStageDoorLeftGUID, false); + HandleGameObject(m_uiStageDoorRightGUID, false); + HandleGameObject(m_uiCurtainGUID, false); + DoRespawnCreature(_barnesGUID, true); + } break; case DATA_CHESS: if (state == DONE) @@ -336,6 +354,7 @@ public: ObjectGuid ImageGUID; ObjectGuid DustCoveredChest; ObjectGuid m_uiRelayGUID; + ObjectGuid _barnesGUID; GuidVector _operaDecorations[EVENT_RAJ]; }; }; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index cc0a72878..e9fd06e8a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -90,7 +90,8 @@ enum KZMiscCreatures NPC_DREADBEAST = 16177, NPC_SHADOWBEAST = 16176, NPC_KILREK = 17229, - NPC_RELAY = 17645 + NPC_RELAY = 17645, + NPC_BARNES = 16812 }; enum KZGameObjectIds