diff --git a/sql/updates/world/4.3.4/2021_06_13_05_world.sql b/sql/updates/world/4.3.4/2021_06_13_05_world.sql new file mode 100644 index 00000000000..3d8b3918580 --- /dev/null +++ b/sql/updates/world/4.3.4/2021_06_13_05_world.sql @@ -0,0 +1,9 @@ +DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN +('achievement_sun_of_a', +'achievement_i_hate_that_song'); + +DELETE FROM `world_states` WHERE `ID` IN (5638, 5653, 5639); +INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES +(5638, 0, 644, 'Halls of Origination - Temple Guardian Anhuur - I Hate That Song'), +(5653, 0, 644, 'Halls of Origination - Vault of Lights - Faster Than The Speed Of Light'), +(5639, 0, 644, 'Halls of Origination - Rajh - Sun of a...'); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp index d701a9fdc3d..16d0b0e10ba 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_rajh.cpp @@ -87,11 +87,6 @@ enum MovePoints POINT_RAJH_CENTER }; -enum AchievementData -{ - DATA_SUN_OF_A = 1 -}; - Position const RajhMiddlePos = { -318.5936f, 192.8621f, 343.9443f }; struct boss_rajh : public BossAI @@ -104,7 +99,6 @@ struct boss_rajh : public BossAI void Initialize() { _energized = true; - _achievementEnabled = true; _randomTimerCase = 0; } @@ -120,6 +114,7 @@ struct boss_rajh : public BossAI BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); + instance->instance->SetWorldState(WORLD_STATE_ID_SUN_OF_A, 0); me->SetReactState(REACT_AGGRESSIVE); _randomTimerCase = RAND(0, 1); events.ScheduleEvent(EVENT_SOLAR_WINDS, 5s); @@ -155,14 +150,6 @@ struct boss_rajh : public BossAI me->MakeInterruptable(false); } - uint32 GetData(uint32 type) const override - { - if (type == DATA_SUN_OF_A) - return _achievementEnabled; - - return 0; - } - void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) @@ -193,7 +180,7 @@ struct boss_rajh : public BossAI events.CancelEvent(EVENT_SUMMON_SUN_ORB); events.CancelEvent(EVENT_SUN_STRIKE); events.CancelEvent(EVENT_INFERNO_LEAP); - events.ScheduleEvent(EVENT_MOVE_TO_MIDDLE, Seconds(2)); + events.ScheduleEvent(EVENT_MOVE_TO_MIDDLE, 2s); _energized = false; } @@ -249,7 +236,8 @@ struct boss_rajh : public BossAI me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY_SPELL_OMNI); break; case EVENT_REENGAGE: - _achievementEnabled = false; + if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_SUN_OF_A)) + instance->instance->SetWorldState(WORLD_STATE_ID_SUN_OF_A, 1); _energized = true; _randomTimerCase = RAND(0, 1); events.ScheduleEvent(EVENT_SOLAR_WINDS, 5s); @@ -276,7 +264,6 @@ struct boss_rajh : public BossAI } private: bool _energized; - bool _achievementEnabled; uint8 _randomTimerCase; }; @@ -420,23 +407,6 @@ class spell_rajh_summon_sun_orb_power_cost : public AuraScript } }; -class achievement_sun_of_a : public AchievementCriteriaScript -{ - public: - achievement_sun_of_a() : AchievementCriteriaScript("achievement_sun_of_a") { } - - bool OnCheck(Player* /*source*/, Unit* target) - { - if (!target) - return false; - - if (target->GetMap()->IsHeroic()) - return target->GetAI()->GetData(DATA_SUN_OF_A); - - return false; - } -}; - void AddSC_boss_rajh() { RegisterHallsOfOriginationCreatureAI(boss_rajh); @@ -445,5 +415,4 @@ void AddSC_boss_rajh() RegisterSpellScript(spell_rajh_summon_meteor); RegisterSpellScript(spell_rajh_summon_sun_orb); RegisterSpellScript(spell_rajh_summon_sun_orb_power_cost); - new achievement_sun_of_a(); } diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp index 19c954f8799..daa7196ef73 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp @@ -80,11 +80,6 @@ enum Actions ACTION_HYMN_EXPIRED }; -enum Data -{ - DATA_ACHIEVEMENT_ENLIGIBLE = 0 -}; - struct boss_temple_guardian_anhuur : public BossAI { boss_temple_guardian_anhuur(Creature* creature) : BossAI(creature, DATA_TEMPLE_GUARDIAN_ANHUUR) @@ -97,7 +92,6 @@ struct boss_temple_guardian_anhuur : public BossAI _countShield = 0; _leftBeaconDisabled = false; _rightBeaconDisabled = false; - _achievementEnligible = true; } void Reset() override @@ -111,11 +105,11 @@ struct boss_temple_guardian_anhuur : public BossAI { BossAI::JustEngagedWith(who); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); + instance->instance->SetWorldState(WORLD_STATE_ID_I_HATE_THAT_SONG, 0); Talk(SAY_AGGRO); events.SetPhase(PHASE_FIGHT); events.ScheduleEvent(EVENT_DIVINE_RECKONING, 10s, 0, PHASE_FIGHT); events.ScheduleEvent(EVENT_BURNING_LIGHT, 12s, 0, PHASE_FIGHT); - instance->DoUpdateWorldState(WS_I_HATE_THIS_SONG, 0); } void JustDied(Unit* /*killer*/) override @@ -170,14 +164,6 @@ struct boss_temple_guardian_anhuur : public BossAI EnterShieldPhase(); } - uint32 GetData(uint32 type) const override - { - if (type == DATA_ACHIEVEMENT_ENLIGIBLE) - return uint8(_achievementEnligible); - - return 0; - } - void DoAction(int32 action) override { switch (action) @@ -249,8 +235,7 @@ struct boss_temple_guardian_anhuur : public BossAI instance->SetData(DATA_HANDLE_BEAM_OF_LIGHT, IN_PROGRESS); break; case EVENT_ACHIEVEMENT_FAILED: - instance->DoUpdateWorldState(WS_I_HATE_THIS_SONG, 1); - _achievementEnligible = false; + instance->instance->SetWorldState(WORLD_STATE_ID_I_HATE_THAT_SONG, 1); break; default: break; @@ -319,7 +304,6 @@ struct boss_temple_guardian_anhuur : public BossAI uint8 _countShield; bool _leftBeaconDisabled; bool _rightBeaconDisabled; - bool _achievementEnligible; }; struct go_anhuur_beacon_of_light : public GameObjectAI @@ -437,17 +421,6 @@ class spell_anhuur_burning_light_forcecast : public SpellScript } }; -class achievement_i_hate_that_song : public AchievementCriteriaScript -{ - public: - achievement_i_hate_that_song() : AchievementCriteriaScript("achievement_i_hate_that_song") { } - - bool OnCheck(Player* /*source*/, Unit* target) - { - return target && target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE); - } -}; - void AddSC_boss_temple_guardian_anhuur() { RegisterHallsOfOriginationCreatureAI(boss_temple_guardian_anhuur); @@ -457,5 +430,4 @@ void AddSC_boss_temple_guardian_anhuur() RegisterSpellScript(spell_anhuur_reverberating_hymn); RegisterSpellScript(spell_anhuur_disable_beacon_beams); RegisterSpellScript(spell_anhuur_burning_light_forcecast); - new achievement_i_hate_that_song(); } diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/halls_of_origination.h b/src/server/scripts/Kalimdor/HallsOfOrigination/halls_of_origination.h index c2d2b2769c6..90618fadbf0 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/halls_of_origination.h +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/halls_of_origination.h @@ -187,7 +187,6 @@ enum HOOGameObjects enum Achievements { - WS_I_HATE_THIS_SONG = 5638, CRITERIA_STRAW_BROKE_CAMELS_BACK = 15989, ACHIEV_VAULT_OF_LIGHTS_START_EVENT = 24212, SPELL_VAULT_OF_LIGHTS_CREDIT = 94067 // Achievement aura, not in DBC @@ -225,6 +224,18 @@ enum HoODataStates DISABLE_SHIELD_OF_LIGHT }; +enum HoOWorldStates +{ + // Temple Guardian Anhuur + WORLD_STATE_ID_I_HATE_THAT_SONG = 5638, + + // Vault of Lights + WORLD_STATE_ID_FASTER_THAN_THE_SPEED_OF_LIGHT = 5653, + + // Rajh + WORLD_STATE_ID_SUN_OF_A = 5639 +}; + Position const AnraphetSpawnPos = { -90.2726f, 366.339f, 89.8639f, 3.14159f }; Position const AnraphetRespawnPos = { -193.656f, 366.689f, 75.91001f, 3.138207f }; diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp index 1d19a4237e8..27cecbeda6b 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp @@ -81,7 +81,8 @@ enum Events EVENT_ACTIVATE_LASER_BEAMS_2, EVENT_ACTIVATE_LASER_BEAMS_3, EVENT_ACTIVATE_LASER_BEAMS_4, - EVENT_OPEN_CONTROL_ROOM + EVENT_OPEN_CONTROL_ROOM, + EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT }; constexpr uint8 const MAX_VAULT_OF_LIGHTS_WARDEN = 4; @@ -303,11 +304,13 @@ class instance_halls_of_origination : public InstanceMapScript door->SetGoState(GO_STATE_ACTIVE); DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_VAULT_OF_LIGHTS_START_EVENT); + _events.ScheduleEvent(EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT, 5min); } else if (value == DONE) { DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, SPELL_VAULT_OF_LIGHTS_CREDIT); _events.ScheduleEvent(EVENT_OPEN_CONTROL_ROOM, 8s); + _events.CancelEvent(EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT); SaveToDB(); } break; @@ -466,6 +469,9 @@ class instance_halls_of_origination : public InstanceMapScript if (anraphet->IsAIEnabled) anraphet->AI()->DoAction(ACTION_ANRAPHET_INTRO); break; + case EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT: + instance->SetWorldState(WORLD_STATE_ID_FASTER_THAN_THE_SPEED_OF_LIGHT, 1); + break; default: break; }