[4.3.4] C++ Firelands

Hello,

I made a small adjustment of certain script, here is the code diff

Except that now when I copile I have this error, can you help me to correct my mistakes?

My errors is :

Erreur 1 error LNK1181: impossible d’ouvrir le fichier en entrée ‘…scriptsReleasescripts.lib’ SourceTrinityCoreBuild64srcserverworldserverLINK worldserver
Script :

— a/src/server/scripts/Kalimdor/CMakeLists.txt
+++ b/src/server/scripts/Kalimdor/CMakeLists.txt
@@ -117,8 +117,10 @@ set(scripts_STAT_SRCS
Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp
Kalimdor/HallsOfOrigination/boss_anraphet.cpp
Kalimdor/Firelands/instance_firelands.cpp

  • Kalimdor/Firelands/firelands.h
    Kalimdor/Firelands/boss_alysrazor.cpp
  • Kalimdor/Firelands/boss_baleroc.cpp
  • Kalimdor/Firelands/boss_ragnaros_cata.cpp
  • Kalimdor/Firelands/firelands.h

[CODE]

— a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
@@ -18,6 +18,7 @@
#include “ObjectMgr.h”
#include “ScriptMgr.h”
#include “ScriptedCreature.h”
+#include “SpellAuraEffects.h”
#include “SpellScript.h”
#include “MoveSplineInit.h”
#include “Cell.h”
@@ -26,6 +27,7 @@
#include “GridNotifiersImpl.h”
#include “firelands.h”

enum Texts
{
// Egg Pile[/CODE]

[CODE]

/*

  • Copyright (C) 2008-2012 Holystone Productions>
  • 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 the
  • Free Software Foundation; either version 2 of the License, or (at your
  • option) any later version.
  • This program is distributed in the hope that it will be useful, but WITHOUT
  • ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  • FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  • more details.
  • You should have received a copy of the GNU General Public License along
  • with this program. If not, see http://www.gnu.org/licenses/.
    */

#include “ObjectMgr.h”
#include “ScriptMgr.h”
#include “ScriptedCreature.h”
#include “SpellAuraEffects.h”
#include “GridNotifiers.h”
#include “firelands.h”

enum Spells
{
Spell_Blaze_of_Glory = 99252,
Spell_Incendiary_Soul = 99369,
Spell_Shards_of_Torment = 99259,
Spell_Torment = 99256,
Spell_Torment_Visual = 99255,
Spell_Tormented = 99257,
Spell_Wave_of_Torment = 99261,
Spell_Vital_Spark = 99262,
Spell_Vital_Flame = 99263,
Spell_Decimation_Blade = 99352,
Spell_Inferno_Blade = 99350,
};

enum Events
{
Event_Blaze_of_Glory = 1,
Event_Incendiary_Soul = 2,
Event_Shards_of_Torment = 3,
Event_Torment = 4,
Event_Tormented = 5,
Event_Wave_of_Torment = 6,
Event_Vital_Spark = 7,
Event_Vital_Flame = 8,
Event_Blades_of_Baleroc = 9,
Event_Change_Blade = 10,
// Spawn Shards
Event_Spawn_Shards = 11,
};

Position const SummonMelleRange[3] =
{
// Melle dps’s Range
{66.5319f, -73.8099f, 54.6200f, 0.5214f},
{67.8785f, -47.4203f, 55.1227f, 4.8764f},
{64.8196f, -61.0175f, 54.1135f, 6.2077f},
};

Position const SummonRangeRange[3] =
{
// Range dps’s Range
{40.8419f, -41.7327f, 54.9782f, 5.9249f},
{55.3210f, -22.2373f, 56.3639f, 5.0099f},
{44.5859f, -86.5407f, 54.8949f, 0.6274f},
};

class boss_baleroc : public CreatureScript
{
public:
boss_baleroc() : CreatureScript(“boss_baleroc”) { }

    struct boss_balerocAI : public BossAI
    {
        boss_balerocAI(Creature* creature) : BossAI(creature, DATA_BALEROC)
        {
		}

		void reset()
		{
			events.ScheduleEvent(Event_Blaze_of_Glory, 30000);
			events.ScheduleEvent(Event_Shards_of_Torment, 40000);
			events.ScheduleEvent(Event_Blades_of_Baleroc, 20000);
		}

		void EnterCombat(Unit* /*who*/)
        {
			events.ScheduleEvent(Event_Blaze_of_Glory, 30000);
			events.ScheduleEvent(Event_Shards_of_Torment, 40000);
			events.ScheduleEvent(Event_Blades_of_Baleroc, 20000);
		}

		void SummShard()
		{
			me->SummonCreature(NPC_Crystal_Shard, SummonMelleRange[urand(1, 3)]);
			me->SummonCreature(NPC_Crystal_Shard, SummonRangeRange[urand(1, 3)]);
		}

		void UpdateAI(uint32 const diff)
        {
			while (uint32 eventId = events.ExecuteEvent())
            {
				 switch (eventId)
                {
				 case Event_Blaze_of_Glory:
					 DoCast(Spell_Blaze_of_Glory);
					 events.ScheduleEvent(Event_Incendiary_Soul, 1000);
					 break;
				 case Event_Incendiary_Soul:
					 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
						 DoCast(target, Spell_Incendiary_Soul);
					 events.ScheduleEvent(Event_Blaze_of_Glory, 30000);
					 break;
				 case Event_Shards_of_Torment:
					 DoCast(Spell_Shards_of_Torment);
					 events.ScheduleEvent(Event_Spawn_Shards, 40000);
					 break;
				 case Event_Spawn_Shards:
					 SummShard();
					 break;
				 case Event_Blades_of_Baleroc:
					 DoCastVictim(Spell_Decimation_Blade);
					 events.ScheduleEvent(Event_Change_Blade, 20000);
					 break;
				 case Event_Change_Blade:
					 DoCastVictim(Spell_Inferno_Blade);
					 events.ScheduleEvent(Event_Blades_of_Baleroc, 20000);
			    }
			}

		DoMeleeAttackIfReady();
		}
};
CreatureAI* GetAI(Creature* creature) const
{
    return new boss_balerocAI(creature);
}

};

class Crystal_Shard : public CreatureScript
{
public:
Crystal_Shard() : CreatureScript(“Crystal_Shard”) { }

    struct Crystal_ShardAI : public BossAI
    {
        Crystal_ShardAI(Creature* creature) : BossAI(creature, DATA_Crystal_Shard)
		{
		}

		void EnterCombat(Unit* /*who*/)
        {
			events.ScheduleEvent(Event_Torment, 1500);
		}

		void UpdateAI(uint32 const diff)
        {
			while (uint32 eventId = events.ExecuteEvent())
            {
				 switch (eventId)
                {
				 case Event_Torment:
					 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 4))
					 {
						 me->AddAura(Spell_Torment, target);
					 }
					 break;
				 }
			}
		}
    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new Crystal_ShardAI(creature);
    }

};

void AddSC_boss_baleroc()
{
new boss_baleroc();
new Crystal_Shard();
}[/CODE]

[CODE]

/*

  • Copyright (C) 2008-2012 Holystone Productions>
  • Copyright (C) 2008-2012 Northstrider>
  • 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 the
  • Free Software Foundation; either version 2 of the License, or (at your
  • option) any later version.
  • This program is distributed in the hope that it will be useful, but WITHOUT
  • ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  • FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  • more details.
  • You should have received a copy of the GNU General Public License along
  • with this program. If not, see http://www.gnu.org/licenses/.
    Complete: 35%

Todo:
[100%]- Implement areatrigger for Intro
[100%]- Implement intro
[100%]- Fix stand state and visual of Ragnaros’ pool phase
[100%]- Sulfuras Smash
[100%]- Magma Trap
[100%]- Hand of Ragnaros
[100%]- Engulfing Flames
[100%]- Splitting Blast
[100%]- Phase 1
[90%]- Phase 2
[70%]- Phase 3
[89%]- Normal Mode Death at 10% hp
[75%]- Switch Phase
[95%]- World in Flames
[98%]- Molten Seed
[0%]- Living Meteor
[0%]- Heroic Mode Switch
[??%]- What’s left todo ?
*/

#include “ObjectMgr.h”
#include “ScriptMgr.h”
#include “ScriptedCreature.h”
#include “SpellAuraEffects.h”
#include “GridNotifiers.h”
#include “firelands.h”

enum Texts
{
SAY_ARRIVE = 0,
SAY_DEATH_NORMAL = 1,
SAY_DEATH_HEROIC = 2,
SAY_SLAY = 3,
SAY_ANNOUNCE_SPLIT = 4,
SAY_SUBMERGE = 5,
SAY_EMERGE_ANNOUNCE = 6,
SAY_EMERGE = 7,
SAY_MAGMA_TRAP = 8,
SAY_SULFURAS_SMASH = 9,
};

enum Spells
{
//Ragnaros
SPELL_BASE_VISUAL = 98860,
SPELL_BURNING_WOUNDS_AURA = 99401,
SPELL_SULFURAS_SMASH = 98710,
SPELL_SUMMON_SULFURAS_SMASH_TARGET = 98706,
SPELL_SULFURAS_SMASH_EXPLOSION = 98708,
SPELL_SULFURAS_SMASH_VISUAL = 98712,
SPELL_MAGMA_TRAP = 98164,
SPELL_HAND_OF_RAGNAROS = 98237,
SPELL_WRATH_OF_RAGNAROS = 98263,
SPELL_SUBMERGED = 98982,
SPELL_DISABLE_ANIM = 16245, // not correct but a good temp solution
SPELL_SPLITTING_BLOW_EAST = 98953,
SPELL_SPLITTING_BLOW_NORTH = 98952,
SPELL_SPLITTING_BLOW_WEST = 98951,
SPELL_ENGULFING_FLAMES_BOTTOM = 99236,
SPELL_ENGULFING_FLAMES_CENTER = 99235,
SPELL_ENGULFING_FLAMES_MELEE = 99172,
SPELL_ENGULFING_FLAMES_VISUAL_MELEE = 99216,
SPELL_ENGULFING_FLAMES_VISUAL_CENTER = 99217,
SPELL_ENGULFING_FLAMES_VISUAL_BOTTOM = 99218,
SPELL_ENGULFING_FLAMES_EXPLOSION = 99225,
SPELL_LIVING_METEOR_VISUAL = 99215,
SPELL_MOLTEN_SEED = 98498,
SPELL_MOLTEN_SEED_VISUAL = 98520,
SPELL_MOLTEN_SEED_TRIGGER = 98333,
SPELL_MOLTEN_SEED_ELEMENTAL_SPAWN = 100141,
SPELL_MOLTEN_SEED_EXPLOGEN = 98495,
SPELL_MOLTEN_INFERNO = 98518,

//Magma Trap
SPELL_MAGMA_TRAP_VISUAL                 = 98179,
SPELL_MAGMA_ERRUPTION                   = 98175,

//Sulfuras Hand of Ragnaros
SPELL_SULFURAS_KNOCKBACK                = 100455,
SPELL_FLAMES_OF_SULFURAS                = 101245,
SPELL_SULFURAS_AURA                     = 100456,

//Splitting Blow
SPELL_CALL_SONS                         = 99054,
SPELL_CALL_SONS_MISSILE                 = 99050,

//Lava Wave
SPELL_LAVA_WAVE_VISUAL                  = 98873,
SPELL_LAVA_WAVE_DAMAGE                  = 98928,

//Son of Flame
SPELL_HIT_ME                            = 100446,
SPELL_PRE_VISUAL                        = 100134,
SPELL_BURNING_SPEED                     = 98473,

};

enum Phases
{
PHASE_INTRO = 1,
PHASE_1 = 2,
PHASE_2 = 3,
PHASE_3 = 4,
PHASE_SUBMERGED = 5,
PHASE_HEROIC = 6,
PHASE_MASK_NO_VICTIM = 1 << PHASE_INTRO
};

enum Events
{
//Intro
EVENT_ARRIVE_1 = 1,
EVENT_ARRIVE_2 = 2,

//Encounter
EVENT_SULFURAS_SMASH_TRIGGER    = 3,
EVENT_SULFURAS_SMASH            = 4,
EVENT_MAGMA_TRAP                = 5,
EVENT_HAND_OF_RAGNAROS          = 6,
EVENT_WRATH_OF_RAGNAROS         = 7,
EVENT_EMERGE                    = 8,
EVENT_SUBMERGE                  = 9,
EVENT_SPLITTING_BLOW            = 10,
EVENT_ATTACK                    = 11,
EVENT_ENGULFING_FLAMES          = 12,
EVENT_SUMMON_WAVES              = 13,
EVENT_MOLTEN_SEED               = 14,
EVENT_LIVING_METEOR             = 15,
EVENT_DESPAWN                   = 16,
EVENT_MOLTEN_SEED_START         = 17,
EVENT_MOLTEN_SEED_VISUAL        = 18,
EVENT_MOLTEN_SEED_END           = 19,
//Magma Trap
EVENT_PREPARE                   = 30,
//Engulfing Flames
EVENT_EXPLODE                   = 31,
//Sulfuras
EVENT_SUMMON_SONS               = 32,
//Son of Flame
EVENT_ACTIVATE                  = 33,
EVENT_TRIGGER                   = 34,
EVENT_BOOM                      = 35,

};

enum MovePoints
{
POINT_HAMMER = 1,
};

Position const RagnarosSummonPosition = {1075.201f, -57.84896f, 55.42427f, 3.159046f };
Position const SplittingTriggerNorth = {1023.55f, -57.158f, 55.4215f, 3.12414f };
Position const SplittingTriggerEast = {1035.45f, -25.3646f, 55.4924f, 2.49582f };
Position const SplittingTriggerWest = {1036.27f, -89.2396f, 55.5098f, 3.83972f };
Position const CachePosition = {1016.043f, -57.436f, 55.333f, 3.151f };

const Position HammerMiddleSummons[] =
{
//West Side
{1008.976f, -87.395f, 55.452f, 1.030f},
{1037.130f, -101.037f, 55.544f, 2.130f},
{1057.177f, -103.765f, 55.342f, 2.330f},
{1076.355f, -101.017f, 55.342f, 2.677f},
//East Side
{1012.901f, -26.540f, 55.482f, 4.874f},
{1037.587f, -13.490f, 55.555f, 4.658f},
{1055.858f, -11.348f, 55.346f, 3.927f},
{1074.467f, -12.893f, 55.342f, 3.715f},
};

const Position HammerWestSummons[] =
{
//West Side
{999.768f, -69.833f, 55.485f, 5.887f},
{1057.177f, -103.765f, 55.342f, 2.330f},
{1076.355f, -101.017f, 55.342f, 2.677f},
//East Side
{999.505f, -45.725f, 55.476f, 5.435f},
{1012.901f, -26.540f, 55.482f, 4.874f},
{1037.587f, -13.490f, 55.555f, 4.658f},
{1055.858f, -11.348f, 55.346f, 3.927f},
{1074.467f, -12.893f, 55.342f, 3.715f},
};

const Position HammerEastSummons[] =
{
//West Side
{999.768f, -69.833f, 55.485f, 5.887f},
{1008.976f, -87.395f, 55.452f, 1.030f},
{1037.130f, -101.037f, 55.544f, 2.130f},
{1057.177f, -103.765f, 55.342f, 2.330f},
{1076.355f, -101.017f, 55.342f, 2.677f},
//East Side
{999.505f, -45.725f, 55.476f, 5.435f},
{1055.858f, -11.348f, 55.346f, 3.927f},
{1074.467f, -12.893f, 55.342f, 3.715f},
};

const Position EngulfingFlamesMelee[] =
{
{1086.55f, -18.0885f, 55.4228f, 1.57080f},
{1091.83f, -21.9254f, 55.4241f, 4.71239f},
{1092.52f, -92.3924f, 55.4241f, 4.71239f},
{1079.15f, -15.5312f, 55.4230f, 4.71239f},
{1078.01f, -97.7760f, 55.4227f, 1.57080f},
{1065.44f, -17.7049f, 55.4250f, 5.00910f},
{1063.59f, -97.0573f, 55.4934f, 1.23918f},
{1051.80f, -24.0903f, 55.4258f, 5.41052f},
{1049.27f, -90.6892f, 55.4259f, 0.89011f},
{1042.34f, -32.1059f, 55.4254f, 5.68977f},
{1041.26f, -81.4340f, 55.4240f, 0.57595f},
{1036.82f, -44.3385f, 55.4425f, 6.02139f},
{1036.34f, -69.8281f, 55.4425f, 0.31415f},
{1034.76f, -63.9583f, 55.4397f, 6.26573f},
{1033.93f, -57.0920f, 55.4225f, 6.26573f},
{1086.42f, -96.7812f, 55.4226f, 1.57080f},
};

const Position EngulfingFlamesRange[] =
{
{1035.17f, -125.646f, 55.4471f, 0.0f},
{1032.48f, 13.2708f, 55.4469f, 0.0f},
{1023.83f, 12.9774f, 55.4470f, 0.0f},
{1023.05f, -128.257f, 55.4471f, 0.0f},
{1019.60f, 7.76910f, 55.4470f, 0.0f},
{1018.29f, -117.833f, 55.4471f, 0.0f},
{1012.70f, -4.83333f, 55.6050f, 0.0f},
{1009.56f, -108.161f, 55.4697f, 0.0f},
{1005.80f, -8.81771f, 55.4672f, 0.0f},
{1000.81f, -14.5069f, 55.4566f, 0.0f},
{999.755f, -98.4792f, 55.4426f, 0.0f},
{991.799f, -25.0955f, 55.4441f, 0.0f},
{991.738f, -87.1632f, 55.4445f, 0.0f},
{989.866f, -66.0868f, 55.4331f, 0.0f},
{988.208f, -50.3646f, 55.4291f, 0.0f},
{986.608f, -37.7656f, 55.4411f, 0.0f},
{985.180f, -77.3785f, 55.4409f, 0.0f},
{980.927f, -58.2656f, 55.4542f, 0.0f},
};

const Position EngulfingFlamesCenter[] =
{
{1069.66f, -4.53993f, 55.4308f, 0.0f},
{1062.94f, -4.34201f, 55.5682f, 0.0f},
{1062.13f, -109.005f, 55.4259f, 0.0f},
{1055.34f, 5.06771f, 55.4471f, 0.0f},
{1057.03f, -4.10417f, 55.4258f, 0.0f},
{1049.74f, -118.396f, 55.5661f, 0.0f},
{1052.59f, -120.562f, 55.4563f, 0.0f},
{1049.33f, 5.0434f, 55.4633f, 0.0f},
{1049.98f, -7.22396f, 55.4537f, 0.0f},
{1049.66f, -104.906f, 55.4556f, 0.0f},
{1035.91f, 0.909722f, 55.4470f, 0.0f},
{1035.56f, -114.156f, 55.4471f, 0.0f},
{1038.53f, -100.254f, 55.6012f, 0.0f},
{1036.90f, -14.6181f, 55.5715f, 0.0f},
{1016.99f, -57.5642f, 55.4133f, 0.0f},
{1030.22f, -92.8403f, 55.4344f, 0.0f},
{1024.45f, -8.13889f, 55.4470f, 0.0f},
{1024.45f, -8.13889f, 55.4470f, 0.0f},
{1024.91f, -106.852f, 55.4471f, 0.0f},
{1025.34f, -25.8472f, 55.4069f, 0.0f},
{1025.29f, -86.2326f, 55.4071f, 0.0f},
{1021.84f, -33.7483f, 55.4239f, 0.0f},
{1021.49f, -79.6076f, 55.4261f, 0.0f},
{1018.47f, -43.7674f, 55.4218f, 0.0f},
{1069.91f, -109.651f, 55.4277f, 0.0f},
{1014.15f, -17.3281f, 55.4629f, 0.0f},
{1018.29f, -70.1875f, 55.4231f, 0.0f},
{1012.09f, -97.5122f, 55.4570f, 0.0f},
{1006.10f, -27.3681f, 55.4277f, 0.0f},
{1005.49f, -86.4566f, 55.4275f, 0.0f},
{1002.72f, -40.7431f, 55.4063f, 0.0f},
{1003.44f, -74.0243f, 55.4063f, 0.0f},
{1003.44f, -74.0243f, 55.4063f, 0.0f},
{1003.07f, -66.4913f, 55.4067f, 0.0f},
{1002.21f, -49.7049f, 55.4075f, 0.0f},
{1002.00f, -58.2396f, 55.4331f, 0.0f},
};

class at_sulfuron_keep : public AreaTriggerScript
{
public:
at_sulfuron_keep() : AreaTriggerScript(“at_sulfuron_keep”) { }

    bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/)
    {
        if (InstanceScript* instance = player->GetInstanceScript())
            if (!ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_RAGNAROS)))
                player->SummonCreature(BOSS_RAGNAROS, RagnarosSummonPosition, TEMPSUMMON_MANUAL_DESPAWN, 0);
        return true;
    }

};

class boss_ragnaros_cata : public CreatureScript
{
public:
boss_ragnaros_cata() : CreatureScript(“boss_ragnaros_cata”) { }

struct boss_ragnaros_cataAI : public BossAI
{
    boss_ragnaros_cataAI(Creature* creature) : BossAI(creature, DATA_RAGNAROS)
    {
        instance = creature->GetInstanceScript();
        Arrived = false;
        Killed = false;
        Submerged = 0;
    }

    InstanceScript* instance;
    bool Arrived;
    bool Killed;
    uint8 Submerged;

    void Reset()
    {
        if (Arrived)
        {
            me->AddAura(SPELL_BASE_VISUAL, me);
            events.SetPhase(PHASE_1);
        }

        _Reset();
        instance->SetBossState(DATA_RAGNAROS, NOT_STARTED);
        instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
        me->AddAura(SPELL_BURNING_WOUNDS_AURA, me);
        me->SetReactState(REACT_PASSIVE);
        me->HandleEmoteCommand(0);
        me->SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
        Submerged = 0;
        Killed = false;
        events.Reset();
    }

    void EnterCombat(Unit* /*who*/)
    {
        me->SetReactState(REACT_AGGRESSIVE);
        instance->SetBossState(DATA_RAGNAROS, IN_PROGRESS);
        instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 30000, 0, PHASE_1);
        events.ScheduleEvent(EVENT_MAGMA_TRAP, 15000, 0, PHASE_1);
        events.ScheduleEvent(EVENT_HAND_OF_RAGNAROS, 25000, 0, PHASE_1);
        events.ScheduleEvent(EVENT_WRATH_OF_RAGNAROS, 6000, 0, PHASE_1);
    }

    void JustDied(Unit* /*killer*/)
    {
        if (IsHeroic())
        {
            Talk(SAY_DEATH_HEROIC);
            instance->SetBossState(DATA_RAGNAROS, DONE);
            instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
        }
    }

    void IsSummonedBy(Unit* /*summoner*/)
    {
        if (!Arrived)
        {
            me->SetVisible(false);
            me->setActive(true);
            me->SetDisableGravity(true);
            me->SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
            events.SetPhase(PHASE_INTRO);
            events.ScheduleEvent(EVENT_ARRIVE_1, 100, 0, PHASE_INTRO);
            Arrived = true;
        }
    }

    void JustSummoned(Creature* summon)
    {
        switch (summon->GetEntry())
        {
            case NPC_SULFURAS_SMASH_TARGET_1:
                summon->SetReactState(REACT_PASSIVE);
                summon->SetDisplayId(summon->GetCreatureTemplate()->Modelid2);
                summon->AddAura(SPELL_SULFURAS_SMASH_VISUAL, summon);
                break;
            case NPC_MAGMA_TRAP:
                summon->AddAura(SPELL_MAGMA_TRAP_VISUAL, summon);
                break;
            case NPC_SPLITTING_BLOW_TRIGGER:
                summon->SetReactState(REACT_PASSIVE);
                summon->SetDisplayId(summon->GetCreatureTemplate()->Modelid2);
                break;
            case NPC_ENGULFING_FLAMES_TRIGGER:
                summon->AddAura(SPELL_ENGULFING_FLAMES_VISUAL_MELEE, summon);
                summon->SetDisplayId(summon->GetCreatureTemplate()->Modelid2);
                summon->SetReactState(REACT_PASSIVE);
                break;
        }
    }

    void KilledUnit(Unit* /*Killed*/)
    {
        Talk(SAY_SLAY);
    }

	void SpellHitTarget(Unit* target, SpellInfo const* spell)
        {
            switch (spell->Id)
            {
                case SPELL_MOLTEN_SEED:
					{
						target->CastCustomSpell(SPELL_MOLTEN_SEED_ELEMENTAL_SPAWN, SPELLVALUE_BASE_POINT0, 1, me, true);
					}
                    break;
            }
        }

    void UpdateAI(uint32 const diff)
    {
        if (!(events.GetPhaseMask() & PHASE_MASK_NO_VICTIM))
            if (!UpdateVictim())
                return;

        if (me->HealthBelowPct(70))
        {
            if (Submerged == 0)
            {
                Talk(SAY_ANNOUNCE_SPLIT);
                Talk(SAY_SUBMERGE);
                switch (urand(0, 2))
                {
                    case 0: // Splitting Blow East
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerEast, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_EAST, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerEastSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                    case 1: // Splitting Blow West
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerWest, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_WEST, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerWestSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                    case 2: // Splitting Blow North
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerNorth, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_NORTH, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerMiddleSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                }

                me->AttackStop();
                me->SetReactState(REACT_PASSIVE);
                events.SetPhase(PHASE_SUBMERGED);
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
                events.ScheduleEvent(EVENT_SUBMERGE, 12000, 0, PHASE_SUBMERGED);
                events.ScheduleEvent(EVENT_EMERGE, 47000, 0, PHASE_SUBMERGED);
                Submerged++;
            }
        }

        if (me->HealthBelowPct(40))
        {
            if (Submerged == 1)
            {
                Talk(SAY_ANNOUNCE_SPLIT);
                Talk(SAY_SUBMERGE);
                switch (urand(0, 2))
                {
                    case 0: // Splitting Blow East
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerEast, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_EAST, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerEastSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                    case 1: // Splitting Blow West
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerWest, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_WEST, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerWestSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                    case 2: // Splitting Blow North
                    {
                        me->CastStop();
                        if (Creature* trigger = me->SummonCreature(NPC_SPLITTING_BLOW_TRIGGER, SplittingTriggerNorth, TEMPSUMMON_TIMED_DESPAWN, 12000))
                        {
                            me->SetFacingToObject(trigger);
                            DoCastAOE(SPELL_SPLITTING_BLOW_NORTH, false);
                            for (uint32 x = 0; x<8; ++x)
                                me->SummonCreature(NPC_SON_OF_FLAME, HammerMiddleSummons[x], TEMPSUMMON_TIMED_DESPAWN, 45000);
                        }
                        break;
                    }
                }

                me->AttackStop();
                me->SetReactState(REACT_PASSIVE);
                events.SetPhase(PHASE_SUBMERGED);
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
                events.ScheduleEvent(EVENT_SUBMERGE, 12000, 0, PHASE_SUBMERGED);
                events.ScheduleEvent(EVENT_EMERGE, 47000, 0, PHASE_SUBMERGED);
                Submerged++;
            }
        }

        if (me->HealthBelowPct(10))
        {
            if (!Killed)
            {
                Talk(SAY_DEATH_NORMAL);
                me->AttackStop();
                me->CastStop();
                me->SetReactState(REACT_PASSIVE);
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
                me->RemoveAllAuras();
                me->SummonGameObject(GO_CACHE_OF_THE_FIRELORD, 1016.043f, -57.436f, 55.333f, 3.151f, 0, 0, 0, 0, 70000);
                instance->SetBossState(DATA_RAGNAROS, DONE);
                events.ScheduleEvent(EVENT_DESPAWN, 2000);
                me->HandleEmoteCommand(EMOTE_ONESHOT_SUBMERGE); // Temp until i got the correct animkit id
                Killed = true;
            }
        }

        events.Update(diff);

        if (me->HasUnitState(UNIT_STATE_CASTING))
            return;

        while (uint32 eventId = events.ExecuteEvent())
        {
            switch (eventId)
            {
                case EVENT_ARRIVE_1:
                    me->SetVisible(true);
                    me->PlayOneShotAnimKit(1467);
                    Talk(SAY_ARRIVE);
                    events.ScheduleEvent(EVENT_ARRIVE_2, 6500, 0, PHASE_INTRO);
                    break;
                case EVENT_ARRIVE_2:
                    me->PlayOneShotAnimKit(1468);
                    me->AddAura(SPELL_BASE_VISUAL, me);
                    me->AddAura(SPELL_BURNING_WOUNDS_AURA, me);
                    events.SetPhase(PHASE_1);
                    break;
                case EVENT_SULFURAS_SMASH_TRIGGER:
                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true, 0))
                    {
                        float distance = me->GetExactDist2d(target);
                        if (distance == 0)
                            distance = 0.01f;
                        float x = me->GetPositionX();
                        x = x + (target->GetPositionX() - x) * me->GetCombatReach() / distance;
                        float y = me->GetPositionY();
                        y = y + (target->GetPositionY() - y) * me->GetCombatReach() / distance;
                        Creature* trigger = me->SummonCreature(NPC_SULFURAS_SMASH_TARGET_1, x, y, target->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 20000);
                        me->SetFacingToObject(trigger);
                    }
                    Talk(SAY_SULFURAS_SMASH);
                    if (Submerged == 0)
                    {
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 30000, 0, PHASE_1);
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH, 100, 0, PHASE_1);
                    }
                    else if (Submerged == 1)
                    {
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 40000, 0, PHASE_2);
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH, 100, 0, PHASE_2);
                    }
                    else if (Submerged == 2)
                    {
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 40000, 0, PHASE_3);
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH, 100, 0, PHASE_3);
                    }
                    break;
                case EVENT_SULFURAS_SMASH:
                    if (Creature* trigger = me->FindNearestCreature(NPC_SULFURAS_SMASH_TARGET_1, 100.0f))
                    {
                        me->AttackStop();
                        me->SetReactState(REACT_PASSIVE);
                        me->SetFacingToObject(trigger);
                        DoCast(trigger, SPELL_SULFURAS_SMASH);
                        events.ScheduleEvent(EVENT_ATTACK, 7000);
                    }
                    events.ScheduleEvent(EVENT_SUMMON_WAVES, 4000);
                    break;
                case EVENT_SUMMON_WAVES:
                    if (Creature* summoner = me->FindNearestCreature(NPC_SULFURAS_SMASH_TARGET_1, 100.0f))
                    {
                        if (Creature* wave1 = summoner->SummonCreature(NPC_LAVA_WAVE, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ(), summoner->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 10000))
                        {
                            wave1->setFaction(14);
                            wave1->SetReactState(REACT_PASSIVE);
                            wave1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
                            wave1->SetDisplayId(wave1->GetCreatureTemplate()->Modelid2);
                            wave1->AddAura(SPELL_LAVA_WAVE_VISUAL, wave1);
                            wave1->GetMotionMaster()->MovePoint(0, wave1->GetPositionX()+cos(wave1->GetOrientation())*50, wave1->GetPositionY()+sin(wave1->GetOrientation())*50, wave1->GetPositionZ());
                        }

                        if (Creature* wave2 = summoner->SummonCreature(NPC_LAVA_WAVE, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ(), summoner->GetOrientation() + M_PI/2, TEMPSUMMON_TIMED_DESPAWN, 10000))
                        {
                            wave2->setFaction(14);
                            wave2->SetReactState(REACT_PASSIVE);
                            wave2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
                            wave2->SetDisplayId(wave2->GetCreatureTemplate()->Modelid2);
                            wave2->AddAura(SPELL_LAVA_WAVE_VISUAL, wave2);
                            wave2->GetMotionMaster()->MovePoint(0, wave2->GetPositionX()+cos(wave2->GetOrientation())*60, wave2->GetPositionY()+sin(wave2->GetOrientation())*60, wave2->GetPositionZ());
                        }

                        if (Creature* wave3 = summoner->SummonCreature(NPC_LAVA_WAVE, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ(), summoner->GetOrientation() - M_PI/2, TEMPSUMMON_TIMED_DESPAWN, 10000))
                        {
                            wave3->setFaction(14);
                            wave3->SetReactState(REACT_PASSIVE);
                            wave3->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
                            wave3->SetDisplayId(wave3->GetCreatureTemplate()->Modelid2);
                            wave3->AddAura(SPELL_LAVA_WAVE_VISUAL, wave3);
                            wave3->GetMotionMaster()->MovePoint(0, wave3->GetPositionX()+cos(wave3->GetOrientation())*60, wave3->GetPositionY()+sin(wave3->GetOrientation())*60, wave3->GetPositionZ());
                        }
                    }
                    break;
                case EVENT_MAGMA_TRAP:
                    if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0))
                        DoCast(target, SPELL_MAGMA_TRAP);
                    Talk(SAY_MAGMA_TRAP);
                    events.ScheduleEvent(EVENT_MAGMA_TRAP, 25000, 0, PHASE_1);
                    break;
                case EVENT_HAND_OF_RAGNAROS:
                    DoCastAOE(SPELL_HAND_OF_RAGNAROS);
                    events.ScheduleEvent(EVENT_HAND_OF_RAGNAROS, 25000, 0, PHASE_1);
                    break;
                case EVENT_WRATH_OF_RAGNAROS:
                    DoCastAOE(SPELL_WRATH_OF_RAGNAROS);
                    events.ScheduleEvent(EVENT_WRATH_OF_RAGNAROS, 36000, 0, PHASE_1);
                    break;
                case EVENT_SUBMERGE:
                    me->AddAura(SPELL_DISABLE_ANIM, me);
                    me->AddAura(SPELL_SUBMERGED, me);
                    me->RemoveAurasDueToSpell(SPELL_BASE_VISUAL);
                    break;
                case EVENT_EMERGE:
                    me->RemoveAllAuras();
                    me->SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
                    me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
                    me->PlayOneShotAnimKit(1465);
                    if (Submerged == 1)
                    {
                        events.SetPhase(PHASE_2);
                        events.ScheduleEvent(EVENT_ATTACK, 4500, 0, PHASE_2);
                        events.ScheduleEvent(EVENT_ENGULFING_FLAMES, 40000, 0, PHASE_2);
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 15000, 0, PHASE_2);
						events.ScheduleEvent(EVENT_MOLTEN_SEED_START, 50000, PHASE_2);

                    }
                    if (Submerged == 2)
                    {
                        events.SetPhase(PHASE_3);
                        events.ScheduleEvent(EVENT_ATTACK, 4500, 0, PHASE_3);
                        events.ScheduleEvent(EVENT_ENGULFING_FLAMES, 30000, 0, PHASE_3);
                        events.ScheduleEvent(EVENT_SULFURAS_SMASH_TRIGGER, 15000, 0, PHASE_3);
						events.ScheduleEvent(EVENT_MOLTEN_SEED_START, 50000, PHASE_3);
                    }
                    Talk(SAY_EMERGE);
                    break;
				case EVENT_MOLTEN_SEED_START:
					DoCastAOE(SPELL_MOLTEN_SEED);
					DoCastAOE(SPELL_MOLTEN_SEED_EXPLOGEN);
					DoCastAOE(SPELL_MOLTEN_SEED_ELEMENTAL_SPAWN);
					events.ScheduleEvent(EVENT_MOLTEN_SEED_START, 50000, PHASE_2);
					break;
                case EVENT_ATTACK:
                    me->SetReactState(REACT_AGGRESSIVE);
                    me->AddAura(SPELL_BASE_VISUAL, me);
                    me->AddAura(SPELL_BURNING_WOUNDS_AURA, me);
                    if (Creature* hammer = me->FindNearestCreature(NPC_SULFURAS_HAMMER, 50.0f))
                        hammer->DespawnOrUnsummon(1);
                    break;
                case EVENT_ENGULFING_FLAMES:
                    switch (urand(0, 2))
                    {
                        case 0: // Melee
                            {
                                for (uint32 x = 0; x<16; ++x)
                                    me->SummonCreature(NPC_ENGULFING_FLAMES_TRIGGER, EngulfingFlamesMelee[x], TEMPSUMMON_TIMED_DESPAWN, 20000);
                                DoCastAOE(SPELL_ENGULFING_FLAMES_MELEE);
                                break;
                            }
                        case 1: // Range
                            {
                                for (uint32 x = 0; x<19; ++x)
                                    me->SummonCreature(NPC_ENGULFING_FLAMES_TRIGGER, EngulfingFlamesRange[x], TEMPSUMMON_TIMED_DESPAWN, 20000);
                                DoCastAOE(SPELL_ENGULFING_FLAMES_BOTTOM);
                                break;
                            }
                        case 2: // Center
                            {
                                for (uint32 x = 0; x<36; ++x)
                                    me->SummonCreature(NPC_ENGULFING_FLAMES_TRIGGER, EngulfingFlamesCenter[x], TEMPSUMMON_TIMED_DESPAWN, 20000);
                                DoCastAOE(SPELL_ENGULFING_FLAMES_CENTER);
                                break;
                            }
                            break;
                    }
                    if (Submerged == 1)
                        events.ScheduleEvent(EVENT_ENGULFING_FLAMES, 40000, 0, PHASE_2);
                    else if (Submerged == 2)
                        events.ScheduleEvent(EVENT_ENGULFING_FLAMES, 30000, 0, PHASE_3);
                    break;
                case EVENT_DESPAWN:
                    me->AddAura(SPELL_DISABLE_ANIM, me);
                    me->AddAura(SPELL_SUBMERGED, me);
                    me->DespawnOrUnsummon(1000);
                    break;
                default:
                    break;
            }
        }

        DoMeleeAttackIfReady();
    }
};

CreatureAI* GetAI(Creature* creature) const
{
    return new boss_ragnaros_cataAI(creature);
}

};

class npc_molten_seed : public CreatureScript
{
public:
npc_molten_seed() : CreatureScript(“npc_molten_seed”) { }

    struct npc_molten_seedAI : public ScriptedAI
    {
        npc_molten_seedAI(Creature* creature) : ScriptedAI(creature)
        {
			exploded = false;
			summoned = false;
		}

		void IsSummonedBy(Unit*)
		{
			if (!summoned)
			{
				summoned = true;
				DoCast(SPELL_MOLTEN_SEED_VISUAL);
				events.ScheduleEvent(EVENT_MOLTEN_SEED_END, 10000);
			}
		}

		 void UpdateAI(uint32 const diff)
        {
            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
				case EVENT_MOLTEN_SEED_END:
					DoCast(SPELL_MOLTEN_INFERNO);
					me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
					break;
				}
			}
		 }
			private:
        EventMap events;
        bool exploded;
        bool ready;
        bool summoned;

    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_molten_seedAI(creature);
    }

};

class npc_magma_trap : public CreatureScript
{
public:
npc_magma_trap() : CreatureScript(“npc_magma_trap”) { }

    struct npc_magma_trapAI : public ScriptedAI
    {
        npc_magma_trapAI(Creature* creature) : ScriptedAI(creature)
        {
            exploded = false;
            ready = false;
            summoned = false;
        }

        void IsSummonedBy(Unit* /*summoner*/)
        {
            if (!summoned)
            {
                summoned = true;
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
                events.ScheduleEvent(EVENT_PREPARE, 5000);
            }
        }

        void MoveInLineOfSight(Unit* who)
        {
            if (ready && !exploded && me->HasAura(SPELL_MAGMA_TRAP_VISUAL) && me->IsWithinDistInMap(who, 7.0f) && who->GetTypeId() == TYPEID_PLAYER)
            {
                DoCastAOE(SPELL_MAGMA_ERRUPTION);
                me->RemoveAurasDueToSpell(SPELL_MAGMA_TRAP_VISUAL);
                me->DespawnOrUnsummon(5000);
                exploded = true;
            }
        }

        void UpdateAI(uint32 const diff)
        {
            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_PREPARE:
                        ready = true;
                        break;
                }
            }
        }

    private:
        EventMap events;
        bool exploded;
        bool ready;
        bool summoned;

    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_magma_trapAI(creature);
    }

};

class npc_engulfing_flame : public CreatureScript
{
public:
npc_engulfing_flame() : CreatureScript(“npc_engulfing_flame”) { }

    struct npc_engulfing_flameAI : public ScriptedAI
    {
        npc_engulfing_flameAI(Creature* creature) : ScriptedAI(creature)
        {
        }

        void IsSummonedBy(Unit* /*summoner*/)
        {
            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
            events.ScheduleEvent(EVENT_EXPLODE, 3000);
        }

        void UpdateAI(uint32 const diff)
        {
            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_EXPLODE:
                        DoCastAOE(SPELL_ENGULFING_FLAMES_EXPLOSION);
                        break;
                }
            }
        }

    private:
        EventMap events;
    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_engulfing_flameAI(creature);
    }

};

class npc_sulfuras_hammer : public CreatureScript
{
public:
npc_sulfuras_hammer() : CreatureScript(“npc_sulfuras_hammer”) { }

    struct npc_sulfuras_hammerAI : public ScriptedAI
    {
        npc_sulfuras_hammerAI(Creature* creature) : ScriptedAI(creature)
        {
            summoned = false;
        }

        void IsSummonedBy(Unit* /*summoner*/)
        {
            if (!summoned)
            {
                summoned = true;
                DoCastAOE(SPELL_SULFURAS_KNOCKBACK);
                me->SetReactState(REACT_PASSIVE);
                me->AddAura(SPELL_SULFURAS_AURA, me);
                me->setFaction(14);
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
                me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
            }
        }

        void UpdateAI(uint32 const diff)
        {
            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_SUMMON_SONS:
                        break;
                }
            }
        }

    private:
        EventMap events;
        bool summoned;
    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_sulfuras_hammerAI(creature);
    }

};

class npc_son_of_flame : public CreatureScript
{
public:
npc_son_of_flame() : CreatureScript(“npc_son_of_flame”) { }

    struct npc_son_of_flameAI : public ScriptedAI
    {
        npc_son_of_flameAI(Creature* creature) : ScriptedAI(creature)
        {
            slowed = false;
        }

        void IsSummonedBy(Unit* /*summoner*/)
        {
            me->SetReactState(REACT_PASSIVE);
            DoCastAOE(SPELL_PRE_VISUAL);
            events.ScheduleEvent(EVENT_TRIGGER, 9000);
        }

        void MovementInform(uint32 type, uint32 pointId)
        {
            switch (pointId)
            {
                case POINT_HAMMER:
                    events.ScheduleEvent(EVENT_BOOM, 1);
                    break;
            }
        }

        void UpdateAI(uint32 const diff)
        {
            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_TRIGGER:
                        {
                            if (Creature* trigger = me->FindNearestCreature(NPC_SULFURAS_HAMMER, 100.0f))
                                trigger->CastSpell(me, SPELL_CALL_SONS_MISSILE);
                        }
                        events.ScheduleEvent(EVENT_ACTIVATE, 8000);
                        break;
                    case EVENT_ACTIVATE:
                        me->RemoveAllAuras();
                        me->AddAura(SPELL_BURNING_SPEED, me);
                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NON_ATTACKABLE);
                        if (Creature* target = me->FindNearestCreature(NPC_SULFURAS_HAMMER, 100.0f))
                            me->GetMotionMaster()->MovePoint(POINT_HAMMER, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
                        break;
                    case EVENT_BOOM:
                        {
                            if (Creature* target = me->FindNearestCreature(NPC_SULFURAS_HAMMER, 100.0f))
                                target->CastSpell(target, SPELL_FLAMES_OF_SULFURAS);
                            me->DespawnOrUnsummon(1);
                            break;
                        }
                }
            }

            if (me->HealthBelowPct(50) && !slowed)
            {
                me->RemoveAllAuras();
                me->SetWalk(true);
                slowed = true;
            }
        }

    private:
        EventMap events;
        bool slowed;
    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_son_of_flameAI(creature);
    }

};

class spell_splitting_blow : public SpellScriptLoader
{
public:
spell_splitting_blow() : SpellScriptLoader(“spell_splitting_blow”) { }

class spell_splitting_blow_SpellScript : public SpellScript
{
    PrepareSpellScript(spell_splitting_blow_SpellScript);

    bool Validate(SpellInfo const* spellEntry)
    {
        if (!sSpellMgr->GetSpellInfo(99056))
            return false;
        return true;
    }

    void HandleScriptEffect(SpellEffIndex /*effIndex*/)
    {
        GetHitUnit()->CastSpell(GetHitUnit(), 99056, true);
    }

    void Register()
    {
        OnEffectHitTarget += SpellEffectFn(spell_splitting_blow_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
    }
};

SpellScript* GetSpellScript() const
{
    return new spell_splitting_blow_SpellScript();
}

};

void AddSC_boss_ragnaros_cata()
{
new at_sulfuron_keep();
new boss_ragnaros_cata();
new npc_molten_seed();
new npc_magma_trap();
new npc_engulfing_flame();
new npc_sulfuras_hammer();
new npc_son_of_flame();
new spell_splitting_blow();
}[/CODE]


index 330158d..d6653bc 100644
--- a/src/server/scripts/Kalimdor/Firelands/firelands.h
+++ b/src/server/scripts/Kalimdor/Firelands/firelands.h
@@ -18,6 +18,8 @@
 #ifndef FIRELANDS_H_
 #define FIRELANDS_H_
 
+#define MAX_ENCOUNTERS 7
+
 #include "Map.h"
 #include "Creature.h"
 
@@ -25,25 +27,51 @@
 
 uint32 const EncounterCount = 7;
 
-enum DataTypes
+enum Datas
+{
+    DATA_BETHILAC               = 1,
+    DATA_LORD_RYOLITH           = 2,
+    DATA_ALYSRAZAR              = 3,
+    DATA_SHANNOX                = 4,
+    DATA_BALOROC                = 5,
+    DATA_MAJORDOMUS_STANGEHELM  = 6,
+    DATA_RAGNAROS               = 7,
+	DATA_BALEROC                = 8,
+	// Adds
+	DATA_Crystal_Shard          = 9,
+};
+
+enum GameObjectIds
 {
-    DATA_BETH_TILAC         = 0,
-    DATA_LORD_RHYOLITH      = 1,
-    DATA_SHANNOX            = 2,
-    DATA_ALYSRAZOR          = 3,
-    DATA_BALEROC            = 4,
-    DATA_MAJORDOMO_STAGHELM = 5,
-    DATA_RAGNAROS           = 6,
+    GO_RAGNAROS_DOOR            = 209073,
+    GO_RAGNAROS_PLATFORM        = 208835,
+    GO_CACHE_OF_THE_FIRELORD    = 208967,
 };
 
 enum CreatureIds
 {
-    NPC_BLAZING_MONSTROSITY_LEFT    = 53786,
-    NPC_BLAZING_MONSTROSITY_RIGHT   = 53791,
-    NPC_EGG_PILE                    = 53795,
-    NPC_HARBINGER_OF_FLAME          = 53793,
-    NPC_MOLTEN_EGG_TRASH            = 53914,
-    NPC_SMOULDERING_HATCHLING       = 53794,
+    // Ragnaros
+    BOSS_RAGNAROS                   = 52409,
+    NPC_ENGULFING_FLAMES_TRIGGER    = 53485,
+    NPC_SPLITTING_BLOW_TRIGGER      = 53393,
+    NPC_MAGMA_POOL_TRIGGER          = 53729,
+    NPC_PLATFORM_TRIGGER            = 53952,
+    NPC_MAGMA_TRAP                  = 53086,
+    NPC_SULFURAS_HAMMER             = 53420,
+    NPC_SULFURAS_FLAME_WALL         = 38327,
+    NPC_SULFURAS_SMASH_TARGET_1     = 53268,
+    NPC_LAVA_WAVE                   = 53363,
+    NPC_SON_OF_FLAME                = 53140,
+	// Baleroc
+	BOSS_BALEROC                    = 53494,
+	NPC_Crystal_Shard               = 53495,
+	// Alyrazor
+	NPC_BLAZING_MONSTROSITY_LEFT = 53786,
+    NPC_BLAZING_MONSTROSITY_RIGHT = 53791,
+    NPC_EGG_PILE = 53795,
+    NPC_HARBINGER_OF_FLAME = 53793,
+    NPC_MOLTEN_EGG_TRASH = 53914,
+    NPC_SMOULDERING_HATCHLING = 53794,
 };
 
 class DelayedAttackStartEvent : public BasicEvent

warning: LF will be replaced by CRLF in src/server/scripts/Kalimdor/Firelands/firelands.h.
The file will have its original line endings in your working directory.

--- a/src/server/scripts/Kalimdor/Firelands/instance_firelands.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/instance_firelands.cpp
@@ -17,8 +17,15 @@
 
 #include "ScriptMgr.h"
 #include "InstanceScript.h"
+#include "ScriptPCH.h"
 #include "firelands.h"
 
+DoorData const doorData[] =
+{
+    {GO_RAGNAROS_DOOR,                  DATA_RAGNAROS,                  DOOR_TYPE_ROOM,         BOUNDARY_N      },
+    {0,                                 0,                              DOOR_TYPE_ROOM,         BOUNDARY_NONE   }, // END
+};
+
 class instance_firelands : public InstanceMapScript
 {
     public:
@@ -28,24 +35,119 @@ class instance_firelands : public InstanceMapScript
         {
             instance_firelands_InstanceScript(InstanceMap* map) : InstanceScript(map)
             {
+				Initialize();
             }
 
+			uint64 RagnarosGUID;
+
             void Initialize()
-            {
-                SetBossNumber(EncounterCount);
-            }
+        {
+            SetBossNumber(MAX_ENCOUNTERS);
+            LoadDoorData(doorData);
 
-            void OnCreatureCreate(Creature* creature)
+            RagnarosGUID    = 0;
+        }
+
+        void OnCreatureCreate(Creature* creature)
+        {
+            switch (creature->GetEntry())
             {
-                switch (creature->GetEntry())
-                {
-                    case NPC_SMOULDERING_HATCHLING:
+                case BOSS_RAGNAROS:
+                    RagnarosGUID = creature->GetGUID();
+                    break;
+
+                case NPC_SMOULDERING_HATCHLING:
                         // Cannot directly start attacking here as the creature is not yet on map
                         creature->m_Events.AddEvent(new DelayedAttackStartEvent(creature), creature->m_Events.CalculateTime(500));
                         break;
-                }
             }
-        };
+        }
+
+        void OnGameObjectCreate(GameObject* go)
+        {
+            switch (go->GetEntry())
+            {
+                case GO_RAGNAROS_DOOR:
+                    AddDoor(go, true);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        void OnGameObjectRemove(GameObject* go)
+        {
+            switch (go->GetEntry())
+            {
+                case GO_RAGNAROS_DOOR:
+                    AddDoor(go, false);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+		bool SetBossState(uint32 data, EncounterState state)
+        {
+            if (!InstanceScript::SetBossState(data, state))
+                return false;
+
+            return true;
+        }
+
+        uint64 GetData64(uint32 data)
+        {
+            switch (data)
+            {
+                case DATA_RAGNAROS:
+                    return RagnarosGUID;
+            }
+            return 0;
+        }
+
+        std::string GetSaveData()
+        {
+            OUT_SAVE_INST_DATA;
+
+            std::ostringstream saveStream;
+            saveStream << "F L " << GetBossSaveData();
+
+            OUT_SAVE_INST_DATA_COMPLETE;
+            return saveStream.str();
+        }
+
+        void Load(const char* in)
+        {
+            if (!in)
+            {
+                OUT_LOAD_INST_DATA_FAIL;
+                return;
+            }
+
+            OUT_LOAD_INST_DATA(in);
+
+            char dataHead1, dataHead2;
+
+            std::istringstream loadStream(in);
+            loadStream >> dataHead1 >> dataHead2;
+
+            if (dataHead1 == 'F' && dataHead2 == 'L')
+            {
+                for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
+                {
+                    uint32 tmpState;
+                    loadStream >> tmpState;
+                    if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+                        tmpState = NOT_STARTED;
+
+                    SetBossState(i, EncounterState(tmpState));
+                }
+
+            } else OUT_LOAD_INST_DATA_FAIL;
+
+            OUT_LOAD_INST_DATA_COMPLETE;
+        }
+    };
 
         InstanceScript* GetInstanceScript(InstanceMap* map) const
         {

Thanks you, and see you /emoticons/default_wink.png

It Works fine for me /emoticons/default_biggrin.png

[ 28%] Built target vmap4assembler
[ 28%] Built target mmaps_generator
[ 31%] Built target shared
[ 31%] Built target authserver
Scanning dependencies of target game
[ 31%] Building CXX object src/server/game/CMakeFiles/game.dir/Scripting/ScriptLoader.cpp.o
Linking CXX static library libgame.a
Scanning dependencies of target scripts
[ 48%] Built target game
[ 48%] Building CXX object src/server/scripts/CMakeFiles/scripts.dir/Kalimdor/Firelands/boss_ragnaros_cata.cpp.o
Linking CXX static library libscripts.a
[ 99%] Built target scripts
Linking CXX executable worldserver
[100%] Built target worldserver
root@(none):/opt/WoW/Source/Cata/build# sudo make install
sudo: unable to resolve host (none)
[ 2%] Built target jemalloc
[ 5%] Built target g3dlib
[ 5%] Built target Detour
[ 6%] Built target Recast
[ 6%] Built target gsoap
[ 24%] Built target storm

Could not find a proper repository signature (hash) - you may need to pull tags with git fetch -t
Continuing anyway - note that the versionstring will be set to 1970-01-01 00:00:00 (Archived)
[ 24%] Built target revision.h
[ 24%] Built target sharedPCH.cpp_dephelp
[ 25%] Built target generate_sharedPCH.cpp
[ 28%] Built target shared
[ 28%] Built target gamePCH.cpp_dephelp
[ 28%] Built target generate_gamePCH.cpp
[ 45%] Built target game
[ 45%] Built target collisionPCH.cpp_dephelp
[ 45%] Built target generate_collisionPCH.cpp
[ 47%] Built target collision
[ 47%] Built target authPCH.cpp_dephelp
[ 47%] Built target generate_authPCH.cpp
[ 47%] Built target authserver
[ 47%] Built target ScriptPCH.cpp_dephelp
[ 47%] Built target generate_ScriptPCH.cpp
[ 98%] Built target scripts
[ 98%] Built target worldPCH.cpp_dephelp
[ 98%] Built target generate_worldPCH.cpp
[ 99%] Built target worldserver
[ 99%] Built target mapextractor
[ 99%] Built target vmap4assembler
[100%] Built target vmap4extractor
[100%] Built target mmaps_generator
Install the project…
– Install configuration: “Release”
– Up-to-date: /opt/WoW/Cata/bin/authserver
– Up-to-date: /opt/WoW/Cata/etc/authserver.conf.dist
– Installing: /opt/WoW/Cata/bin/worldserver
– Set runtime path of “/opt/WoW/Cata/bin/worldserver” to “/usr/local/lib:/usr/local/lib”
– Up-to-date: /opt/WoW/Cata/etc/worldserver.conf.dist
– Up-to-date: /opt/WoW/Cata/bin/mapextractor
– Up-to-date: /opt/WoW/Cata/bin/vmap4assembler
– Up-to-date: /opt/WoW/Cata/bin/vmap4extractor
– Up-to-date: /opt/WoW/Cata/bin/mmaps_generator
root@(none):/opt/WoW/Source/Cata/build#

i have the same problem, any have a solution???

Try to clean your build folder and remake a full compile.

Test whith root permission.

You build trinitycore in 64 bits ?

No, it doesnt work.

You can compile it, But if you start the server, the server Crashes.

Full compile without cache

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

The Issue is in ‘boss_ragnaros_cata.cpp’

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

I located the Issue in ‘boss_ragnaros_cata::npc_son_of_flame’

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

srcserverscriptsEasternKingdomsBlackrockMountainMoltenCoreboss_ragnaros.cpp:
314 {
315 public:
316: npc_son_of_flame() : CreatureScript(“npc_SonOfFlame”) { }
317
318 struct npc_son_of_flameAI : public ScriptedAI //didnt work correctly in EAI for me…

350 {
351 new boss_ragnaros();
352: new npc_son_of_flame();
353 }
354

srcserverscriptsKalimdorFirelandsboss_ragnaros_cata.cpp:
977 {
978 public:
979: npc_son_of_flame() : CreatureScript(“npc_son_of_flame”) { }
980
981 struct npc_son_of_flameAI : public ScriptedAI

1096 new npc_engulfing_flame();
1097 new npc_sulfuras_hammer();
1098: new npc_son_of_flame();
1099 new spell_splitting_blow();
1100 }

4 matches across 2 files

Thats the issue.

Yeah i see this issue, i remove in DB scriptname ‘npc_son_of_flame’ for the moment, but the crash is occur because two npc_son_of_flame are called in scriptlib, rewrite ‘npc_son_of_flame’ from cata version to ‘npc_son_of_flame_cata’ for example.

Yeah, thats exactly what i have done to fix it.

Thanks for posting, i have forgotten do post the Fix