refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAr… (#20515)
refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAreatrigger
This commit is contained in:
@@ -109,7 +109,7 @@ struct boss_brutallus : public BossAI
|
|||||||
Talk(YELL_DEATH);
|
Talk(YELL_DEATH);
|
||||||
|
|
||||||
me->CastSpell(me, SPELL_SUMMON_BRUTALLUS_DEATH_CLOUD, true);
|
me->CastSpell(me, SPELL_SUMMON_BRUTALLUS_DEATH_CLOUD, true);
|
||||||
if (Creature* madrigosa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MADRIGOSA)))
|
if (Creature* madrigosa = instance->GetCreature(DATA_MADRIGOSA))
|
||||||
madrigosa->AI()->DoAction(ACTION_SPAWN_FELMYST);
|
madrigosa->AI()->DoAction(ACTION_SPAWN_FELMYST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,10 +204,11 @@ struct npc_madrigosa : public NullCreatureAI
|
|||||||
npc_madrigosa(Creature* creature) : NullCreatureAI(creature)
|
npc_madrigosa(Creature* creature) : NullCreatureAI(creature)
|
||||||
{
|
{
|
||||||
instance = creature->GetInstanceScript();
|
instance = creature->GetInstanceScript();
|
||||||
bool appear = instance->GetBossState(DATA_BRUTALLUS) != DONE && instance->GetBossState(DATA_MADRIGOSA) == DONE;
|
|
||||||
creature->SetVisible(appear);
|
|
||||||
creature->SetStandState(UNIT_STAND_STATE_DEAD);
|
creature->SetStandState(UNIT_STAND_STATE_DEAD);
|
||||||
creature->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
creature->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||||
|
|
||||||
|
if (instance->IsBossDone(DATA_BRUTALLUS))
|
||||||
|
creature->SetVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
EventMap events;
|
EventMap events;
|
||||||
@@ -475,21 +476,17 @@ class spell_brutallus_burn : public SpellScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class AreaTrigger_at_sunwell_madrigosa : public AreaTriggerScript
|
class at_sunwell_madrigosa : public OnlyOnceAreaTriggerScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AreaTrigger_at_sunwell_madrigosa() : AreaTriggerScript("at_sunwell_madrigosa") {}
|
at_sunwell_madrigosa() : OnlyOnceAreaTriggerScript("at_sunwell_madrigosa") {}
|
||||||
|
|
||||||
bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
|
bool _OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
|
||||||
{
|
{
|
||||||
if (InstanceScript* instance = player->GetInstanceScript())
|
if (InstanceScript* instance = player->GetInstanceScript())
|
||||||
if (instance->GetBossState(DATA_MADRIGOSA) != DONE)
|
if (!instance->IsBossDone(DATA_BRUTALLUS))
|
||||||
{
|
if (Creature* creature = instance->GetCreature(DATA_MADRIGOSA))
|
||||||
instance->SetBossState(DATA_MADRIGOSA, NOT_STARTED);
|
|
||||||
instance->SetBossState(DATA_MADRIGOSA, DONE);
|
|
||||||
if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_MADRIGOSA)))
|
|
||||||
creature->AI()->DoAction(ACTION_START_EVENT);
|
creature->AI()->DoAction(ACTION_START_EVENT);
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -502,5 +499,5 @@ void AddSC_boss_brutallus()
|
|||||||
RegisterSpellScript(spell_madrigosa_activate_barrier);
|
RegisterSpellScript(spell_madrigosa_activate_barrier);
|
||||||
RegisterSpellScript(spell_madrigosa_deactivate_barrier);
|
RegisterSpellScript(spell_madrigosa_deactivate_barrier);
|
||||||
RegisterSpellScript(spell_brutallus_burn);
|
RegisterSpellScript(spell_brutallus_burn);
|
||||||
new AreaTrigger_at_sunwell_madrigosa();
|
new at_sunwell_madrigosa();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -451,20 +451,18 @@ class spell_eredar_twins_blaze : public SpellScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class AreaTrigger_at_sunwell_eredar_twins : public AreaTriggerScript
|
class at_sunwell_eredar_twins : public OnlyOnceAreaTriggerScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AreaTrigger_at_sunwell_eredar_twins() : AreaTriggerScript("at_sunwell_eredar_twins") {}
|
at_sunwell_eredar_twins() : OnlyOnceAreaTriggerScript("at_sunwell_eredar_twins") {}
|
||||||
|
|
||||||
bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
|
bool _OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
|
||||||
{
|
{
|
||||||
if (InstanceScript* instance = player->GetInstanceScript())
|
if (InstanceScript* instance = player->GetInstanceScript())
|
||||||
if (instance->GetBossState(DATA_EREDAR_TWINS_INTRO) != DONE)
|
|
||||||
{
|
{
|
||||||
instance->SetBossState(DATA_EREDAR_TWINS_INTRO, DONE);
|
if (Creature* creature = instance->GetCreature(DATA_SACROLASH))
|
||||||
if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_LADY_SACROLASH)))
|
|
||||||
creature->AI()->Talk(YELL_INTRO_SAC);
|
creature->AI()->Talk(YELL_INTRO_SAC);
|
||||||
if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_GRAND_WARLOCK_ALYTHESS)))
|
if (Creature* creature = instance->GetCreature(DATA_ALYTHESS))
|
||||||
creature->AI()->Talk(YELL_INTRO_ALY);
|
creature->AI()->Talk(YELL_INTRO_ALY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -480,5 +478,5 @@ void AddSC_boss_eredar_twins()
|
|||||||
RegisterSpellScript(spell_eredar_twins_apply_flame_touched);
|
RegisterSpellScript(spell_eredar_twins_apply_flame_touched);
|
||||||
RegisterSpellScript(spell_eredar_twins_handle_touch);
|
RegisterSpellScript(spell_eredar_twins_handle_touch);
|
||||||
RegisterSpellScript(spell_eredar_twins_blaze);
|
RegisterSpellScript(spell_eredar_twins_blaze);
|
||||||
new AreaTrigger_at_sunwell_eredar_twins();
|
new at_sunwell_eredar_twins();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,14 @@ DoorData const doorData[] =
|
|||||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ObjectData const creatureData[] =
|
||||||
|
{
|
||||||
|
{ NPC_LADY_SACROLASH, DATA_SACROLASH },
|
||||||
|
{ NPC_GRAND_WARLOCK_ALYTHESS, DATA_ALYTHESS },
|
||||||
|
{ NPC_MADRIGOSA, DATA_MADRIGOSA },
|
||||||
|
{ 0, 0, }
|
||||||
|
};
|
||||||
|
|
||||||
class instance_sunwell_plateau : public InstanceMapScript
|
class instance_sunwell_plateau : public InstanceMapScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -45,6 +53,7 @@ public:
|
|||||||
SetHeaders(DataHeader);
|
SetHeaders(DataHeader);
|
||||||
SetBossNumber(MAX_ENCOUNTERS);
|
SetBossNumber(MAX_ENCOUNTERS);
|
||||||
LoadDoorData(doorData);
|
LoadDoorData(doorData);
|
||||||
|
LoadObjectData(creatureData, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnPlayerEnter(Player* player) override
|
void OnPlayerEnter(Player* player) override
|
||||||
@@ -90,18 +99,9 @@ public:
|
|||||||
case NPC_BRUTALLUS:
|
case NPC_BRUTALLUS:
|
||||||
BrutallusGUID = creature->GetGUID();
|
BrutallusGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
case NPC_MADRIGOSA:
|
|
||||||
MadrigosaGUID = creature->GetGUID();
|
|
||||||
break;
|
|
||||||
case NPC_FELMYST:
|
case NPC_FELMYST:
|
||||||
FelmystGUID = creature->GetGUID();
|
FelmystGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
case NPC_GRAND_WARLOCK_ALYTHESS:
|
|
||||||
AlythessGUID = creature->GetGUID();
|
|
||||||
break;
|
|
||||||
case NPC_LADY_SACROLASH:
|
|
||||||
SacrolashGUID = creature->GetGUID();
|
|
||||||
break;
|
|
||||||
case NPC_MURU:
|
case NPC_MURU:
|
||||||
MuruGUID = creature->GetGUID();
|
MuruGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
@@ -144,6 +144,8 @@ public:
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InstanceScript::OnCreatureCreate(creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGameObjectCreate(GameObject* go) override
|
void OnGameObjectCreate(GameObject* go) override
|
||||||
@@ -179,23 +181,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGameObjectRemove(GameObject* go) override
|
|
||||||
{
|
|
||||||
switch (go->GetEntry())
|
|
||||||
{
|
|
||||||
case GO_FIRE_BARRIER:
|
|
||||||
case GO_MURUS_GATE_1:
|
|
||||||
case GO_MURUS_GATE_2:
|
|
||||||
case GO_BOSS_COLLISION_1:
|
|
||||||
case GO_BOSS_COLLISION_2:
|
|
||||||
case GO_FORCE_FIELD:
|
|
||||||
RemoveDoor(go);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectGuid GetGuidData(uint32 id) const override
|
ObjectGuid GetGuidData(uint32 id) const override
|
||||||
{
|
{
|
||||||
switch (id)
|
switch (id)
|
||||||
@@ -206,14 +191,8 @@ public:
|
|||||||
return SathrovarrGUID;
|
return SathrovarrGUID;
|
||||||
case NPC_BRUTALLUS:
|
case NPC_BRUTALLUS:
|
||||||
return BrutallusGUID;
|
return BrutallusGUID;
|
||||||
case NPC_MADRIGOSA:
|
|
||||||
return MadrigosaGUID;
|
|
||||||
case NPC_FELMYST:
|
case NPC_FELMYST:
|
||||||
return FelmystGUID;
|
return FelmystGUID;
|
||||||
case NPC_GRAND_WARLOCK_ALYTHESS:
|
|
||||||
return AlythessGUID;
|
|
||||||
case NPC_LADY_SACROLASH:
|
|
||||||
return SacrolashGUID;
|
|
||||||
case NPC_MURU:
|
case NPC_MURU:
|
||||||
return MuruGUID;
|
return MuruGUID;
|
||||||
case NPC_ANVEENA:
|
case NPC_ANVEENA:
|
||||||
@@ -240,10 +219,7 @@ public:
|
|||||||
ObjectGuid KalecgosDragonGUID;
|
ObjectGuid KalecgosDragonGUID;
|
||||||
ObjectGuid SathrovarrGUID;
|
ObjectGuid SathrovarrGUID;
|
||||||
ObjectGuid BrutallusGUID;
|
ObjectGuid BrutallusGUID;
|
||||||
ObjectGuid MadrigosaGUID;
|
|
||||||
ObjectGuid FelmystGUID;
|
ObjectGuid FelmystGUID;
|
||||||
ObjectGuid AlythessGUID;
|
|
||||||
ObjectGuid SacrolashGUID;
|
|
||||||
ObjectGuid MuruGUID;
|
ObjectGuid MuruGUID;
|
||||||
ObjectGuid KilJaedenGUID;
|
ObjectGuid KilJaedenGUID;
|
||||||
ObjectGuid KilJaedenControllerGUID;
|
ObjectGuid KilJaedenControllerGUID;
|
||||||
|
|||||||
@@ -24,18 +24,23 @@
|
|||||||
|
|
||||||
#define SWPScriptName "instance_sunwell_plateau"
|
#define SWPScriptName "instance_sunwell_plateau"
|
||||||
|
|
||||||
enum DataTypes
|
enum BossIds
|
||||||
{
|
{
|
||||||
DATA_KALECGOS = 0,
|
DATA_KALECGOS = 0,
|
||||||
DATA_MADRIGOSA = 1,
|
DATA_BRUTALLUS = 1,
|
||||||
DATA_BRUTALLUS = 2,
|
DATA_FELMYST = 2,
|
||||||
DATA_FELMYST = 3,
|
DATA_FELMYST_DOORS = 3,
|
||||||
DATA_FELMYST_DOORS = 4,
|
DATA_EREDAR_TWINS = 4,
|
||||||
DATA_EREDAR_TWINS_INTRO = 5,
|
DATA_MURU = 5,
|
||||||
DATA_EREDAR_TWINS = 6,
|
DATA_KILJAEDEN = 6,
|
||||||
DATA_MURU = 7,
|
MAX_ENCOUNTERS
|
||||||
DATA_KILJAEDEN = 8,
|
};
|
||||||
MAX_ENCOUNTERS = 9,
|
|
||||||
|
enum DataTypes
|
||||||
|
{
|
||||||
|
DATA_SACROLASH = 0,
|
||||||
|
DATA_ALYTHESS = 1,
|
||||||
|
DATA_MADRIGOSA = 2,
|
||||||
|
|
||||||
// GameObject GUIDs
|
// GameObject GUIDs
|
||||||
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_1 = 10,
|
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_1 = 10,
|
||||||
|
|||||||
Reference in New Issue
Block a user