diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-09-15 03:53:02 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-08-29 00:41:22 +0200 |
| commit | fe938b99f843df3f6c120695db38f327bd55ea94 (patch) | |
| tree | b6e47409a22c4262ac6657272842c1205f986f0c /src/server/scripts/Outland | |
| parent | 77d13a7b97d4b9d243ce753ca02ae94d9e10b17e (diff) | |
Core/Scripts: Implemented OnlyOnceAreaTriggerScript (#20288)
(cherry picked from commit 971ed856a49dc56ea33d9a0779b1386eea5cd3ca)
Diffstat (limited to 'src/server/scripts/Outland')
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 |
