mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 10:30:27 +00:00
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);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user