Scripts/Karazhan: Clean up instance script
Closes: #16533 (cherry picked from commit f9eff81388b12f6f8275f892c67bf197188c3450)
This commit is contained in:
@@ -50,19 +50,9 @@ class boss_maiden_of_virtue : public CreatureScript
|
||||
public:
|
||||
boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new boss_maiden_of_virtueAI(creature);
|
||||
}
|
||||
|
||||
struct boss_maiden_of_virtueAI : public BossAI
|
||||
{
|
||||
boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, TYPE_MAIDEN) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
}
|
||||
boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { }
|
||||
|
||||
void KilledUnit(Unit* /*Victim*/) override
|
||||
{
|
||||
@@ -132,6 +122,11 @@ public:
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new boss_maiden_of_virtueAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_maiden_of_virtue()
|
||||
|
||||
@@ -26,6 +26,7 @@ EndScriptData */
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "karazhan.h"
|
||||
|
||||
enum Midnight
|
||||
{
|
||||
@@ -109,6 +110,9 @@ public:
|
||||
Talk(SAY_DEATH);
|
||||
if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight))
|
||||
midnight->KillSelf();
|
||||
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
instance->SetBossState(DATA_ATTUMEN, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override;
|
||||
@@ -157,7 +161,11 @@ public:
|
||||
me->SetVisible(true);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
instance->SetBossState(DATA_ATTUMEN, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
|
||||
@@ -143,12 +143,12 @@ public:
|
||||
if (me->IsAlive())
|
||||
SpawnAdds();
|
||||
|
||||
instance->SetData(TYPE_MOROES, NOT_STARTED);
|
||||
instance->SetBossState(DATA_MOROES, NOT_STARTED);
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
instance->SetData(TYPE_MOROES, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_MOROES, IN_PROGRESS);
|
||||
|
||||
DoZoneInCombat();
|
||||
}
|
||||
@@ -171,7 +171,7 @@ public:
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
instance->SetData(TYPE_MOROES, DONE);
|
||||
instance->SetBossState(DATA_MOROES, DONE);
|
||||
|
||||
DeSpawnAdds();
|
||||
|
||||
@@ -257,12 +257,6 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (!instance->GetData(TYPE_MOROES))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Enrage && HealthBelowPct(30))
|
||||
{
|
||||
DoCast(me, SPELL_FRENZY);
|
||||
@@ -347,7 +341,7 @@ struct boss_moroes_guestAI : public ScriptedAI
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
instance->SetData(TYPE_MOROES, NOT_STARTED);
|
||||
instance->SetBossState(DATA_MOROES, NOT_STARTED);
|
||||
}
|
||||
|
||||
void AcquireGUID()
|
||||
@@ -378,7 +372,7 @@ struct boss_moroes_guestAI : public ScriptedAI
|
||||
|
||||
void UpdateAI(uint32 /*diff*/) override
|
||||
{
|
||||
if (!instance->GetData(TYPE_MOROES))
|
||||
if (instance->GetBossState(DATA_MOROES) != IN_PROGRESS)
|
||||
EnterEvadeMode();
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
@@ -143,10 +143,10 @@ public:
|
||||
me->SetWalk(false);
|
||||
me->setActive(true);
|
||||
|
||||
if (instance->GetData(TYPE_NIGHTBANE) == DONE || instance->GetData(TYPE_NIGHTBANE) == IN_PROGRESS)
|
||||
if (instance->GetBossState(DATA_NIGHTBANE) == DONE || instance->GetBossState(DATA_NIGHTBANE) == IN_PROGRESS)
|
||||
me->DisappearAndDie();
|
||||
else
|
||||
instance->SetData(TYPE_NIGHTBANE, NOT_STARTED);
|
||||
instance->SetBossState(DATA_NIGHTBANE, NOT_STARTED);
|
||||
|
||||
HandleTerraceDoors(true);
|
||||
|
||||
@@ -165,10 +165,10 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
instance->SetData(TYPE_NIGHTBANE, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_NIGHTBANE, IN_PROGRESS);
|
||||
|
||||
HandleTerraceDoors(false);
|
||||
Talk(YELL_AGGRO);
|
||||
Talk(YELL_AGGRO);
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
@@ -179,7 +179,7 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
instance->SetData(TYPE_NIGHTBANE, DONE);
|
||||
instance->SetBossState(DATA_NIGHTBANE, DONE);
|
||||
|
||||
HandleTerraceDoors(true);
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ public:
|
||||
Initialize();
|
||||
|
||||
// Not in progress
|
||||
instance->SetData(TYPE_ARAN, NOT_STARTED);
|
||||
instance->SetBossState(DATA_ARAN, NOT_STARTED);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true);
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ public:
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
instance->SetData(TYPE_ARAN, DONE);
|
||||
instance->SetBossState(DATA_ARAN, DONE);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true);
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ public:
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
instance->SetData(TYPE_ARAN, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_ARAN, IN_PROGRESS);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), false);
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ enum Creatures
|
||||
NPC_DEMONCHAINS = 17248,
|
||||
NPC_FIENDISHIMP = 17267,
|
||||
NPC_PORTAL = 17265,
|
||||
NPC_KILREK = 17229
|
||||
};
|
||||
|
||||
class npc_kilrek : public CreatureScript
|
||||
@@ -315,7 +314,7 @@ public:
|
||||
|
||||
Initialize();
|
||||
|
||||
instance->SetData(TYPE_TERESTIAN, NOT_STARTED);
|
||||
instance->SetBossState(DATA_TERESTIAN, NOT_STARTED);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_BROKEN_PACT);
|
||||
|
||||
@@ -370,7 +369,7 @@ public:
|
||||
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
instance->SetData(TYPE_TERESTIAN, DONE);
|
||||
instance->SetBossState(DATA_TERESTIAN, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@@ -708,13 +708,7 @@ public:
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_CRONE_DEATH);
|
||||
|
||||
instance->SetData(TYPE_OPERA, DONE);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true);
|
||||
|
||||
if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -908,13 +902,7 @@ public:
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
DoPlaySoundToSet(me, SOUND_WOLF_DEATH);
|
||||
|
||||
instance->SetData(TYPE_OPERA, DONE);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true);
|
||||
|
||||
if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -1158,12 +1146,7 @@ public:
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_JULIANNE_DEATH02);
|
||||
|
||||
instance->SetData(TYPE_OPERA, DONE);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true);
|
||||
if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
@@ -1316,13 +1299,7 @@ public:
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_ROMULO_DEATH);
|
||||
|
||||
instance->SetData(TYPE_OPERA, DONE);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true);
|
||||
|
||||
if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
|
||||
@@ -27,8 +27,6 @@ EndScriptData */
|
||||
#include "InstanceScript.h"
|
||||
#include "karazhan.h"
|
||||
|
||||
#define MAX_ENCOUNTER 12
|
||||
|
||||
/*
|
||||
0 - Attumen + Midnight (optional)
|
||||
1 - Moroes
|
||||
@@ -47,8 +45,8 @@ EndScriptData */
|
||||
const Position OptionalSpawn[] =
|
||||
{
|
||||
{ -10960.981445f, -1940.138428f, 46.178097f, 4.12f }, // Hyakiss the Lurker
|
||||
{ -10899.903320f, -2085.573730f, 49.474449f, 1.38f }, // Rokad the Ravager
|
||||
{ -10945.769531f, -2040.153320f, 49.474438f, 0.077f } // Shadikith the Glider
|
||||
{ -10945.769531f, -2040.153320f, 49.474438f, 0.077f }, // Shadikith the Glider
|
||||
{ -10899.903320f, -2085.573730f, 49.474449f, 1.38f } // Rokad the Ravager
|
||||
};
|
||||
|
||||
class instance_karazhan : public InstanceMapScript
|
||||
@@ -66,53 +64,27 @@ public:
|
||||
instance_karazhan_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
SetBossNumber(EncounterCount);
|
||||
|
||||
// 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered.
|
||||
m_uiOperaEvent = urand(1, 3);
|
||||
m_uiOzDeathCount = 0;
|
||||
OperaEvent = urand(EVENT_OZ, EVENT_RAJ);
|
||||
OzDeathCount = 0;
|
||||
OptionalBossCount = 0;
|
||||
}
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
std::string strSaveData;
|
||||
|
||||
uint32 m_uiOperaEvent;
|
||||
uint32 m_uiOzDeathCount;
|
||||
uint32 OptionalBossCount;
|
||||
|
||||
ObjectGuid m_uiCurtainGUID;
|
||||
ObjectGuid m_uiStageDoorLeftGUID;
|
||||
ObjectGuid m_uiStageDoorRightGUID;
|
||||
ObjectGuid m_uiKilrekGUID;
|
||||
ObjectGuid m_uiTerestianGUID;
|
||||
ObjectGuid m_uiMoroesGUID;
|
||||
ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran
|
||||
ObjectGuid m_uiMassiveDoor; // Door at Netherspite
|
||||
ObjectGuid m_uiSideEntranceDoor; // Side Entrance
|
||||
ObjectGuid m_uiGamesmansDoor; // Door before Chess
|
||||
ObjectGuid m_uiGamesmansExitDoor; // Door after Chess
|
||||
ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar
|
||||
ObjectGuid MastersTerraceDoor[2];
|
||||
ObjectGuid ImageGUID;
|
||||
ObjectGuid DustCoveredChest;
|
||||
|
||||
bool IsEncounterInProgress() const override
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case 17229: m_uiKilrekGUID = creature->GetGUID(); break;
|
||||
case 15688: m_uiTerestianGUID = creature->GetGUID(); break;
|
||||
case 15687: m_uiMoroesGUID = creature->GetGUID(); break;
|
||||
case NPC_KILREK:
|
||||
KilrekGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_TERESTIAN_ILLHOOF:
|
||||
TerestianGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_MOROES:
|
||||
MoroesGUID = creature->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,130 +104,129 @@ public:
|
||||
case NPC_PHASE_HOUND:
|
||||
case NPC_DREADBEAST:
|
||||
case NPC_SHADOWBEAST:
|
||||
SetData(TYPE_OPTIONAL_BOSS, NOT_STARTED);
|
||||
if (GetBossState(DATA_OPTIONAL_BOSS) == TO_BE_DECIDED)
|
||||
{
|
||||
++OptionalBossCount;
|
||||
if (OptionalBossCount == OPTIONAL_BOSS_REQUIRED_DEATH_COUNT)
|
||||
{
|
||||
switch (urand(NPC_HYAKISS_THE_LURKER, NPC_ROKAD_THE_RAVAGER))
|
||||
{
|
||||
case NPC_HYAKISS_THE_LURKER:
|
||||
instance->SummonCreature(NPC_HYAKISS_THE_LURKER, OptionalSpawn[0]);
|
||||
break;
|
||||
case NPC_SHADIKITH_THE_GLIDER:
|
||||
instance->SummonCreature(NPC_SHADIKITH_THE_GLIDER, OptionalSpawn[1]);
|
||||
break;
|
||||
case NPC_ROKAD_THE_RAVAGER:
|
||||
instance->SummonCreature(NPC_ROKAD_THE_RAVAGER, OptionalSpawn[2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 uiData) override
|
||||
void SetData(uint32 type, uint32 data) override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_ATTUMEN: m_auiEncounter[0] = uiData; break;
|
||||
case TYPE_MOROES:
|
||||
if (m_auiEncounter[1] == DONE)
|
||||
break;
|
||||
m_auiEncounter[1] = uiData;
|
||||
break;
|
||||
case TYPE_MAIDEN: m_auiEncounter[2] = uiData; break;
|
||||
case TYPE_OPTIONAL_BOSS:
|
||||
m_auiEncounter[3] = uiData;
|
||||
if (uiData == NOT_STARTED)
|
||||
{
|
||||
++OptionalBossCount;
|
||||
if (OptionalBossCount == 50)
|
||||
{
|
||||
switch (urand(0, 2))
|
||||
{
|
||||
case 0:
|
||||
instance->SummonCreature(NPC_HYAKISS_THE_LURKER, OptionalSpawn[0]);
|
||||
break;
|
||||
case 1:
|
||||
instance->SummonCreature(NPC_ROKAD_THE_RAVAGER, OptionalSpawn[1]);
|
||||
break;
|
||||
case 2:
|
||||
instance->SummonCreature(NPC_SHADIKITH_THE_GLIDER, OptionalSpawn[2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TYPE_OPERA:
|
||||
m_auiEncounter[4] = uiData;
|
||||
if (uiData == DONE)
|
||||
UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, NULL);
|
||||
break;
|
||||
case TYPE_CURATOR: m_auiEncounter[5] = uiData; break;
|
||||
case TYPE_ARAN: m_auiEncounter[6] = uiData; break;
|
||||
case TYPE_TERESTIAN: m_auiEncounter[7] = uiData; break;
|
||||
case TYPE_NETHERSPITE: m_auiEncounter[8] = uiData; break;
|
||||
case TYPE_CHESS:
|
||||
if (uiData == DONE)
|
||||
DoRespawnGameObject(DustCoveredChest, DAY);
|
||||
m_auiEncounter[9] = uiData;
|
||||
break;
|
||||
case TYPE_MALCHEZZAR: m_auiEncounter[10] = uiData; break;
|
||||
case TYPE_NIGHTBANE:
|
||||
if (m_auiEncounter[11] != DONE)
|
||||
m_auiEncounter[11] = uiData;
|
||||
break;
|
||||
case DATA_OPERA_OZ_DEATHCOUNT:
|
||||
if (uiData == SPECIAL)
|
||||
++m_uiOzDeathCount;
|
||||
else if (uiData == IN_PROGRESS)
|
||||
m_uiOzDeathCount = 0;
|
||||
if (data == SPECIAL)
|
||||
++OzDeathCount;
|
||||
else if (data == IN_PROGRESS)
|
||||
OzDeathCount = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (uiData == DONE)
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' '
|
||||
<< m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' ' << m_auiEncounter[5] << ' ' << m_auiEncounter[6] << ' '
|
||||
<< m_auiEncounter[7] << ' ' << m_auiEncounter[8] << ' ' << m_auiEncounter[9] << ' ' << m_auiEncounter[10] << ' ' << m_auiEncounter[11];
|
||||
|
||||
strSaveData = saveStream.str();
|
||||
|
||||
SaveToDB();
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
}
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 identifier, ObjectGuid data) override
|
||||
bool SetBossState(uint32 type, EncounterState state) override
|
||||
{
|
||||
if (!InstanceScript::SetBossState(type, state))
|
||||
return false;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DATA_OPERA_PERFORMANCE:
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(StageDoorLeftGUID, true);
|
||||
HandleGameObject(StageDoorRightGUID, true);
|
||||
if (GameObject* pSideEntrance = GetGameObject(SideEntranceDoor))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, NULL);
|
||||
}
|
||||
break;
|
||||
case DATA_CHESS:
|
||||
if (state == DONE)
|
||||
DoRespawnGameObject(DustCoveredChest, DAY);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 type, ObjectGuid data) override
|
||||
{
|
||||
switch (identifier)
|
||||
{
|
||||
case DATA_IMAGE_OF_MEDIVH: ImageGUID = data;
|
||||
}
|
||||
if (type == DATA_IMAGE_OF_MEDIVH)
|
||||
ImageGUID = data;
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case 183932: m_uiCurtainGUID = go->GetGUID(); break;
|
||||
case 184278:
|
||||
m_uiStageDoorLeftGUID = go->GetGUID();
|
||||
if (m_auiEncounter[4] == DONE)
|
||||
case GO_STAGE_CURTAIN:
|
||||
CurtainGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_STAGE_DOOR_LEFT:
|
||||
StageDoorLeftGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case 184279:
|
||||
m_uiStageDoorRightGUID = go->GetGUID();
|
||||
if (m_auiEncounter[4] == DONE)
|
||||
case GO_STAGE_DOOR_RIGHT:
|
||||
StageDoorRightGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case 184517: m_uiLibraryDoor = go->GetGUID(); break;
|
||||
case 185521: m_uiMassiveDoor = go->GetGUID(); break;
|
||||
case 184276: m_uiGamesmansDoor = go->GetGUID(); break;
|
||||
case 184277: m_uiGamesmansExitDoor = go->GetGUID(); break;
|
||||
case 185134: m_uiNetherspaceDoor = go->GetGUID(); break;
|
||||
case 184274: MastersTerraceDoor[0] = go->GetGUID(); break;
|
||||
case 184280: MastersTerraceDoor[1] = go->GetGUID(); break;
|
||||
case 184275:
|
||||
m_uiSideEntranceDoor = go->GetGUID();
|
||||
if (m_auiEncounter[4] == DONE)
|
||||
case GO_PRIVATE_LIBRARY_DOOR:
|
||||
LibraryDoor = go->GetGUID();
|
||||
break;
|
||||
case GO_MASSIVE_DOOR:
|
||||
MassiveDoor = go->GetGUID();
|
||||
break;
|
||||
case GO_GAMESMAN_HALL_DOOR:
|
||||
GamesmansDoor = go->GetGUID();
|
||||
break;
|
||||
case GO_GAMESMAN_HALL_EXIT_DOOR:
|
||||
GamesmansExitDoor = go->GetGUID();
|
||||
break;
|
||||
case GO_NETHERSPACE_DOOR:
|
||||
NetherspaceDoor = go->GetGUID();
|
||||
break;
|
||||
case GO_MASTERS_TERRACE_DOOR:
|
||||
MastersTerraceDoor[0] = go->GetGUID();
|
||||
break;
|
||||
case GO_MASTERS_TERRACE_DOOR2:
|
||||
MastersTerraceDoor[1] = go->GetGUID();
|
||||
break;
|
||||
case GO_SIDE_ENTRANCE_DOOR:
|
||||
SideEntranceDoor = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
else
|
||||
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
break;
|
||||
case 185119: DustCoveredChest = go->GetGUID(); break;
|
||||
case GO_DUST_COVERED_CHEST:
|
||||
DustCoveredChest = go->GetGUID();
|
||||
break;
|
||||
}
|
||||
|
||||
switch (m_uiOperaEvent)
|
||||
switch (OperaEvent)
|
||||
{
|
||||
/// @todo Set Object visibilities for Opera based on performance
|
||||
case EVENT_OZ:
|
||||
@@ -269,77 +240,77 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
std::string GetSaveData() override
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
return strSaveData;
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 uiData) const override
|
||||
{
|
||||
switch (uiData)
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_ATTUMEN: return m_auiEncounter[0];
|
||||
case TYPE_MOROES: return m_auiEncounter[1];
|
||||
case TYPE_MAIDEN: return m_auiEncounter[2];
|
||||
case TYPE_OPTIONAL_BOSS: return m_auiEncounter[3];
|
||||
case TYPE_OPERA: return m_auiEncounter[4];
|
||||
case TYPE_CURATOR: return m_auiEncounter[5];
|
||||
case TYPE_ARAN: return m_auiEncounter[6];
|
||||
case TYPE_TERESTIAN: return m_auiEncounter[7];
|
||||
case TYPE_NETHERSPITE: return m_auiEncounter[8];
|
||||
case TYPE_CHESS: return m_auiEncounter[9];
|
||||
case TYPE_MALCHEZZAR: return m_auiEncounter[10];
|
||||
case TYPE_NIGHTBANE: return m_auiEncounter[11];
|
||||
case DATA_OPERA_PERFORMANCE: return m_uiOperaEvent;
|
||||
case DATA_OPERA_OZ_DEATHCOUNT: return m_uiOzDeathCount;
|
||||
case DATA_OPERA_PERFORMANCE:
|
||||
return OperaEvent;
|
||||
case DATA_OPERA_OZ_DEATHCOUNT:
|
||||
return OzDeathCount;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ObjectGuid GetGuidData(uint32 uiData) const override
|
||||
ObjectGuid GetGuidData(uint32 type) const override
|
||||
{
|
||||
switch (uiData)
|
||||
switch (type)
|
||||
{
|
||||
case DATA_KILREK: return m_uiKilrekGUID;
|
||||
case DATA_TERESTIAN: return m_uiTerestianGUID;
|
||||
case DATA_MOROES: return m_uiMoroesGUID;
|
||||
case DATA_GO_STAGEDOORLEFT: return m_uiStageDoorLeftGUID;
|
||||
case DATA_GO_STAGEDOORRIGHT: return m_uiStageDoorRightGUID;
|
||||
case DATA_GO_CURTAINS: return m_uiCurtainGUID;
|
||||
case DATA_GO_LIBRARY_DOOR: return m_uiLibraryDoor;
|
||||
case DATA_GO_MASSIVE_DOOR: return m_uiMassiveDoor;
|
||||
case DATA_GO_SIDE_ENTRANCE_DOOR: return m_uiSideEntranceDoor;
|
||||
case DATA_GO_GAME_DOOR: return m_uiGamesmansDoor;
|
||||
case DATA_GO_GAME_EXIT_DOOR: return m_uiGamesmansExitDoor;
|
||||
case DATA_GO_NETHER_DOOR: return m_uiNetherspaceDoor;
|
||||
case DATA_MASTERS_TERRACE_DOOR_1: return MastersTerraceDoor[0];
|
||||
case DATA_MASTERS_TERRACE_DOOR_2: return MastersTerraceDoor[1];
|
||||
case DATA_IMAGE_OF_MEDIVH: return ImageGUID;
|
||||
case DATA_KILREK:
|
||||
return KilrekGUID;
|
||||
case DATA_TERESTIAN:
|
||||
return TerestianGUID;
|
||||
case DATA_MOROES:
|
||||
return MoroesGUID;
|
||||
case DATA_GO_STAGEDOORLEFT:
|
||||
return StageDoorLeftGUID;
|
||||
case DATA_GO_STAGEDOORRIGHT:
|
||||
return StageDoorRightGUID;
|
||||
case DATA_GO_CURTAINS:
|
||||
return CurtainGUID;
|
||||
case DATA_GO_LIBRARY_DOOR:
|
||||
return LibraryDoor;
|
||||
case DATA_GO_MASSIVE_DOOR:
|
||||
return MassiveDoor;
|
||||
case DATA_GO_SIDE_ENTRANCE_DOOR:
|
||||
return SideEntranceDoor;
|
||||
case DATA_GO_GAME_DOOR:
|
||||
return GamesmansDoor;
|
||||
case DATA_GO_GAME_EXIT_DOOR:
|
||||
return GamesmansExitDoor;
|
||||
case DATA_GO_NETHER_DOOR:
|
||||
return NetherspaceDoor;
|
||||
case DATA_MASTERS_TERRACE_DOOR_1:
|
||||
return MastersTerraceDoor[0];
|
||||
case DATA_MASTERS_TERRACE_DOOR_2:
|
||||
return MastersTerraceDoor[1];
|
||||
case DATA_IMAGE_OF_MEDIVH:
|
||||
return ImageGUID;
|
||||
}
|
||||
|
||||
return ObjectGuid::Empty;
|
||||
}
|
||||
|
||||
void Load(char const* chrIn) override
|
||||
{
|
||||
if (!chrIn)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(chrIn);
|
||||
std::istringstream loadStream(chrIn);
|
||||
|
||||
loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
|
||||
>> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7]
|
||||
>> m_auiEncounter[8] >> m_auiEncounter[9] >> m_auiEncounter[10] >> m_auiEncounter[11];
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
|
||||
m_auiEncounter[i] = NOT_STARTED;
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
private:
|
||||
uint32 OperaEvent;
|
||||
uint32 OzDeathCount;
|
||||
uint32 OptionalBossCount;
|
||||
ObjectGuid CurtainGUID;
|
||||
ObjectGuid StageDoorLeftGUID;
|
||||
ObjectGuid StageDoorRightGUID;
|
||||
ObjectGuid KilrekGUID;
|
||||
ObjectGuid TerestianGUID;
|
||||
ObjectGuid MoroesGUID;
|
||||
ObjectGuid LibraryDoor; // Door at Shade of Aran
|
||||
ObjectGuid MassiveDoor; // Door at Netherspite
|
||||
ObjectGuid SideEntranceDoor; // Side Entrance
|
||||
ObjectGuid GamesmansDoor; // Door before Chess
|
||||
ObjectGuid GamesmansExitDoor; // Door after Chess
|
||||
ObjectGuid NetherspaceDoor; // Door at Malchezaar
|
||||
ObjectGuid MastersTerraceDoor[2];
|
||||
ObjectGuid ImageGUID;
|
||||
ObjectGuid DustCoveredChest;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ public:
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
instance->SetData(TYPE_OPERA, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, IN_PROGRESS);
|
||||
|
||||
//resets count for this event, in case earlier failed
|
||||
if (m_uiEventId == EVENT_OZ)
|
||||
@@ -377,7 +377,7 @@ public:
|
||||
if (InstanceScript* instance = creature->GetInstanceScript())
|
||||
{
|
||||
// Check for death of Moroes and if opera event is not done already
|
||||
if (instance->GetData(TYPE_MOROES) == DONE && instance->GetData(TYPE_OPERA) != DONE)
|
||||
if (instance->GetBossState(DATA_MOROES) == DONE && instance->GetBossState(DATA_OPERA_PERFORMANCE) != DONE)
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, OZ_GOSSIP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
|
||||
@@ -21,27 +21,26 @@
|
||||
|
||||
#define DataHeader "KZ"
|
||||
|
||||
uint32 const EncounterCount = 12;
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
TYPE_ATTUMEN = 1,
|
||||
TYPE_MOROES = 2,
|
||||
TYPE_MAIDEN = 3,
|
||||
TYPE_OPTIONAL_BOSS = 4,
|
||||
TYPE_OPERA = 5,
|
||||
TYPE_CURATOR = 6,
|
||||
TYPE_ARAN = 7,
|
||||
TYPE_TERESTIAN = 8,
|
||||
TYPE_NETHERSPITE = 9,
|
||||
TYPE_CHESS = 10,
|
||||
TYPE_MALCHEZZAR = 11,
|
||||
TYPE_NIGHTBANE = 12,
|
||||
DATA_ATTUMEN = 0,
|
||||
DATA_MOROES = 1,
|
||||
DATA_MAIDEN_OF_VIRTUE = 2,
|
||||
DATA_OPTIONAL_BOSS = 3,
|
||||
DATA_OPERA_PERFORMANCE = 4,
|
||||
DATA_CURATOR = 5,
|
||||
DATA_ARAN = 6,
|
||||
DATA_TERESTIAN = 7,
|
||||
DATA_NETHERSPITE = 8,
|
||||
DATA_CHESS = 9,
|
||||
DATA_MALCHEZZAR = 10,
|
||||
DATA_NIGHTBANE = 11,
|
||||
|
||||
DATA_OPERA_PERFORMANCE = 13,
|
||||
DATA_OPERA_OZ_DEATHCOUNT = 14,
|
||||
|
||||
DATA_KILREK = 15,
|
||||
DATA_TERESTIAN = 16,
|
||||
DATA_MOROES = 17,
|
||||
DATA_GO_CURTAINS = 18,
|
||||
DATA_GO_STAGEDOORLEFT = 19,
|
||||
DATA_GO_STAGEDOORRIGHT = 20,
|
||||
@@ -69,6 +68,8 @@ enum MiscCreatures
|
||||
NPC_HYAKISS_THE_LURKER = 16179,
|
||||
NPC_ROKAD_THE_RAVAGER = 16181,
|
||||
NPC_SHADIKITH_THE_GLIDER = 16180,
|
||||
NPC_TERESTIAN_ILLHOOF = 15688,
|
||||
NPC_MOROES = 15687,
|
||||
|
||||
// Trash
|
||||
NPC_COLDMIST_WIDOW = 16171,
|
||||
@@ -78,6 +79,29 @@ enum MiscCreatures
|
||||
NPC_GREATER_SHADOWBAT = 16174,
|
||||
NPC_PHASE_HOUND = 16178,
|
||||
NPC_DREADBEAST = 16177,
|
||||
NPC_SHADOWBEAST = 16176
|
||||
NPC_SHADOWBEAST = 16176,
|
||||
NPC_KILREK = 17229
|
||||
};
|
||||
|
||||
enum GameObjectIds
|
||||
{
|
||||
GO_STAGE_CURTAIN = 183932,
|
||||
GO_STAGE_DOOR_LEFT = 184278,
|
||||
GO_STAGE_DOOR_RIGHT = 184279,
|
||||
GO_PRIVATE_LIBRARY_DOOR = 184517,
|
||||
GO_MASSIVE_DOOR = 185521,
|
||||
GO_GAMESMAN_HALL_DOOR = 184276,
|
||||
GO_GAMESMAN_HALL_EXIT_DOOR = 184277,
|
||||
GO_NETHERSPACE_DOOR = 185134,
|
||||
GO_MASTERS_TERRACE_DOOR = 184274,
|
||||
GO_MASTERS_TERRACE_DOOR2 = 184280,
|
||||
GO_SIDE_ENTRANCE_DOOR = 184275,
|
||||
GO_DUST_COVERED_CHEST = 185119
|
||||
};
|
||||
|
||||
enum Misc
|
||||
{
|
||||
OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user