From b0df1fdca3534835e8697222595b219f4d45f3ff Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 13 Jun 2021 17:10:56 +0200 Subject: [PATCH] Scripts/BWD: converted remaining achievements to world state based handling --- .../world/4.3.4/2021_06_13_03_world.sql | 12 ++++++ .../BlackwingDescent/blackwing_descent.h | 20 ++++++--- .../BlackwingDescent/boss_atramedes.cpp | 34 +++------------ .../BlackwingDescent/boss_chimaeron.cpp | 41 +++---------------- .../BlackwingDescent/boss_magmaw.cpp | 40 +++--------------- .../BlackwingDescent/boss_nefarians_end.cpp | 25 +++-------- .../instance_blackwing_descent.cpp | 13 ------ 7 files changed, 46 insertions(+), 139 deletions(-) create mode 100644 sql/updates/world/4.3.4/2021_06_13_03_world.sql diff --git a/sql/updates/world/4.3.4/2021_06_13_03_world.sql b/sql/updates/world/4.3.4/2021_06_13_03_world.sql new file mode 100644 index 00000000000..5d7a7299c2f --- /dev/null +++ b/sql/updates/world/4.3.4/2021_06_13_03_world.sql @@ -0,0 +1,12 @@ +DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN +('achievement_parasite_evening', +'achievement_full_of_sound_and_fury', +'achievement_keeping_it_in_the_family', +'achievement_silence_is_golden'); + +DELETE FROM `world_states` WHERE `ID` IN (5640, 5643, 5652, 5655); +INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES +(5640, 0, 669, 'Blackwing Descent - Magmaw - Parasite Evening'), +(5643, 0, 669, 'Blackwing Descent - Chimaeron - Full of Sound and Fury'), +(5652, 1, 669, 'Blackwing Descent - Nefarian\'s End - Keeping it in the Family'), +(5655, 0, 669, 'Blackwing Descent - Atramedes - Silence is Golden'); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.h index 62f5b8ede95..fbe5d6e1fe6 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/blackwing_descent.h @@ -42,7 +42,6 @@ enum BWDDataTypes DATA_COLUMN_OF_LIGHT, DATA_ATRAMEDES_INTRO, DATA_ENTRANCE_INTRO, - DATA_NEFARIAN_ACHIEVEMENT_STATE, DATA_LORD_VICTOR_NEFARIUS_GENERIC, DATA_BOSS_DEFEATED, DATA_HEROES_ENTERED_HALLS, @@ -207,13 +206,22 @@ enum BWDSpells enum BWDWorldStates { // Omnotron Defense System - WORLD_STATE_ID_STATIC_SHOCK = 5644, - WORLD_STATE_ID_POISON_BOMB = 5645, - WORLD_STATE_ID_ARCANE_ANNIHILATOR = 5646, - WORLD_STATE_ID_FLAMETHROWER = 5647, + WORLD_STATE_ID_STATIC_SHOCK = 5644, + WORLD_STATE_ID_POISON_BOMB = 5645, + WORLD_STATE_ID_ARCANE_ANNIHILATOR = 5646, + WORLD_STATE_ID_FLAMETHROWER = 5647, + + // Magmaw + WORLD_STATE_ID_PARASITE_EVENING = 5640, + + // Chimaeron + WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY = 5643, + + // Atramedes + WORLD_STATE_ID_SILENCE_IS_GOLDEN = 5655, // Nefarian's End - WS_KEEPING_IT_IN_THE_FAMILY = 0 + WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY = 5652 }; template diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp index 03935190f6f..3cfedf36a0f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp @@ -19,6 +19,7 @@ #include "ScriptMgr.h" #include "CommonPredicates.h" #include "GridNotifiers.h" +#include "Map.h" #include "MoveSpline.h" #include "PassiveAI.h" #include "ScriptedCreature.h" @@ -130,7 +131,6 @@ enum Actions // Atramedes ACTION_START_INTRO = 0, ACTION_HALT_REVERBERATING_FLAME = 1, - ACTION_FAIL_ACHIEVEMENT = 2, // Lord Victor Nefarius ACTION_DESTROY_SHIELD = 0, @@ -166,7 +166,6 @@ enum Data DATA_ADD_NOISY_PLAYER = 1, DATA_REMOVE_NOISY_PLAYER = 2, DATA_LAST_SHIELD_USER = 3, - DATA_ACHIEVEMENT_ENLIGIBLE = 4, // Getter DATA_IS_IN_AIR = 0, @@ -188,7 +187,7 @@ Position const LordVictorNefariusSummonPosition = { 92.91319f, -223.9931f, 96.89 struct boss_atramedes : public BossAI { - boss_atramedes(Creature* creature) : BossAI(creature, DATA_ATRAMEDES), _achievementEnligible(true) { } + boss_atramedes(Creature* creature) : BossAI(creature, DATA_ATRAMEDES) { } void Reset() override { @@ -200,6 +199,7 @@ struct boss_atramedes : public BossAI { BossAI::JustEngagedWith(who); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); + instance->instance->SetWorldState(WORLD_STATE_ID_SILENCE_IS_GOLDEN, 0); Talk(SAY_AGGRO); DoCastSelf(SPELL_DEVASTATION_TRIGGER); DoCastSelf(SPELL_SOUND_BAR); @@ -307,8 +307,6 @@ struct boss_atramedes : public BossAI return (uint8(!_noisyPlayerGUIDs.empty())); case DATA_IS_IN_INTRO_PHASE: return (uint8(events.IsInPhase(PHASE_INTRO))); - case DATA_ACHIEVEMENT_ENLIGIBLE: - return (uint8(_achievementEnligible)); } return 0; @@ -411,9 +409,6 @@ struct boss_atramedes : public BossAI events.ScheduleEvent(EVENT_MOVE_REVERBERATING_FLAME_TO_SHIELD, 2s, 0, PHASE_AIR); } break; - case ACTION_FAIL_ACHIEVEMENT: - _achievementEnligible = false; - break; default: break; } @@ -518,7 +513,6 @@ private: ObjectGuid _lastShieldUserGUID; ObjectGuid _lastUsedAncientDwarvenShieldGUID; ObjectGuid _reverberatingFlameGUID; - bool _achievementEnligible; }; struct npc_atramedes_ancient_dwarven_shield : public NullCreatureAI @@ -842,8 +836,8 @@ class spell_atramedes_sound_bar : public AuraScript target->CastSpell(target, SPELL_NOISY, aurEff); } else if (target->GetPower(POWER_ALTERNATE_POWER) >= 50) - if (Creature* atramedes = instance->GetCreature(DATA_ATRAMEDES)) - atramedes->AI()->DoAction(ACTION_FAIL_ACHIEVEMENT); + if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_SILENCE_IS_GOLDEN)) + instance->instance->SetWorldState(WORLD_STATE_ID_SILENCE_IS_GOLDEN, 1); } void Register() override @@ -1039,23 +1033,6 @@ class spell_atramedes_apply_vehicle_periodic : public AuraScript } }; -class achievement_silence_is_golden : public AchievementCriteriaScript -{ - public: - achievement_silence_is_golden() : AchievementCriteriaScript("achievement_silence_is_golden") { } - - bool OnCheck(Player* /*source*/, Unit* target) override - { - if (!target) - return false; - - if (target->IsAIEnabled) - return target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE); - - return false; - } -}; - void AddSC_boss_atramedes() { RegisterBlackwingDescentCreatureAI(boss_atramedes); @@ -1078,5 +1055,4 @@ void AddSC_boss_atramedes() RegisterSpellScript(spell_atramedes_destroy_shield); RegisterSpellScript(spell_atramedes_pestered); RegisterSpellScript(spell_atramedes_apply_vehicle_periodic); - new achievement_silence_is_golden(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp index ccf22063c2a..bcafebd52f9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp @@ -125,11 +125,6 @@ enum GossipMenuMisc NPC_TEXT_MISSING_KEY = 16565 }; -enum Data -{ - DATA_ACHIEVEMENT_ENLIGIBLE = 0 -}; - Position const LordVictorNefariusSummonPosition = { -113.8229f, 45.86111f, 80.36481f, 4.817109f }; struct boss_chimaeron : public BossAI @@ -155,6 +150,7 @@ struct boss_chimaeron : public BossAI { BossAI::JustEngagedWith(who); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); + instance->instance->SetWorldState(WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY, 0); me->SetReactState(REACT_AGGRESSIVE); events.SetPhase(PHASE_1); events.ScheduleEvent(EVENT_CAUSTIC_SLIME, 5s, 0, PHASE_1); @@ -213,7 +209,11 @@ struct boss_chimaeron : public BossAI void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) + { _killedPlayerCount++; + if (_killedPlayerCount == 3) + instance->instance->SetWorldState(WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY, 1); + } } void DamageTaken(Unit* /*attacker*/, uint32& damage) override @@ -313,19 +313,6 @@ struct boss_chimaeron : public BossAI } } - uint32 GetData(uint32 type) const override - { - switch (type) - { - case DATA_ACHIEVEMENT_ENLIGIBLE: - return uint8(_killedPlayerCount <= 2); - default: - return 0; - } - - return 0; - } - void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !events.IsInPhase(PHASE_ASLEEP) && !_isInFeud) @@ -697,23 +684,6 @@ class spell_chimaeron_shadow_whip : public SpellScript } }; -class achievement_full_of_sound_and_fury : public AchievementCriteriaScript -{ - public: - achievement_full_of_sound_and_fury() : AchievementCriteriaScript("achievement_full_of_sound_and_fury") { } - - bool OnCheck(Player* /*source*/, Unit* target) override - { - if (!target) - return false; - - if (target->IsAIEnabled) - return target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE); - - return false; - } -}; - void AddSC_boss_chimaeron() { RegisterBlackwingDescentCreatureAI(boss_chimaeron); @@ -726,5 +696,4 @@ void AddSC_boss_chimaeron() RegisterSpellScript(spell_chimaeron_reroute_power); RegisterSpellScript(spell_chimaeron_feud); RegisterSpellScript(spell_chimaeron_shadow_whip); - new achievement_full_of_sound_and_fury(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp index 406872f666e..ec1c8fc4775 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp @@ -133,7 +133,6 @@ enum Actions ACTION_DISABLE_MOUNTING = 2, ACTION_EXPOSE_HEAD = 4, ACTION_COVER_HEAD = 5, - ACTION_FAIL_ACHIEVEMT = 3, // Nefarian ACTION_SCHEDULE_SHADOW_BREATH = 0, @@ -174,8 +173,7 @@ enum VehicleSeats enum Data { - DATA_FREE_PINCER = 0, - DATA_ACHIEVEMENT_STATE = 1 + DATA_FREE_PINCER = 0 }; enum MovePoints @@ -212,7 +210,7 @@ Position const NefarianIntroSummonPos = { -390.1042f, 40.88411f, 207.8586f, 0 struct boss_magmaw : public BossAI { boss_magmaw(Creature* creature) : BossAI(creature, DATA_MAGMAW), - _magmaProjectileCount(0), _achievementEnligible(true), _headEngaged(false), _heroicPhaseTwoActive(!IsHeroic()) + _magmaProjectileCount(0), _headEngaged(false), _heroicPhaseTwoActive(!IsHeroic()) { me->SetReactState(REACT_PASSIVE); } @@ -237,6 +235,7 @@ struct boss_magmaw : public BossAI BossAI::JustEngagedWith(who); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, FRAME_PRIORITY_MAGMAW); + instance->instance->SetWorldState(WORLD_STATE_ID_PARASITE_EVENING, 0); me->SetReactState(REACT_AGGRESSIVE); events.SetPhase(PHASE_COMBAT); @@ -330,14 +329,6 @@ struct boss_magmaw : public BossAI } } - uint32 GetData(uint32 type) const override - { - if (type == DATA_ACHIEVEMENT_STATE) - return _achievementEnligible; - - return 0; - } - ObjectGuid GetGUID(int32 type) const override { switch (type) @@ -432,9 +423,6 @@ struct boss_magmaw : public BossAI head->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } break; - case ACTION_FAIL_ACHIEVEMT: - _achievementEnligible = false; - break; default: break; } @@ -604,7 +592,6 @@ private: std::array _bodyPartGUIDs; uint8 _magmaProjectileCount; - bool _achievementEnligible; bool _headEngaged; bool _heroicPhaseTwoActive; }; @@ -714,8 +701,8 @@ struct npc_magmaw_lava_parasite : public ScriptedAI me->AttackStop(); me->SetReactState(REACT_PASSIVE); me->DespawnOrUnsummon(4s); - if (Creature* magmaw = _instance->GetCreature(DATA_MAGMAW)) - magmaw->AI()->DoAction(ACTION_FAIL_ACHIEVEMT); + if (!_instance->instance->GetWorldStateValue(WORLD_STATE_ID_PARASITE_EVENING)) + _instance->instance->SetWorldState(WORLD_STATE_ID_PARASITE_EVENING, 1); } } @@ -1271,22 +1258,6 @@ class spell_magmaw_captured : public AuraScript } }; -class achievement_parasite_evening : public AchievementCriteriaScript -{ - public: - achievement_parasite_evening() : AchievementCriteriaScript("achievement_parasite_evening") { } - - bool OnCheck(Player* /*source*/, Unit* target) override - { - if (!target) - return false; - - if (target->IsAIEnabled) - return target->GetAI()->GetData(DATA_ACHIEVEMENT_STATE); - - return false; - } -}; void AddSC_boss_magmaw() { @@ -1308,5 +1279,4 @@ void AddSC_boss_magmaw() RegisterSpellScript(spell_magmaw_massive_crash); RegisterSpellScript(spell_magmaw_impale_self); RegisterSpellScript(spell_magmaw_captured); - new achievement_parasite_evening(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp index cfddb436d53..910cbfbc2c2 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp @@ -291,8 +291,7 @@ static OnyxiaChainData OnyxiaChainInfo[] = enum Misc { - SOUND_ID_ROAR = 7274, - WS_ACHIEVEMENT_CRITERIA = 5652 + SOUND_ID_ROAR = 7274 }; Position const NefarianSummonPosition = { -166.655f, -224.602f, 40.48163f, 0.0f }; @@ -438,7 +437,6 @@ struct boss_nefarians_end : public BossAI } summons.DespawnAll(); - instance->SetData(DATA_NEFARIAN_ACHIEVEMENT_STATE, 1); instance->SetBossState(DATA_NEFARIANS_END, FAIL); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_EXPLOSIVE_CINDERS); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DOMINION_OVERRIDE_ACTION_BAR); @@ -781,7 +779,7 @@ struct boss_nefarians_end : public BossAI break; case EVENT_LAND_PHASE_THREE: if (me->GetHealthPct() > 50.f) - instance->SetData(DATA_NEFARIAN_ACHIEVEMENT_STATE, 0); + instance->instance->SetWorldState(WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY, 0); me->RemoveAurasDueToSpell(SPELL_NEFARIAN_PHASE_2_HEALTH_AURA); me->SendSetPlayHoverAnim(true); @@ -924,7 +922,10 @@ struct npc_nefarians_end_onyxia : public ScriptedAI void JustEngagedWith(Unit* /*who*/) override { if (_instance->GetBossState(DATA_NEFARIANS_END) != IN_PROGRESS) + { _instance->SetBossState(DATA_NEFARIANS_END, IN_PROGRESS); + _instance->instance->SetWorldState(WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY, 1); + } _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, FRAME_INDEX_ONYXIA); @@ -2051,21 +2052,6 @@ private: InstanceScript* _instance; }; -class achievement_keeping_it_in_the_family : public AchievementCriteriaScript -{ -public: - achievement_keeping_it_in_the_family() : AchievementCriteriaScript("achievement_keeping_it_in_the_family") { } - - bool OnCheck(Player* /*source*/, Unit* target) override - { - InstanceScript* instance = target->GetInstanceScript(); - if (!instance) - return false; - - return instance->GetData(DATA_NEFARIAN_ACHIEVEMENT_STATE); - } -}; - void AddSC_boss_nefarians_end() { RegisterBlackwingDescentCreatureAI(boss_nefarians_end); @@ -2098,5 +2084,4 @@ void AddSC_boss_nefarians_end() RegisterSpellScript(spell_nefarians_end_siphon_power); RegisterSpellScript(spell_nefarians_end_explosive_cinders); RegisterGameObjectAI(go_nefarians_end_orb_of_culmination); - new achievement_keeping_it_in_the_family(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/instance_blackwing_descent.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/instance_blackwing_descent.cpp index 9e7c57c1368..2df662e95fc 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/instance_blackwing_descent.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/instance_blackwing_descent.cpp @@ -131,7 +131,6 @@ class instance_blackwing_descent : public InstanceMapScript _deadDwarfSpiritsLeft = 0; _deadDwarfSpiritsRight = 0; _atramedesIntroState = NOT_STARTED; - _nefarianAchievementEligible = true; _nefariansEndIntroDone = false; } @@ -360,10 +359,6 @@ class instance_blackwing_descent : public InstanceMapScript nefarius->AI()->SetData(DATA_HEROES_ENTERED_HALLS, DONE); break; } - case DATA_NEFARIAN_ACHIEVEMENT_STATE: - _nefarianAchievementEligible = uint8(data); - DoUpdateWorldState(WS_KEEPING_IT_IN_THE_FAMILY, uint8(_nefarianAchievementEligible)); - break; case DATA_NEFARIANS_END_INTRO_DONE: _nefariansEndIntroDone = uint8(data); break; @@ -375,19 +370,12 @@ class instance_blackwing_descent : public InstanceMapScript } } - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) override - { - data.Worldstates.emplace_back(uint32(WS_KEEPING_IT_IN_THE_FAMILY), uint32(_nefarianAchievementEligible)); - } - uint32 GetData(uint32 type) const override { switch (type) { case DATA_ATRAMEDES_INTRO: return _atramedesIntroState; - case DATA_NEFARIAN_ACHIEVEMENT_STATE: - return uint8(_nefarianAchievementEligible); case DATA_NEFARIANS_END_INTRO_DONE: return uint8(_nefariansEndIntroDone); } @@ -528,7 +516,6 @@ class instance_blackwing_descent : public InstanceMapScript uint8 _deadDwarfSpiritsLeft; uint8 _deadDwarfSpiritsRight; uint8 _atramedesIntroState; - bool _nefarianAchievementEligible; bool _nefariansEndIntroDone; bool IsNefarianAvailable() const