Scripts/TMG: converted remaining parts of the instance script to new model

This commit is contained in:
Ovahlord
2019-01-27 16:32:13 +01:00
parent 3c5680f16a
commit 81a6bc1acf
4 changed files with 76 additions and 89 deletions

View File

@@ -156,7 +156,7 @@ public:
//this mean she at some point evaded
void JustReachedHome() override
{
instance->SetBossState(DATA_DELRISSA, FAIL);
instance->SetBossState(DATA_PRIESTESS_DELRISSA, FAIL);
}
void JustEngagedWith(Unit* who) override
@@ -175,7 +175,7 @@ public:
}
}
instance->SetBossState(DATA_DELRISSA, IN_PROGRESS);
instance->SetBossState(DATA_PRIESTESS_DELRISSA, IN_PROGRESS);
}
void InitializeLackeys()
@@ -243,7 +243,7 @@ public:
Talk(SAY_DEATH);
if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY)
instance->SetBossState(DATA_DELRISSA, DONE);
instance->SetBossState(DATA_PRIESTESS_DELRISSA, DONE);
else
{
if (me->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
@@ -389,10 +389,10 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
AcquireGUIDs();
// in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her)
if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA)))
if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA))
{
if (!pDelrissa->IsAlive())
pDelrissa->Respawn();
if (!delrissa->IsAlive())
delrissa->Respawn();
}
}
@@ -413,26 +413,26 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
}
}
if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA)))
if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA))
{
if (pDelrissa->IsAlive() && !pDelrissa->GetVictim())
if (delrissa->IsAlive() && !delrissa->GetVictim())
{
who->SetInCombatWith(pDelrissa);
pDelrissa->AddThreat(who, 0.0f);
who->SetInCombatWith(delrissa);
delrissa->AddThreat(who, 0.0f);
}
}
}
void JustDied(Unit* /*killer*/) override
{
Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA));
Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA);
uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
if (!pDelrissa)
if (!delrissa)
return;
//should delrissa really yell if dead?
pDelrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id);
delrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id);
instance->SetData(DATA_DELRISSA_DEATH_COUNT, SPECIAL);
@@ -442,28 +442,28 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
if (uiLackeyDeathCount == MAX_ACTIVE_LACKEY)
{
//time to make her lootable and complete event if she died before lackeys
if (!pDelrissa->IsAlive())
if (!delrissa->IsAlive())
{
if (!pDelrissa->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
pDelrissa->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
if (!delrissa->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
delrissa->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
instance->SetBossState(DATA_DELRISSA, DONE);
instance->SetBossState(DATA_PRIESTESS_DELRISSA, DONE);
}
}
}
void KilledUnit(Unit* victim) override
{
if (Creature* Delrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA)))
Delrissa->AI()->KilledUnit(victim);
if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA))
delrissa->AI()->KilledUnit(victim);
}
void AcquireGUIDs()
{
if (Creature* Delrissa = (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA))))
if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA))
{
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i];
m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, delrissa->AI())->m_auiLackeyGUID[i];
}
}

View File

@@ -73,7 +73,7 @@ class boss_selin_fireheart : public CreatureScript
struct boss_selin_fireheartAI : public BossAI
{
boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN), _scheduledEvents(false) { }
boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN_FIREHEART), _scheduledEvents(false) { }
void Reset() override
{
@@ -267,9 +267,9 @@ class npc_fel_crystal : public CreatureScript
{
if (InstanceScript* instance = me->GetInstanceScript())
{
Creature* Selin = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SELIN));
if (Selin && Selin->IsAlive())
Selin->AI()->DoAction(ACTION_SWITCH_PHASE);
Creature* selin = instance->GetCreature(DATA_SELIN_FIREHEART);
if (selin && selin->IsAlive())
selin->AI()->DoAction(ACTION_SWITCH_PHASE);
}
}
};

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2008-2018 TrinityCore <https://www.trinitycore.org/>
* Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -35,18 +35,29 @@
ObjectData const creatureData[] =
{
{ BOSS_SELIN_FIREHEART, DATA_SELIN_FIREHEART },
{ BOSS_VEXALLUS, DATA_VEXALLUS },
{ BOSS_PRIESTESS_DELRISSA, DATA_PRIESTESS_DELRISSA },
{ BOSS_KAELTHAS_SUNSTRIDER, DATA_KAELTHAS_SUNSTRIDER },
{ NPC_KALECGOS, DATA_KALECGOS },
{ NPC_HUMAN_KALECGOS, DATA_KALECGOS },
{ 0, 0 } // END
};
ObjectData const gameObjectData[] =
{
{ GO_ESCAPE_ORB, DATA_ESCAPE_ORB },
{ 0, 0 } // END
};
DoorData const doorData[] =
{
{ GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE },
{ GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM },
{ GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE },
{ GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE },
{ GO_ASYLUM_DOOR, DATA_KAELTHAS_SUNSTRIDER, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
{ GO_SUNWELL_RAID_GATE_2 , DATA_SELIN_FIREHEART, DOOR_TYPE_PASSAGE },
{ GO_ASSEMBLY_CHAMBER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM },
{ GO_SUNWELL_RAID_GATE_5, DATA_VEXALLUS, DOOR_TYPE_PASSAGE },
{ GO_SUNWELL_RAID_GATE_4, DATA_PRIESTESS_DELRISSA, DOOR_TYPE_PASSAGE },
{ GO_ASYLUM_DOOR, DATA_KAELTHAS_SUNSTRIDER, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
};
Position const KalecgosSpawnPos = { 164.3747f, -397.1197f, 2.151798f, 1.66219f };
@@ -63,7 +74,7 @@ class instance_magisters_terrace : public InstanceMapScript
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadObjectData(creatureData, nullptr);
LoadObjectData(creatureData, gameObjectData);
LoadDoorData(doorData);
Initialize();
}
@@ -113,16 +124,6 @@ class instance_magisters_terrace : public InstanceMapScript
switch (creature->GetEntry())
{
case NPC_SELIN:
SelinGUID = creature->GetGUID();
break;
case NPC_DELRISSA:
DelrissaGUID = creature->GetGUID();
break;
case NPC_KALECGOS:
case NPC_HUMAN_KALECGOS:
KalecgosGUID = creature->GetGUID();
break;
case NPC_COILSKAR_WITCH:
case NPC_SUNBLADE_WARLOCK:
case NPC_SUNBLADE_MAGE_GUARD:
@@ -177,33 +178,34 @@ class instance_magisters_terrace : public InstanceMapScript
case GO_KAEL_STATUE_2:
_statueGUIDs.push_back(go->GetGUID());
break;
case GO_ESCAPE_ORB:
if (GetBossState(DATA_KAELTHAS_SUNSTRIDER) == DONE)
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
}
}
void OnGameObjectRemove(GameObject* go) override
{
InstanceScript::OnGameObjectRemove(go);
}
void ProcessEvent(WorldObject* obj, uint32 eventId) override
{
if (eventId == EVENT_SPAWN_KALECGOS)
if (!ObjectAccessor::GetCreature(*obj, KalecgosGUID) && Events.Empty())
Events.ScheduleEvent(EVENT_SPAWN_KALECGOS, Minutes(1));
if (!GetCreature(DATA_KALECGOS) && _events.Empty())
_events.ScheduleEvent(EVENT_SPAWN_KALECGOS, 1min);
}
void Update(uint32 diff) override
{
Events.Update(diff);
_events.Update(diff);
if (Events.ExecuteEvent() == EVENT_SPAWN_KALECGOS)
if (_events.ExecuteEvent() == EVENT_SPAWN_KALECGOS)
{
if (Creature* kalecgos = instance->SummonCreature(NPC_KALECGOS, KalecgosSpawnPos))
{
kalecgos->GetMotionMaster()->MovePath(PATH_KALECGOS_FLIGHT, false);
kalecgos->AI()->Talk(SAY_KALECGOS_SPAWN);
}
}
}
bool SetBossState(uint32 type, EncounterState state) override
@@ -213,7 +215,7 @@ class instance_magisters_terrace : public InstanceMapScript
switch (type)
{
case DATA_DELRISSA:
case DATA_PRIESTESS_DELRISSA:
if (state == IN_PROGRESS)
_delrissaDeathCount = 0;
break;
@@ -223,6 +225,9 @@ class instance_magisters_terrace : public InstanceMapScript
for (ObjectGuid guid : _statueGUIDs)
HandleGameObject(guid, false);
}
else if (state == DONE)
if (GameObject* orb = GetGameObject(DATA_ESCAPE_ORB))
orb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
@@ -230,22 +235,6 @@ class instance_magisters_terrace : public InstanceMapScript
return true;
}
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
case DATA_SELIN:
return SelinGUID;
case DATA_DELRISSA:
return DelrissaGUID;
case DATA_ESCAPE_ORB:
return EscapeOrbGUID;
default:
break;
}
return ObjectGuid::Empty;
}
void WriteSaveDataMore(std::ostringstream& data) override
{
data << _kaelthasIntroState;
@@ -257,11 +246,7 @@ class instance_magisters_terrace : public InstanceMapScript
}
protected:
EventMap Events;
ObjectGuid SelinGUID;
ObjectGuid DelrissaGUID;
ObjectGuid EscapeOrbGUID;
ObjectGuid KalecgosGUID;
EventMap _events;
GuidVector _statueGUIDs;
GuidSet _kaelthasPreTrashGUIDs;
uint8 _delrissaDeathCount;

View File

@@ -29,9 +29,9 @@ uint32 const EncounterCount = 4;
enum MTDataTypes
{
// Encounter states
DATA_SELIN,
DATA_SELIN_FIREHEART,
DATA_VEXALLUS,
DATA_DELRISSA,
DATA_PRIESTESS_DELRISSA,
DATA_KAELTHAS_SUNSTRIDER,
// Encounter related
@@ -40,7 +40,7 @@ enum MTDataTypes
// Additional data
DATA_KAELTHAS_INTRO_STATE,
DATA_KALECGOS,
DATA_ESCAPE_ORB
};
@@ -48,6 +48,9 @@ enum MTCreatureIds
{
// Bosses
BOSS_KAELTHAS_SUNSTRIDER = 24664,
BOSS_SELIN_FIREHEART = 24723,
BOSS_VEXALLUS = 24744,
BOSS_PRIESTESS_DELRISSA = 24560,
// Encounter related
/*Kael'thas Sunstrider*/
@@ -56,31 +59,30 @@ enum MTCreatureIds
NPC_PHOENIX = 24674,
NPC_PHOENIX_EGG = 24675,
NPC_SELIN = 24723,
NPC_DELRISSA = 24560,
/*Selin Fireheart*/
NPC_FEL_CRYSTAL = 24722,
NPC_KALECGOS = 24844,
// Event related
NPC_KALECGOS = 24844,
NPC_HUMAN_KALECGOS = 24848,
NPC_COILSKAR_WITCH = 24696,
NPC_SUNBLADE_WARLOCK = 24686,
NPC_SUNBLADE_MAGE_GUARD = 24683,
NPC_SISTER_OF_TORMENT = 24697,
NPC_ETHEREUM_SMUGGLER = 24698,
NPC_SUNBLADE_BLOOD_KNIGHT = 24684,
NPC_SUNBLADE_BLOOD_KNIGHT = 24684
};
enum MTGameObjectIds
{
GO_VEXALLUS_DOOR = 187896,
GO_SELIN_DOOR = 187979,
GO_SELIN_ENCOUNTER_DOOR = 188065,
GO_DELRISSA_DOOR = 187770,
GO_ASYLUM_DOOR = 188064,
GO_KAEL_STATUE_1 = 188165,
GO_KAEL_STATUE_2 = 188166,
GO_ESCAPE_ORB = 188173
GO_ASSEMBLY_CHAMBER_DOOR = 187979,
GO_SUNWELL_RAID_GATE_2 = 188065,
GO_SUNWELL_RAID_GATE_4 = 187770,
GO_SUNWELL_RAID_GATE_5 = 187896,
GO_ASYLUM_DOOR = 188064,
GO_KAEL_STATUE_1 = 188165,
GO_KAEL_STATUE_2 = 188166,
GO_ESCAPE_ORB = 188173
};
enum MTInstanceEventIds