diff options
author | Supabad <none@none> | 2010-05-30 03:03:31 +0200 |
---|---|---|
committer | Supabad <none@none> | 2010-05-30 03:03:31 +0200 |
commit | 14382dd1fe74c500d26b597e8de1498dcc30da68 (patch) | |
tree | f36f7ffe2bd10443c4f644ed3dbf1e8092fd35d0 /src | |
parent | 3ffdce920b38ab13785a0c1359d8e38f0ba60ec1 (diff) |
Ulduar, Flame Leviathan: add Track tower activation state for Achievements
stil WiP and not finished
removes one comment from the TODO LIST
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp | 127 | ||||
-rw-r--r-- | src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp | 2 |
2 files changed, 88 insertions, 41 deletions
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp b/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp index 511937f4e60..0884b10fca6 100644 --- a/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp +++ b/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp @@ -99,6 +99,28 @@ enum Yells SAY_OVERLOAD_3 = -1603075, }; +enum eAchievementData +{ + //ACHIEV_CHAMPION_OF_ULDUAR = 10042, + //ACHIEV_CONQUEROR_OF_ULDUAR = 10352, + ACHIEV_10_NUKED_FROM_ORBIT = 10058, + ACHIEV_25_NUKED_FROM_ORBIT = 10060, + ACHIEV_10_ORBITAL_BOMBARDMENT = 10056, + ACHIEV_25_ORBITAL_BOMBARDMENT = 10061, + ACHIEV_10_ORBITAL_DEVASTATION = 10057, + ACHIEV_25_ORBITAL_DEVASTATION = 10059, + ACHIEV_10_ORBIT_UARY = 10218, + ACHIEV_25_ORBIT_UARY = 10219, + ACHIEV_10_SHUTOUT = 10054, + ACHIEV_25_SHUTOUT = 10055, + ACHIEV_10_SIEGE_OF_ULDUAR = 9999, + ACHIEV_25_SIEGE_OF_ULDUAR = 10003, + //ACHIEV_10_THREE_CAR_GARAGE = 10046, 10047, 10048, + //ACHIEV_25_THREE_CAR_GARAGE = 10049, 10050, 10051, + ACHIEV_10_UNBROKEN = 10044, + ACHIEV_25_UNBROKEN = 10045, +}; + static Position Center[]= { {354.8771, -12.90240, 409.803650}, @@ -109,17 +131,22 @@ struct boss_flame_leviathanAI : public BossAI boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit()) { assert(vehicle); - pInstance = pCreature->GetInstanceData(); + if (pInstance) + pInstance = pCreature->GetInstanceData(); } - Vehicle* vehicle; + Vehicle* vehicle; + uint8 uiActiveTowers; ScriptedInstance* pInstance; void Reset() { _Reset(); + assert(vehicle); + uiActiveTowers = 0; me->SetReactState(REACT_AGGRESSIVE); - pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED); + if (pInstance) + pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED); } void EnterCombat(Unit* /*who*/) @@ -132,7 +159,8 @@ struct boss_flame_leviathanAI : public BossAI events.ScheduleEvent(EVENT_VENT, 20000); events.ScheduleEvent(EVENT_SPEED, 15000); events.ScheduleEvent(EVENT_SUMMON, 0); - pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS); + if (pInstance) + pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS); if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET))) turret->AI()->DoZoneInCombat(); } @@ -146,9 +174,30 @@ struct boss_flame_leviathanAI : public BossAI void JustDied(Unit* /*victim*/) { - pInstance->SetData(TYPE_LEVIATHAN, DONE); DoScriptText(SAY_DEATH, me); - _JustDied(); + if (pInstance) + { + pInstance->SetData(TYPE_LEVIATHAN, DONE); + if (uiActiveTowers) + { + switch (uiActiveTowers) + { + case 4: + pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBIT_UARY, ACHIEV_25_ORBIT_UARY)); + break; + case 3: + pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_NUKED_FROM_ORBIT, ACHIEV_25_NUKED_FROM_ORBIT)); + break; + case 2: + pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_DEVASTATION, ACHIEV_25_ORBITAL_DEVASTATION)); + break; + case 1: + pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_BOMBARDMENT, ACHIEV_25_ORBITAL_BOMBARDMENT)); + break; + } + } + _JustDied(); + } } void SpellHit(Unit* /*caster*/, const SpellEntry* pSpell) @@ -159,16 +208,6 @@ struct boss_flame_leviathanAI : public BossAI me->InterruptSpell(CURRENT_CHANNELED_SPELL); } - void DoAction(const int32 param) - { - if (param == 1) - { - me->GetMotionMaster()->MovePoint(0, Center[0]); - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - } - } - void UpdateAI(const uint32 diff) { if (!me->isInCombat()) @@ -241,14 +280,21 @@ struct boss_flame_leviathanAI : public BossAI DoSpellAttackIfReady(SPELL_BATTERING_RAM); } - void DoAction(uint32 uiAction) + void DoAction(const int32 uiAction) { + // Start encounter + if (uiAction == 10) + { + me->GetMotionMaster()->MovePoint(0, Center[0]); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + return; + } /* Tower event triggers General TODO: Yells - Track tower activation state for Achievements - + Actions: DoAction(0): Activate hard-mode. Buff up leviathan's AP & health, schedule all the tower spells. Should be triggered on Lore Keeper's script @@ -258,32 +304,33 @@ struct boss_flame_leviathanAI : public BossAI DoAction(3): Tower of Frost has been destroyed, deschedule spell Hodir's Fury DoAction(4): Tower of Nature has been destroyed, deschedule spell Freya's Ward */ - + if (uiAction) // Tower destruction, debuff leviathan AP & health { - // TODO: the debuffing + --uiActiveTowers; } + switch (uiAction) { - case 0: // Activate hard-mode - // TODO: AP & health buffing - events.ScheduleEvent(EVENT_THORIM_S_HAMMER, urand(30000,60000)); - events.ScheduleEvent(EVENT_MIMIRON_S_INFERNO, urand(30000,60000)); - events.ScheduleEvent(EVENT_HODIR_S_FURY, urand(30000,60000)); - events.ScheduleEvent(EVENT_FREYA_S_WARD, urand(30000,60000)); - break; - case 1: // Tower of Storms destroyed - events.CancelEvent(EVENT_THORIM_S_HAMMER); - break; - case 2: // Tower of Flames destroyed - events.CancelEvent(EVENT_MIMIRON_S_INFERNO); - break; - case 3: // Tower of Frost destroyed - events.CancelEvent(EVENT_HODIR_S_FURY); - break; - case 4: // Tower of Nature destroyed - events.CancelEvent(EVENT_FREYA_S_WARD); - break; + case 0: // Activate hard-mode + events.ScheduleEvent(EVENT_THORIM_S_HAMMER, urand(30000,60000)); + events.ScheduleEvent(EVENT_MIMIRON_S_INFERNO, urand(30000,60000)); + events.ScheduleEvent(EVENT_HODIR_S_FURY, urand(30000,60000)); + events.ScheduleEvent(EVENT_FREYA_S_WARD, urand(30000,60000)); + uiActiveTowers=4; + break; + case 1: // Tower of Storms destroyed + events.CancelEvent(EVENT_THORIM_S_HAMMER); + break; + case 2: // Tower of Flames destroyed + events.CancelEvent(EVENT_MIMIRON_S_INFERNO); + break; + case 3: // Tower of Frost destroyed + events.CancelEvent(EVENT_HODIR_S_FURY); + break; + case 4: // Tower of Nature destroyed + events.CancelEvent(EVENT_FREYA_S_WARD); + break; } } }; diff --git a/src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp b/src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp index fdc06ec38d2..0f0dd8d0384 100644 --- a/src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp +++ b/src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp @@ -270,7 +270,7 @@ struct instance_ulduar : public ScriptedInstance if (data == 2) { if (Creature* pBoss = instance->GetCreature(m_uiLeviathanGUID)) - pBoss->AI()->DoAction(1); + pBoss->AI()->DoAction(10); if (GameObject* pGate = instance->GetGameObject(m_uiLeviathanGateGUID)) pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); } |