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
@@ -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();
}