mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-30 21:57:01 +01:00
Scripts/TMG: converted remaining parts of the instance script to new model
This commit is contained in:
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user