mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
Scripts/Ulduar: Algalon the Observer fixes (#22320)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -115,23 +115,31 @@ ObjectData const creatureData[] =
|
||||
{ NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH },
|
||||
{ NPC_BRONZEBEARD_RADIO, DATA_BRONZEBEARD_RADIO },
|
||||
{ NPC_HEART_OF_DECONSTRUCTOR, DATA_XT002_HEART },
|
||||
{ NPC_AZEROTH, DATA_AZEROTH },
|
||||
{ 0, 0, }
|
||||
};
|
||||
|
||||
ObjectData const objectData[] =
|
||||
{
|
||||
{ GO_MIMIRON_ELEVATOR, DATA_MIMIRON_ELEVATOR },
|
||||
{ GO_MIMIRON_BUTTON, DATA_MIMIRON_BUTTON },
|
||||
{ GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_UNIVERSE_GLOBE },
|
||||
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON_TRAPDOOR },
|
||||
{ GO_RAZOR_HARPOON_1, GO_RAZOR_HARPOON_1 },
|
||||
{ GO_RAZOR_HARPOON_2, GO_RAZOR_HARPOON_2 },
|
||||
{ GO_RAZOR_HARPOON_3, GO_RAZOR_HARPOON_3 },
|
||||
{ GO_RAZOR_HARPOON_4, GO_RAZOR_HARPOON_4 },
|
||||
{ GO_THORIM_LEVER, DATA_THORIM_LEVER },
|
||||
{ GO_THORIM_STONE_DOOR, DATA_STONE_DOOR },
|
||||
{ GO_THORIM_RUNIC_DOOR, DATA_RUNIC_DOOR },
|
||||
{ 0, 0 }
|
||||
{ GO_MIMIRON_ELEVATOR, DATA_MIMIRON_ELEVATOR },
|
||||
{ GO_MIMIRON_BUTTON, DATA_MIMIRON_BUTTON },
|
||||
{ GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_UNIVERSE_GLOBE },
|
||||
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON_TRAPDOOR },
|
||||
{ GO_RAZOR_HARPOON_1, GO_RAZOR_HARPOON_1 },
|
||||
{ GO_RAZOR_HARPOON_2, GO_RAZOR_HARPOON_2 },
|
||||
{ GO_RAZOR_HARPOON_3, GO_RAZOR_HARPOON_3 },
|
||||
{ GO_RAZOR_HARPOON_4, GO_RAZOR_HARPOON_4 },
|
||||
{ GO_THORIM_LEVER, DATA_THORIM_LEVER },
|
||||
{ GO_THORIM_STONE_DOOR, DATA_STONE_DOOR },
|
||||
{ GO_THORIM_RUNIC_DOOR, DATA_RUNIC_DOOR },
|
||||
{ GO_DOODAD_UL_SIGILDOOR_01, DATA_SIGILDOOR_01 },
|
||||
{ GO_DOODAD_UL_SIGILDOOR_02, DATA_SIGILDOOR_02 },
|
||||
{ GO_DOODAD_UL_SIGILDOOR_03, DATA_SIGILDOOR_03 },
|
||||
{ GO_DOODAD_UL_UNIVERSEFLOOR_01, DATA_UNIVERSE_FLOOR_01 },
|
||||
{ GO_DOODAD_UL_UNIVERSEFLOOR_02, DATA_UNIVERSE_FLOOR_02 },
|
||||
{ GO_GIFT_OF_THE_OBSERVER_10, DATA_GIFT_OF_THE_OBSERVER },
|
||||
{ GO_GIFT_OF_THE_OBSERVER_25, DATA_GIFT_OF_THE_OBSERVER },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
class instance_ulduar : public InstanceMapScript
|
||||
@@ -194,10 +202,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
ObjectGuid MimironTramGUID;
|
||||
|
||||
ObjectGuid BrainRoomDoorGUIDs[3];
|
||||
ObjectGuid AlgalonSigilDoorGUID[3];
|
||||
ObjectGuid AlgalonFloorGUID[2];
|
||||
|
||||
ObjectGuid GiftOfTheObserverGUID;
|
||||
|
||||
// Miscellaneous
|
||||
uint32 TeamInInstance;
|
||||
@@ -269,14 +273,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
{
|
||||
InstanceScript::OnCreatureCreate(creature);
|
||||
|
||||
if (!TeamInInstance)
|
||||
{
|
||||
Map::PlayerList const& Players = instance->GetPlayers();
|
||||
if (!Players.isEmpty())
|
||||
if (Player* player = Players.begin()->GetSource())
|
||||
TeamInInstance = player->GetTeam();
|
||||
}
|
||||
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_SALVAGED_DEMOLISHER:
|
||||
@@ -314,50 +310,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
AddMinion(creature, true);
|
||||
break;
|
||||
|
||||
// Hodir
|
||||
case NPC_EIVI_NIGHTFEATHER:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_TOR_GREYCLOUD);
|
||||
break;
|
||||
case NPC_ELLIE_NIGHTFEATHER:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_KAR_GREYCLOUD);
|
||||
break;
|
||||
case NPC_ELEMENTALIST_MAHFUUN:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_SPIRITWALKER_TARA);
|
||||
break;
|
||||
case NPC_ELEMENTALIST_AVUUN:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_SPIRITWALKER_YONA);
|
||||
break;
|
||||
case NPC_MISSY_FLAMECUFFS:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_AMIRA_BLAZEWEAVER);
|
||||
break;
|
||||
case NPC_SISSY_FLAMECUFFS:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_VEESHA_BLAZEWEAVER);
|
||||
break;
|
||||
case NPC_FIELD_MEDIC_PENNY:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_BATTLE_PRIEST_ELIZA);
|
||||
break;
|
||||
case NPC_FIELD_MEDIC_JESSI:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA);
|
||||
break;
|
||||
|
||||
// Thorim
|
||||
case NPC_MERCENARY_CAPTAIN_H:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_MERCENARY_CAPTAIN_A);
|
||||
break;
|
||||
case NPC_MERCENARY_SOLDIER_H:
|
||||
if (TeamInInstance == HORDE)
|
||||
creature->UpdateEntry(NPC_MERCENARY_SOLDIER_A);
|
||||
break;
|
||||
|
||||
// Freya
|
||||
case NPC_IRONBRANCH:
|
||||
ElderGUIDs[0] = creature->GetGUID();
|
||||
@@ -432,6 +384,44 @@ class instance_ulduar : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
|
||||
{
|
||||
if (!TeamInInstance)
|
||||
{
|
||||
Map::PlayerList const& Players = instance->GetPlayers();
|
||||
if (!Players.isEmpty())
|
||||
if (Player* player = Players.begin()->GetSource())
|
||||
TeamInInstance = player->GetTeam();
|
||||
}
|
||||
|
||||
uint32 entry = data->id;
|
||||
switch (entry)
|
||||
{
|
||||
case NPC_EIVI_NIGHTFEATHER:
|
||||
return TeamInInstance == HORDE ? NPC_TOR_GREYCLOUD : NPC_EIVI_NIGHTFEATHER;
|
||||
case NPC_ELLIE_NIGHTFEATHER:
|
||||
return TeamInInstance == HORDE ? NPC_KAR_GREYCLOUD : NPC_ELLIE_NIGHTFEATHER;
|
||||
case NPC_ELEMENTALIST_MAHFUUN:
|
||||
return TeamInInstance == HORDE ? NPC_SPIRITWALKER_TARA : NPC_ELEMENTALIST_MAHFUUN;
|
||||
case NPC_ELEMENTALIST_AVUUN:
|
||||
return TeamInInstance == HORDE ? NPC_SPIRITWALKER_YONA : NPC_ELEMENTALIST_AVUUN;
|
||||
case NPC_MISSY_FLAMECUFFS:
|
||||
return TeamInInstance == HORDE ? NPC_AMIRA_BLAZEWEAVER : NPC_MISSY_FLAMECUFFS;
|
||||
case NPC_SISSY_FLAMECUFFS:
|
||||
return TeamInInstance == HORDE ? NPC_VEESHA_BLAZEWEAVER : NPC_SISSY_FLAMECUFFS;
|
||||
case NPC_FIELD_MEDIC_PENNY:
|
||||
return TeamInInstance == HORDE ? NPC_BATTLE_PRIEST_ELIZA : NPC_FIELD_MEDIC_PENNY;
|
||||
case NPC_FIELD_MEDIC_JESSI:
|
||||
return TeamInInstance == HORDE ? NPC_BATTLE_PRIEST_GINA : NPC_FIELD_MEDIC_JESSI;
|
||||
case NPC_MERCENARY_CAPTAIN_H:
|
||||
return TeamInInstance == HORDE ? NPC_MERCENARY_CAPTAIN_A : NPC_MERCENARY_CAPTAIN_H;
|
||||
case NPC_MERCENARY_SOLDIER_H:
|
||||
return TeamInInstance == HORDE ? NPC_MERCENARY_SOLDIER_A : NPC_MERCENARY_SOLDIER_H;
|
||||
default:
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
||||
void OnCreatureRemove(Creature* creature) override
|
||||
{
|
||||
InstanceScript::OnCreatureRemove(creature);
|
||||
@@ -515,28 +505,10 @@ class instance_ulduar : public InstanceMapScript
|
||||
gameObject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
|
||||
break;
|
||||
case GO_DOODAD_UL_SIGILDOOR_01:
|
||||
AlgalonSigilDoorGUID[0] = gameObject->GetGUID();
|
||||
if (_algalonSummoned)
|
||||
gameObject->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_DOODAD_UL_SIGILDOOR_02:
|
||||
AlgalonSigilDoorGUID[1] = gameObject->GetGUID();
|
||||
if (_algalonSummoned)
|
||||
gameObject->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_DOODAD_UL_SIGILDOOR_03:
|
||||
AlgalonSigilDoorGUID[2] = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_DOODAD_UL_UNIVERSEFLOOR_01:
|
||||
AlgalonFloorGUID[0] = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_DOODAD_UL_UNIVERSEFLOOR_02:
|
||||
AlgalonFloorGUID[1] = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_GIFT_OF_THE_OBSERVER_10:
|
||||
case GO_GIFT_OF_THE_OBSERVER_25:
|
||||
GiftOfTheObserverGUID = gameObject->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -710,8 +682,8 @@ class instance_ulduar : public InstanceMapScript
|
||||
_events.CancelEvent(EVENT_DESPAWN_ALGALON);
|
||||
DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
|
||||
_algalonTimer = 61;
|
||||
if (GameObject* gameObject = instance->GetGameObject(GiftOfTheObserverGUID))
|
||||
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
|
||||
if (GameObject* gift = GetGameObject(DATA_GIFT_OF_THE_OBSERVER))
|
||||
gift->SetRespawnTime(gift->GetRespawnDelay());
|
||||
// get item level (recheck weapons)
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
@@ -853,18 +825,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
return KeeperGUIDs[2];
|
||||
case DATA_MIMIRON_YS:
|
||||
return KeeperGUIDs[3];
|
||||
|
||||
// Algalon
|
||||
case DATA_SIGILDOOR_01:
|
||||
return AlgalonSigilDoorGUID[0];
|
||||
case DATA_SIGILDOOR_02:
|
||||
return AlgalonSigilDoorGUID[1];
|
||||
case DATA_SIGILDOOR_03:
|
||||
return AlgalonSigilDoorGUID[2];
|
||||
case DATA_UNIVERSE_FLOOR_01:
|
||||
return AlgalonFloorGUID[0];
|
||||
case DATA_UNIVERSE_FLOOR_02:
|
||||
return AlgalonFloorGUID[1];
|
||||
}
|
||||
|
||||
return InstanceScript::GetGuidData(data);
|
||||
|
||||
@@ -450,6 +450,8 @@ enum UlduarData
|
||||
DATA_UNIVERSE_GLOBE,
|
||||
DATA_ALGALON_TRAPDOOR,
|
||||
DATA_BRANN_BRONZEBEARD_ALG,
|
||||
DATA_GIFT_OF_THE_OBSERVER,
|
||||
DATA_AZEROTH,
|
||||
|
||||
// Thorim
|
||||
DATA_SIF,
|
||||
|
||||
Reference in New Issue
Block a user