From d202aea16d626fbb260ea1b673fdc5d64a9d6373 Mon Sep 17 00:00:00 2001 From: Viste Date: Wed, 7 Aug 2019 22:25:20 +0300 Subject: [PATCH] fix(Scripts/Karazhan): Cleanup in opera event (#2163) --- .../EasternKingdoms/Karazhan/bosses_opera.cpp | 31 +++---------------- .../Karazhan/instance_karazhan.cpp | 15 ++++++--- .../EasternKingdoms/Karazhan/karazhan.cpp | 1 + 3 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 7759a1fc5..b7e47b302 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -665,6 +665,7 @@ public: void Reset() { + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); CycloneTimer = 22000; ChainLightningTimer = 8000; } @@ -689,12 +690,7 @@ public: { Talk(SAY_CRONE_DEATH); - instance->SetData(DATA_OPERA_PERFORMANCE, DONE); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void UpdateAI(uint32 diff) @@ -702,9 +698,6 @@ public: if (!UpdateVictim()) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - if (CycloneTimer <= diff) { if (Creature* Cyclone = DoSpawnCreature(CREATURE_CYCLONE, float(urand(0, 9)), float(urand(0, 9)), 0, 0, TEMPSUMMON_TIMED_DESPAWN, 15000)) @@ -880,12 +873,7 @@ public: { DoPlaySoundToSet(me, SOUND_WOLF_DEATH); - instance->SetData(DATA_OPERA_PERFORMANCE, DONE); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void UpdateAI(uint32 diff) @@ -1130,11 +1118,7 @@ public: { Talk(SAY_JULIANNE_DEATH02); - instance->SetData(DATA_OPERA_PERFORMANCE, DONE); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORRIGHT), true); - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void KilledUnit(Unit* /*victim*/) @@ -1283,12 +1267,7 @@ public: { Talk(SAY_ROMULO_DEATH); - instance->SetData(DATA_OPERA_PERFORMANCE, DONE); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetData64(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void KilledUnit(Unit* /*victim*/) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index f6a76e367..2414c4ed8 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -1,9 +1,13 @@ #include "ScriptMgr.h" +#include "Creature.h" +#include "GameObject.h" #include "InstanceScript.h" #include "karazhan.h" #include "SpellScript.h" #include "SpellAuraEffects.h" +#include "Map.h" +#include "Player.h" const Position OptionalSpawn[] = { @@ -122,7 +126,7 @@ public: HandleGameObject(m_uiStageDoorRightGUID, true); if (GameObject* sideEntrance = instance->GetGameObject(m_uiSideEntranceDoor)) sideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); - + instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, nullptr); } break; case DATA_CHESS: @@ -136,6 +140,11 @@ public: return true; } + void SetData64(uint32 type, uint64 data) override + { + if (type == DATA_IMAGE_OF_MEDIVH) + ImageGUID = data; + } void OnGameObjectCreate(GameObject* go) override { @@ -193,8 +202,6 @@ public: case GO_DUST_COVERED_CHEST: DustCoveredChest = go->GetGUID(); break; - - } switch (OperaEvent) @@ -253,8 +260,6 @@ public: } return 0; - - } uint64 GetData64(uint32 data) const override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index eeb8e3927..d4712181c 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -339,6 +339,7 @@ public: break; case GOSSIP_ACTION_INFO_DEF+2: CloseGossipMenuFor(player); + pBarnesAI->m_uiEventId = urand(EVENT_OZ, EVENT_RAJ); pBarnesAI->StartEvent(); break; case GOSSIP_ACTION_INFO_DEF+3: