aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-01-03 21:55:45 +0100
committerShauren <shauren.trinity@gmail.com>2022-10-04 00:19:38 +0200
commit76be303351ae398b7f9e69e4c472cb5b05fce45e (patch)
treeb7139aa70f1e9492fe8b94224fee28bbbe1ec34c /src/server/scripts/Northrend
parent9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff)
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp15
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp28
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp136
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp34
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp29
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp59
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h7
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp181
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp25
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp25
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp113
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp17
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp23
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;