aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Outland
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-09-15 03:53:02 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-29 00:41:22 +0200
commitfe938b99f843df3f6c120695db38f327bd55ea94 (patch)
treeb6e47409a22c4262ac6657272842c1205f986f0c /src/server/scripts/Outland
parent77d13a7b97d4b9d243ce753ca02ae94d9e10b17e (diff)
Core/Scripts: Implemented OnlyOnceAreaTriggerScript (#20288)
(cherry picked from commit 971ed856a49dc56ea33d9a0779b1386eea5cd3ca)
Diffstat (limited to 'src/server/scripts/Outland')
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h7
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp7
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp25
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp54
4 files changed, 54 insertions, 39 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index 42a6c0457d8..6e93e0c63c0 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -40,25 +40,22 @@ enum BTDataTypes
// Additional Data
DATA_AKAMA_SHADE = 9,
-
DATA_AKAMA = 10,
DATA_MAIEV = 11,
DATA_GO_ILLIDAN_GATE = 12,
DATA_BLACK_TEMPLE_TRIGGER = 13,
-
DATA_GATHIOS_THE_SHATTERER = 14,
DATA_HIGH_NETHERMANCER_ZEREVOR = 15,
DATA_LADY_MALANDE = 16,
DATA_VERAS_DARKSHADOW = 17,
DATA_BLOOD_ELF_COUNCIL_VOICE = 18,
-
DATA_GO_DEN_OF_MORTAL_DOOR = 19,
-
DATA_ESSENCE_OF_SUFFERING = 20,
DATA_ESSENCE_OF_DESIRE = 21,
DATA_ESSENCE_OF_ANGER = 22,
-
DATA_ILLIDAN_MUSIC_CONTROLLER = 23,
+ DATA_TERON_GOREFIEND_INTRO = 24,
+ DATA_AKAMA_ILLIDAN_INTRO = 25
};
enum TriggerEmotes
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index befa2fa0164..9de5e595a1e 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -454,7 +454,7 @@ public:
struct boss_illidan_stormrageAI : public BossAI
{
boss_illidan_stormrageAI(Creature* creature) : BossAI(creature, DATA_ILLIDAN_STORMRAGE),
- _intro(true), _minionsCount(0), _flameCount(0), _orientation(0.0f), _pillarIndex(0), _phase(0), _dead(false), _isDemon(false) { }
+ _minionsCount(0), _flameCount(0), _orientation(0.0f), _pillarIndex(0), _phase(0), _dead(false), _isDemon(false) { }
void Reset() override
{
@@ -470,7 +470,7 @@ public:
_flameCount = 0;
_phase = PHASE_1;
_isDemon = false;
- if (_intro && instance->GetBossState(DATA_ILLIDARI_COUNCIL) == DONE)
+ if (instance->GetData(DATA_AKAMA_ILLIDAN_INTRO) && instance->GetBossState(DATA_ILLIDARI_COUNCIL) == DONE)
if (Creature* akama = instance->GetCreature(DATA_AKAMA))
akama->AI()->DoAction(ACTION_ACTIVE_AKAMA_INTRO);
}
@@ -568,7 +568,7 @@ public:
akama->AI()->DoAction(ACTION_FREE);
break;
case ACTION_INTRO_DONE:
- _intro = false;
+ instance->SetData(DATA_AKAMA_ILLIDAN_INTRO, 0);
break;
case ACTION_START_MINIONS:
Talk(SAY_ILLIDAN_MINION);
@@ -1023,7 +1023,6 @@ public:
}
private:
- bool _intro;
uint8 _minionsCount;
uint8 _flameCount;
float _orientation;
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index bdbc067ae92..76323235cdf 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -115,10 +115,16 @@ public:
struct boss_teron_gorefiendAI : public BossAI
{
- boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND), _intro(false)
+ boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND) { }
+
+ void Reset() override
{
- creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
- creature->SetReactState(REACT_PASSIVE);
+ _Reset();
+ if (instance->GetData(DATA_TERON_GOREFIEND_INTRO))
+ {
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
+ me->SetReactState(REACT_PASSIVE);
+ }
}
void EnterCombat(Unit* /*who*/) override
@@ -142,9 +148,9 @@ public:
void DoAction(int32 action) override
{
- if (action == ACTION_START_INTRO && !_intro && me->IsAlive())
+ if (action == ACTION_START_INTRO && me->IsAlive())
{
- _intro = true;
+ instance->SetData(DATA_TERON_GOREFIEND_INTRO, 0);
Talk(SAY_INTRO);
events.SetPhase(PHASE_INTRO);
events.ScheduleEvent(EVENT_FINISH_INTRO, Seconds(20));
@@ -216,9 +222,6 @@ public:
DoMeleeAttackIfReady();
}
-
- private:
- bool _intro;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -365,12 +368,12 @@ public:
}
};
-class at_teron_gorefiend_entrance : public AreaTriggerScript
+class at_teron_gorefiend_entrance : public OnlyOnceAreaTriggerScript
{
public:
- at_teron_gorefiend_entrance() : AreaTriggerScript("at_teron_gorefiend_entrance") { }
+ at_teron_gorefiend_entrance() : OnlyOnceAreaTriggerScript("at_teron_gorefiend_entrance") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/, bool entered) override
+ bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/, bool entered) override
{
if (!entered)
return true;
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index bc2c071f7c3..51983b77e20 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -101,7 +101,9 @@ class instance_black_temple : public InstanceMapScript
LoadDoorData(doorData);
LoadObjectData(creatureData, gameObjectData);
LoadBossBoundaries(boundaries);
- akamaState = AKAMA_INTRO;
+ AkamaState = AKAMA_INTRO;
+ TeronGorefiendIntro = 1;
+ AkamaIllidanIntro = 1;
}
void OnGameObjectCreate(GameObject* go) override
@@ -126,7 +128,7 @@ class instance_black_temple : public InstanceMapScript
case NPC_ASHTONGUE_STORMCALLER:
case NPC_ASHTONGUE_FERAL_SPIRIT:
case NPC_STORM_FURY:
- AshtongueGUIDs.emplace_back(creature->GetGUID());
+ AshtongueGUIDs.push_back(creature->GetGUID());
if (GetBossState(DATA_SHADE_OF_AKAMA) == DONE)
creature->SetFaction(FACTION_ASHTONGUE_DEATHSWORN);
break;
@@ -135,27 +137,39 @@ class instance_black_temple : public InstanceMapScript
}
}
- uint32 GetData(uint32 data) const override
+ uint32 GetData(uint32 type) const override
{
- if (data == DATA_AKAMA)
- return akamaState;
-
- return 0;
+ switch (type)
+ {
+ case DATA_AKAMA:
+ return AkamaState;
+ case DATA_TERON_GOREFIEND_INTRO:
+ return TeronGorefiendIntro;
+ case DATA_AKAMA_ILLIDAN_INTRO:
+ return AkamaIllidanIntro;
+ default:
+ return 0;
+ }
}
- void SetData(uint32 data, uint32 value) override
+ void SetData(uint32 type, uint32 data) override
{
- switch (data)
+ switch (type)
{
- case DATA_AKAMA:
- akamaState = value;
- break;
- case ACTION_OPEN_DOOR:
- if (GameObject* illidanGate = GetGameObject(DATA_GO_ILLIDAN_GATE))
- HandleGameObject(ObjectGuid::Empty, true, illidanGate);
- break;
- default:
- break;
+ case DATA_AKAMA:
+ AkamaState = data;
+ break;
+ case ACTION_OPEN_DOOR:
+ if (GameObject* illidanGate = GetGameObject(DATA_GO_ILLIDAN_GATE))
+ HandleGameObject(ObjectGuid::Empty, true, illidanGate);
+ break;
+ case DATA_TERON_GOREFIEND_INTRO:
+ TeronGorefiendIntro = data;
+ break;
+ case DATA_AKAMA_ILLIDAN_INTRO:
+ AkamaIllidanIntro = data;
+ default:
+ break;
}
}
@@ -211,7 +225,9 @@ class instance_black_temple : public InstanceMapScript
protected:
GuidVector AshtongueGUIDs;
- uint8 akamaState;
+ uint8 AkamaState;
+ uint8 TeronGorefiendIntro;
+ uint8 AkamaIllidanIntro;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override