Scripts/Ulduar: Algalon the Observer fixes (#22320)

This commit is contained in:
Keader
2018-08-31 21:48:56 -03:00
committed by GitHub
parent 8a45191e92
commit ca7ee982db
5 changed files with 1202 additions and 1185 deletions

View File

@@ -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);

View File

@@ -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,