aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp58
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h49
2 files changed, 97 insertions, 10 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 5e8273dce67..cdbbf755390 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -83,6 +83,7 @@ class instance_ulduar : public InstanceMapScript
IsDriveMeCrazyEligible = true;
_algalonSummoned = false;
_summonAlgalon = false;
+ _CoUAchivePlayerDeathMask = 0;
memset(_summonObservationRingKeeper, 0, sizeof(_summonObservationRingKeeper));
memset(_summonYSKeeper, 0, sizeof(_summonYSKeeper));
@@ -592,6 +593,19 @@ class instance_ulduar : public InstanceMapScript
void OnUnitDeath(Unit* unit) override
{
+ // Champion/Conqueror of Ulduar
+ if (unit->GetTypeId() == TYPEID_PLAYER)
+ {
+ for (uint8 i = 0; i < BOSS_ALGALON; i++)
+ {
+ if (GetBossState(i) == IN_PROGRESS)
+ {
+ _CoUAchivePlayerDeathMask |= (1 << i);
+ SaveToDB();
+ }
+ }
+ }
+
Creature* creature = unit->ToCreature();
if (!creature)
return;
@@ -1007,6 +1021,45 @@ class instance_ulduar : public InstanceMapScript
case CRITERIA_ALONE_IN_THE_DARKNESS_10:
case CRITERIA_ALONE_IN_THE_DARKNESS_25:
return keepersCount == 0;
+ case CRITERIA_C_O_U_LEVIATHAN_10:
+ case CRITERIA_C_O_U_LEVIATHAN_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_LEVIATHAN)) == 0;
+ case CRITERIA_C_O_U_IGNIS_10:
+ case CRITERIA_C_O_U_IGNIS_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_IGNIS)) == 0;
+ case CRITERIA_C_O_U_RAZORSCALE_10:
+ case CRITERIA_C_O_U_RAZORSCALE_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_RAZORSCALE)) == 0;
+ case CRITERIA_C_O_U_XT002_10:
+ case CRITERIA_C_O_U_XT002_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_XT002)) == 0;
+ case CRITERIA_C_O_U_IRON_COUNCIL_10:
+ case CRITERIA_C_O_U_IRON_COUNCIL_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_ASSEMBLY_OF_IRON)) == 0;
+ case CRITERIA_C_O_U_KOLOGARN_10:
+ case CRITERIA_C_O_U_KOLOGARN_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_KOLOGARN)) == 0;
+ case CRITERIA_C_O_U_AURIAYA_10:
+ case CRITERIA_C_O_U_AURIAYA_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_AURIAYA)) == 0;
+ case CRITERIA_C_O_U_HODIR_10:
+ case CRITERIA_C_O_U_HODIR_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_HODIR)) == 0;
+ case CRITERIA_C_O_U_THORIM_10:
+ case CRITERIA_C_O_U_THORIM_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_THORIM)) == 0;
+ case CRITERIA_C_O_U_FREYA_10:
+ case CRITERIA_C_O_U_FREYA_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_FREYA)) == 0;
+ case CRITERIA_C_O_U_MIMIRON_10:
+ case CRITERIA_C_O_U_MIMIRON_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_MIMIRON)) == 0;
+ case CRITERIA_C_O_U_VEZAX_10:
+ case CRITERIA_C_O_U_VEZAX_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_VEZAX)) == 0;
+ case CRITERIA_C_O_U_YOGG_SARON_10:
+ case CRITERIA_C_O_U_YOGG_SARON_25:
+ return (_CoUAchivePlayerDeathMask & (1 << BOSS_YOGG_SARON)) == 0;
}
return false;
@@ -1018,6 +1071,8 @@ class instance_ulduar : public InstanceMapScript
for (uint8 i = 0; i < 4; ++i)
data << ' ' << uint32(!KeeperGUIDs[i].IsEmpty() ? 1 : 0);
+
+ data << ' ' << _CoUAchivePlayerDeathMask;
}
void ReadSaveDataMore(std::istringstream& data) override
@@ -1056,6 +1111,8 @@ class instance_ulduar : public InstanceMapScript
_summonObservationRingKeeper[2] = true;
if (GetBossState(BOSS_MIMIRON) == DONE && !_summonYSKeeper[3])
_summonObservationRingKeeper[3] = true;
+
+ data >> _CoUAchivePlayerDeathMask;
}
void Update(uint32 diff) override
@@ -1095,6 +1152,7 @@ class instance_ulduar : public InstanceMapScript
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 82c4ef140f1..1b4330b0faf 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -36,16 +36,16 @@ enum UlduarBosses
BOSS_ASSEMBLY_OF_IRON = 4,
BOSS_KOLOGARN = 5,
BOSS_AURIAYA = 6,
- BOSS_MIMIRON = 7,
- BOSS_HODIR = 8,
- BOSS_THORIM = 9,
- BOSS_FREYA = 10,
- BOSS_BRIGHTLEAF = 11,
- BOSS_IRONBRANCH = 12,
- BOSS_STONEBARK = 13,
- BOSS_VEZAX = 14,
- BOSS_YOGG_SARON = 15,
- BOSS_ALGALON = 16,
+ BOSS_HODIR = 7,
+ BOSS_THORIM = 8,
+ BOSS_FREYA = 9,
+ BOSS_MIMIRON = 10,
+ BOSS_VEZAX = 11,
+ BOSS_YOGG_SARON = 12,
+ BOSS_ALGALON = 13,
+ BOSS_BRIGHTLEAF = 14,
+ BOSS_IRONBRANCH = 15,
+ BOSS_STONEBARK = 16,
};
enum UlduarNPCs
@@ -295,6 +295,35 @@ enum UlduarAchievementCriteriaIds
CRITERIA_ALONE_IN_THE_DARKNESS_10 = 10412,
CRITERIA_ALONE_IN_THE_DARKNESS_25 = 10417,
CRITERIA_HERALD_OF_TITANS = 10678,
+
+ // Champion of Ulduar
+ CRITERIA_C_O_U_LEVIATHAN_10 = 10042,
+ CRITERIA_C_O_U_IGNIS_10 = 10342,
+ CRITERIA_C_O_U_RAZORSCALE_10 = 10340,
+ CRITERIA_C_O_U_XT002_10 = 10341,
+ CRITERIA_C_O_U_IRON_COUNCIL_10 = 10598,
+ CRITERIA_C_O_U_KOLOGARN_10 = 10348,
+ CRITERIA_C_O_U_AURIAYA_10 = 10351,
+ CRITERIA_C_O_U_HODIR_10 = 10439,
+ CRITERIA_C_O_U_THORIM_10 = 10403,
+ CRITERIA_C_O_U_FREYA_10 = 10582,
+ CRITERIA_C_O_U_MIMIRON_10 = 10347,
+ CRITERIA_C_O_U_VEZAX_10 = 10349,
+ CRITERIA_C_O_U_YOGG_SARON_10 = 10350,
+ // Conqueror of Ulduar
+ CRITERIA_C_O_U_LEVIATHAN_25 = 10352,
+ CRITERIA_C_O_U_IGNIS_25 = 10355,
+ CRITERIA_C_O_U_RAZORSCALE_25 = 10353,
+ CRITERIA_C_O_U_XT002_25 = 10354,
+ CRITERIA_C_O_U_IRON_COUNCIL_25 = 10599,
+ CRITERIA_C_O_U_KOLOGARN_25 = 10357,
+ CRITERIA_C_O_U_AURIAYA_25 = 10363,
+ CRITERIA_C_O_U_HODIR_25 = 10719,
+ CRITERIA_C_O_U_THORIM_25 = 10404,
+ CRITERIA_C_O_U_FREYA_25 = 10583,
+ CRITERIA_C_O_U_MIMIRON_25 = 10361,
+ CRITERIA_C_O_U_VEZAX_25 = 10362,
+ CRITERIA_C_O_U_YOGG_SARON_25 = 10364
};
enum UlduarData