diff --git a/sql/updates/world/4.3.4/custom_2018_04_16_00_world.sql b/sql/updates/world/4.3.4/custom_2018_04_16_00_world.sql
new file mode 100644
index 00000000000..27c897ff460
--- /dev/null
+++ b/sql/updates/world/4.3.4/custom_2018_04_16_00_world.sql
@@ -0,0 +1 @@
+UPDATE `instance_template` SET `script`= 'instance_bastion_of_twilight' WHERE `map`= 671;
diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/bastion_of_twilight.h b/src/server/scripts/EasternKingdoms/BastionOfTwilight/bastion_of_twilight.h
new file mode 100644
index 00000000000..beddcc01bb5
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/bastion_of_twilight.h
@@ -0,0 +1,91 @@
+/*
+* Copyright (C) 2008-2018 TrinityCore
+*
+* 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 .
+*/
+
+#ifndef DEF_BASTION_OF_TWILIGHT_H
+#define DEF_BASTION_OF_TWILIGHT_H
+
+#define DataHeader "BoT"
+#define BoTScriptName "instance_bastion_of_twilight"
+
+uint32 const EncounterCountNormal = 4;
+uint32 const EncounterCountHeroic = 5;
+
+enum BoTDataTypes
+{
+ // Encounter Types
+ DATA_HALFUS_WYRMBREAKER = 0,
+ DATA_THERALION_AND_VALIONA = 1,
+ DATA_ASCENDANT_COUNCIL = 2,
+ DATA_CHOGALL = 3,
+ DATA_SINESTRA = 4,
+
+ // Creature Types
+ DATA_PROTO_BEHEMOTH = 5,
+ DATA_THERALION = 6,
+ DATA_VALIONA = 7,
+ DATA_IGNACIOUS = 8,
+ DATA_FELUDIUS = 9,
+ DATA_TERRASTRA = 10,
+ DATA_ARION = 11,
+ DATA_ELEMENTIUM_MONSTROSITY = 12
+};
+
+enum BoTCreatures
+{
+ // Bosses
+ BOSS_HALFUS_WYRMBREAKER = 44600,
+ BOSS_PROTO_BEHEMOTH = 44687,
+ BOSS_THERALION = 45993,
+ BOSS_VALIONA = 45992,
+ BOSS_IGNACIOUS = 43686,
+ BOSS_FELUDIUS = 43687,
+ BOSS_TERRASTRA = 43689,
+ BOSS_ARION = 43688,
+ BOSS_ELEMENTIUM_MONSTROSITY = 43735,
+ BOSS_CHOGALL = 43324,
+ BOSS_SINESTRA = 45213
+};
+
+enum BoTGameObjects
+{
+ GO_HALFUS_ENTRANCE = 205222,
+ GO_HALFUS_EXIT = 205223,
+ GO_DRAGON_SIBLINGS_DOOR_ENTRANCE = 205224,
+ GO_DRAGON_SIBLINGS_DOOR_EXIT = 205225,
+ GO_ASCENDANT_COUNCIL_ENTRANCE = 205226,
+ GO_ASCENDANT_COUNCIL_EXIT = 205227,
+ GO_CHOGALL_ENTRANCE = 205228
+};
+
+enum UnresponsiveDragonCases
+{
+
+};
+
+template
+AI* GetBastionOfTwilightAI(Creature* creature)
+{
+ return GetInstanceAI(creature, BoTScriptName);
+}
+
+template
+AI* GetBastionOfTwilightAI(GameObject* go)
+{
+ return GetInstanceAI(go, BoTScriptName);
+}
+
+#endif
\ No newline at end of file
diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp
new file mode 100644
index 00000000000..c6280c51b42
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_halfus_wyrmbreaker.cpp
@@ -0,0 +1,117 @@
+/*
+* Copyright (C) 2008-2017 TrinityCore
+*
+* 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 .
+*/
+
+#include "ObjectMgr.h"
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "SpellScript.h"
+#include "SpellAuraEffects.h"
+#include "Player.h"
+#include "bastion_of_twilight.h"
+
+enum Spells
+{
+
+};
+
+enum Events
+{
+
+};
+
+enum Actions
+{
+
+};
+
+enum Texts
+{
+ SAY_AGGRO = 0,
+};
+
+class boss_halfus_wyrmbreaker : public CreatureScript
+{
+ public:
+ boss_halfus_wyrmbreaker() : CreatureScript("boss_halfus_wyrmbreaker") { }
+
+ struct boss_halfus_wyrmbreakerAI : public BossAI
+ {
+ boss_halfus_wyrmbreakerAI(Creature* creature) : BossAI(creature, DATA_HALFUS_WYRMBREAKER)
+ {
+ }
+
+ void Reset() override
+ {
+ _Reset();
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _JustEngagedWith();
+ Talk(SAY_AGGRO);
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
+ //Talk(SAY_DEATH);
+ }
+
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ _EnterEvadeMode();
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
+ _DespawnAtEvade();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case 0:
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature *creature) const override
+ {
+ return GetBastionOfTwilightAI(creature);
+ }
+};
+
+void AddSC_boss_halfus_wyrmbreaker()
+{
+ new boss_halfus_wyrmbreaker();
+}
diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/instance_bastion_of_twilight.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/instance_bastion_of_twilight.cpp
new file mode 100644
index 00000000000..54342e92788
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/instance_bastion_of_twilight.cpp
@@ -0,0 +1,177 @@
+/*
+* Copyright (C) 2008-2018 TrinityCore
+*
+* 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 .
+*/
+
+
+#include "ScriptMgr.h"
+#include "CreatureAI.h"
+#include "bastion_of_twilight.h"
+#include "GameObject.h"
+#include "InstanceScript.h"
+#include "Map.h"
+#include "MotionMaster.h"
+#include "TemporarySummon.h"
+#include "VehicleDefines.h"
+#include "WorldPacket.h"
+
+ObjectData const creatureData[] =
+{
+ { BOSS_HALFUS_WYRMBREAKER, DATA_HALFUS_WYRMBREAKER },
+ { BOSS_PROTO_BEHEMOTH, DATA_PROTO_BEHEMOTH },
+ { BOSS_THERALION, DATA_THERALION },
+ { BOSS_VALIONA, DATA_VALIONA },
+ { BOSS_IGNACIOUS, DATA_IGNACIOUS },
+ { BOSS_FELUDIUS, DATA_FELUDIUS },
+ { BOSS_TERRASTRA, DATA_TERRASTRA },
+ { BOSS_ARION, DATA_ARION },
+ { BOSS_ELEMENTIUM_MONSTROSITY, DATA_ELEMENTIUM_MONSTROSITY },
+ { BOSS_CHOGALL, DATA_CHOGALL },
+ { BOSS_SINESTRA, DATA_SINESTRA },
+ { 0, 0 } // END
+};
+
+ObjectData const gameobjectData[] =
+{
+ //{ GO_IRON_CLAD_DOOR, DATA_IRON_CLAD_DOOR },
+ { 0, 0 } // END
+};
+
+DoorData const doorData[] =
+{
+ { GO_HALFUS_ENTRANCE, DATA_HALFUS_WYRMBREAKER, DOOR_TYPE_ROOM },
+ { GO_HALFUS_EXIT, DATA_HALFUS_WYRMBREAKER, DOOR_TYPE_PASSAGE },
+ { GO_DRAGON_SIBLINGS_DOOR_ENTRANCE, DATA_THERALION_AND_VALIONA, DOOR_TYPE_ROOM },
+ { GO_DRAGON_SIBLINGS_DOOR_EXIT, DATA_THERALION_AND_VALIONA, DOOR_TYPE_PASSAGE },
+ { GO_ASCENDANT_COUNCIL_ENTRANCE, DATA_ASCENDANT_COUNCIL, DOOR_TYPE_ROOM },
+ { GO_ASCENDANT_COUNCIL_EXIT, DATA_ASCENDANT_COUNCIL, DOOR_TYPE_PASSAGE },
+ { GO_CHOGALL_ENTRANCE, DATA_CHOGALL, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
+};
+
+class instance_bastion_of_twilight : public InstanceMapScript
+{
+ public:
+ instance_bastion_of_twilight() : InstanceMapScript(BoTScriptName, 671) { }
+
+ struct instance_bastion_of_twilight_InstanceMapScript : public InstanceScript
+ {
+ instance_bastion_of_twilight_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetHeaders(DataHeader);
+ SetBossNumber(!map->IsHeroic() ? EncounterCountNormal : EncounterCountHeroic); // Sinestra only in heroic mode
+ LoadDoorData(doorData);
+ LoadObjectData(creatureData, gameobjectData);
+
+ if (!map->IsHeroic())
+ GenerateUnresponsiveDragonData();
+ }
+
+ void GenerateUnresponsiveDragonData()
+ {
+ }
+
+ /*
+ void OnPlayerEnter(Player* player) override
+ {
+ }
+ */
+
+ void OnCreatureCreate(Creature* creature) override
+ {
+ InstanceScript::OnCreatureCreate(creature);
+
+ switch (creature->GetEntry())
+ {
+ case 0:
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* go) override
+ {
+ InstanceScript::OnGameObjectCreate(go);
+ }
+
+ bool SetBossState(uint32 type, EncounterState state) override
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case 0:
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ void OnUnitDeath(Unit* unit) override
+ {
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ switch (type)
+ {
+ case 0:
+ break;
+ default:
+ break;
+ }
+ }
+
+ uint32 GetData(uint32 type) const override
+ {
+ return 0;
+ }
+
+ /*
+ void WriteSaveDataMore(std::ostringstream& data) override
+ {
+ data << _teamInInstance << ' '
+ << _foeReaper5000Intro << ' '
+ << _ironCladDoorState;
+ }
+
+ void ReadSaveDataMore(std::istringstream& data) override
+ {
+ data >> _teamInInstance;
+ data >> _foeReaper5000Intro;
+ data >> _ironCladDoorState;
+ }
+ */
+
+ void Update(uint32 diff) override
+ {
+ }
+
+ protected:
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_bastion_of_twilight_InstanceMapScript(map);
+ }
+};
+
+void AddSC_instance_bastion_of_twilight()
+{
+ new instance_bastion_of_twilight();
+}
\ No newline at end of file
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
index 83fd7651638..1b90ffc9bd5 100644
--- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
@@ -25,6 +25,8 @@ void AddSC_boss_alizabal(); //Baradin Hold
void AddSC_boss_occuthar();
void AddSC_boss_pit_lord_argaloth();
void AddSC_instance_baradin_hold();
+void AddSC_boss_halfus_wyrmbreaker(); //Bastion of Twilight
+void AddSC_instance_bastion_of_twilight();
void AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns
void AddSC_boss_corla();
void AddSC_boss_karsh_steelbender();
@@ -233,6 +235,8 @@ void AddEasternKingdomsScripts()
AddSC_boss_occuthar();
AddSC_boss_pit_lord_argaloth();
AddSC_instance_baradin_hold();
+ AddSC_boss_halfus_wyrmbreaker(); //Bastion of Twilight
+ AddSC_instance_bastion_of_twilight();
AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns
AddSC_boss_corla();
AddSC_boss_karsh_steelbender();