refactor(Scripts/MagistersTerrace): Clean up instance script (#17346)
This commit is contained in:
@@ -105,7 +105,7 @@ public:
|
|||||||
events.Reset();
|
events.Reset();
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
|
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
|
||||||
instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED);
|
instance->SetBossState(DATA_KAELTHAS, NOT_STARTED);
|
||||||
me->SetImmuneToAll(false);
|
me->SetImmuneToAll(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,12 +125,17 @@ public:
|
|||||||
|
|
||||||
void JustDied(Unit*) override
|
void JustDied(Unit*) override
|
||||||
{
|
{
|
||||||
instance->SetData(DATA_KAELTHAS_EVENT, DONE);
|
instance->SetBossState(DATA_KAELTHAS, DONE);
|
||||||
|
|
||||||
|
if (GameObject* orb = instance->GetGameObject(DATA_ESCAPE_ORB))
|
||||||
|
{
|
||||||
|
orb->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* /*who*/) override
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
instance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS);
|
instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS);
|
||||||
me->SetInCombatWithZone();
|
me->SetInCombatWithZone();
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_FIREBALL, 0);
|
events.ScheduleEvent(EVENT_SPELL_FIREBALL, 0);
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public:
|
|||||||
{
|
{
|
||||||
PlayersKilled = SAY_PLAYER_KILLED;
|
PlayersKilled = SAY_PLAYER_KILLED;
|
||||||
HelpersKilled = SAY_HELPER_DIED;
|
HelpersKilled = SAY_HELPER_DIED;
|
||||||
instance->SetData(DATA_DELRISSA_EVENT, NOT_STARTED);
|
instance->SetBossState(DATA_DELRISSA, NOT_STARTED);
|
||||||
summons.Respawn();
|
summons.Respawn();
|
||||||
|
|
||||||
me->SetLootMode(0);
|
me->SetLootMode(0);
|
||||||
@@ -141,7 +141,7 @@ public:
|
|||||||
{
|
{
|
||||||
me->loot.clear();
|
me->loot.clear();
|
||||||
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, 1, me);
|
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, 1, me);
|
||||||
instance->SetData(DATA_DELRISSA_EVENT, DONE);
|
instance->SetBossState(DATA_DELRISSA, DONE);
|
||||||
me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
||||||
}
|
}
|
||||||
++HelpersKilled;
|
++HelpersKilled;
|
||||||
@@ -151,7 +151,7 @@ public:
|
|||||||
{
|
{
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
summons.DoZoneInCombat();
|
summons.DoZoneInCombat();
|
||||||
instance->SetData(DATA_DELRISSA_EVENT, IN_PROGRESS);
|
instance->SetBossState(DATA_DELRISSA, IN_PROGRESS);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_FLASH_HEAL, 15000);
|
events.ScheduleEvent(EVENT_SPELL_FLASH_HEAL, 15000);
|
||||||
events.ScheduleEvent(EVENT_SPELL_RENEW, 10000);
|
events.ScheduleEvent(EVENT_SPELL_RENEW, 10000);
|
||||||
@@ -177,7 +177,7 @@ public:
|
|||||||
Talk(SAY_DEATH);
|
Talk(SAY_DEATH);
|
||||||
|
|
||||||
if (HelpersKilled == MAX_ACTIVE_HELPERS + 1)
|
if (HelpersKilled == MAX_ACTIVE_HELPERS + 1)
|
||||||
instance->SetData(DATA_DELRISSA_EVENT, DONE);
|
instance->SetBossState(DATA_DELRISSA, DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public:
|
|||||||
events.Reset();
|
events.Reset();
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
SpawnCrystals();
|
SpawnCrystals();
|
||||||
instance->SetData(DATA_SELIN_EVENT, NOT_STARTED);
|
instance->SetBossState(DATA_SELIN_FIREHEART, NOT_STARTED);
|
||||||
CrystalGUID.Clear();
|
CrystalGUID.Clear();
|
||||||
me->SetPower(POWER_MANA, 0);
|
me->SetPower(POWER_MANA, 0);
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ public:
|
|||||||
void JustEngagedWith(Unit* /*who*/) override
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
instance->SetData(DATA_SELIN_EVENT, IN_PROGRESS);
|
instance->SetBossState(DATA_SELIN_FIREHEART, IN_PROGRESS);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_DRAIN_LIFE, 2500, 1);
|
events.ScheduleEvent(EVENT_SPELL_DRAIN_LIFE, 2500, 1);
|
||||||
events.ScheduleEvent(EVENT_SPELL_FEL_EXPLOSION, 2000);
|
events.ScheduleEvent(EVENT_SPELL_FEL_EXPLOSION, 2000);
|
||||||
@@ -134,7 +134,7 @@ public:
|
|||||||
{
|
{
|
||||||
Talk(SAY_DEATH);
|
Talk(SAY_DEATH);
|
||||||
|
|
||||||
instance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete!
|
instance->SetBossState(DATA_SELIN_FIREHEART, DONE); // Encounter complete!
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
IntervalHealthAmount = 1;
|
IntervalHealthAmount = 1;
|
||||||
|
|
||||||
instance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED);
|
instance->SetBossState(DATA_VEXALLUS, NOT_STARTED);
|
||||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,14 +100,14 @@ public:
|
|||||||
void JustDied(Unit* /*killer*/) override
|
void JustDied(Unit* /*killer*/) override
|
||||||
{
|
{
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
instance->SetData(DATA_VEXALLUS_EVENT, DONE);
|
instance->SetBossState(DATA_VEXALLUS, DONE);
|
||||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* /*who*/) override
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
instance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
|
instance->SetBossState(DATA_VEXALLUS, IN_PROGRESS);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, 8000);
|
events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, 8000);
|
||||||
events.ScheduleEvent(EVENT_SPELL_ARCANE_SHOCK, 5000);
|
events.ScheduleEvent(EVENT_SPELL_ARCANE_SHOCK, 5000);
|
||||||
|
|||||||
+20
-116
@@ -26,6 +26,21 @@ ObjectData const creatureData[] =
|
|||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ObjectData const gameobjectData[] =
|
||||||
|
{
|
||||||
|
{ GO_ESCAPE_ORB, DATA_ESCAPE_ORB },
|
||||||
|
{ 0, 0, }
|
||||||
|
};
|
||||||
|
|
||||||
|
DoorData const doorData[] =
|
||||||
|
{
|
||||||
|
{ GO_SELIN_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_PASSAGE },
|
||||||
|
{ GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM },
|
||||||
|
{ GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE },
|
||||||
|
{ GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE },
|
||||||
|
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||||
|
};
|
||||||
|
|
||||||
Position const KalecgosSpawnPos = { 164.3747f, -397.1197f, 2.151798f, 1.66219f };
|
Position const KalecgosSpawnPos = { 164.3747f, -397.1197f, 2.151798f, 1.66219f };
|
||||||
|
|
||||||
class instance_magisters_terrace : public InstanceMapScript
|
class instance_magisters_terrace : public InstanceMapScript
|
||||||
@@ -38,47 +53,16 @@ public:
|
|||||||
instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map)
|
instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||||
{
|
{
|
||||||
SetHeaders(DataHeader);
|
SetHeaders(DataHeader);
|
||||||
LoadObjectData(creatureData, nullptr);
|
SetBossNumber(MAX_ENCOUNTER);
|
||||||
|
LoadObjectData(creatureData, gameobjectData);
|
||||||
|
LoadDoorData(doorData);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 Encounter[MAX_ENCOUNTER];
|
|
||||||
|
|
||||||
ObjectGuid VexallusDoorGUID;
|
|
||||||
ObjectGuid SelinDoorGUID;
|
|
||||||
ObjectGuid SelinEncounterDoorGUID;
|
|
||||||
ObjectGuid DelrissaDoorGUID;
|
|
||||||
ObjectGuid KaelDoorGUID;
|
|
||||||
ObjectGuid EscapeOrbGUID;
|
ObjectGuid EscapeOrbGUID;
|
||||||
|
|
||||||
ObjectGuid DelrissaGUID;
|
ObjectGuid DelrissaGUID;
|
||||||
ObjectGuid KaelGUID;
|
ObjectGuid KaelGUID;
|
||||||
|
|
||||||
void Initialize() override
|
|
||||||
{
|
|
||||||
memset(&Encounter, 0, sizeof(Encounter));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsEncounterInProgress() const override
|
|
||||||
{
|
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
|
||||||
if (Encounter[i] == IN_PROGRESS)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 GetData(uint32 identifier) const override
|
|
||||||
{
|
|
||||||
switch (identifier)
|
|
||||||
{
|
|
||||||
case DATA_SELIN_EVENT:
|
|
||||||
case DATA_VEXALLUS_EVENT:
|
|
||||||
case DATA_DELRISSA_EVENT:
|
|
||||||
case DATA_KAELTHAS_EVENT:
|
|
||||||
return Encounter[identifier];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
|
void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
|
||||||
{
|
{
|
||||||
if (eventId == EVENT_SPAWN_KALECGOS)
|
if (eventId == EVENT_SPAWN_KALECGOS)
|
||||||
@@ -97,37 +81,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetData(uint32 identifier, uint32 data) override
|
|
||||||
{
|
|
||||||
switch (identifier)
|
|
||||||
{
|
|
||||||
case DATA_SELIN_EVENT:
|
|
||||||
HandleGameObject(SelinDoorGUID, data == DONE);
|
|
||||||
HandleGameObject(SelinEncounterDoorGUID, data != IN_PROGRESS);
|
|
||||||
Encounter[identifier] = data;
|
|
||||||
break;
|
|
||||||
case DATA_VEXALLUS_EVENT:
|
|
||||||
if (data == DONE)
|
|
||||||
HandleGameObject(VexallusDoorGUID, true);
|
|
||||||
Encounter[identifier] = data;
|
|
||||||
break;
|
|
||||||
case DATA_DELRISSA_EVENT:
|
|
||||||
if (data == DONE)
|
|
||||||
HandleGameObject(DelrissaDoorGUID, true);
|
|
||||||
Encounter[identifier] = data;
|
|
||||||
break;
|
|
||||||
case DATA_KAELTHAS_EVENT:
|
|
||||||
HandleGameObject(KaelDoorGUID, data != IN_PROGRESS);
|
|
||||||
if (data == DONE)
|
|
||||||
if (GameObject* escapeOrb = instance->GetGameObject(EscapeOrbGUID))
|
|
||||||
escapeOrb->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
|
||||||
Encounter[identifier] = data;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveToDB();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnCreatureCreate(Creature* creature) override
|
void OnCreatureCreate(Creature* creature) override
|
||||||
{
|
{
|
||||||
switch (creature->GetEntry())
|
switch (creature->GetEntry())
|
||||||
@@ -148,60 +101,11 @@ public:
|
|||||||
InstanceScript::OnCreatureCreate(creature);
|
InstanceScript::OnCreatureCreate(creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGameObjectCreate(GameObject* go) override
|
|
||||||
{
|
|
||||||
switch (go->GetEntry())
|
|
||||||
{
|
|
||||||
case GO_SELIN_DOOR:
|
|
||||||
if (GetData(DATA_SELIN_EVENT) == DONE)
|
|
||||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
|
||||||
SelinDoorGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
case GO_SELIN_ENCOUNTER_DOOR:
|
|
||||||
SelinEncounterDoorGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GO_VEXALLUS_DOOR:
|
|
||||||
if (GetData(DATA_VEXALLUS_EVENT) == DONE)
|
|
||||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
|
||||||
VexallusDoorGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GO_DELRISSA_DOOR:
|
|
||||||
if (GetData(DATA_DELRISSA_EVENT) == DONE)
|
|
||||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
|
||||||
DelrissaDoorGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
case GO_KAEL_DOOR:
|
|
||||||
KaelDoorGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
case GO_ESCAPE_ORB:
|
|
||||||
if (GetData(DATA_KAELTHAS_EVENT) == DONE)
|
|
||||||
go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
|
||||||
EscapeOrbGUID = go->GetGUID();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// @todo: Use BossStates. This is for code compatibility
|
|
||||||
void ReadSaveDataMore(std::istringstream& data) override
|
|
||||||
{
|
|
||||||
data >> Encounter[1];
|
|
||||||
data >> Encounter[2];
|
|
||||||
data >> Encounter[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
void WriteSaveDataMore(std::ostringstream& data) override
|
|
||||||
{
|
|
||||||
data << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectGuid GetGuidData(uint32 identifier) const override
|
ObjectGuid GetGuidData(uint32 identifier) const override
|
||||||
{
|
{
|
||||||
switch (identifier)
|
if (identifier == NPC_DELRISSA)
|
||||||
{
|
{
|
||||||
case NPC_DELRISSA:
|
return DelrissaGUID;
|
||||||
return DelrissaGUID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ObjectGuid::Empty;
|
return ObjectGuid::Empty;
|
||||||
|
|||||||
@@ -28,13 +28,14 @@
|
|||||||
|
|
||||||
enum MTData
|
enum MTData
|
||||||
{
|
{
|
||||||
DATA_SELIN_EVENT = 0,
|
DATA_SELIN_FIREHEART = 0,
|
||||||
DATA_VEXALLUS_EVENT = 1,
|
DATA_VEXALLUS = 1,
|
||||||
DATA_DELRISSA_EVENT = 2,
|
DATA_DELRISSA = 2,
|
||||||
DATA_KAELTHAS_EVENT = 3,
|
DATA_KAELTHAS = 3,
|
||||||
MAX_ENCOUNTER = 4,
|
MAX_ENCOUNTER = 4,
|
||||||
|
|
||||||
DATA_KALECGOS = 5
|
DATA_KALECGOS = 5,
|
||||||
|
DATA_ESCAPE_ORB = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MTCreatures
|
enum MTCreatures
|
||||||
|
|||||||
Reference in New Issue
Block a user