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
This commit is contained in:
@@ -99,6 +99,28 @@ enum Yells
|
|||||||
SAY_OVERLOAD_3 = -1603075,
|
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[]=
|
static Position Center[]=
|
||||||
{
|
{
|
||||||
{354.8771, -12.90240, 409.803650},
|
{354.8771, -12.90240, 409.803650},
|
||||||
@@ -109,16 +131,21 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit())
|
boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit())
|
||||||
{
|
{
|
||||||
assert(vehicle);
|
assert(vehicle);
|
||||||
|
if (pInstance)
|
||||||
pInstance = pCreature->GetInstanceData();
|
pInstance = pCreature->GetInstanceData();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vehicle* vehicle;
|
Vehicle* vehicle;
|
||||||
|
uint8 uiActiveTowers;
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
_Reset();
|
_Reset();
|
||||||
|
assert(vehicle);
|
||||||
|
uiActiveTowers = 0;
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
if (pInstance)
|
||||||
pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
|
pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,6 +159,7 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
events.ScheduleEvent(EVENT_VENT, 20000);
|
events.ScheduleEvent(EVENT_VENT, 20000);
|
||||||
events.ScheduleEvent(EVENT_SPEED, 15000);
|
events.ScheduleEvent(EVENT_SPEED, 15000);
|
||||||
events.ScheduleEvent(EVENT_SUMMON, 0);
|
events.ScheduleEvent(EVENT_SUMMON, 0);
|
||||||
|
if (pInstance)
|
||||||
pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
|
pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
|
||||||
if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
|
if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
|
||||||
turret->AI()->DoZoneInCombat();
|
turret->AI()->DoZoneInCombat();
|
||||||
@@ -146,10 +174,31 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
|
|
||||||
void JustDied(Unit* /*victim*/)
|
void JustDied(Unit* /*victim*/)
|
||||||
{
|
{
|
||||||
pInstance->SetData(TYPE_LEVIATHAN, DONE);
|
|
||||||
DoScriptText(SAY_DEATH, me);
|
DoScriptText(SAY_DEATH, me);
|
||||||
|
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();
|
_JustDied();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SpellHit(Unit* /*caster*/, const SpellEntry* pSpell)
|
void SpellHit(Unit* /*caster*/, const SpellEntry* pSpell)
|
||||||
{
|
{
|
||||||
@@ -159,16 +208,6 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!me->isInCombat())
|
if (!me->isInCombat())
|
||||||
@@ -241,13 +280,20 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
DoSpellAttackIfReady(SPELL_BATTERING_RAM);
|
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
|
Tower event triggers
|
||||||
General TODO:
|
General TODO:
|
||||||
Yells
|
Yells
|
||||||
Track tower activation state for Achievements
|
|
||||||
|
|
||||||
Actions:
|
Actions:
|
||||||
DoAction(0): Activate hard-mode. Buff up leviathan's AP & health, schedule all the tower spells.
|
DoAction(0): Activate hard-mode. Buff up leviathan's AP & health, schedule all the tower spells.
|
||||||
@@ -261,16 +307,17 @@ struct boss_flame_leviathanAI : public BossAI
|
|||||||
|
|
||||||
if (uiAction) // Tower destruction, debuff leviathan AP & health
|
if (uiAction) // Tower destruction, debuff leviathan AP & health
|
||||||
{
|
{
|
||||||
// TODO: the debuffing
|
--uiActiveTowers;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (uiAction)
|
switch (uiAction)
|
||||||
{
|
{
|
||||||
case 0: // Activate hard-mode
|
case 0: // Activate hard-mode
|
||||||
// TODO: AP & health buffing
|
|
||||||
events.ScheduleEvent(EVENT_THORIM_S_HAMMER, urand(30000,60000));
|
events.ScheduleEvent(EVENT_THORIM_S_HAMMER, urand(30000,60000));
|
||||||
events.ScheduleEvent(EVENT_MIMIRON_S_INFERNO, urand(30000,60000));
|
events.ScheduleEvent(EVENT_MIMIRON_S_INFERNO, urand(30000,60000));
|
||||||
events.ScheduleEvent(EVENT_HODIR_S_FURY, urand(30000,60000));
|
events.ScheduleEvent(EVENT_HODIR_S_FURY, urand(30000,60000));
|
||||||
events.ScheduleEvent(EVENT_FREYA_S_WARD, urand(30000,60000));
|
events.ScheduleEvent(EVENT_FREYA_S_WARD, urand(30000,60000));
|
||||||
|
uiActiveTowers=4;
|
||||||
break;
|
break;
|
||||||
case 1: // Tower of Storms destroyed
|
case 1: // Tower of Storms destroyed
|
||||||
events.CancelEvent(EVENT_THORIM_S_HAMMER);
|
events.CancelEvent(EVENT_THORIM_S_HAMMER);
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ struct instance_ulduar : public ScriptedInstance
|
|||||||
if (data == 2)
|
if (data == 2)
|
||||||
{
|
{
|
||||||
if (Creature* pBoss = instance->GetCreature(m_uiLeviathanGUID))
|
if (Creature* pBoss = instance->GetCreature(m_uiLeviathanGUID))
|
||||||
pBoss->AI()->DoAction(1);
|
pBoss->AI()->DoAction(10);
|
||||||
if (GameObject* pGate = instance->GetGameObject(m_uiLeviathanGateGUID))
|
if (GameObject* pGate = instance->GetGameObject(m_uiLeviathanGateGUID))
|
||||||
pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user