diff options
author | Andrew <47818697+Nyeriah@users.noreply.github.com> | 2024-11-11 02:56:27 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-11 02:56:27 -0300 |
commit | 0ce15f0f5a15401dabf6358ecf8a7aae05542d0c (patch) | |
tree | be241c374a831276236044067d1f492379afb4d9 /src | |
parent | e741a9a87f9a6af8efe1a2e6c856f2100e90ac25 (diff) |
refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAr… (#20515)
refactor(Scripts/SunwellPlateau): Refactor areatriggers to OnlyOnceAreatrigger
Diffstat (limited to 'src')
4 files changed, 46 insertions, 70 deletions
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index e8e46a03f3..96e15eb4f2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -109,7 +109,7 @@ struct boss_brutallus : public BossAI Talk(YELL_DEATH); 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); } @@ -204,10 +204,11 @@ struct npc_madrigosa : public NullCreatureAI npc_madrigosa(Creature* creature) : NullCreatureAI(creature) { 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->SetDynamicFlag(UNIT_DYNFLAG_DEAD); + + if (instance->IsBossDone(DATA_BRUTALLUS)) + creature->SetVisible(false); } 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: - 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 (instance->GetBossState(DATA_MADRIGOSA) != DONE) - { - instance->SetBossState(DATA_MADRIGOSA, NOT_STARTED); - instance->SetBossState(DATA_MADRIGOSA, DONE); - if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_MADRIGOSA))) + if (!instance->IsBossDone(DATA_BRUTALLUS)) + if (Creature* creature = instance->GetCreature(DATA_MADRIGOSA)) creature->AI()->DoAction(ACTION_START_EVENT); - } return true; } @@ -502,5 +499,5 @@ void AddSC_boss_brutallus() RegisterSpellScript(spell_madrigosa_activate_barrier); RegisterSpellScript(spell_madrigosa_deactivate_barrier); RegisterSpellScript(spell_brutallus_burn); - new AreaTrigger_at_sunwell_madrigosa(); + new at_sunwell_madrigosa(); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index b3751e4278..6b2cef92b5 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -451,22 +451,20 @@ class spell_eredar_twins_blaze : public SpellScript } }; -class AreaTrigger_at_sunwell_eredar_twins : public AreaTriggerScript +class at_sunwell_eredar_twins : public OnlyOnceAreaTriggerScript { 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 (instance->GetBossState(DATA_EREDAR_TWINS_INTRO) != DONE) - { - instance->SetBossState(DATA_EREDAR_TWINS_INTRO, DONE); - if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_LADY_SACROLASH))) - creature->AI()->Talk(YELL_INTRO_SAC); - if (Creature* creature = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_GRAND_WARLOCK_ALYTHESS))) - creature->AI()->Talk(YELL_INTRO_ALY); - } + { + if (Creature* creature = instance->GetCreature(DATA_SACROLASH)) + creature->AI()->Talk(YELL_INTRO_SAC); + if (Creature* creature = instance->GetCreature(DATA_ALYTHESS)) + creature->AI()->Talk(YELL_INTRO_ALY); + } return true; } @@ -480,5 +478,5 @@ void AddSC_boss_eredar_twins() RegisterSpellScript(spell_eredar_twins_apply_flame_touched); RegisterSpellScript(spell_eredar_twins_handle_touch); RegisterSpellScript(spell_eredar_twins_blaze); - new AreaTrigger_at_sunwell_eredar_twins(); + new at_sunwell_eredar_twins(); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 20ef8f39bd..9c51e79c18 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -33,6 +33,14 @@ DoorData const doorData[] = { 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 { public: @@ -45,6 +53,7 @@ public: SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); + LoadObjectData(creatureData, nullptr); } void OnPlayerEnter(Player* player) override @@ -90,18 +99,9 @@ public: case NPC_BRUTALLUS: BrutallusGUID = creature->GetGUID(); break; - case NPC_MADRIGOSA: - MadrigosaGUID = creature->GetGUID(); - break; case NPC_FELMYST: FelmystGUID = creature->GetGUID(); break; - case NPC_GRAND_WARLOCK_ALYTHESS: - AlythessGUID = creature->GetGUID(); - break; - case NPC_LADY_SACROLASH: - SacrolashGUID = creature->GetGUID(); - break; case NPC_MURU: MuruGUID = creature->GetGUID(); break; @@ -144,6 +144,8 @@ public: default: break; } + + InstanceScript::OnCreatureCreate(creature); } 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 { switch (id) @@ -206,14 +191,8 @@ public: return SathrovarrGUID; case NPC_BRUTALLUS: return BrutallusGUID; - case NPC_MADRIGOSA: - return MadrigosaGUID; case NPC_FELMYST: return FelmystGUID; - case NPC_GRAND_WARLOCK_ALYTHESS: - return AlythessGUID; - case NPC_LADY_SACROLASH: - return SacrolashGUID; case NPC_MURU: return MuruGUID; case NPC_ANVEENA: @@ -240,10 +219,7 @@ public: ObjectGuid KalecgosDragonGUID; ObjectGuid SathrovarrGUID; ObjectGuid BrutallusGUID; - ObjectGuid MadrigosaGUID; ObjectGuid FelmystGUID; - ObjectGuid AlythessGUID; - ObjectGuid SacrolashGUID; ObjectGuid MuruGUID; ObjectGuid KilJaedenGUID; ObjectGuid KilJaedenControllerGUID; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h index e6e993d649..74969b0bb2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h @@ -24,18 +24,23 @@ #define SWPScriptName "instance_sunwell_plateau" -enum DataTypes +enum BossIds { DATA_KALECGOS = 0, - DATA_MADRIGOSA = 1, - DATA_BRUTALLUS = 2, - DATA_FELMYST = 3, - DATA_FELMYST_DOORS = 4, - DATA_EREDAR_TWINS_INTRO = 5, - DATA_EREDAR_TWINS = 6, - DATA_MURU = 7, - DATA_KILJAEDEN = 8, - MAX_ENCOUNTERS = 9, + DATA_BRUTALLUS = 1, + DATA_FELMYST = 2, + DATA_FELMYST_DOORS = 3, + DATA_EREDAR_TWINS = 4, + DATA_MURU = 5, + DATA_KILJAEDEN = 6, + MAX_ENCOUNTERS +}; + +enum DataTypes +{ + DATA_SACROLASH = 0, + DATA_ALYTHESS = 1, + DATA_MADRIGOSA = 2, // GameObject GUIDs DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_1 = 10, |