Core/Scripts: Palehoof rewritten & Utgarde Pinnacle updated (#18712)

Closes #15405
This commit is contained in:
Keader
2017-01-06 20:47:36 -02:00
committed by Aokromes
parent 047673175b
commit d47b45d6ec
6 changed files with 668 additions and 870 deletions

View File

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

View File

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

View File

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

View File

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