diff options
Diffstat (limited to 'src/server')
4 files changed, 390 insertions, 378 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp index aebc11f33a6..bc9a6fdc6d3 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp @@ -31,139 +31,143 @@  #include "ObjectMgr.h"  #include "ulduar.h" -  enum Spells  { -    SPELL_PURSUED                               = 62374, -    SPELL_GATHERING_SPEED                       = 62375, -    SPELL_BATTERING_RAM                         = 62376, -    SPELL_FLAME_VENTS                           = 62396, -    SPELL_MISSILE_BARRAGE                       = 62400, -    SPELL_SYSTEMS_SHUTDOWN                      = 62475, -    SPELL_OVERLOAD_CIRCUIT                      = 62399, -    SPELL_START_THE_ENGINE                      = 62472, -    SPELL_SEARING_FLAME                         = 62402, -    SPELL_BLAZE                                 = 62292, -    SPELL_TAR_PASSIVE                           = 62288, -    SPELL_SMOKE_TRAIL                           = 63575, -    SPELL_ELECTROSHOCK                          = 62522, -    SPELL_NAPALM                                = 63666, +    SPELL_PURSUED                  = 62374, +    SPELL_GATHERING_SPEED          = 62375, +    SPELL_BATTERING_RAM            = 62376, +    SPELL_FLAME_VENTS              = 62396, +    SPELL_MISSILE_BARRAGE          = 62400, +    SPELL_SYSTEMS_SHUTDOWN         = 62475, +    SPELL_OVERLOAD_CIRCUIT         = 62399, +    SPELL_START_THE_ENGINE         = 62472, +    SPELL_SEARING_FLAME            = 62402, +    SPELL_BLAZE                    = 62292, +    SPELL_TAR_PASSIVE              = 62288, +    SPELL_SMOKE_TRAIL              = 63575, +    SPELL_ELECTROSHOCK             = 62522, +    SPELL_NAPALM                   = 63666,      //TOWER Additional SPELLS -    SPELL_THORIM_S_HAMMER                       = 62911, // Tower of Storms -    SPELL_MIMIRON_S_INFERNO                     = 62909, // Tower of Flames -    SPELL_HODIR_S_FURY                          = 62533, // Tower of Frost -    SPELL_FREYA_S_WARD                          = 62906, // Tower of Nature -    SPELL_FREYA_SUMMONS                         = 62947, // Tower of Nature +    SPELL_THORIM_S_HAMMER          = 62911, // Tower of Storms +    SPELL_MIMIRON_S_INFERNO        = 62909, // Tower of Flames +    SPELL_HODIR_S_FURY             = 62533, // Tower of Frost +    SPELL_FREYA_S_WARD             = 62906, // Tower of Nature +    SPELL_FREYA_SUMMONS            = 62947, // Tower of Nature      //TOWER ap & health spells -    SPELL_BUFF_TOWER_OF_STORMS                  = 65076, -    SPELL_BUFF_TOWER_OF_FLAMES                  = 65075, -    SPELL_BUFF_TOWER_OF_FR0ST                   = 65077, -    SPELL_BUFF_TOWER_OF_LIFE                    = 64482, +    SPELL_BUFF_TOWER_OF_STORMS     = 65076, +    SPELL_BUFF_TOWER_OF_FLAMES     = 65075, +    SPELL_BUFF_TOWER_OF_FR0ST      = 65077, +    SPELL_BUFF_TOWER_OF_LIFE       = 64482,      //Additional Spells -    SPELL_LASH                                  = 65062, -    SPELL_FREYA_S_WARD_EFFECT_1                 = 62947, -    SPELL_FREYA_S_WARD_EFFECT_2                 = 62907, -    SPELL_AUTO_REPAIR                           = 62705, -    AURA_DUMMY_BLUE                             = 63294, -    AURA_DUMMY_GREEN                            = 63295, -    AURA_DUMMY_YELLOW                           = 63292, -    SPELL_LIQUID_PYRITE                         = 62494, -    SPELL_DUSTY_EXPLOSION                       = 63360, -    SPELL_DUST_CLOUD_IMPACT                     = 54740, -    AURA_STEALTH_DETECTION                      = 18950, -    SPELL_RIDE_VEHICLE                          = 46598, +    SPELL_LASH                     = 65062, +    SPELL_FREYA_S_WARD_EFFECT_1    = 62947, +    SPELL_FREYA_S_WARD_EFFECT_2    = 62907, +    SPELL_AUTO_REPAIR              = 62705, +    AURA_DUMMY_BLUE                = 63294, +    AURA_DUMMY_GREEN               = 63295, +    AURA_DUMMY_YELLOW              = 63292, +    SPELL_LIQUID_PYRITE            = 62494, +    SPELL_DUSTY_EXPLOSION          = 63360, +    SPELL_DUST_CLOUD_IMPACT        = 54740, +    AURA_STEALTH_DETECTION         = 18950, +    SPELL_RIDE_VEHICLE             = 46598,  };  enum Creatures  { -    NPC_SEAT                                    = 33114, -    NPC_MECHANOLIFT                             = 33214, -    NPC_LIQUID                                  = 33189, -    NPC_CONTAINER                               = 33218, -    NPC_THORIM_BEACON                           = 33365, -    NPC_MIMIRON_BEACON                          = 33370, -    NPC_HODIR_BEACON                            = 33212, -    NPC_FREYA_BEACON                            = 33367, -    NPC_THORIM_TARGET_BEACON                    = 33364, -    NPC_MIMIRON_TARGET_BEACON                   = 33369, -    NPC_HODIR_TARGET_BEACON                     = 33108, -    NPC_FREYA_TARGET_BEACON                     = 33366, -    NPC_LOREKEEPER                              = 33686, //Hard mode starter -    NPC_BRANZ_BRONZBEARD                        = 33579, -    NPC_DELORAH                                 = 33701, -    NPC_ULDUAR_GAUNTLET_GENERATOR               = 33571, // Trigger tied to towers +    NPC_SEAT                       = 33114, +    NPC_MECHANOLIFT                = 33214, +    NPC_LIQUID                     = 33189, +    NPC_CONTAINER                  = 33218, +    NPC_THORIM_BEACON              = 33365, +    NPC_MIMIRON_BEACON             = 33370, +    NPC_HODIR_BEACON               = 33212, +    NPC_FREYA_BEACON               = 33367, +    NPC_THORIM_TARGET_BEACON       = 33364, +    NPC_MIMIRON_TARGET_BEACON      = 33369, +    NPC_HODIR_TARGET_BEACON        = 33108, +    NPC_FREYA_TARGET_BEACON        = 33366, +    NPC_LOREKEEPER                 = 33686, // Hard mode starter +    NPC_BRANZ_BRONZBEARD           = 33579, +    NPC_DELORAH                    = 33701, +    NPC_ULDUAR_GAUNTLET_GENERATOR  = 33571, // Trigger tied to towers  };  enum Towers  { -    GO_TOWER_OF_STORMS  = 194377, -    GO_TOWER_OF_FLAMES  = 194371, -    GO_TOWER_OF_FROST   = 194370, -    GO_TOWER_OF_LIFE    = 194375, +    GO_TOWER_OF_STORMS    = 194377, +    GO_TOWER_OF_FLAMES    = 194371, +    GO_TOWER_OF_FROST     = 194370, +    GO_TOWER_OF_LIFE      = 194375,  };  enum Events  { -    EVENT_PURSUE            = 1, -    EVENT_MISSILE           = 2, -    EVENT_VENT              = 3, -    EVENT_SPEED             = 4, -    EVENT_SUMMON            = 5, -    EVENT_SHUTDOWN          = 6, -    EVENT_REPAIR            = 7, -    EVENT_THORIM_S_HAMMER   = 8,    // Tower of Storms -    EVENT_MIMIRON_S_INFERNO = 9,    // Tower of Flames -    EVENT_HODIR_S_FURY      = 10,   // Tower of Frost -    EVENT_FREYA_S_WARD      = 11,   // Tower of Nature +    EVENT_PURSUE               = 1, +    EVENT_MISSILE              = 2, +    EVENT_VENT                 = 3, +    EVENT_SPEED                = 4, +    EVENT_SUMMON               = 5, +    EVENT_SHUTDOWN             = 6, +    EVENT_REPAIR               = 7, +    EVENT_THORIM_S_HAMMER      = 8,    // Tower of Storms +    EVENT_MIMIRON_S_INFERNO    = 9,    // Tower of Flames +    EVENT_HODIR_S_FURY         = 10,   // Tower of Frost +    EVENT_FREYA_S_WARD         = 11,   // Tower of Nature  };  enum Seats  { -    SEAT_PLAYER                                 = 0, -    SEAT_TURRET                                 = 1, -    SEAT_DEVICE                                 = 2, -    SEAT_CANNON                                 = 7, +    SEAT_PLAYER    = 0, +    SEAT_TURRET    = 1, +    SEAT_DEVICE    = 2, +    SEAT_CANNON    = 7,  };  enum Vehicles  { -    VEHICLE_SIEGE                             = 33060, -    VEHICLE_CHOPPER                           = 33062, -    VEHICLE_DEMOLISHER                        = 33109, +    VEHICLE_SIEGE         = 33060, +    VEHICLE_CHOPPER       = 33062, +    VEHICLE_DEMOLISHER    = 33109,  }; -#define EMOTE_PURSUE          "Flame Leviathan pursues $N." -#define EMOTE_OVERLOAD        "Flame Leviathan's circuits overloaded." -#define EMOTE_REPAIR          "Automatic repair sequence initiated." -#define DATA_SHUTOUT          29112912 // 2911, 2912 are achievement IDs -#define DATA_UNBROKEN         29052906 // 2905, 2906 are achievement IDs +#define EMOTE_PURSUE      "Flame Leviathan pursues $N." +#define EMOTE_OVERLOAD    "Flame Leviathan's circuits overloaded." +#define EMOTE_REPAIR      "Automatic repair sequence initiated." +#define DATA_SHUTOUT      29112912 // 2911, 2912 are achievement IDs +#define DATA_UNBROKEN     29052906 // 2905, 2906 are achievement IDs +#define DATA_ORBIT_ACHIEVEMENTS    1 +#define VEHICLE_SPAWNS             5 +#define FREYA_SPAWNS               4  enum Yells  { -    SAY_AGGRO                                   = -1603060, -    SAY_SLAY                                    = -1603061, -    SAY_DEATH                                   = -1603062, -    SAY_TARGET_1                                = -1603063, -    SAY_TARGET_2                                = -1603064, -    SAY_TARGET_3                                = -1603065, -    SAY_HARDMODE                                = -1603066, -    SAY_TOWER_NONE                              = -1603067, -    SAY_TOWER_FROST                             = -1603068, -    SAY_TOWER_FLAME                             = -1603069, -    SAY_TOWER_NATURE                            = -1603070, -    SAY_TOWER_STORM                             = -1603071, -    SAY_PLAYER_RIDING                           = -1603072, -    SAY_OVERLOAD_1                              = -1603073, -    SAY_OVERLOAD_2                              = -1603074, -    SAY_OVERLOAD_3                              = -1603075, +    SAY_AGGRO            = -1603060, +    SAY_SLAY             = -1603061, +    SAY_DEATH            = -1603062, +    SAY_TARGET_1         = -1603063, +    SAY_TARGET_2         = -1603064, +    SAY_TARGET_3         = -1603065, +    SAY_HARDMODE         = -1603066, +    SAY_TOWER_NONE       = -1603067, +    SAY_TOWER_FROST      = -1603068, +    SAY_TOWER_FLAME      = -1603069, +    SAY_TOWER_NATURE     = -1603070, +    SAY_TOWER_STORM      = -1603071, +    SAY_PLAYER_RIDING    = -1603072, +    SAY_OVERLOAD_1       = -1603073, +    SAY_OVERLOAD_2       = -1603074, +    SAY_OVERLOAD_3       = -1603075,  }; -enum actions +enum MiscellanousData  { -    ACTION_TOWER_OF_STORM_DESTROYED             = 1, -    ACTION_TOWER_OF_FROST_DESTROYED             = 2, -    ACTION_TOWER_OF_FLAMES_DESTROYED            = 3, -    ACTION_TOWER_OF_LIFE_DESTROYED              = 4, +    // Other actions are in Ulduar.h +    ACTION_START_HARD_MODE    = 5, +    ACTION_SPAWN_VEHICLES     = 6, +    // Amount of seats depending on Raid mode +    TWO_SEATS                 = 2, +    FOUR_SEATS                = 4,  };  Position const Center[]= @@ -171,7 +175,12 @@ Position const Center[]=      {354.8771f, -12.90240f, 409.803650f, 0.0f},  }; -Position const PosSiege[5] = +Position const InfernoStart[]= +{ +    {390.93f, -13.91f, 409.81f, 0.0f}, +}; + +Position const PosSiege[VEHICLE_SPAWNS] =  {      {-814.59f, -64.54f, 429.92f, 5.969f},      {-784.37f, -33.31f, 429.92f, 5.096f}, @@ -180,7 +189,7 @@ Position const PosSiege[5] =      {-812.83f, -77.71f, 429.92f, 0.046f},  }; -Position const PosChopper[5] = +Position const PosChopper[VEHICLE_SPAWNS] =  {      {-717.83f, -106.56f, 430.02f, 0.122f},      {-717.83f, -114.23f, 430.44f, 0.122f}, @@ -189,7 +198,7 @@ Position const PosChopper[5] =      {-718.45f, -123.58f, 430.41f, 0.085f},  }; -Position const PosDemolisher[5] = +Position const PosDemolisher[VEHICLE_SPAWNS] =  {      {-724.12f, -176.64f, 430.03f, 2.543f},      {-766.70f, -225.03f, 430.50f, 1.710f}, @@ -198,7 +207,13 @@ Position const PosDemolisher[5] =      {-798.01f, -227.24f, 429.84f, 1.446f},  }; -#define DATA_ORBIT_ACHIEVEMENTS         1 +Position const FreyaBeacons[FREYA_SPAWNS] = +{ +    {377.02f, -119.10f, 409.81f, 0.0f}, +    {185.62f, -119.10f, 409.81f, 0.0f}, +    {377.02f, 54.78f, 409.81f, 0.0f}, +    {185.62f, 54.78f, 409.81f, 0.0f}, +};  class boss_flame_leviathan : public CreatureScript  { @@ -244,6 +259,7 @@ class boss_flame_leviathan : public CreatureScript              void Reset()              {                  _Reset(); +                //resets shutdown counter to 0.  2 or 4 depending on raid mode                  Shutdown = 0;                  me->SetReactState(REACT_DEFENSIVE);              } @@ -298,7 +314,8 @@ class boss_flame_leviathan : public CreatureScript                      DoScriptText(SAY_AGGRO, me);              } -            // TODO: effect 0 and effect 1 may be on different target +            //TODO: effect 0 and effect 1 may be on different target +            //TODO: Move to spellscript              void SpellHitTarget(Unit* target, SpellEntry const* spell)              {                  if (spell->Id == SPELL_PURSUED) @@ -354,7 +371,7 @@ class boss_flame_leviathan : public CreatureScript                  events.Update(diff); -                if (Shutdown == RAID_MODE(2, 4)) +                if (Shutdown == RAID_MODE(TWO_SEATS, FOUR_SEATS))                  {                      Shutdown = 0;                      events.ScheduleEvent(EVENT_SHUTDOWN, 4000); @@ -381,134 +398,111 @@ class boss_flame_leviathan : public CreatureScript                  if (me->HasUnitState(UNIT_STAT_CASTING))                      return; -                uint32 eventId = events.GetEvent(); - -                switch(eventId) +                while (uint32 eventId = events.ExecuteEvent())                  { -                    case 0: -                        break; // this is a must -                    case EVENT_PURSUE: -                        DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me); -                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 75, true)) -                        { -                            me->AddAura(SPELL_PURSUED, target); -                            me->MonsterTextEmote(EMOTE_PURSUE, target->GetGUID(), true); -                        } -                        events.RepeatEvent(30*IN_MILLISECONDS); -                        break; -                    case EVENT_MISSILE: -                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) -                            DoCast(target, SPELL_MISSILE_BARRAGE); -                        events.RepeatEvent(1500); -                        break; -                    case EVENT_VENT: -                        DoCastAOE(SPELL_FLAME_VENTS); -                        events.RepeatEvent(20*IN_MILLISECONDS); -                        break; -                    case EVENT_SPEED: -                        DoCastAOE(SPELL_GATHERING_SPEED); -                        events.RepeatEvent(15*IN_MILLISECONDS); -                        break; -                    case EVENT_SUMMON: -                        if (summons.size() < 15) -                            if (Creature* lift = DoSummonFlyer(NPC_MECHANOLIFT, me, 30.0f, 50.0f, 0)) -                                lift->GetMotionMaster()->MoveRandom(100); -                        events.RepeatEvent(2*IN_MILLISECONDS); -                        break; -                    case EVENT_SHUTDOWN: -                        DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me); -                        me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true); -                        me->AddAura(SPELL_SYSTEMS_SHUTDOWN, me); -                        me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED); -                        events.ScheduleEvent(EVENT_REPAIR, 4000); -                        events.CancelEvent(EVENT_SHUTDOWN); -                        break; -                    case EVENT_REPAIR: -                        me->MonsterTextEmote(EMOTE_REPAIR, 0, true); -                        me->ClearUnitState(UNIT_STAT_STUNNED | UNIT_STAT_ROOT); -                        events.ScheduleEvent(EVENT_SHUTDOWN, 150*IN_MILLISECONDS); -                        events.CancelEvent(EVENT_REPAIR); -                        break; -                    case EVENT_THORIM_S_HAMMER: // Tower of Storms -                        for (uint8 i = 0; i < 7; ++i) -                        { -                            if (Creature* thorim = DoSummon(NPC_THORIM_BEACON, me, float(urand(20, 60)), 20000, TEMPSUMMON_TIMED_DESPAWN)) -                                thorim->GetMotionMaster()->MoveRandom(100); -                        } -                        DoScriptText(SAY_TOWER_STORM, me); -                        events.CancelEvent(EVENT_THORIM_S_HAMMER); -                        break; -                    case EVENT_MIMIRON_S_INFERNO: // Tower of Flames -                        me->SummonCreature(NPC_MIMIRON_BEACON, 390.93f, -13.91f, 409.81f); -                        DoScriptText(SAY_TOWER_FLAME, me); -                        events.CancelEvent(EVENT_MIMIRON_S_INFERNO); -                        break; -                    case EVENT_HODIR_S_FURY:      // Tower of Frost -                        for (uint8 i = 0; i < 7; ++i) -                        { -                            if (Creature* hodir = DoSummon(NPC_HODIR_BEACON, me, 50, 0)) -                                hodir->GetMotionMaster()->MoveRandom(100); -                        } -                        DoScriptText(SAY_TOWER_FROST, me); -                        events.CancelEvent(EVENT_HODIR_S_FURY); -                        break; -                    case EVENT_FREYA_S_WARD:    // Tower of Nature -                        DoScriptText(SAY_TOWER_NATURE, me); -                        StartFreyaEvent(); -                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) -                            DoCast(target, SPELL_FREYA_S_WARD); -                        events.CancelEvent(EVENT_FREYA_S_WARD); -                        break; -                    default: -                        events.PopEvent(); -                        break; +                    switch (eventId) +                    { +                        case EVENT_PURSUE: +                            DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me); +                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 75, true)) +                            { +                                me->CastSpell(target, SPELL_PURSUED, true); +                                me->MonsterTextEmote(EMOTE_PURSUE, target->GetGUID(), true); +                            } +                            events.RepeatEvent(30*IN_MILLISECONDS); +                            break; +                        case EVENT_MISSILE: +                            DoCast(me, SPELL_MISSILE_BARRAGE, true); +                            events.RepeatEvent(2*IN_MILLISECONDS); +                            break; +                        case EVENT_VENT: +                            DoCastAOE(SPELL_FLAME_VENTS); +                            events.RepeatEvent(20*IN_MILLISECONDS); +                            break; +                        case EVENT_SPEED: +                            DoCastAOE(SPELL_GATHERING_SPEED); +                            events.RepeatEvent(15*IN_MILLISECONDS); +                            break; +                        case EVENT_SUMMON: +                            if (summons.size() < 15) +                                if (Creature* lift = DoSummonFlyer(NPC_MECHANOLIFT, me, 30.0f, 50.0f, 0)) +                                    lift->GetMotionMaster()->MoveRandom(100); +                            events.RepeatEvent(2*IN_MILLISECONDS); +                            break; +                        case EVENT_SHUTDOWN: +                            DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me); +                            me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true); +                            me->CastSpell(me, SPELL_SYSTEMS_SHUTDOWN, true); +                            me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED); +                            events.ScheduleEvent(EVENT_REPAIR, 4000); +                            events.CancelEvent(EVENT_SHUTDOWN); +                            break; +                        case EVENT_REPAIR: +                            me->MonsterTextEmote(EMOTE_REPAIR, 0, true); +                            me->ClearUnitState(UNIT_STAT_STUNNED | UNIT_STAT_ROOT); +                            events.ScheduleEvent(EVENT_SHUTDOWN, 150*IN_MILLISECONDS); +                            events.CancelEvent(EVENT_REPAIR); +                            break; +                        case EVENT_THORIM_S_HAMMER: // Tower of Storms +                            for (uint8 i = 0; i < 7; ++i) +                            { +                                if (Creature* thorim = DoSummon(NPC_THORIM_BEACON, me, float(urand(20, 60)), 20000, TEMPSUMMON_TIMED_DESPAWN)) +                                    thorim->GetMotionMaster()->MoveRandom(100); +                            } +                            DoScriptText(SAY_TOWER_STORM, me); +                            events.CancelEvent(EVENT_THORIM_S_HAMMER); +                            break; +                        case EVENT_MIMIRON_S_INFERNO: // Tower of Flames +                            me->SummonCreature(NPC_MIMIRON_BEACON, InfernoStart->GetPositionX(), InfernoStart->GetPositionY(), InfernoStart->GetPositionZ()); +                            DoScriptText(SAY_TOWER_FLAME, me); +                            events.CancelEvent(EVENT_MIMIRON_S_INFERNO); +                            break; +                        case EVENT_HODIR_S_FURY:      // Tower of Frost +                            for (uint8 i = 0; i < 7; ++i) +                            { +                                if (Creature* hodir = DoSummon(NPC_HODIR_BEACON, me, 50, 0)) +                                    hodir->GetMotionMaster()->MoveRandom(100); +                            } +                            DoScriptText(SAY_TOWER_FROST, me); +                            events.CancelEvent(EVENT_HODIR_S_FURY); +                            break; +                        case EVENT_FREYA_S_WARD:    // Tower of Nature +                            DoScriptText(SAY_TOWER_NATURE, me); +                            for (int32 i = 0; i < 4; ++i) +                                me->SummonCreature(NPC_FREYA_BEACON, FreyaBeacons[i]); + +                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) +                                DoCast(target, SPELL_FREYA_S_WARD); +                            events.CancelEvent(EVENT_FREYA_S_WARD); +                            break; +                    }                  } +                //TODO: Fix this spell, gets applied on players who are on leviathan should be excluded?                  /*if (me->IsWithinMeleeRange(me->getVictim())) //bugged spell casts on units that are boarded on leviathan                  DoSpellAttackIfReady(SPELL_BATTERING_RAM);*/                  DoMeleeAttackIfReady();              } -            void StartFreyaEvent()//summon these 4 on each corner wich wil spawn additional hostile mobs -            { -                me->SummonCreature(NPC_FREYA_BEACON, 377.02f, -119.10f, 409.81f); -                me->SummonCreature(NPC_FREYA_BEACON, 377.02f, 54.78f, 409.81f); -                me->SummonCreature(NPC_FREYA_BEACON, 185.62f, 54.78f, 409.81f); -                me->SummonCreature(NPC_FREYA_BEACON, 185.62f, -119.10f, 409.81f); -            } -              void DoAction(int32 const action)              { -                // Start encounter -                if (action == 10) +                if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count                  { -                    if (!me->isDead()) -                    { -                        me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0); -                        me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center -                        me->SetReactState(REACT_AGGRESSIVE); -                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); -                        return; -                    } -                } - -                if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower -                { -                    if (me->HasLootMode(31) && ActiveTowersCount == 4) +                    if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4) && ActiveTowersCount == 4)                      {                          me->RemoveLootMode(LOOT_MODE_HARD_MODE_4);                          --ActiveTowersCount;                      } -                    if (me->HasLootMode(15) && ActiveTowersCount == 3) +                    if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3) && ActiveTowersCount == 3)                      {                          me->RemoveLootMode(LOOT_MODE_HARD_MODE_3);                          --ActiveTowersCount;                      } -                    if (me->HasLootMode(7) && ActiveTowersCount == 2) +                    if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2) && ActiveTowersCount == 2)                      {                          me->RemoveLootMode(LOOT_MODE_HARD_MODE_2);                          --ActiveTowersCount;                      } -                    if (me->HasLootMode(3) && ActiveTowersCount == 1) +                    if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1) && ActiveTowersCount == 1)                      {                          me->RemoveLootMode(LOOT_MODE_HARD_MODE_1);                          --ActiveTowersCount; @@ -517,26 +511,36 @@ class boss_flame_leviathan : public CreatureScript                  switch (action)                  { -                    case 0:  // Activate hard-mode setting counter to 4 towers, enable all towers apply buffs on levithian -                        ActiveTowers = true; -                        towerOfStorms = true; -                        towerOfLife = true; -                        towerOfFlames = true; -                        towerOfFrost = true; -                        me->SetLootMode(31); -                        break; -                    case ACTION_TOWER_OF_STORM_DESTROYED:  // Tower of Storms destroyed +                    case ACTION_TOWER_OF_STORM_DESTROYED:                          towerOfStorms = false;                          break; -                    case ACTION_TOWER_OF_FROST_DESTROYED: // Tower of Frost destroyed +                    case ACTION_TOWER_OF_FROST_DESTROYED:                          towerOfFrost = false;                          break; -                    case ACTION_TOWER_OF_FLAMES_DESTROYED: // Tower of Flames destroyed +                    case ACTION_TOWER_OF_FLAMES_DESTROYED:                          towerOfFlames = false;                          break; -                    case ACTION_TOWER_OF_LIFE_DESTROYED: // Tower of Nature destroyed +                    case ACTION_TOWER_OF_LIFE_DESTROYED:                          towerOfLife = false;                          break; +                    case ACTION_START_HARD_MODE:  // Activate hard-mode enable all towers, apply buffs on leviathan +                        ActiveTowers = true; +                        towerOfStorms = true; +                        towerOfLife = true; +                        towerOfFlames = true; +                        towerOfFrost = true; +                        me->SetLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4); +                        break; +                    case ACTION_MOVE_TO_CENTER_POSITION: // Triggered by 2 Collossus near door +                        if (!me->isDead()) +                        { +                            me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0); +                            me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center +                            me->SetReactState(REACT_AGGRESSIVE); +                            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); +                            return; +                        } +                        break;                      default:                          break;                  } @@ -628,7 +632,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript              void Reset ()              { -                NapalmTimer = 5000; +                NapalmTimer = 5*IN_MILLISECONDS;                  DoCast(me, AURA_STEALTH_DETECTION);              } @@ -833,7 +837,7 @@ class npc_pool_of_tar : public CreatureScript              {                  me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                  me->SetReactState(REACT_PASSIVE); -                me->AddAura(SPELL_TAR_PASSIVE, me); +                me->CastSpell(me, SPELL_TAR_PASSIVE, true);              }              void DamageTaken(Unit* /*who*/, uint32& damage) @@ -873,7 +877,7 @@ class npc_colossus : public CreatureScript              void JustDied(Unit* /*Who*/)              {                  if (me->GetHomePosition().IsInDist(Center, 50.f)) -                    instance->SetData(TYPE_COLOSSUS, instance->GetData(TYPE_COLOSSUS)+1); +                    instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1);              }              void UpdateAI(uint32 const /*diff*/) @@ -901,7 +905,7 @@ class npc_thorims_hammer : public CreatureScript              npc_thorims_hammerAI(Creature* creature) : ScriptedAI(creature)              {                  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                me->AddAura(AURA_DUMMY_BLUE, me); +                me->CastSpell(me, AURA_DUMMY_BLUE, true);              }              void MoveInLineOfSight(Unit* who) @@ -916,7 +920,7 @@ class npc_thorims_hammer : public CreatureScript              void UpdateAI(uint32 const /*diff*/)              {                  if (!me->HasAura(AURA_DUMMY_BLUE)) -                    me->AddAura(AURA_DUMMY_BLUE, me); +                    me->CastSpell(me, AURA_DUMMY_BLUE, true);                  UpdateVictim();              } @@ -943,7 +947,7 @@ public:          npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)          {              me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); -            me->AddAura(AURA_DUMMY_YELLOW, me); +            me->CastSpell(me, AURA_DUMMY_YELLOW, true);              me->SetReactState(REACT_PASSIVE);          } @@ -978,7 +982,7 @@ public:                      infernoTimer -= diff;                  if (!me->HasAura(AURA_DUMMY_YELLOW)) -                    me->AddAura(AURA_DUMMY_YELLOW, me); +                    me->CastSpell(me, AURA_DUMMY_YELLOW, true);              }          }      }; @@ -995,7 +999,7 @@ class npc_hodirs_fury : public CreatureScript              npc_hodirs_furyAI(Creature* creature) : ScriptedAI(creature)              {                  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                me->AddAura(AURA_DUMMY_GREEN, me); +                me->CastSpell(me, AURA_DUMMY_GREEN, true);              }              void MoveInLineOfSight(Unit* who) @@ -1010,7 +1014,7 @@ class npc_hodirs_fury : public CreatureScript              void UpdateAI(uint32 const /*diff*/)              {                  if (!me->HasAura(AURA_DUMMY_GREEN)) -                    me->AddAura(AURA_DUMMY_GREEN, me); +                    me->CastSpell(me, AURA_DUMMY_GREEN, true);                  UpdateVictim();              } @@ -1031,7 +1035,7 @@ class npc_freyas_ward : public CreatureScript          {              npc_freyas_wardAI(Creature* creature) : ScriptedAI(creature)              { -                me->AddAura(AURA_DUMMY_GREEN, me); +                me->CastSpell(me, AURA_DUMMY_GREEN, true);              }              uint32 summonTimer; @@ -1053,7 +1057,7 @@ class npc_freyas_ward : public CreatureScript                      summonTimer -= diff;                  if (!me->HasAura(AURA_DUMMY_GREEN)) -                    me->AddAura(AURA_DUMMY_GREEN, me); +                    me->CastSpell(me, AURA_DUMMY_GREEN, true);                  UpdateVictim();              } @@ -1110,6 +1114,7 @@ class npc_freya_ward_summon : public CreatureScript  //npc lore keeper  #define GOSSIP_ITEM_1  "Activate secondary defensive systems"  #define GOSSIP_ITEM_2  "Confirmed" +  class npc_lorekeeper : public CreatureScript  {      public: @@ -1124,7 +1129,7 @@ class npc_lorekeeper : public CreatureScript              void DoAction(int32 const action)              {                  // Start encounter -                if (action == 0) +                if (action == ACTION_SPAWN_VEHICLES)                  {                      for (int32 i = 0; i < RAID_MODE(2, 5); ++i)                          DoSummon(VEHICLE_SIEGE, PosSiege[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN); @@ -1162,9 +1167,9 @@ class npc_lorekeeper : public CreatureScript                      if (Creature* leviathan = instance->instance->GetCreature(instance->GetData64(BOSS_LEVIATHAN)))                      { -                        CAST_AI(boss_flame_leviathan::boss_flame_leviathanAI, (leviathan->AI()))->DoAction(0); //enable hard mode activating the 4 additional events spawning additional vehicles +                        leviathan->AI()->DoAction(ACTION_START_HARD_MODE);                          creature->SetVisible(false); -                        creature->AI()->DoAction(0); // spawn the vehicles +                        creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles                          if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true))                          {                              if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true)) diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp index 8c2d2d815f6..5ec29a0f78d 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp @@ -390,23 +390,20 @@ class instance_ulduar : public InstanceMapScript                      switch (eventId)                      {                          case EVENT_TOWER_OF_STORM_DESTROYED: -                            FlameLeviathan->AI()->DoAction(1); +                            FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);                              break;                          case EVENT_TOWER_OF_FROST_DESTROYED: -                            FlameLeviathan->AI()->DoAction(2); +                            FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);                              break;                          case EVENT_TOWER_OF_FLAMES_DESTROYED: -                            FlameLeviathan->AI()->DoAction(3); +                            FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);                              break;                          case EVENT_TOWER_OF_LIFE_DESTROYED: -                            FlameLeviathan->AI()->DoAction(4); +                            FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);                              break;                      }              } -            void ProcessEvent(Unit* /*unit*/, uint32 /*eventId*/) -            { -            }              bool SetBossState(uint32 type, EncounterState state)              { @@ -475,12 +472,12 @@ class instance_ulduar : public InstanceMapScript              {                  switch (type)                  { -                    case TYPE_COLOSSUS: -                        Encounter[TYPE_COLOSSUS] = data; +                    case DATA_COLOSSUS: +                        Encounter[DATA_COLOSSUS] = data;                          if (data == 2)                          {                              if (Creature* Leviathan = instance->GetCreature(LeviathanGUID)) -                                Leviathan->AI()->DoAction(10); +                                Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);                              if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))                                  gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);                              SaveToDB(); @@ -591,7 +588,7 @@ class instance_ulduar : public InstanceMapScript              {                  switch (type)                  { -                    case TYPE_COLOSSUS: +                    case DATA_COLOSSUS:                          return Encounter[type];                      case DATA_HODIR_RARE_CACHE:                          return HodirRareCacheData; @@ -607,7 +604,7 @@ class instance_ulduar : public InstanceMapScript                  OUT_SAVE_INST_DATA;                  std::ostringstream saveStream; -                saveStream << "U U " << GetBossSaveData() << GetData(TYPE_COLOSSUS); +                saveStream << "U U " << GetBossSaveData() << GetData(DATA_COLOSSUS);                  OUT_SAVE_INST_DATA_COMPLETE;                  return saveStream.str(); @@ -637,7 +634,7 @@ class instance_ulduar : public InstanceMapScript                          if (tmpState == IN_PROGRESS || tmpState > SPECIAL)                              tmpState = NOT_STARTED; -                        if (i == TYPE_COLOSSUS) +                        if (i == DATA_COLOSSUS)                              SetData(i, tmpState);                          else                              SetBossState(i, EncounterState(tmpState)); diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h index 703e1f6b37b..4175d17e540 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h @@ -23,156 +23,166 @@  enum UlduarBosses  { -    MAX_ENCOUNTER                                = 20, - -    BOSS_LEVIATHAN                               = 0, -    BOSS_IGNIS                                   = 1, -    BOSS_RAZORSCALE                              = 2, -    BOSS_XT002                                   = 3, -    BOSS_ASSEMBLY_OF_IRON                        = 4, -    BOSS_STEELBREAKER                            = 5, -    BOSS_MOLGEIM                                 = 6, -    BOSS_BRUNDIR                                 = 7, -    BOSS_KOLOGARN                                = 8, -    BOSS_AURIAYA                                 = 9, -    BOSS_MIMIRON                                 = 10, -    BOSS_HODIR                                   = 11, -    BOSS_THORIM                                  = 12, -    BOSS_FREYA                                   = 13, -    BOSS_BRIGHTLEAF                              = 14, -    BOSS_IRONBRANCH                              = 15, -    BOSS_STONEBARK                               = 16, -    BOSS_VEZAX                                   = 17, -    BOSS_YOGGSARON                               = 18, -    BOSS_ALGALON                                 = 19, -    TYPE_COLOSSUS                                = 20, - -    // Razorscale -    DATA_EXPEDITION_COMMANDER, -    DATA_RAZORSCALE_CONTROL, - -    // XT-002 -    DATA_TOY_PILE_0, -    DATA_TOY_PILE_1, -    DATA_TOY_PILE_2, -    DATA_TOY_PILE_3, - -    // Kologarn -    DATA_LEFT_ARM, -    DATA_RIGHT_ARM, - -    // Hodir -    DATA_HODIR_RARE_CACHE, +    MAX_ENCOUNTER            = 20, + +    BOSS_LEVIATHAN           = 0, +    BOSS_IGNIS               = 1, +    BOSS_RAZORSCALE          = 2, +    BOSS_XT002               = 3, +    BOSS_ASSEMBLY_OF_IRON    = 4, +    BOSS_STEELBREAKER        = 5, +    BOSS_MOLGEIM             = 6, +    BOSS_BRUNDIR             = 7, +    BOSS_KOLOGARN            = 8, +    BOSS_AURIAYA             = 9, +    BOSS_MIMIRON             = 10, +    BOSS_HODIR               = 11, +    BOSS_THORIM              = 12, +    BOSS_FREYA               = 13, +    BOSS_BRIGHTLEAF          = 14, +    BOSS_IRONBRANCH          = 15, +    BOSS_STONEBARK           = 16, +    BOSS_VEZAX               = 17, +    BOSS_YOGGSARON           = 18, +    BOSS_ALGALON             = 19,  };  enum UlduarNPCs  {      // General -    NPC_LEVIATHAN                                = 33113, -    NPC_IGNIS                                    = 33118, -    NPC_RAZORSCALE                               = 33186, -    NPC_RAZORSCALE_CONTROLLER                    = 33233, -    NPC_STEELFORGED_DEFFENDER                    = 33236, -    NPC_EXPEDITION_COMMANDER                     = 33210, -    NPC_XT002                                    = 33293, -    NPC_XT_TOY_PILE                              = 33337, -    NPC_STEELBREAKER                             = 32867, -    NPC_MOLGEIM                                  = 32927, -    NPC_BRUNDIR                                  = 32857, -    NPC_KOLOGARN                                 = 32930, -    NPC_FOCUSED_EYEBEAM                          = 33632, -    NPC_FOCUSED_EYEBEAM_RIGHT                    = 33802, -    NPC_LEFT_ARM                                 = 32933, -    NPC_RIGHT_ARM                                = 32934, -    NPC_RUBBLE                                   = 33768, -    NPC_AURIAYA                                  = 33515, -    NPC_MIMIRON                                  = 33350, -    NPC_HODIR                                    = 32845, -    NPC_THORIM                                   = 32865, -    NPC_FREYA                                    = 32906, -    NPC_VEZAX                                    = 33271, -    NPC_YOGGSARON                                = 33288, -    NPC_ALGALON                                  = 32871, +    NPC_LEVIATHAN                = 33113, +    NPC_IGNIS                    = 33118, +    NPC_RAZORSCALE               = 33186, +    NPC_RAZORSCALE_CONTROLLER    = 33233, +    NPC_STEELFORGED_DEFFENDER    = 33236, +    NPC_EXPEDITION_COMMANDER     = 33210, +    NPC_XT002                    = 33293, +    NPC_XT_TOY_PILE              = 33337, +    NPC_STEELBREAKER             = 32867, +    NPC_MOLGEIM                  = 32927, +    NPC_BRUNDIR                  = 32857, +    NPC_KOLOGARN                 = 32930, +    NPC_FOCUSED_EYEBEAM          = 33632, +    NPC_FOCUSED_EYEBEAM_RIGHT    = 33802, +    NPC_LEFT_ARM                 = 32933, +    NPC_RIGHT_ARM                = 32934, +    NPC_RUBBLE                   = 33768, +    NPC_AURIAYA                  = 33515, +    NPC_MIMIRON                  = 33350, +    NPC_HODIR                    = 32845, +    NPC_THORIM                   = 32865, +    NPC_FREYA                    = 32906, +    NPC_VEZAX                    = 33271, +    NPC_YOGGSARON                = 33288, +    NPC_ALGALON                  = 32871,      // Mimiron -    NPC_LEVIATHAN_MKII                           = 33432, -    NPC_VX_001                                   = 33651, -    NPC_AERIAL_COMMAND_UNIT                      = 33670, +    NPC_LEVIATHAN_MKII           = 33432, +    NPC_VX_001                   = 33651, +    NPC_AERIAL_COMMAND_UNIT      = 33670,      // Freya's Keepers -    NPC_IRONBRANCH                               = 32913, -    NPC_BRIGHTLEAF                               = 32915, -    NPC_STONEBARK                                = 32914, +    NPC_IRONBRANCH               = 32913, +    NPC_BRIGHTLEAF               = 32915, +    NPC_STONEBARK                = 32914,      // Hodir's Helper NPCs -    NPC_TOR_GREYCLOUD                            = 32941, -    NPC_KAR_GREYCLOUD                            = 33333, -    NPC_EIVI_NIGHTFEATHER                        = 33325, -    NPC_ELLIE_NIGHTFEATHER                       = 32901, -    NPC_SPIRITWALKER_TARA                        = 33332, -    NPC_SPIRITWALKER_YONA                        = 32950, -    NPC_ELEMENTALIST_MAHFUUN                     = 33328, -    NPC_ELEMENTALIST_AVUUN                       = 32900, -    NPC_AMIRA_BLAZEWEAVER                        = 33331, -    NPC_VEESHA_BLAZEWEAVER                       = 32946, -    NPC_MISSY_FLAMECUFFS                         = 32893, -    NPC_SISSY_FLAMECUFFS                         = 33327, -    NPC_BATTLE_PRIEST_ELIZA                      = 32948, -    NPC_BATTLE_PRIEST_GINA                       = 33330, -    NPC_FIELD_MEDIC_PENNY                        = 32897, -    NPC_FIELD_MEDIC_JESSI                        = 33326, +    NPC_TOR_GREYCLOUD            = 32941, +    NPC_KAR_GREYCLOUD            = 33333, +    NPC_EIVI_NIGHTFEATHER        = 33325, +    NPC_ELLIE_NIGHTFEATHER       = 32901, +    NPC_SPIRITWALKER_TARA        = 33332, +    NPC_SPIRITWALKER_YONA        = 32950, +    NPC_ELEMENTALIST_MAHFUUN     = 33328, +    NPC_ELEMENTALIST_AVUUN       = 32900, +    NPC_AMIRA_BLAZEWEAVER        = 33331, +    NPC_VEESHA_BLAZEWEAVER       = 32946, +    NPC_MISSY_FLAMECUFFS         = 32893, +    NPC_SISSY_FLAMECUFFS         = 33327, +    NPC_BATTLE_PRIEST_ELIZA      = 32948, +    NPC_BATTLE_PRIEST_GINA       = 33330, +    NPC_FIELD_MEDIC_PENNY        = 32897, +    NPC_FIELD_MEDIC_JESSI        = 33326,      // Freya's trash NPCs -    NPC_CORRUPTED_SERVITOR                       = 33354, -    NPC_MISGUIDED_NYMPH                          = 33355, -    NPC_GUARDIAN_LASHER                          = 33430, -    NPC_FOREST_SWARMER                           = 33431, -    NPC_MANGROVE_ENT                             = 33525, -    NPC_IRONROOT_LASHER                          = 33526, -    NPC_NATURES_BLADE                            = 33527, -    NPC_GUARDIAN_OF_LIFE                         = 33528, +    NPC_CORRUPTED_SERVITOR       = 33354, +    NPC_MISGUIDED_NYMPH          = 33355, +    NPC_GUARDIAN_LASHER          = 33430, +    NPC_FOREST_SWARMER           = 33431, +    NPC_MANGROVE_ENT             = 33525, +    NPC_IRONROOT_LASHER          = 33526, +    NPC_NATURES_BLADE            = 33527, +    NPC_GUARDIAN_OF_LIFE         = 33528,  };  enum UlduarGameObjects  { -    GO_KOLOGARN_CHEST_HERO                       = 195047, -    GO_KOLOGARN_CHEST                            = 195046, -    GO_KOLOGARN_BRIDGE                           = 194232, -    GO_KOLOGARN_DOOR                             = 194553, -    GO_THORIM_CHEST_HERO                         = 194315, -    GO_THORIM_CHEST                              = 194314, -    GO_HODIR_RARE_CACHE_OF_WINTER                = 194200, -    GO_HODIR_RARE_CACHE_OF_WINTER_HERO           = 194201, -    GO_HODIR_CHEST_HERO                          = 194308, -    GO_HODIR_CHEST                               = 194307, -    GO_FREYA_CHEST_HERO                          = 194325, -    GO_FREYA_CHEST                               = 194324, -    GO_LEVIATHAN_DOOR                            = 194905, -    GO_LEVIATHAN_GATE                            = 194630, -    GO_VEZAX_DOOR                                = 194750, -    GO_MOLE_MACHINE                              = 194316, -    GO_RAZOR_HARPOON_1                           = 194542, -    GO_RAZOR_HARPOON_2                           = 194541, -    GO_RAZOR_HARPOON_3                           = 194543, -    GO_RAZOR_HARPOON_4                           = 194519, -    GO_RAZOR_BROKEN_HARPOON                      = 194565, -    GO_HODIR_DOOR                                = 194634, -    GO_HODIR_ICE_DOOR                            = 194441, -    GO_ARCHIVUM_DOOR                             = 194556, +    GO_KOLOGARN_CHEST_HERO                = 195047, +    GO_KOLOGARN_CHEST                     = 195046, +    GO_KOLOGARN_BRIDGE                    = 194232, +    GO_KOLOGARN_DOOR                      = 194553, +    GO_THORIM_CHEST_HERO                  = 194315, +    GO_THORIM_CHEST                       = 194314, +    GO_HODIR_RARE_CACHE_OF_WINTER         = 194200, +    GO_HODIR_RARE_CACHE_OF_WINTER_HERO    = 194201, +    GO_HODIR_CHEST_HERO                   = 194308, +    GO_HODIR_CHEST                        = 194307, +    GO_FREYA_CHEST_HERO                   = 194325, +    GO_FREYA_CHEST                        = 194324, +    GO_LEVIATHAN_DOOR                     = 194905, +    GO_LEVIATHAN_GATE                     = 194630, +    GO_VEZAX_DOOR                         = 194750, +    GO_MOLE_MACHINE                       = 194316, +    GO_RAZOR_HARPOON_1                    = 194542, +    GO_RAZOR_HARPOON_2                    = 194541, +    GO_RAZOR_HARPOON_3                    = 194543, +    GO_RAZOR_HARPOON_4                    = 194519, +    GO_RAZOR_BROKEN_HARPOON               = 194565, +    GO_HODIR_DOOR                         = 194634, +    GO_HODIR_ICE_DOOR                     = 194441, +    GO_ARCHIVUM_DOOR                      = 194556,  }; -enum UlduarTowerEvents +enum LeviathanData  { -    EVENT_TOWER_OF_STORM_DESTROYED               = 21031, -    EVENT_TOWER_OF_FROST_DESTROYED               = 21032, -    EVENT_TOWER_OF_FLAMES_DESTROYED              = 21033, -    EVENT_TOWER_OF_LIFE_DESTROYED                = 21030, +    EVENT_TOWER_OF_STORM_DESTROYED      = 21031, +    EVENT_TOWER_OF_FROST_DESTROYED      = 21032, +    EVENT_TOWER_OF_FLAMES_DESTROYED     = 21033, +    EVENT_TOWER_OF_LIFE_DESTROYED       = 21030, +    ACTION_TOWER_OF_STORM_DESTROYED     = 1, +    ACTION_TOWER_OF_FROST_DESTROYED     = 2, +    ACTION_TOWER_OF_FLAMES_DESTROYED    = 3, +    ACTION_TOWER_OF_LIFE_DESTROYED      = 4, +    ACTION_MOVE_TO_CENTER_POSITION      = 10,  };  enum UlduarAchievementCriteriaIds  { -    CRITERIA_CON_SPEED_ATORY                     = 21597, -    CRITERIA_DISARMED                            = 21687, +    CRITERIA_CON_SPEED_ATORY    = 21597, +    CRITERIA_DISARMED           = 21687, +}; + +enum UlduarData +{ +    // Collosus (Leviathan) +    DATA_COLOSSUS                = 20, + +    // Razorscale +    DATA_EXPEDITION_COMMANDER, +    DATA_RAZORSCALE_CONTROL, + +    // XT-002 +    DATA_TOY_PILE_0, +    DATA_TOY_PILE_1, +    DATA_TOY_PILE_2, +    DATA_TOY_PILE_3, + +    // Kologarn +    DATA_LEFT_ARM, +    DATA_RIGHT_ARM, + +    // Hodir +    DATA_HODIR_RARE_CACHE,  };  template<class AI> diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp index 06ffc252efd..05b1e395d1e 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp @@ -97,7 +97,7 @@ class ulduar_teleporter : public GameObjectScript              player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);              if (InstanceScript* instance = gameObject->GetInstanceScript())              { -                if (instance->GetData(TYPE_COLOSSUS) == 2) //count of 2 collossus death +                if (instance->GetData(DATA_COLOSSUS) == 2) //count of 2 collossus death                      player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);                  if (instance->GetBossState(BOSS_LEVIATHAN) == DONE)                      player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);  | 
