Scripts/FL: modernize instance script to latest standards

This commit is contained in:
Ovahlord
2020-11-24 01:43:16 +01:00
parent 52aada0c5e
commit 7be90a5bc7
3 changed files with 40 additions and 41 deletions

View File

@@ -352,7 +352,7 @@ class npc_shard_of_torment : public CreatureScript
void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetEntry() == NPC_BALEROC)
if (summoner->GetEntry() == BOSS_BALEROC)
{
if (_instance->GetBossState(DATA_BALEROC) != IN_PROGRESS)
me->DespawnOrUnsummon();
@@ -367,7 +367,7 @@ class npc_shard_of_torment : public CreatureScript
void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
if (Creature* baleroc = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BALEROC)))
if (Creature* baleroc = _instance->GetCreature(DATA_BALEROC))
baleroc->AI()->KilledUnit(who);
}

View File

@@ -27,25 +27,26 @@ uint32 const EncounterCount = 7;
enum FLDataTypes
{
DATA_BETH_TILAC = 0,
// Bosses
DATA_BETHTILAC = 0,
DATA_LORD_RHYOLITH = 1,
DATA_SHANNOX = 2,
DATA_ALYSRAZOR = 3,
DATA_BALEROC = 4,
DATA_MAJORDOMO_STAGHELM = 5,
DATA_RAGNAROS = 6,
DATA_RAGNAROS = 6
};
enum FLCreatureIds
{
//Bosses
NPC_SHANNOX = 53691,
NPC_LORD_RHYOLITH = 52558,
NPC_BETH_TILAC = 52498,
NPC_ALYSRAZOR = 52530,
NPC_BALEROC = 53494,
NPC_MAJORDOMO_STAGHELM = 52571,
NPC_RAGNAROS = 52409,
BOSS_SHANNOX = 53691,
BOSS_LORD_RHYOLITH = 52558,
BOSS_BETHTILAC = 52498,
BOSS_ALYSRAZOR = 52530,
BOSS_BALEROC = 53494,
BOSS_MAJORDOMO_STAGHELM = 52571,
BOSS_RAGNAROS = 52409,
//Alysrazor
NPC_BLAZING_MONSTROSITY_LEFT = 53786,

View File

@@ -23,31 +23,44 @@
#include "InstanceScript.h"
#include "Map.h"
class DelayedAttackStartEvent : public BasicEvent
ObjectData const creatureData[] =
{
public:
DelayedAttackStartEvent(Creature* owner) : _owner(owner) { }
bool Execute(uint64 /*e_time*/, uint32 /*p_time*/) override
{
_owner->AI()->DoZoneInCombat(_owner);
return true;
}
private:
Creature* _owner;
{ BOSS_BETHTILAC, DATA_BETHTILAC },
{ BOSS_SHANNOX, DATA_SHANNOX, },
{ BOSS_LORD_RHYOLITH, DATA_LORD_RHYOLITH },
{ BOSS_ALYSRAZOR, DATA_ALYSRAZOR },
{ BOSS_BALEROC, DATA_BALEROC },
{ BOSS_MAJORDOMO_STAGHELM, DATA_MAJORDOMO_STAGHELM },
{ BOSS_RAGNAROS, DATA_RAGNAROS },
{ 0, 0, } // END
};
DoorData const doorData[] =
{
{GO_LORD_RHYOLITH_BRIDGE, DATA_LORD_RHYOLITH, DOOR_TYPE_ROOM},
{GO_BETH_TILAC_DOOR, DATA_BETH_TILAC, DOOR_TYPE_ROOM},
{GO_BETH_TILAC_DOOR, DATA_BETHTILAC, DOOR_TYPE_ROOM},
//{GO_BALEROC_FIREWALL, DATA_BALEROC, DOOR_TYPE_ROOM},
{GO_MAJORDOMO_FIREWALL, DATA_MAJORDOMO_STAGHELM, DOOR_TYPE_PASSAGE},
{GO_RAGNAROS_DOOR, DATA_RAGNAROS, DOOR_TYPE_ROOM},
{0, 0, DOOR_TYPE_ROOM}, //END
}; //Baleroc door is special, it depends on the health status of the other bosses in the instance
class DelayedAttackStartEvent : public BasicEvent
{
public:
DelayedAttackStartEvent(Creature* owner) : _owner(owner) {}
bool Execute(uint64 /*e_time*/, uint32 /*p_time*/) override
{
_owner->AI()->DoZoneInCombat(_owner);
return true;
}
private:
Creature* _owner;
};
class instance_firelands : public InstanceMapScript
{
public:
@@ -60,6 +73,7 @@ class instance_firelands : public InstanceMapScript
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
LoadObjectData(creatureData, nullptr);
}
void OnCreatureCreate(Creature* creature) override
@@ -70,26 +84,10 @@ class instance_firelands : public InstanceMapScript
// Cannot directly start attacking here as the creature is not yet on map
creature->m_Events.AddEvent(new DelayedAttackStartEvent(creature), creature->m_Events.CalculateTime(500));
break;
case NPC_BALEROC:
BalerocGUID = creature->GetGUID();
default:
break;
}
}
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
case DATA_BALEROC:
return BalerocGUID;
}
return ObjectGuid::Empty;
}
private:
ObjectGuid BalerocGUID;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override