mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
Scripts/Ulduar: Initial implementation of the Thorim Encounter
Closes #7651 Fix logic fail in achievement: SPELL_LIGHTNING_CHARGE aka 62279 is casted on Thorim itself to buff him, not the damage spell tracked by the achievement.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -53,6 +53,7 @@ static DoorData const doorData[] =
|
||||
{ GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM },
|
||||
{ GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM },
|
||||
{ GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM },
|
||||
{ GO_THORIM_ENCOUNTER_DOOR, BOSS_THORIM, DOOR_TYPE_ROOM },
|
||||
{ GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE },
|
||||
{ GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM },
|
||||
{ GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM },
|
||||
@@ -89,6 +90,9 @@ ObjectData const creatureData[] =
|
||||
|
||||
{ NPC_EXPEDITION_COMMANDER, DATA_EXPEDITION_COMMANDER },
|
||||
{ NPC_RAZORSCALE_CONTROLLER, DATA_RAZORSCALE_CONTROL },
|
||||
{ NPC_SIF, DATA_SIF },
|
||||
{ NPC_RUNIC_COLOSSUS, DATA_RUNIC_COLOSSUS },
|
||||
{ NPC_RUNE_GIANT, DATA_RUNE_GIANT },
|
||||
{ NPC_COMPUTER, DATA_COMPUTER },
|
||||
{ NPC_WORLD_TRIGGER_MIMIRON, DATA_MIMIRON_WORLD_TRIGGER },
|
||||
{ NPC_VOICE_OF_YOGG_SARON, DATA_VOICE_OF_YOGG_SARON },
|
||||
@@ -112,6 +116,9 @@ ObjectData const objectData[] =
|
||||
{ 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 }
|
||||
};
|
||||
|
||||
@@ -167,7 +174,8 @@ class instance_ulduar : public InstanceMapScript
|
||||
ObjectGuid LeviathanGateGUID;
|
||||
ObjectGuid KologarnChestGUID;
|
||||
ObjectGuid KologarnBridgeGUID;
|
||||
ObjectGuid ThorimChestGUID;
|
||||
ObjectGuid CacheOfStormsGUID;
|
||||
ObjectGuid CacheOfStormsHardmodeGUID;
|
||||
ObjectGuid HodirRareCacheGUID;
|
||||
ObjectGuid HodirChestGUID;
|
||||
ObjectGuid MimironTramGUID;
|
||||
@@ -439,9 +447,13 @@ class instance_ulduar : public InstanceMapScript
|
||||
if (GetBossState(BOSS_KOLOGARN) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, false, gameObject);
|
||||
break;
|
||||
case GO_THORIM_CHEST_HERO:
|
||||
case GO_THORIM_CHEST:
|
||||
ThorimChestGUID = gameObject->GetGUID();
|
||||
case GO_CACHE_OF_STORMS_10:
|
||||
case GO_CACHE_OF_STORMS_25:
|
||||
CacheOfStormsGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_CACHE_OF_STORMS_HARDMODE_10:
|
||||
case GO_CACHE_OF_STORMS_HARDMODE_25:
|
||||
CacheOfStormsHardmodeGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_HODIR_RARE_CACHE_OF_WINTER_HERO:
|
||||
case GO_HODIR_RARE_CACHE_OF_WINTER:
|
||||
@@ -648,9 +660,15 @@ class instance_ulduar : public InstanceMapScript
|
||||
case BOSS_THORIM:
|
||||
if (state == DONE)
|
||||
{
|
||||
if (GameObject* gameObject = instance->GetGameObject(ThorimChestGUID))
|
||||
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
|
||||
|
||||
if (Creature* thorim = GetCreature(BOSS_THORIM))
|
||||
{
|
||||
if (GameObject* cache = instance->GetGameObject(thorim->AI()->GetData(DATA_THORIM_HARDMODE) ? CacheOfStormsHardmodeGUID : CacheOfStormsGUID))
|
||||
{
|
||||
cache->SetLootRecipient(thorim->GetLootRecipient());
|
||||
cache->SetRespawnTime(cache->GetRespawnDelay());
|
||||
cache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
|
||||
}
|
||||
}
|
||||
instance->SummonCreature(NPC_THORIM_OBSERVATION_RING, ObservationRingKeepersPos[2]);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -153,6 +153,24 @@ enum UlduarNPCs
|
||||
// Freya Achievement Trigger
|
||||
NPC_FREYA_ACHIEVE_TRIGGER = 33406,
|
||||
|
||||
// Thorim
|
||||
NPC_THORIM_INVISIBLE_STALKER = 32780,
|
||||
NPC_RUNIC_COLOSSUS = 32872,
|
||||
NPC_RUNE_GIANT = 32873,
|
||||
NPC_IRON_RING_GUARD = 32874,
|
||||
NPC_IRON_HONOR_GUARD = 32875,
|
||||
NPC_DARK_RUNE_CHAMPION = 32876,
|
||||
NPC_DARK_RUNE_WARBRINGER = 32877,
|
||||
NPC_DARK_RUNE_EVOKER = 32878,
|
||||
NPC_DARK_RUNE_COMMONER = 32904,
|
||||
NPC_DARK_RUNE_ACOLYTE = 33110,
|
||||
NPC_THORIM_EVENT_BUNNY = 32892,
|
||||
NPC_LIGHTNING_ORB = 33138,
|
||||
NPC_GOLEM_RIGHT_HAND_BUNNY = 33140,
|
||||
NPC_GOLEM_LEFT_HAND_BUNNY = 33141,
|
||||
NPC_SIF = 33196,
|
||||
NPC_THUNDER_ORB = 33378,
|
||||
|
||||
// Yogg-Saron
|
||||
NPC_SARA = 33134,
|
||||
NPC_GUARDIAN_OF_YOGG_SARON = 33136,
|
||||
@@ -237,8 +255,14 @@ enum UlduarGameObjects
|
||||
GO_HODIR_CHEST = 194307,
|
||||
|
||||
// Thorim
|
||||
GO_THORIM_CHEST_HERO = 194315,
|
||||
GO_THORIM_CHEST = 194314,
|
||||
GO_CACHE_OF_STORMS_10 = 194312,
|
||||
GO_CACHE_OF_STORMS_HARDMODE_10 = 194313,
|
||||
GO_CACHE_OF_STORMS_25 = 194315,
|
||||
GO_CACHE_OF_STORMS_HARDMODE_25 = 194314,
|
||||
GO_THORIM_RUNIC_DOOR = 194557,
|
||||
GO_THORIM_STONE_DOOR = 194558,
|
||||
GO_THORIM_ENCOUNTER_DOOR = 194559,
|
||||
GO_THORIM_LEVER = 194265,
|
||||
|
||||
// Mimiron
|
||||
GO_MIMIRON_TRAM = 194675,
|
||||
@@ -404,6 +428,15 @@ enum UlduarData
|
||||
DATA_ALGALON_TRAPDOOR,
|
||||
DATA_BRANN_BRONZEBEARD_ALG,
|
||||
|
||||
// Thorim
|
||||
DATA_SIF,
|
||||
DATA_THORIM_LEVER,
|
||||
DATA_RUNIC_COLOSSUS,
|
||||
DATA_RUNE_GIANT,
|
||||
DATA_RUNIC_DOOR,
|
||||
DATA_STONE_DOOR,
|
||||
DATA_THORIM_HARDMODE,
|
||||
|
||||
// Misc
|
||||
DATA_BRANN_BRONZEBEARD_INTRO,
|
||||
DATA_LORE_KEEPER_OF_NORGANNON,
|
||||
@@ -420,10 +453,15 @@ enum UlduarWorldStates
|
||||
enum UlduarAchievementData
|
||||
{
|
||||
// FL Achievement boolean
|
||||
DATA_UNBROKEN = 29052906, // 2905, 2906 are achievement IDs,
|
||||
DATA_UNBROKEN = 29052906, // 2905, 2906 are achievement IDs,
|
||||
MAX_HERALD_ARMOR_ITEMLEVEL = 226,
|
||||
MAX_HERALD_WEAPON_ITEMLEVEL = 232,
|
||||
SPELL_LUMBERJACKED_CREDIT = 65296
|
||||
MAX_HERALD_WEAPON_ITEMLEVEL = 232
|
||||
};
|
||||
|
||||
enum UlduarSharedSpells
|
||||
{
|
||||
SPELL_LUMBERJACKED_CREDIT = 65296,
|
||||
SPELL_TELEPORT_KEEPER_VISUAL = 62940 // used by keepers
|
||||
};
|
||||
|
||||
enum UlduarEvents
|
||||
@@ -448,6 +486,23 @@ AI* GetUlduarAI(T* obj)
|
||||
return GetInstanceAI<AI, T>(obj, UlduarScriptName);
|
||||
}
|
||||
|
||||
class KeeperDespawnEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
KeeperDespawnEvent(Creature* owner, uint32 despawnTimerOffset = 500) : _owner(owner), _despawnTimer(despawnTimerOffset) { }
|
||||
|
||||
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
|
||||
{
|
||||
_owner->CastSpell(_owner, SPELL_TELEPORT_KEEPER_VISUAL);
|
||||
_owner->DespawnOrUnsummon(1000 + _despawnTimer);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _owner;
|
||||
uint32 _despawnTimer;
|
||||
};
|
||||
|
||||
class PlayerOrPetCheck
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -110,6 +110,7 @@ void AddSC_boss_general_vezax();
|
||||
void AddSC_boss_mimiron();
|
||||
void AddSC_boss_hodir();
|
||||
void AddSC_boss_freya();
|
||||
void AddSC_boss_thorim();
|
||||
void AddSC_boss_yogg_saron();
|
||||
void AddSC_boss_algalon_the_observer();
|
||||
void AddSC_instance_ulduar();
|
||||
@@ -291,6 +292,7 @@ void AddNorthrendScripts()
|
||||
AddSC_boss_mimiron();
|
||||
AddSC_boss_hodir();
|
||||
AddSC_boss_freya();
|
||||
AddSC_boss_thorim();
|
||||
AddSC_boss_yogg_saron();
|
||||
AddSC_boss_algalon_the_observer();
|
||||
AddSC_instance_ulduar();
|
||||
|
||||
Reference in New Issue
Block a user