Scripts/Ulduar: Properly fixed Orbital Bombardment & Orbital Devastation & Nuked From Orbit & Orbit-uary

This commit is contained in:
Lopin
2011-06-25 19:13:09 +02:00
parent 0cf40b897c
commit 0b1fffcc70
2 changed files with 93 additions and 29 deletions
@@ -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');
@@ -158,20 +158,6 @@ enum Yells
SAY_OVERLOAD_3 = -1603075, 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 enum actions
{ {
ACTION_TOWER_OF_STORM_DESTROYED = 1, ACTION_TOWER_OF_STORM_DESTROYED = 1,
@@ -212,6 +198,8 @@ Position const PosDemolisher[5] =
{-798.01f, -227.24f, 429.84f, 1.446f}, {-798.01f, -227.24f, 429.84f, 1.446f},
}; };
#define DATA_ORBIT_ACHIEVEMENTS 1
class boss_flame_leviathan : public CreatureScript class boss_flame_leviathan : public CreatureScript
{ {
public: public:
@@ -321,21 +309,6 @@ class boss_flame_leviathan : public CreatureScript
{ {
_JustDied(); _JustDied();
DoScriptText(SAY_DEATH, me); 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) void SpellHit(Unit* /*caster*/, SpellEntry const* spell)
@@ -358,6 +331,8 @@ class boss_flame_leviathan : public CreatureScript
return Shutout ? 1 : 0; return Shutout ? 1 : 0;
case DATA_UNBROKEN: case DATA_UNBROKEN:
return Unbroken ? 1 : 0; return Unbroken ? 1 : 0;
case DATA_ORBIT_ACHIEVEMENTS:
return ActiveTowersCount;
default: default:
break; 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() void AddSC_boss_flame_leviathan()
{ {
new boss_flame_leviathan(); new boss_flame_leviathan();
@@ -1436,4 +1483,8 @@ void AddSC_boss_flame_leviathan()
new achievement_three_car_garage_siege(); new achievement_three_car_garage_siege();
new achievement_shutout(); new achievement_shutout();
new achievement_unbroken(); new achievement_unbroken();
new achievement_orbital_bombardment();
new achievement_orbital_devastation();
new achievement_nuked_from_orbit();
new achievement_orbit_uary();
} }