Ulduar, Flame Leviathan: Add initial tower event support.

This is WiP and is not finished. Actually the event is not activable since
    there is no script for Lore Keeper so don't complain about that.

    The code itself is not finished at all, but the main event managing is
    designed and implemented. Filling  up the 'TODO:' commented parts of
    Leviathan's DoAction() will be appreciated ;)

    It's easy to implement all the tower related achievs using an array of
    booleans and DoAction() triggers for tower state tracking.

    It's your time Supabad, enjoy teamwork :D

--HG--
branch : trunk
This commit is contained in:
Tartalo
2010-05-29 21:58:44 +02:00
parent cf34b23692
commit 0dceb037bf
3 changed files with 103 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
* Copyright (C) 2008 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,6 +16,13 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Comment: Tower Event support is not finished, there is missing code on triggers and
* Lore Keeper and Brann Bronzebeard are not scripted yet. Lore Keeper's script
* should activate the hard mode so is not possible to play hard-mode yet. Add a call to
* Leviathan's DoAction(0) from Lore Keeper's script to activate hard-mode
*/
#include "ScriptedPch.h"
#include "ulduar.h"
#include "Vehicle.h"
@@ -36,9 +43,12 @@ enum Spells
SPELL_SEARING_FLAME = 62402,
SPELL_BLAZE = 62292,
SPELL_SMOKE_TRAIL = 63575,
SPELL_MIMIRON_INFERNO = 62910,
SPELL_HODIR_FURY = 62297,
SPELL_ELECTROSHOCK = 62522,
//TOWER BUFF SPELLS
SPELL_THORIM_S_HAMMER = 62912, // Tower of Storms
SPELL_MIMIRON_S_INFERNO = 62910, // Tower of Flames
SPELL_HODIR_S_FURY = 62297, // Tower of Frost
SPELL_FREYA_S_WARD = 62906 // Tower of Nature
};
enum Creatures
@@ -56,8 +66,10 @@ enum Events
EVENT_VENT,
EVENT_SPEED,
EVENT_SUMMON,
EVENT_MIMIRON_INFERNO, // Not Blizzlike
EVENT_HODIR_FURY, // Not Blizzlike
EVENT_THORIM_S_HAMMER, // Tower of Storms
EVENT_MIMIRON_S_INFERNO, // Tower of Flames
EVENT_HODIR_S_FURY, // Tower of Frost
EVENT_FREYA_S_WARD // Tower of Nature
};
enum Seats
@@ -120,8 +132,6 @@ struct boss_flame_leviathanAI : public BossAI
events.ScheduleEvent(EVENT_VENT, 20000);
events.ScheduleEvent(EVENT_SPEED, 15000);
events.ScheduleEvent(EVENT_SUMMON, 0);
//events.ScheduleEvent(EVENT_MIMIRON_INFERNO, urand(60000, 120000)); // Not Blizzlike
//events.ScheduleEvent(EVENT_HODIR_FURY, urand(60000, 120000)); // Not Blizzlike
pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
turret->AI()->DoZoneInCombat();
@@ -208,12 +218,20 @@ struct boss_flame_leviathanAI : public BossAI
pLift->GetMotionMaster()->MoveRandom(100);
events.RepeatEvent(2000);
return;
case EVENT_MIMIRON_INFERNO: // Not Blizzlike
DoCast(me->getVictim(), SPELL_MIMIRON_INFERNO);
case EVENT_THORIM_S_HAMMER: // Tower of Storms
DoCast(me, SPELL_THORIM_S_HAMMER);
events.RepeatEvent(urand(60000, 120000));
return;
case EVENT_HODIR_FURY: // Not Blizzlike
DoCast(me->getVictim(), SPELL_HODIR_FURY);
case EVENT_MIMIRON_S_INFERNO: // Tower of Flames
DoCast(me->getVictim(), SPELL_MIMIRON_S_INFERNO);
events.RepeatEvent(urand(60000, 120000));
return;
case EVENT_HODIR_S_FURY: // Tower of Frost
DoCast(me->getVictim(), SPELL_HODIR_S_FURY);
events.RepeatEvent(urand(60000, 120000));
return;
case EVENT_FREYA_S_WARD: // Tower of Nature
DoCast(me, SPELL_FREYA_S_WARD);
events.RepeatEvent(urand(60000, 120000));
return;
default:
@@ -222,6 +240,52 @@ struct boss_flame_leviathanAI : public BossAI
}
DoSpellAttackIfReady(SPELL_BATTERING_RAM);
}
void DoAction(uint32 uiAction)
{
/*
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
DoAction(1-4): A tower have been destroyed, debuff leviathan's AP & health
DoAction(1); Tower of Storms has been destroyed, deschedule spell Thorim's Hammer
DoAction(2): Tower of Flames has been destroyed, deschedule spell Mimiron's Inferno
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
}
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;
}
}
};
//#define BOSS_DEBUG

View File

@@ -183,6 +183,28 @@ struct instance_ulduar : public ScriptedInstance
}
}
void EventProcess(GameObject* pGo, uint32 uiEventId)
{
// Flame Leviathan's Tower Event triggers
Creature* pFlameLeviathan = instance->GetCreature(NPC_LEVIATHAN);
if (pFlameLeviathan && pFlameLeviathan->isAlive()) //No leviathan, no event triggering ;)
switch(uiEventId)
{
case EVENT_TOWER_OF_STORM_DESTROYED:
pFlameLeviathan->AI()->DoAction(1);
break;
case EVENT_TOWER_OF_FROST_DESTROYED:
pFlameLeviathan->AI()->DoAction(2);
break;
case EVENT_TOWER_OF_FLAMES_DESTROYED:
pFlameLeviathan->AI()->DoAction(3);
break;
case EVENT_TOWER_OF_NATURE_DESTROYED:
pFlameLeviathan->AI()->DoAction(4);
break;
}
}
void SetData(uint32 type, uint32 data)
{
switch(type)

View File

@@ -60,7 +60,12 @@ enum eTypes
NPC_FREYA = 32906,
NPC_VEZAX = 33271,
NPC_YOGGSARON = 33288,
NPC_ALGALON = 32871
NPC_ALGALON = 32871,
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_NATURE_DESTROYED = 21030
};
#endif