aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql13
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp109
2 files changed, 93 insertions, 29 deletions
diff --git a/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..244d572253c
--- /dev/null
+++ b/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql
@@ -0,0 +1,13 @@
+DELETE FROM `disables` WHERE `entry` IN (10056,10057,10058,10059,10060,10061,10218,10219) AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (10056,10057,10058,10059,10060,10061,10218,10219) AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(10056,11,0,0,'achievement_orbital_bombardment'),
+(10057,11,0,0,'achievement_orbital_devastation'),
+(10058,11,0,0,'achievement_nuked_from_orbit'),
+(10059,11,0,0,'achievement_orbital_bombardment'),
+(10060,11,0,0,'achievement_orbital_devastation'),
+(10061,11,0,0,'achievement_nuked_from_orbit'),
+(10218,11,0,0,'achievement_orbit_uary'),
+(10219,11,0,0,'achievement_orbit_uary');
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
index 634f03bb033..209e3ce2ece 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
@@ -158,20 +158,6 @@ enum Yells
SAY_OVERLOAD_3 = -1603075,
};
-enum AchievementData
-{
- ACHIEV_10_NUKED_FROM_ORBIT = 2915,
- ACHIEV_25_NUKED_FROM_ORBIT = 2917,
- ACHIEV_10_ORBITAL_BOMBARDMENT = 2913,
- ACHIEV_25_ORBITAL_BOMBARDMENT = 2918,
- ACHIEV_10_ORBITAL_DEVASTATION = 2914,
- ACHIEV_25_ORBITAL_DEVASTATION = 2916,
- ACHIEV_10_ORBIT_UARY = 3056,
- ACHIEV_25_ORBIT_UARY = 3057,
- ACHIEV_10_SIEGE_OF_ULDUAR = 2886,
- ACHIEV_25_SIEGE_OF_ULDUAR = 2887,
-};
-
enum actions
{
ACTION_TOWER_OF_STORM_DESTROYED = 1,
@@ -212,6 +198,8 @@ Position const PosDemolisher[5] =
{-798.01f, -227.24f, 429.84f, 1.446f},
};
+#define DATA_ORBIT_ACHIEVEMENTS 1
+
class boss_flame_leviathan : public CreatureScript
{
public:
@@ -321,21 +309,6 @@ class boss_flame_leviathan : public CreatureScript
{
_JustDied();
DoScriptText(SAY_DEATH, me);
-
- if (ActiveTowers)
- {
- switch (ActiveTowersCount)
- {
- case 4:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBIT_UARY, ACHIEV_25_ORBIT_UARY));
- case 3:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_NUKED_FROM_ORBIT, ACHIEV_25_NUKED_FROM_ORBIT));
- case 2:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_DEVASTATION, ACHIEV_25_ORBITAL_DEVASTATION));
- case 1:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_BOMBARDMENT, ACHIEV_25_ORBITAL_BOMBARDMENT));
- }
- }
}
void SpellHit(Unit* /*caster*/, SpellEntry const* spell)
@@ -358,6 +331,8 @@ class boss_flame_leviathan : public CreatureScript
return Shutout ? 1 : 0;
case DATA_UNBROKEN:
return Unbroken ? 1 : 0;
+ case DATA_ORBIT_ACHIEVEMENTS:
+ return ActiveTowersCount;
default:
break;
}
@@ -1411,6 +1386,78 @@ class achievement_unbroken : public AchievementCriteriaScript
}
};
+class achievement_orbital_bombardment : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbital_bombardment() : AchievementCriteriaScript("achievement_orbital_bombardment") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 1)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_orbital_devastation : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbital_devastation() : AchievementCriteriaScript("achievement_orbital_devastation") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 2)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_nuked_from_orbit : public AchievementCriteriaScript
+{
+ public:
+ achievement_nuked_from_orbit() : AchievementCriteriaScript("achievement_nuked_from_orbit") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 3)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_orbit_uary : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbit_uary() : AchievementCriteriaScript("achievement_orbit_uary") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) == 4)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_flame_leviathan()
{
new boss_flame_leviathan();
@@ -1436,4 +1483,8 @@ void AddSC_boss_flame_leviathan()
new achievement_three_car_garage_siege();
new achievement_shutout();
new achievement_unbroken();
+ new achievement_orbital_bombardment();
+ new achievement_orbital_devastation();
+ new achievement_nuked_from_orbit();
+ new achievement_orbit_uary();
}