mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 10:56:38 +01:00
Core/Scripts: Palehoof rewritten & Utgarde Pinnacle updated (#18712)
Closes #15405
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -164,7 +164,7 @@ public:
|
||||
_Reset();
|
||||
Initialize();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
if (!ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_GRAUF)))
|
||||
if (!instance->GetCreature(DATA_GRAUF))
|
||||
me->SummonCreature(NPC_GRAUF, GraufLoc);
|
||||
|
||||
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI);
|
||||
@@ -242,7 +242,7 @@ public:
|
||||
})
|
||||
.Schedule(Seconds(2), [this](TaskContext /*context*/)
|
||||
{
|
||||
if (Creature* grauf = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_GRAUF)))
|
||||
if (Creature* grauf = instance->GetCreature(DATA_GRAUF))
|
||||
DoCast(grauf, SPELL_RIDE_GRAUF);
|
||||
});
|
||||
|
||||
@@ -347,7 +347,7 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_GAUNTLET_END);
|
||||
|
||||
me->DespawnOrUnsummon(6000);
|
||||
@@ -412,7 +412,7 @@ public:
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(GRAUF_PATH_LEFT, false);
|
||||
DoCast(SPELL_FREEZING_CLOUD_LEFT_PERIODIC);
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_FLAME);
|
||||
})
|
||||
.Schedule(Seconds(10), [this](TaskContext /*context*/)
|
||||
@@ -431,7 +431,7 @@ public:
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(GRAUF_PATH_RIGHT, false);
|
||||
DoCast(SPELL_FREEZING_CLOUD_RIGHT_PERIODIC);
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_FLAME);
|
||||
})
|
||||
.Schedule(Seconds(10), [this](TaskContext /*context*/)
|
||||
@@ -447,7 +447,7 @@ public:
|
||||
void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
|
||||
{
|
||||
if (spell->Id == SPELL_LAUNCH_HARPOON)
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_HARPOON_HIT);
|
||||
}
|
||||
|
||||
@@ -488,7 +488,7 @@ struct npc_skadi_trashAI : public ScriptedAI
|
||||
|
||||
void IsSummonedBy(Unit* /*summoner*/) override
|
||||
{
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->JustSummoned(me);
|
||||
}
|
||||
|
||||
@@ -946,7 +946,7 @@ class at_skadi_gaunlet : public AreaTriggerScript
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
{
|
||||
if (instance->GetBossState(DATA_SKADI_THE_RUTHLESS) == NOT_STARTED)
|
||||
if (Creature* skadi = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_SKADI_THE_RUTHLESS)))
|
||||
if (Creature* skadi = instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
{
|
||||
skadi->AI()->DoAction(ACTION_START_ENCOUNTER);
|
||||
return true;
|
||||
|
||||
@@ -188,7 +188,7 @@ class boss_svala : public CreatureScript
|
||||
events.SetPhase(INTRO);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
|
||||
if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR)))
|
||||
if (GameObject* mirror = instance->GetGameObject(DATA_UTGARDE_MIRROR))
|
||||
mirror->SetGoState(GO_STATE_READY);
|
||||
|
||||
if (Creature* arthas = me->SummonCreature(NPC_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
@@ -331,7 +331,7 @@ class boss_svala : public CreatureScript
|
||||
break;
|
||||
}
|
||||
case EVENT_INTRO_DESPAWN_ARTHAS:
|
||||
if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR)))
|
||||
if (GameObject* mirror = instance->GetGameObject(DATA_UTGARDE_MIRROR))
|
||||
mirror->SetGoState(GO_STATE_ACTIVE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
|
||||
@@ -28,7 +28,30 @@ DoorData const doorData[] =
|
||||
{
|
||||
{ GO_SKADI_THE_RUTHLESS_DOOR, DATA_SKADI_THE_RUTHLESS, DOOR_TYPE_PASSAGE },
|
||||
{ GO_KING_YMIRON_DOOR, DATA_KING_YMIRON, DOOR_TYPE_PASSAGE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ NPC_SVALA_SORROWGRAVE, DATA_SVALA_SORROWGRAVE },
|
||||
{ NPC_GORTOK_PALEHOOF, DATA_GORTOK_PALEHOOF },
|
||||
{ NPC_SKADI_THE_RUTHLESS, DATA_SKADI_THE_RUTHLESS },
|
||||
{ NPC_KING_YMIRON, DATA_KING_YMIRON },
|
||||
{ NPC_FRENZIED_WORGEN, DATA_FRENZIED_WORGEN },
|
||||
{ NPC_RAVENOUS_FURBOLG, DATA_RAVENOUS_FURBOLG },
|
||||
{ NPC_MASSIVE_JORMUNGAR, DATA_MASSIVE_JORMUNGAR },
|
||||
{ NPC_FEROCIOUS_RHINO, DATA_FEROCIOUS_RHINO },
|
||||
{ NPC_PALEHOOF_ORB, DATA_GORTOK_ORB },
|
||||
{ NPC_SVALA, DATA_SVALA },
|
||||
{ NPC_GRAUF, DATA_GRAUF },
|
||||
{ 0, 0 } // END
|
||||
};
|
||||
|
||||
ObjectData const gameObjectData[] =
|
||||
{
|
||||
{ GO_UTGARDE_MIRROR, DATA_UTGARDE_MIRROR },
|
||||
{ GO_GORTOK_PALEHOOF_SPHERE, DATA_GORTOK_PALEHOOF_SPHERE },
|
||||
{ 0, 0 } //END
|
||||
};
|
||||
|
||||
class instance_utgarde_pinnacle : public InstanceMapScript
|
||||
@@ -44,158 +67,37 @@ class instance_utgarde_pinnacle : public InstanceMapScript
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadBossBoundaries(boundaries);
|
||||
LoadDoorData(doorData);
|
||||
LoadObjectData(creatureData, gameObjectData);
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_SVALA_SORROWGRAVE:
|
||||
SvalaSorrowgraveGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_GORTOK_PALEHOOF:
|
||||
GortokPalehoofGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_SKADI_THE_RUTHLESS:
|
||||
SkadiTheRuthlessGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_KING_YMIRON:
|
||||
KingYmironGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_FRENZIED_WORGEN:
|
||||
FrenziedWorgenGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_RAVENOUS_FURBOLG:
|
||||
RavenousFurbolgGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_MASSIVE_JORMUNGAR:
|
||||
MassiveJormungarGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_FEROCIOUS_RHINO:
|
||||
FerociousRhinoGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_SVALA:
|
||||
SvalaGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_PALEHOOF_ORB:
|
||||
PalehoofOrbGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_GRAUF:
|
||||
GraufGUID = creature->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_UTGARDE_MIRROR:
|
||||
UtgardeMirrorGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_GORTOK_PALEHOOF_SPHERE:
|
||||
GortokPalehoofSphereGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_GORTOK_PALEHOOF) == DONE)
|
||||
{
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
break;
|
||||
case GO_SKADI_THE_RUTHLESS_DOOR:
|
||||
case GO_KING_YMIRON_DOOR:
|
||||
AddDoor(go, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
InstanceScript::OnGameObjectCreate(go);
|
||||
|
||||
void OnGameObjectRemove(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_SKADI_THE_RUTHLESS_DOOR:
|
||||
case GO_KING_YMIRON_DOOR:
|
||||
AddDoor(go, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (go->GetEntry() == GO_GORTOK_PALEHOOF_SPHERE)
|
||||
if (GetBossState(DATA_GORTOK_PALEHOOF) == DONE)
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 type, ObjectGuid data) override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_SACRIFICED_PLAYER:
|
||||
SacrificedPlayerGUID = data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (type == DATA_SACRIFICED_PLAYER)
|
||||
SacrificedPlayerGUID = data;
|
||||
|
||||
InstanceScript::SetGuidData(type, data);
|
||||
}
|
||||
|
||||
ObjectGuid GetGuidData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_SVALA_SORROWGRAVE:
|
||||
return SvalaSorrowgraveGUID;
|
||||
case DATA_GORTOK_PALEHOOF:
|
||||
return GortokPalehoofGUID;
|
||||
case DATA_SKADI_THE_RUTHLESS:
|
||||
return SkadiTheRuthlessGUID;
|
||||
case DATA_KING_YMIRON:
|
||||
return KingYmironGUID;
|
||||
case DATA_FRENZIED_WORGEN:
|
||||
return FrenziedWorgenGUID;
|
||||
case DATA_RAVENOUS_FURBOLG:
|
||||
return RavenousFurbolgGUID;
|
||||
case DATA_MASSIVE_JORMUNGAR:
|
||||
return MassiveJormungarGUID;
|
||||
case DATA_FEROCIOUS_RHINO:
|
||||
return FerociousRhinoGUID;
|
||||
case DATA_GORTOK_ORB:
|
||||
return PalehoofOrbGUID;
|
||||
case DATA_GORTOK_PALEHOOF_SPHERE:
|
||||
return GortokPalehoofSphereGUID;
|
||||
case DATA_UTGARDE_MIRROR:
|
||||
return UtgardeMirrorGUID;
|
||||
case DATA_SVALA:
|
||||
return SvalaGUID;
|
||||
case DATA_SACRIFICED_PLAYER:
|
||||
return SacrificedPlayerGUID;
|
||||
case DATA_GRAUF:
|
||||
return GraufGUID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (type == DATA_SACRIFICED_PLAYER)
|
||||
return SacrificedPlayerGUID;
|
||||
|
||||
return ObjectGuid::Empty;
|
||||
return InstanceScript::GetGuidData(type);
|
||||
}
|
||||
|
||||
protected:
|
||||
ObjectGuid SvalaSorrowgraveGUID;
|
||||
ObjectGuid GortokPalehoofGUID;
|
||||
ObjectGuid SkadiTheRuthlessGUID;
|
||||
ObjectGuid KingYmironGUID;
|
||||
|
||||
ObjectGuid UtgardeMirrorGUID;
|
||||
ObjectGuid GortokPalehoofSphereGUID;
|
||||
|
||||
ObjectGuid FrenziedWorgenGUID;
|
||||
ObjectGuid RavenousFurbolgGUID;
|
||||
ObjectGuid FerociousRhinoGUID;
|
||||
ObjectGuid MassiveJormungarGUID;
|
||||
|
||||
ObjectGuid PalehoofOrbGUID;
|
||||
|
||||
ObjectGuid SvalaGUID;
|
||||
ObjectGuid SacrificedPlayerGUID;
|
||||
|
||||
ObjectGuid GraufGUID;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
@@ -47,6 +47,7 @@ enum UPDataTypes
|
||||
|
||||
enum UPCreatureIds
|
||||
{
|
||||
// Bosses
|
||||
NPC_SVALA_SORROWGRAVE = 26668,
|
||||
NPC_GORTOK_PALEHOOF = 26687,
|
||||
NPC_SKADI_THE_RUTHLESS = 26693,
|
||||
@@ -60,7 +61,8 @@ enum UPCreatureIds
|
||||
NPC_RAVENOUS_FURBOLG = 26684,
|
||||
NPC_MASSIVE_JORMUNGAR = 26685,
|
||||
NPC_FEROCIOUS_RHINO = 26686,
|
||||
NPC_PALEHOOF_ORB = 26688,
|
||||
NPC_PALEHOOF_ORB = 22515, // World Trigger
|
||||
NPC_JORMUNGAR_WORM = 27228,
|
||||
|
||||
// Skadi
|
||||
NPC_GRAUF = 26893,
|
||||
|
||||
Reference in New Issue
Block a user