diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-01-03 21:55:45 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-10-04 00:19:38 +0200 |
| commit | 76be303351ae398b7f9e69e4c472cb5b05fce45e (patch) | |
| tree | b7139aa70f1e9492fe8b94224fee28bbbe1ec34c /src/server/scripts/Northrend | |
| parent | 9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff) | |
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/Northrend')
17 files changed, 70 insertions, 648 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp index 3eb08a405e0..fce945a8e11 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp @@ -21,7 +21,6 @@ #include "InstanceScript.h" #include "Map.h" #include "ScriptMgr.h" -#include <sstream> DoorData const doorData[] = { @@ -128,15 +127,13 @@ class instance_ahnkahet : public InstanceMapScript return 0; } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << SpheresState[0] << ' ' << SpheresState[1]; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - data >> SpheresState[0]; - data >> SpheresState[1]; + if (GetBossState(DATA_PRINCE_TALDARAM) == DONE) + { + SpheresState[0] = IN_PROGRESS; + SpheresState[1] = IN_PROGRESS; + } } protected: diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index a970518ff33..4735f87452b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -30,7 +30,6 @@ EndScriptData */ #include "MotionMaster.h" #include "Player.h" #include "trial_of_the_champion.h" -#include <sstream> constexpr uint32 ToCEncounterCount = 4; @@ -46,12 +45,11 @@ public: struct instance_trial_of_the_champion_InstanceMapScript : public InstanceScript { - instance_trial_of_the_champion_InstanceMapScript(InstanceMap* map) : InstanceScript(map) + instance_trial_of_the_champion_InstanceMapScript(InstanceMap* map) : InstanceScript(map), + uiMovementDone(*this, "uiMovementDone"), uiGrandChampionsDeaths(*this, "uiGrandChampionsDeaths") { SetHeaders(DataHeader); SetBossNumber(ToCEncounterCount); - uiMovementDone = 0; - uiGrandChampionsDeaths = 0; uiArgentSoldierDeaths = 0; teamInInstance = 0; @@ -59,8 +57,8 @@ public: } uint32 teamInInstance; - uint16 uiMovementDone; - uint16 uiGrandChampionsDeaths; + PersistentInstanceScriptValue<uint16> uiMovementDone; + PersistentInstanceScriptValue<uint16> uiGrandChampionsDeaths; uint8 uiArgentSoldierDeaths; ObjectGuid uiAnnouncerGUID; @@ -165,7 +163,7 @@ public: } else if (state == DONE) { - ++uiGrandChampionsDeaths; + uiGrandChampionsDeaths = uiGrandChampionsDeaths + 1; if (uiGrandChampionsDeaths == 3) { if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) @@ -227,10 +225,10 @@ public: } } break; + case BOSS_BLACK_KNIGHT: + SetBossState(BOSS_BLACK_KNIGHT, EncounterState(uiData)); + break; } - - if (uiData == DONE) - SaveToDB(); } uint32 GetData(uint32 uiData) const override @@ -274,16 +272,6 @@ public: break; } } - - void WriteSaveDataMore(std::ostringstream& stream) override - { - stream << uiGrandChampionsDeaths << ' ' << uiMovementDone; - } - - void ReadSaveDataMore(std::istringstream& stream) override - { - stream >> uiGrandChampionsDeaths >> uiMovementDone; - } }; }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index 2da7435e328..b4542a73582 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -21,7 +21,7 @@ #include "CreatureAIImpl.h" #define ToCScriptName "instance_trial_of_the_champion" -#define DataHeader "TC" +#define DataHeader "TCv0.1" enum TCData { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 4a6f285d4ae..00551025db4 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -25,7 +25,6 @@ #include "ScriptedCreature.h" #include "TemporarySummon.h" #include "trial_of_the_crusader.h" -#include <sstream> // ToDo: Remove magic numbers of events @@ -107,7 +106,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript LoadBossBoundaries(boundaries); LoadObjectData(creatureData, gameObjectData); LoadDoorData(doorData); - TrialCounter = 50; EventStage = 0; NorthrendBeasts = NOT_STARTED; NorthrendBeastsCount = 4; @@ -118,7 +116,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript SnoboldCount = 0; MistressOfPainCount = 0; PlayerDeathCount = 0; - NeedSave = false; CrusadersSpecialState = false; TributeToDedicatedInsanity = false; // NYI, set to true when implement it DoUpdateWorldState(UPDATE_STATE_UI_SHOW, instance->IsHeroic() ? 1 : 0); @@ -140,15 +137,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript snoboldGUIDS.push_back(creature->GetGUID()); } - // Summon prevention to heroic modes - uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override - { - if (!TrialCounter) - return 0; - - return data->id; - } - void OnGameObjectCreate(GameObject* go) override { InstanceScript::OnGameObjectCreate(go); @@ -241,46 +229,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript case DONE: { EventStage = 6000; - uint32 tributeChest = 0; - if (instance->GetDifficultyID() == DIFFICULTY_10_HC) - { - if (TrialCounter >= 50) - tributeChest = GO_TRIBUTE_CHEST_10H_99; - else - { - if (TrialCounter >= 45) - tributeChest = GO_TRIBUTE_CHEST_10H_50; - else - { - if (TrialCounter >= 25) - tributeChest = GO_TRIBUTE_CHEST_10H_45; - else - tributeChest = GO_TRIBUTE_CHEST_10H_25; - } - } - } - else if (instance->GetDifficultyID() == DIFFICULTY_25_HC) - { - if (TrialCounter >= 50) - tributeChest = GO_TRIBUTE_CHEST_25H_99; - else - { - if (TrialCounter >= 45) - tributeChest = GO_TRIBUTE_CHEST_25H_50; - else - { - if (TrialCounter >= 25) - tributeChest = GO_TRIBUTE_CHEST_25H_45; - else - tributeChest = GO_TRIBUTE_CHEST_25H_25; - } - } - } - - if (tributeChest) - if (Creature* tirion = GetCreature(DATA_FORDRING)) - if (GameObject* chest = tirion->SummonGameObject(tributeChest, 805.62f, 134.87f, 142.16f, 3.27f, QuaternionData::fromEulerAnglesZYX(3.27f, 0.0f, 0.0f), 7_days)) - chest->SetRespawnTime(chest->GetRespawnDelay()); break; } default: @@ -296,26 +244,9 @@ class instance_trial_of_the_crusader : public InstanceMapScript TC_LOG_DEBUG("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state); if (state == FAIL) { - if (instance->IsHeroic()) - { - --TrialCounter; - // decrease attempt counter at wipe - DoUpdateWorldState(UPDATE_STATE_UI_COUNT, TrialCounter); - - // if theres no more attemps allowed - if (!TrialCounter) - { - if (Creature* anubarak = GetCreature(DATA_ANUBARAK)) - anubarak->DespawnOrUnsummon(); - } - } - NeedSave = true; EventStage = (type == DATA_NORTHREND_BEASTS ? 666 : 0); state = NOT_STARTED; } - - if (state == DONE || NeedSave) - Save(); } return true; } @@ -354,10 +285,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript { switch (type) { - case TYPE_COUNTER: - TrialCounter = data; - data = DONE; - break; case TYPE_EVENT: EventStage = data; data = NOT_STARTED; @@ -440,10 +367,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript { switch (type) { - case DATA_TEAM: - return Team; - case TYPE_COUNTER: - return TrialCounter; case TYPE_EVENT: return EventStage; case TYPE_NORTHREND_BEASTS: @@ -563,60 +486,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript } } - void Save() - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - - for (uint8 i = 0; i < EncounterCount; ++i) - saveStream << GetBossState(i) << ' '; - - saveStream << TrialCounter << ' ' - << PlayerDeathCount << ' ' - << uint32(TributeToDedicatedInsanity ? 1 : 0); - SaveDataBuffer = saveStream.str(); - - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; - NeedSave = false; - } - - std::string GetSaveData() override - { - return SaveDataBuffer; - } - - void Load(char const* strIn) override - { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - std::istringstream loadStream(strIn); - - uint32 tmpState; - for (uint8 i = 0; i < EncounterCount; ++i) - { - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - - loadStream >> TrialCounter; - loadStream >> PlayerDeathCount; - loadStream >> tmpState; - TributeToDedicatedInsanity = tmpState != 0; - EventStage = 0; - - OUT_LOAD_INST_DATA_COMPLETE; - } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override { switch (criteria_id) @@ -633,7 +502,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript case THREE_SIXTY_PAIN_SPIKE_25_PLAYER_HEROIC: return MistressOfPainCount >= 2; case A_TRIBUTE_TO_DEDICATED_INSANITY: - return false/*TrialCounter == 50 && TributeToDedicatedInsanity*/; + return false; // no longer obtainable default: break; } @@ -642,14 +511,11 @@ class instance_trial_of_the_crusader : public InstanceMapScript } protected: - uint32 TrialCounter; uint32 EventStage; uint32 EventTimer; uint32 NorthrendBeasts; uint32 Team; - bool NeedSave; bool CrusadersSpecialState; - std::string SaveDataBuffer; GuidVector snoboldGUIDS; // Achievement stuff diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index ab46d266aa1..f2d5624a4bf 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -24,7 +24,6 @@ #include "ScriptMgr.h" #include "TemporarySummon.h" #include "Transport.h" -#include <sstream> Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed) @@ -457,8 +456,6 @@ class instance_halls_of_reflection : public InstanceMapScript default: break; } - - SaveToDB(); } void SetGuidData(uint32 type, ObjectGuid data) override @@ -728,31 +725,16 @@ class instance_halls_of_reflection : public InstanceMapScript return ObjectGuid::Empty; } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << _introState << ' ' << _frostswornGeneralState << ' ' << _quelDelarState; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - uint32 temp = 0; - data >> temp; - if (temp == DONE) - SetData(DATA_INTRO_EVENT, DONE); - else - SetData(DATA_INTRO_EVENT, NOT_STARTED); - - data >> temp; - if (temp == DONE) - SetData(DATA_FROSTSWORN_GENERAL, DONE); - else - SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED); + if (GetBossState(DATA_FALRIC) == DONE) + { + _introState = DONE; + _quelDelarState = DONE; + } - data >> temp; - if (temp == DONE) - SetData(DATA_QUEL_DELAR_EVENT, DONE); - else - SetData(DATA_QUEL_DELAR_EVENT, NOT_STARTED); + if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + _frostswornGeneralState = DONE; } private: diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 49eb21f8f72..62004f0396b 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -23,7 +23,6 @@ #include "gundrak.h" #include "Map.h" #include "ScriptMgr.h" -#include <sstream> DoorData const doorData[] = { @@ -242,25 +241,14 @@ class instance_gundrak : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << uint32(SladRanStatueState) << ' '; - data << uint32(DrakkariColossusStatueState) << ' '; - data << uint32(MoorabiStatueState) << ' '; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - uint32 temp; - - data >> temp; - SladRanStatueState = GOState(temp); - - data >> temp; - DrakkariColossusStatueState = GOState(temp); - - data >> temp; - MoorabiStatueState = GOState(temp); + if (GetBossState(DATA_SLAD_RAN) == DONE) + SladRanStatueState = GO_STATE_DESTROYED; + if (GetBossState(DATA_DRAKKARI_COLOSSUS) == DONE) + DrakkariColossusStatueState = GO_STATE_DESTROYED; + if (GetBossState(DATA_MOORABI) == DONE) + MoorabiStatueState = GO_STATE_DESTROYED; if (IsBridgeReady()) Events.ScheduleEvent(DATA_BRIDGE, TIMER_STATUE_ACTIVATION); @@ -314,7 +302,6 @@ class instance_gundrak : public InstanceMapScript ToggleGameObject(type, GO_STATE_DESTROYED); ToggleGameObject(DATA_TRAPDOOR, GO_STATE_READY); ToggleGameObject(DATA_COLLISION, GO_STATE_ACTIVE); - SaveToDB(); return; default: return; @@ -329,8 +316,6 @@ class instance_gundrak : public InstanceMapScript if (IsBridgeReady()) Events.ScheduleEvent(DATA_BRIDGE, TIMER_STATUE_ACTIVATION); - - SaveToDB(); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 6533aea45cb..14850f3f014 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -69,7 +69,6 @@ enum Spells SPELL_TWILIGHT_BLOODBOLT = 71446, SPELL_INCITE_TERROR = 73070, SPELL_BLOODBOLT_WHIRL = 71772, - SPELL_ANNIHILATE = 71322, SPELL_CLEAR_ALL_STATUS_AILMENTS = 70939, // Blood Infusion @@ -125,12 +124,10 @@ enum Points POINT_CENTER = 1, POINT_AIR = 2, POINT_GROUND = 3, - POINT_MINCHAR = 4, }; Position const centerPos = {4595.7090f, 2769.4190f, 400.6368f, 0.000000f}; Position const airPos = {4595.7090f, 2769.4190f, 422.3893f, 0.000000f}; -Position const mincharPos = {4629.3711f, 2782.6089f, 424.6390f, 0.000000f}; bool IsVampire(Unit const* unit) { @@ -150,8 +147,6 @@ struct boss_blood_queen_lana_thel : public BossAI void Initialize() { _offtankGUID.Clear(); - _creditBloodQuickening = false; - _killMinchar = false; } void Reset() override @@ -188,7 +183,6 @@ struct boss_blood_queen_lana_thel : public BossAI DoCast(me, SPELL_SHROUD_OF_SORROW, true); DoCast(me, SPELL_FRENZIED_BLOODTHIRST_VISUAL, true); DoCastSelf(SPELL_CLEAR_ALL_STATUS_AILMENTS, true); - _creditBloodQuickening = instance->GetData(DATA_BLOOD_QUICKENING_STATE) == IN_PROGRESS; } void JustDied(Unit* /*killer*/) override @@ -200,22 +194,6 @@ struct boss_blood_queen_lana_thel : public BossAI DoCastAOE(SPELL_BLOOD_INFUSION_CREDIT, true); CleanAuras(); - - // Blah, credit the quest - if (_creditBloodQuickening) - { - instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE); - if (Player* player = me->GetLootRecipient()) - player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player); - if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f)) - { - minchar->SetEmoteState(EMOTE_ONESHOT_NONE); - minchar->SetAnimTier(AnimTier::Ground); - minchar->SetCanFly(false); - minchar->RemoveAllAuras(); - minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f); - } - } } void CleanAuras() @@ -232,38 +210,15 @@ struct boss_blood_queen_lana_thel : public BossAI instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN); } - void DoAction(int32 action) override - { - if (action != ACTION_KILL_MINCHAR) - return; - - if (instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == IN_PROGRESS) - _killMinchar = true; - else - { - me->SetDisableGravity(true); - me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos); - } - } - void EnterEvadeMode(EvadeReason why) override { if (!_EnterEvadeMode(why)) return; CleanAuras(); - if (_killMinchar) - { - _killMinchar = false; - me->SetDisableGravity(true); - me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos); - } - else - { - me->AddUnitState(UNIT_STATE_EVADE); - me->GetMotionMaster()->MoveTargetedHome(); - Reset(); - } + me->AddUnitState(UNIT_STATE_EVADE); + me->GetMotionMaster()->MoveTargetedHome(); + Reset(); } void JustReachedHome() override @@ -323,12 +278,6 @@ struct boss_blood_queen_lana_thel : public BossAI AttackStart(victim); events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500ms, EVENT_GROUP_CANCELLABLE); break; - case POINT_MINCHAR: - DoCast(me, SPELL_ANNIHILATE, true); - // already in evade mode - me->GetMotionMaster()->MoveTargetedHome(); - Reset(); - break; default: break; } @@ -508,8 +457,6 @@ private: GuidSet _vampires; GuidSet _bloodboltedPlayers; ObjectGuid _offtankGUID; - bool _creditBloodQuickening; - bool _killMinchar; }; // helper for shortened code diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 31e1d23e11f..94bc112d91a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -1501,9 +1501,6 @@ class at_sindragosa_lair : public AreaTriggerScript if (!instance->GetData(DATA_SINDRAGOSA_FROSTWYRMS) && !instance->GetGuidData(DATA_SINDRAGOSA) && instance->GetBossState(DATA_SINDRAGOSA) != DONE) { - if (player->GetMap()->IsHeroic() && !instance->GetData(DATA_HEROIC_ATTEMPTS)) - return true; - player->GetMap()->LoadGrid(SindragosaSpawnPos.GetPositionX(), SindragosaSpawnPos.GetPositionY()); if (Creature* sindragosa = player->GetMap()->SummonCreature(NPC_SINDRAGOSA, SindragosaSpawnPos)) sindragosa->AI()->DoAction(ACTION_START_FROSTWYRM); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 276d6a7b0bf..81859e1cfe0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1559,20 +1559,6 @@ class at_icc_shutdown_traps : public AreaTriggerScript } }; -class at_icc_start_blood_quickening : public AreaTriggerScript -{ - public: - at_icc_start_blood_quickening() : AreaTriggerScript("at_icc_start_blood_quickening") { } - - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override - { - if (InstanceScript* instance = player->GetInstanceScript()) - if (instance->GetData(DATA_BLOOD_QUICKENING_STATE) == NOT_STARTED) - instance->SetData(DATA_BLOOD_QUICKENING_STATE, IN_PROGRESS); - return true; - } -}; - class at_icc_nerubar_broodkeeper : public OnlyOnceAreaTriggerScript { public: @@ -1627,6 +1613,5 @@ void AddSC_icecrown_citadel() // AreaTriggers new at_icc_saurfang_portal(); new at_icc_shutdown_traps(); - new at_icc_start_blood_quickening(); new at_icc_nerubar_broodkeeper(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index da491854aa8..7b8570fd82c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -23,7 +23,7 @@ #include "SpellScript.h" #define ICCScriptName "instance_icecrown_citadel" -#define DataHeader "IC" +#define DataHeader "ICCv1" uint32 const EncounterCount = 13; @@ -103,8 +103,6 @@ enum ICDataTypes DATA_RIMEFANG = 25, DATA_COLDFLAME_JETS = 26, DATA_TEAM_IN_INSTANCE = 27, - DATA_BLOOD_QUICKENING_STATE = 28, - DATA_HEROIC_ATTEMPTS = 29, DATA_CROK_SCOURGEBANE = 30, DATA_CAPTAIN_ARNATH = 31, DATA_CAPTAIN_BRANDON = 32, @@ -499,9 +497,6 @@ enum ICSharedActions ACTION_ROTFACE_DEATH = -366272, ACTION_CHANGE_PHASE = -366780, - // Blood-Queen Lana'thel - ACTION_KILL_MINCHAR = -379550, - // Frostwing Halls gauntlet event ACTION_VRYKUL_DEATH = 37129, diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 6b71835447b..132980fae3f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -29,7 +29,6 @@ #include "TemporarySummon.h" #include "Transport.h" #include "TransportMgr.h" -#include <sstream> #include <unordered_set> enum EventIds @@ -46,7 +45,6 @@ enum EventIds enum TimedEvents { - EVENT_UPDATE_EXECUTION_TIME = 1, EVENT_QUAKE_SHATTER = 2, EVENT_REBUILD_PLATFORM = 3, EVENT_RESPAWN_GUNSHIP = 4 @@ -122,27 +120,6 @@ DungeonEncounterData const encounters[] = { DATA_THE_LICH_KING, {{ 1106 }} } }; -// this doesnt have to only store questgivers, also can be used for related quest spawns -struct WeeklyQuest -{ - uint32 creatureEntry; - uint32 questId[2]; // 10 and 25 man versions -}; - -// when changing the content, remember to update SetData, DATA_BLOOD_QUICKENING_STATE case for NPC_ALRIN_THE_AGILE index -WeeklyQuest const WeeklyQuestData[WeeklyNPCs] = -{ - { NPC_INFILTRATOR_MINCHAR, { QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25 } }, // Deprogramming - { NPC_KOR_KRON_LIEUTENANT, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts - { NPC_ROTTING_FROST_GIANT_10, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts - { NPC_ROTTING_FROST_GIANT_25, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts - { NPC_ALCHEMIST_ADRIANNA, { QUEST_RESIDUE_RENDEZVOUS_10, QUEST_RESIDUE_RENDEZVOUS_25 } }, // Residue Rendezvous - { NPC_ALRIN_THE_AGILE, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening - { NPC_INFILTRATOR_MINCHAR_BQ, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening - { NPC_MINCHAR_BEAM_STALKER, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening - { NPC_VALITHRIA_DREAMWALKER_QUEST, { QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25 } } // Respite for a Tormented Soul -}; - // NPCs spawned at Light's Hammer on Lich King dead Position const JainaSpawnPos = { -48.65278f, 2211.026f, 27.98586f, 3.124139f }; Position const MuradinSpawnPos = { -47.34549f, 2208.087f, 27.98586f, 3.106686f }; @@ -163,11 +140,6 @@ class instance_icecrown_citadel : public InstanceMapScript LoadDungeonEncounterData(encounters); LoadBossBoundaries(boundaries); LoadDoorData(doorData); - HeroicAttempts = MaxHeroicAttempts; - ColdflameJetsState = NOT_STARTED; - UpperSpireTeleporterActiveState = NOT_STARTED; - BloodQuickeningState = NOT_STARTED; - BloodQuickeningMinutes = 0; BloodPrinceIntro = 1; SindragosaIntro = 1; IsBonedEligible = true; @@ -358,22 +330,7 @@ class instance_icecrown_citadel : public InstanceMapScript case NPC_INFILTRATOR_MINCHAR_BQ: case NPC_MINCHAR_BEAM_STALKER: case NPC_VALITHRIA_DREAMWALKER_QUEST: - { - for (uint8 questIndex = 0; questIndex < WeeklyNPCs; ++questIndex) - { - if (WeeklyQuestData[questIndex].creatureEntry == entry) - { - uint8 diffIndex = instance->Is25ManRaid() ? 1 : 0; - if (!sQuestPoolMgr->IsQuestActive(WeeklyQuestData[questIndex].questId[diffIndex])) - return 0; - break; - } - } - - if (entry == NPC_KOR_KRON_LIEUTENANT && GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - return NPC_SKYBREAKER_LIEUTENANT; - break; - } + return 0; case NPC_HORDE_GUNSHIP_CANNON: case NPC_ORGRIMS_HAMMER_CREW: case NPC_SKY_REAVER_KORM_BLACKSCAR: @@ -487,9 +444,6 @@ class instance_icecrown_citadel : public InstanceMapScript case NPC_RIMEFANG: case NPC_SPINESTALKER: { - if (instance->IsHeroic() && !HeroicAttempts) - return; - if (GetBossState(DATA_SINDRAGOSA) == DONE) return; @@ -747,10 +701,6 @@ class instance_icecrown_citadel : public InstanceMapScript return UpperSpireTeleporterActiveState; case DATA_TEAM_IN_INSTANCE: return instance->GetTeamInInstance(); - case DATA_BLOOD_QUICKENING_STATE: - return BloodQuickeningState; - case DATA_HEROIC_ATTEMPTS: - return HeroicAttempts; case DATA_BLOOD_PRINCE_COUNCIL_INTRO: return BloodPrinceIntro; case DATA_SINDRAGOSA_INTRO: @@ -838,25 +788,6 @@ class instance_icecrown_citadel : public InstanceMapScript return ObjectGuid::Empty; } - void HandleHeroicAttempts() - { - if (HeroicAttempts) - { - --HeroicAttempts; - DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts); - } - - if (!HeroicAttempts) - { - for (ObjectGuid const& bossGuid : { ProfessorPutricideGUID, BloodQueenLanaThelGUID, SindragosaGUID, TheLichKingGUID }) - { - if (Creature* boss = instance->GetCreature(bossGuid)) - if (boss->IsAlive()) - boss->DespawnOrUnsummon(); - } - } - } - bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) @@ -973,32 +904,22 @@ class instance_icecrown_citadel : public InstanceMapScript break; case DATA_PROFESSOR_PUTRICIDE: HandleGameObject(PlagueSigilGUID, state != DONE); - if (instance->IsHeroic() && state == FAIL) - HandleHeroicAttempts(); - else if (state == DONE) + if (state == DONE) CheckLichKingAvailability(); break; case DATA_BLOOD_QUEEN_LANA_THEL: HandleGameObject(BloodwingSigilGUID, state != DONE); - if (instance->IsHeroic() && state == FAIL) - HandleHeroicAttempts(); - else if (state == DONE) + if (state == DONE) CheckLichKingAvailability(); break; case DATA_VALITHRIA_DREAMWALKER: if (state == DONE) - { - if (sQuestPoolMgr->IsQuestActive(WeeklyQuestData[8].questId[instance->Is25ManRaid() ? 1 : 0])) - instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos); if (GameObject* teleporter = instance->GetGameObject(TeleporterSindragosaGUID)) SetTeleporterState(teleporter, true); - } break; case DATA_SINDRAGOSA: HandleGameObject(FrostwingSigilGUID, state != DONE); - if (instance->IsHeroic() && state == FAIL) - HandleHeroicAttempts(); - else if (state == DONE) + if (state == DONE) CheckLichKingAvailability(); break; case DATA_THE_LICH_KING: @@ -1011,9 +932,7 @@ class instance_icecrown_citadel : public InstanceMapScript if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID)) platform->SetFarVisible(state == IN_PROGRESS); - if (instance->IsHeroic() && state == FAIL) - HandleHeroicAttempts(); - else if (state == DONE) + if (state == DONE) { if (GameObject* bolvar = instance->GetGameObject(FrozenBolvarGUID)) bolvar->SetRespawnTime(7 * DAY); @@ -1065,48 +984,12 @@ class instance_icecrown_citadel : public InstanceMapScript break; case DATA_COLDFLAME_JETS: ColdflameJetsState = data; - if (ColdflameJetsState == DONE) - SaveToDB(); - break; - case DATA_BLOOD_QUICKENING_STATE: - { - // skip if nothing changes - if (BloodQuickeningState == data) - break; - - // 5 is the index of Blood Quickening - if (!sQuestPoolMgr->IsQuestActive(WeeklyQuestData[5].questId[instance->Is25ManRaid() ? 1 : 0])) - break; - - switch (data) - { - case IN_PROGRESS: - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min); - BloodQuickeningMinutes = 30; - DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); - DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); - break; - case DONE: - Events.CancelEvent(EVENT_UPDATE_EXECUTION_TIME); - BloodQuickeningMinutes = 0; - DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0); - break; - default: - break; - } - - BloodQuickeningState = data; - SaveToDB(); break; - } case DATA_UPPERSPIRE_TELE_ACT: UpperSpireTeleporterActiveState = data; if (UpperSpireTeleporterActiveState == DONE) - { if (GameObject* go = instance->GetGameObject(TeleporterUpperSpireGUID)) SetTeleporterState(go, true); - SaveToDB(); - } break; case DATA_BLOOD_PRINCE_COUNCIL_INTRO: BloodPrinceIntro = data; @@ -1343,36 +1226,18 @@ class instance_icecrown_citadel : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << HeroicAttempts << ' ' - << ColdflameJetsState << ' ' - << BloodQuickeningState << ' ' - << BloodQuickeningMinutes << ' ' - << UpperSpireTeleporterActiveState; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - uint32 temp = 0; - - data >> HeroicAttempts; - - data >> temp; - ColdflameJetsState = temp == DONE ? DONE : NOT_STARTED; - - data >> temp; - BloodQuickeningState = temp == DONE ? DONE : NOT_STARTED; - - data >> BloodQuickeningMinutes; - - data >> temp; - UpperSpireTeleporterActiveState = temp == DONE ? DONE : NOT_STARTED; + if (GetBossState(DATA_DEATHBRINGER_SAURFANG) == DONE) + { + ColdflameJetsState = DONE; + UpperSpireTeleporterActiveState = DONE; + } } void Update(uint32 diff) override { - if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL) + if (GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL) return; Events.Update(diff); @@ -1381,25 +1246,6 @@ class instance_icecrown_citadel : public InstanceMapScript { switch (eventId) { - case EVENT_UPDATE_EXECUTION_TIME: - { - --BloodQuickeningMinutes; - if (BloodQuickeningMinutes) - { - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min); - DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); - DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); - } - else - { - BloodQuickeningState = DONE; - DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0); - if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID)) - bq->AI()->DoAction(ACTION_KILL_MINCHAR); - } - SaveToDB(); - break; - } case EVENT_QUAKE_SHATTER: { if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID)) @@ -1552,9 +1398,6 @@ class instance_icecrown_citadel : public InstanceMapScript std::unordered_set<ObjectGuid::LowType> FrostwyrmGUIDs; std::unordered_set<ObjectGuid::LowType> SpinestalkerTrash; std::unordered_set<ObjectGuid::LowType> RimefangTrash; - uint32 BloodQuickeningState; - uint32 HeroicAttempts; - uint16 BloodQuickeningMinutes; uint8 BloodPrinceIntro; uint8 SindragosaIntro; bool IsBonedEligible; diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 3e145abe5b2..48bf18f6d4e 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -124,8 +124,6 @@ class instance_naxxramas : public InstanceMapScript hadSapphironBirth = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; - - playerDied = false; } void OnCreatureCreate(Creature* creature) override @@ -250,12 +248,6 @@ class instance_naxxramas : public InstanceMapScript void OnUnitDeath(Unit* unit) override { - if (!playerDied && unit->IsPlayer() && IsEncounterInProgress()) - { - playerDied = true; - SaveToDB(); - } - if (Creature* creature = unit->ToCreature()) if (creature->GetEntry() == NPC_BIGGLESWORTH) { @@ -544,26 +536,12 @@ class instance_naxxramas : public InstanceMapScript case 13239: // Loatheb case 13240: // Thaddius case 7617: // Kel'Thuzad - if (AreAllEncountersDone() && !playerDied) - return true; return false; } return false; } - void WriteSaveDataMore(std::ostringstream& data) override - { - data << uint32(playerDied ? 1 : 0); - } - - void ReadSaveDataMore(std::istringstream& data) override - { - uint32 tmpState; - data >> tmpState; - playerDied = tmpState != 0; - } - protected: /* The Arachnid Quarter */ // Anub'rekhan @@ -608,9 +586,6 @@ class instance_naxxramas : public InstanceMapScript bool hadSapphironBirth; uint8 CurrentWingTaunt; - /* The Immortal / The Undying */ - bool playerDied; - EventMap events; }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 850f9fd886a..0b7f8d2eb7a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -152,9 +152,6 @@ enum Events EVENT_OUTRO_9, EVENT_OUTRO_10, EVENT_OUTRO_11, - EVENT_DESPAWN_ALGALON_1, - EVENT_DESPAWN_ALGALON_2, - EVENT_DESPAWN_ALGALON_3, // Living Constellation EVENT_ARCANE_BARRAGE @@ -334,18 +331,6 @@ struct boss_algalon_the_observer : public BossAI events.CancelEvent(EVENT_RESUME_UPDATING); events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1s + 500ms); break; - case EVENT_DESPAWN_ALGALON: - events.Reset(); - events.SetPhase(PHASE_ROLE_PLAY); - if (me->IsInCombat()) - events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1ms); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_1, 5s); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17s); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26s); - me->DespawnOrUnsummon(34s); - me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE); - me->SetImmuneToNPC(true); - break; case ACTION_INIT_ALGALON: _firstPull = false; me->SetImmuneToPC(false); @@ -385,7 +370,6 @@ struct boss_algalon_the_observer : public BossAI DoZoneInCombat(); introDelay = 26500ms; summons.DespawnEntry(NPC_AZEROTH); - instance->SetData(EVENT_DESPAWN_ALGALON, 0); events.ScheduleEvent(EVENT_START_COMBAT, 16s); } @@ -687,15 +671,6 @@ struct boss_algalon_the_observer : public BossAI DoCastSelf(SPELL_TELEPORT); me->DespawnOrUnsummon(1s + 200ms); break; - case EVENT_DESPAWN_ALGALON_1: - Talk(SAY_ALGALON_DESPAWN_1); - break; - case EVENT_DESPAWN_ALGALON_2: - Talk(SAY_ALGALON_DESPAWN_2); - break; - case EVENT_DESPAWN_ALGALON_3: - Talk(SAY_ALGALON_DESPAWN_3); - break; default: break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 1df315a7cc7..32b0ad030cf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -27,7 +27,6 @@ #include "ScriptMgr.h" #include "TemporarySummon.h" #include "Vehicle.h" -#include <sstream> static BossBoundaryData const boundaries = { @@ -168,7 +167,6 @@ class instance_ulduar : public InstanceMapScript LoadMinionData(minionData); LoadObjectData(creatureData, objectData); - _algalonTimer = 61; _maxArmorItemLevel = 0; _maxWeaponItemLevel = 0; TeamInInstance = 0; @@ -183,7 +181,7 @@ class instance_ulduar : public InstanceMapScript IsDriveMeCrazyEligible = true; _algalonSummoned = false; _summonAlgalon = false; - _CoUAchivePlayerDeathMask = 0; + _algalonFirstIntro = true; memset(_summonObservationRingKeeper, 0, sizeof(_summonObservationRingKeeper)); memset(_summonYSKeeper, 0, sizeof(_summonYSKeeper)); @@ -234,7 +232,7 @@ class instance_ulduar : public InstanceMapScript { _summonAlgalon = false; TempSummon* algalon = instance->SummonCreature(NPC_ALGALON, AlgalonLandPos); - if (_algalonTimer && _algalonTimer <= 60) + if (!_algalonFirstIntro) algalon->AI()->DoAction(ACTION_INIT_ALGALON); else algalon->SetImmuneToPC(false); @@ -349,28 +347,24 @@ class instance_ulduar : public InstanceMapScript case NPC_FREYA_YS: KeeperGUIDs[0] = creature->GetGUID(); _summonYSKeeper[0] = false; - SaveToDB(); ++keepersCount; DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount); break; case NPC_HODIR_YS: KeeperGUIDs[1] = creature->GetGUID(); _summonYSKeeper[1] = false; - SaveToDB(); ++keepersCount; DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount); break; case NPC_THORIM_YS: KeeperGUIDs[2] = creature->GetGUID(); _summonYSKeeper[2] = false; - SaveToDB(); ++keepersCount; DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount); break; case NPC_MIMIRON_YS: KeeperGUIDs[3] = creature->GetGUID(); _summonYSKeeper[3] = false; - SaveToDB(); ++keepersCount; DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount); break; @@ -526,19 +520,6 @@ class instance_ulduar : public InstanceMapScript void OnUnitDeath(Unit* unit) override { - // Champion/Conqueror of Ulduar - if (unit->GetTypeId() == TYPEID_PLAYER) - { - for (uint8 i = 0; i < DATA_ALGALON; ++i) - { - if (GetBossState(i) == IN_PROGRESS) - { - _CoUAchivePlayerDeathMask |= (1 << i); - SaveToDB(); - } - } - } - Creature* creature = unit->ToCreature(); if (!creature) return; @@ -690,10 +671,6 @@ class instance_ulduar : public InstanceMapScript case DATA_ALGALON: if (state == DONE) { - _events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER); - _events.CancelEvent(EVENT_DESPAWN_ALGALON); - DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0); - _algalonTimer = 61; if (GameObject* gift = GetGameObject(DATA_GIFT_OF_THE_OBSERVER)) gift->SetRespawnTime(gift->GetRespawnDelay()); // get item level (recheck weapons) @@ -707,6 +684,7 @@ class instance_ulduar : public InstanceMapScript } else if (state == IN_PROGRESS) { + _algalonFirstIntro = false; // get item level (armor cannot be swapped in combat) Map::PlayerList const& players = instance->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) @@ -747,7 +725,6 @@ class instance_ulduar : public InstanceMapScript if (data >= 2 && GetBossState(DATA_FLAME_LEVIATHAN) == NOT_STARTED) { _events.ScheduleEvent(EVENT_LEVIATHAN_BREAK_DOOR, 5s); - SaveToDB(); } break; case DATA_HODIR_RARE_CACHE: @@ -768,13 +745,6 @@ class instance_ulduar : public InstanceMapScript case DATA_DRIVE_ME_CRAZY: IsDriveMeCrazyEligible = data ? true : false; break; - case EVENT_DESPAWN_ALGALON: - DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, 60); - _algalonTimer = 60; - _events.ScheduleEvent(EVENT_DESPAWN_ALGALON, 1h); - _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min); - break; case DATA_ALGALON_SUMMON_STATE: _algalonSummoned = true; break; @@ -883,94 +853,49 @@ class instance_ulduar : public InstanceMapScript return IsDriveMeCrazyEligible; case CRITERIA_C_O_U_LEVIATHAN_10: case CRITERIA_C_O_U_LEVIATHAN_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_FLAME_LEVIATHAN)) == 0; case CRITERIA_C_O_U_IGNIS_10: case CRITERIA_C_O_U_IGNIS_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_IGNIS)) == 0; case CRITERIA_C_O_U_RAZORSCALE_10: case CRITERIA_C_O_U_RAZORSCALE_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_RAZORSCALE)) == 0; case CRITERIA_C_O_U_XT002_10: case CRITERIA_C_O_U_XT002_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_XT002)) == 0; case CRITERIA_C_O_U_IRON_COUNCIL_10: case CRITERIA_C_O_U_IRON_COUNCIL_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_ASSEMBLY_OF_IRON)) == 0; case CRITERIA_C_O_U_KOLOGARN_10: case CRITERIA_C_O_U_KOLOGARN_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_KOLOGARN)) == 0; case CRITERIA_C_O_U_AURIAYA_10: case CRITERIA_C_O_U_AURIAYA_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_AURIAYA)) == 0; case CRITERIA_C_O_U_HODIR_10: case CRITERIA_C_O_U_HODIR_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_HODIR)) == 0; case CRITERIA_C_O_U_THORIM_10: case CRITERIA_C_O_U_THORIM_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_THORIM)) == 0; case CRITERIA_C_O_U_FREYA_10: case CRITERIA_C_O_U_FREYA_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_FREYA)) == 0; case CRITERIA_C_O_U_MIMIRON_10: case CRITERIA_C_O_U_MIMIRON_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_MIMIRON)) == 0; case CRITERIA_C_O_U_VEZAX_10: case CRITERIA_C_O_U_VEZAX_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_VEZAX)) == 0; case CRITERIA_C_O_U_YOGG_SARON_10: case CRITERIA_C_O_U_YOGG_SARON_25: - return (_CoUAchivePlayerDeathMask & (1 << DATA_YOGG_SARON)) == 0; + return false; } return false; } - void WriteSaveDataMore(std::ostringstream& data) override - { - data << ColossusData << ' ' << _algalonTimer << ' ' << uint32(_algalonSummoned ? 1 : 0); - - for (uint8 i = 0; i < 4; ++i) - data << ' ' << uint32(!KeeperGUIDs[i].IsEmpty() ? 1 : 0); - - data << ' ' << _CoUAchivePlayerDeathMask; - } - - void ReadSaveDataMore(std::istringstream& data) override + void AfterDataLoad() override { - uint32 tempState; - data >> tempState; - SetData(DATA_COLOSSUS, tempState); - - data >> _algalonTimer; - data >> tempState; - _algalonSummoned = tempState != 0; - if (_algalonSummoned && GetBossState(DATA_ALGALON) != DONE) - { - _summonAlgalon = true; - if (_algalonTimer && _algalonTimer <= 60) - { - _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min); - DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, _algalonTimer); - } - } - - for (uint8 i = 0; i < 4; ++i) - { - data >> tempState; - _summonYSKeeper[i] = tempState != 0; - } + if (GetBossState(DATA_FLAME_LEVIATHAN) == DONE) + SetData(DATA_COLOSSUS, DONE); - if (GetBossState(DATA_FREYA) == DONE && !_summonYSKeeper[0]) + if (GetBossState(DATA_FREYA) == DONE) _summonObservationRingKeeper[0] = true; - if (GetBossState(DATA_HODIR) == DONE && !_summonYSKeeper[1]) + if (GetBossState(DATA_HODIR) == DONE) _summonObservationRingKeeper[1] = true; - if (GetBossState(DATA_THORIM) == DONE && !_summonYSKeeper[2]) + if (GetBossState(DATA_THORIM) == DONE) _summonObservationRingKeeper[2] = true; - if (GetBossState(DATA_MIMIRON) == DONE && !_summonYSKeeper[3]) + if (GetBossState(DATA_MIMIRON) == DONE) _summonObservationRingKeeper[3] = true; - - data >> _CoUAchivePlayerDeathMask; } void Update(uint32 diff) override @@ -984,19 +909,6 @@ class instance_ulduar : public InstanceMapScript { switch (eventId) { - case EVENT_UPDATE_ALGALON_TIMER: - SaveToDB(); - DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, --_algalonTimer); - if (_algalonTimer) - _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min); - else - { - DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0); - _events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER); - if (Creature* algalon = GetCreature(DATA_ALGALON)) - algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON); - } - break; case EVENT_DESPAWN_LEVIATHAN_VEHICLES: // Eject all players from vehicles and make them untargetable. // They will be despawned after a while @@ -1054,14 +966,13 @@ class instance_ulduar : public InstanceMapScript private: EventMap _events; - uint32 _algalonTimer; bool _summonAlgalon; bool _algalonSummoned; + bool _algalonFirstIntro; bool _summonObservationRingKeeper[4]; bool _summonYSKeeper[4]; uint32 _maxArmorItemLevel; uint32 _maxWeaponItemLevel; - uint32 _CoUAchivePlayerDeathMask; }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 2056d438e7d..5df7b50bcaa 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -477,8 +477,8 @@ enum UlduarAchievementData { // FL Achievement boolean DATA_UNBROKEN = 29052906, // 2905, 2906 are achievement IDs, - MAX_HERALD_ARMOR_ITEMLEVEL = 226, - MAX_HERALD_WEAPON_ITEMLEVEL = 232 + MAX_HERALD_ARMOR_ITEMLEVEL = 35, + MAX_HERALD_WEAPON_ITEMLEVEL = 35 }; enum UlduarSharedSpells @@ -489,8 +489,6 @@ enum UlduarSharedSpells enum UlduarEvents { - EVENT_DESPAWN_ALGALON = 1, - EVENT_UPDATE_ALGALON_TIMER = 2, ACTION_INIT_ALGALON = 6, EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7, EVENT_LEVIATHAN_BREAK_DOOR = 8 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp index 7eb762e21b8..4b1fedc4b97 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -20,7 +20,6 @@ #include "GameObject.h" #include "InstanceScript.h" #include "utgarde_keep.h" -#include <sstream> DoorData const doorData[] = { @@ -166,9 +165,6 @@ class instance_utgarde_keep : public InstanceMapScript HandleGameObject(Forges[i].BellowGUID, data != NOT_STARTED); HandleGameObject(Forges[i].FireGUID, data != NOT_STARTED); Forges[i].Event = data; - - if (data == DONE) - SaveToDB(); break; } default: @@ -176,16 +172,11 @@ class instance_utgarde_keep : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override - { - for (uint8 i = 0; i < 3; ++i) - data << Forges[i].Event << ' '; - } - - void ReadSaveDataMore(std::istringstream& data) override + void AfterDataLoad() override { - for (uint8 i = 0; i < 3; ++i) - data >> Forges[i].Event; + if (GetBossState(DATA_PRINCE_KELESETH) == DONE) + for (uint8 i = 0; i < 3; ++i) + Forges[i].Event = DONE; } protected: diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 58723958ed4..8cbeee0cb1b 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -26,7 +26,6 @@ #include "TaskScheduler.h" #include "ScriptMgr.h" #include "TemporarySummon.h" -#include <sstream> /* * TODO: @@ -197,16 +196,15 @@ class instance_violet_hold : public InstanceMapScript struct instance_violet_hold_InstanceMapScript : public InstanceScript { - instance_violet_hold_InstanceMapScript(InstanceMap* map) : InstanceScript(map) + instance_violet_hold_InstanceMapScript(InstanceMap* map) : InstanceScript(map), + FirstBossId(*this, "FirstBossId", 0), + SecondBossId(*this, "SecondBossId", 0) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadObjectData(creatureData, gameObjectData); LoadMinionData(minionData); - FirstBossId = 0; - SecondBossId = 0; - DoorIntegrity = 100; WaveCount = 0; EventState = NOT_STARTED; @@ -794,17 +792,6 @@ class instance_violet_hold : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override - { - data << FirstBossId << ' ' << SecondBossId; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - data >> FirstBossId; - data >> SecondBossId; - } - bool CheckWipe() const { Map::PlayerList const& players = instance->GetPlayers(); @@ -943,8 +930,8 @@ class instance_violet_hold : public InstanceMapScript static uint8 const ActivationCrystalCount = 5; ObjectGuid ActivationCrystalGUIDs[ActivationCrystalCount]; - uint32 FirstBossId; - uint32 SecondBossId; + PersistentInstanceScriptValue<uint32> FirstBossId; + PersistentInstanceScriptValue<uint32> SecondBossId; uint8 DoorIntegrity; uint8 WaveCount; |
