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

View File

@@ -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();
}

View File

@@ -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();
}

View File

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

View File

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