refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAr… (#20515)

refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAreatrigger
This commit is contained in:
Andrew
2024-11-11 02:56:27 -03:00
committed by GitHub
parent e741a9a87f
commit 0ce15f0f5a
4 changed files with 46 additions and 70 deletions
@@ -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,