fix(Scripts/BlackTemple): Implement emotes when opening Najentus and … (#19946)

* fix(Scripts/BlackTemple): Implement emotes when opening Najentus and Den of Mortal Delights

* only check if state is done
This commit is contained in:
Andrew
2024-09-15 07:48:11 -03:00
committed by GitHub
parent 99b39e5045
commit 8b16f7d243
5 changed files with 58 additions and 12 deletions

View File

@@ -0,0 +1,2 @@
--
UPDATE `creature_text` SET `TextRange` = 3 WHERE `CreatureId` = 22984;

View File

@@ -761,6 +761,24 @@ void InstanceScript::LoadInstanceSavedGameobjectStateData()
} }
} }
bool InstanceScript::AllBossesDone() const
{
for (auto const& boss : bosses)
if (boss.state != DONE)
return false;
return true;
}
bool InstanceScript::AllBossesDone(std::initializer_list<uint32> bossIds) const
{
for (auto const& bossId : bossIds)
if (!IsBossDone(bossId))
return false;
return true;
}
std::string InstanceScript::GetBossStateName(uint8 state) std::string InstanceScript::GetBossStateName(uint8 state)
{ {
// See enum EncounterState in InstanceScript.h // See enum EncounterState in InstanceScript.h

View File

@@ -275,6 +275,10 @@ public:
void LoadInstanceSavedGameobjectStateData(); void LoadInstanceSavedGameobjectStateData();
[[nodiscard]] bool IsBossDone(uint32 bossId) const { return GetBossState(bossId) == DONE; };
[[nodiscard]] bool AllBossesDone() const;
[[nodiscard]] bool AllBossesDone(std::initializer_list<uint32> bossIds) const;
TaskScheduler scheduler; TaskScheduler scheduler;
protected: protected:
void SetHeaders(std::string const& dataHeaders); void SetHeaders(std::string const& dataHeaders);

View File

@@ -42,7 +42,8 @@ enum DataTypes
DATA_GATHIOS_THE_SHATTERER = 12, DATA_GATHIOS_THE_SHATTERER = 12,
DATA_HIGH_NETHERMANCER_ZEREVOR = 13, DATA_HIGH_NETHERMANCER_ZEREVOR = 13,
DATA_LADY_MALANDE = 14, DATA_LADY_MALANDE = 14,
DATA_VERAS_DARKSHADOW = 15 DATA_VERAS_DARKSHADOW = 15,
DATA_BLACK_TEMPLE_TRIGGER = 16
}; };
enum CreatureIds enum CreatureIds
@@ -82,7 +83,8 @@ enum CreatureIds
NPC_ASHTONGUE_STALKER = 23374, NPC_ASHTONGUE_STALKER = 23374,
NPC_STORM_FURY = 22848, NPC_STORM_FURY = 22848,
NPC_DRAGON_TURTLE = 22885 NPC_DRAGON_TURTLE = 22885,
NPC_BLACK_TEMPLE_TRIGGER = 22984
}; };
enum GameObjectIds enum GameObjectIds
@@ -113,6 +115,12 @@ enum MiscIds
SPELL_SUMMON_SHADOWFIENDS = 41159 SPELL_SUMMON_SHADOWFIENDS = 41159
}; };
enum Texts
{
EMOTE_NAJENTUS_DEFEATED = 0,
EMOTE_LOWER_TEMPLE_DEFEATED = 1
};
template <class AI, class T> template <class AI, class T>
inline AI* GetBlackTempleAI(T* obj) inline AI* GetBlackTempleAI(T* obj)
{ {

View File

@@ -62,6 +62,7 @@ ObjectData const creatureData[] =
{ NPC_VERAS_DARKSHADOW, DATA_VERAS_DARKSHADOW }, { NPC_VERAS_DARKSHADOW, DATA_VERAS_DARKSHADOW },
{ NPC_AKAMA_ILLIDAN, DATA_AKAMA_ILLIDAN }, { NPC_AKAMA_ILLIDAN, DATA_AKAMA_ILLIDAN },
{ NPC_ILLIDAN_STORMRAGE, DATA_ILLIDAN_STORMRAGE }, { NPC_ILLIDAN_STORMRAGE, DATA_ILLIDAN_STORMRAGE },
{ NPC_BLACK_TEMPLE_TRIGGER, DATA_BLACK_TEMPLE_TRIGGER },
{ 0, 0 } { 0, 0 }
}; };
@@ -165,18 +166,31 @@ public:
if (!InstanceScript::SetBossState(type, state)) if (!InstanceScript::SetBossState(type, state))
return false; return false;
if (type == DATA_SHADE_OF_AKAMA && state == DONE) if (state == DONE)
{ {
for (ObjectGuid const& guid : ashtongueGUIDs) switch (type)
if (Creature* ashtongue = instance->GetCreature(guid)) {
ashtongue->SetFaction(FACTION_ASHTONGUE_DEATHSWORN); case DATA_HIGH_WARLORD_NAJENTUS:
} if (Creature* trigger = GetCreature(DATA_BLACK_TEMPLE_TRIGGER))
else if (type == DATA_ILLIDARI_COUNCIL && state == DONE) trigger->AI()->Talk(EMOTE_NAJENTUS_DEFEATED);
{ break;
if (Creature* akama = GetCreature(DATA_AKAMA_ILLIDAN)) case DATA_SHADE_OF_AKAMA:
akama->AI()->DoAction(0); for (ObjectGuid const& guid : ashtongueGUIDs)
} if (Creature* ashtongue = instance->GetCreature(guid))
ashtongue->SetFaction(FACTION_ASHTONGUE_DEATHSWORN);
break;
case DATA_ILLIDARI_COUNCIL:
if (Creature* akama = GetCreature(DATA_AKAMA_ILLIDAN))
akama->AI()->DoAction(0);
break;
default:
break;
}
if (AllBossesDone({ DATA_SHADE_OF_AKAMA, DATA_TERON_GOREFIEND, DATA_GURTOGG_BLOODBOIL, DATA_RELIQUARY_OF_SOULS }))
if (Creature* trigger = GetCreature(DATA_BLACK_TEMPLE_TRIGGER))
trigger->AI()->Talk(EMOTE_LOWER_TEMPLE_DEFEATED);
}
return true; return true;
} }