diff --git a/sql/updates/world/custom/custom_2018_12_18_00_world.sql b/sql/updates/world/custom/custom_2018_12_18_00_world.sql
new file mode 100644
index 00000000000..dcf0d30b9f8
--- /dev/null
+++ b/sql/updates/world/custom/custom_2018_12_18_00_world.sql
@@ -0,0 +1,18 @@
+-- Creature Enslaved Gronn Brute 40166 SAI
+SET @ENTRY := 40166;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@ENTRY, 0, 0, 0, 1, 0, 100, 0, 0, 20000, 30000, 30000, 11, 76138, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "When out of combat and timer at the begining between 0 and 20000 ms (and later repeats every 30000 and 30000 ms) - Self: Cast spell 76138 on Self // "),
+(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 4000, 5000, 11000, 12000, 11, 76703, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 4000 and 5000 ms (and later repeats every 11000 and 12000 ms) - Self: Cast spell 76703 on Victim // ");
+
+-- Twilight Beguiler
+UPDATE `creature_template` SET `ScriptName`= 'npc_grim_batol_twilight_beguiler' WHERE `entry`= 40167;
+
+DELETE FROM `conditions` WHERE `SourceEntry` IN (76138, 74867, 74884, 76151, 90719) AND `SourceTypeOrReferenceId`= 13;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ScriptName`, `Comment`) VALUES
+(13, 3, 76138, 0, 0, 31, 0, 3, 40167, 0, 0, 0, '', 'Gronn Knockback Cosmetic - Target Twilight Beguiler'),
+(13, 1, 74867, 0, 0, 31, 0, 3, 40166, 0, 0, 0, '', 'Enslave Gronn Cosmetic - Target Enslaved Gronn Brute'),
+(13, 1, 74884, 0, 0, 31, 0, 3, 40166, 0, 0, 0, '', 'Enslave Gronn Cosmetic - Target Enslaved Gronn Brute'),
+(13, 3, 76151, 0, 0, 31, 0, 3, 40166, 0, 0, 0, '', 'Beguile - Target Enslaved Gronn Brute'),
+(13, 3, 90719, 0, 0, 31, 0, 3, 40166, 0, 0, 0, '', 'Beguile - Target Enslaved Gronn Brute');
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index cee551da739..76e2832cb77 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -4499,6 +4499,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx5 &= ~SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING;
});
+ // Gronn Knockback Cosmetic
+ ApplySpellFix({ 76138 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
// ENDOF GRIM_BATOL SPELLS
//
diff --git a/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp
new file mode 100644
index 00000000000..8c60608e716
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.cpp
@@ -0,0 +1,141 @@
+/*
+* 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 "ObjectMgr.h"
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "SpellScript.h"
+#include "SpellAuraEffects.h"
+#include "grim_batol.h"
+
+enum TwilightBeguiler
+{
+ // Events
+ EVENT_BEGUILE = 1,
+ EVENT_MOVE_TO_HOME_POSITION,
+ EVENT_ENSLAVE_GRONN_COSMETIC,
+ EVENT_DECEITFUL_BLAST,
+ EVENT_CHAINED_MIND,
+
+ // Phases
+ PHASE_COSMETIC = 1,
+ PHASE_COMBAT = 2,
+
+ // Spells
+ SPELL_GRONN_KNOCKBACK_COSMETIC = 76138,
+ SPELL_BEGUILE = 76151,
+ SPELL_ENSLAVE_GRONN_COSMETIC_RIGHT = 74867,
+ SPELL_ENSLAVE_GRONN_COSMETIC_LEFT = 74884,
+ SPELL_DECEITFUL_BLAST = 76715,
+ SPELL_CHAINED_MIND = 76711
+};
+
+struct npc_grim_batol_twilight_beguiler : public ScriptedAI
+{
+ npc_grim_batol_twilight_beguiler(Creature* creature) : ScriptedAI(creature) { }
+
+ void Reset()
+ {
+ _events.Reset();
+ _events.SetPhase(PHASE_COSMETIC);
+ _events.ScheduleEvent(EVENT_ENSLAVE_GRONN_COSMETIC, 1s, 0, PHASE_COSMETIC);
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.SetPhase(PHASE_COMBAT);
+ _events.ScheduleEvent(EVENT_DECEITFUL_BLAST, 7s, 0, PHASE_COMBAT);
+ _events.ScheduleEvent(EVENT_CHAINED_MIND, 7s, 15s, 0, PHASE_COMBAT);
+ me->InterruptNonMeleeSpells(true);
+ }
+
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_GRONN_KNOCKBACK_COSMETIC)
+ {
+ _events.ScheduleEvent(EVENT_BEGUILE, 4s, 0, PHASE_COSMETIC);
+ _events.ScheduleEvent(EVENT_MOVE_TO_HOME_POSITION, 7s + 600ms, 0, PHASE_COSMETIC);
+ _events.ScheduleEvent(EVENT_ENSLAVE_GRONN_COSMETIC, 7s + 600ms, 0, PHASE_COSMETIC);
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() && !_events.IsInPhase(PHASE_COSMETIC))
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING) && !_events.IsInPhase(PHASE_COSMETIC))
+ return;
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_BEGUILE:
+ DoCastSelf(SPELL_BEGUILE);
+ break;
+ case EVENT_MOVE_TO_HOME_POSITION:
+ me->GetMotionMaster()->MoveTargetedHome();
+ break;
+ case EVENT_ENSLAVE_GRONN_COSMETIC:
+ if (Creature* gronn = me->FindNearestCreature(NPC_ENSLAVED_GRONN_BRUTE, 30.0f, true))
+ {
+ Position pos = gronn->GetHomePosition();
+ pos.SetOrientation(pos.GetOrientation() + (float)M_PI / 1.5f);
+
+ if (pos.HasInLine(&me->GetHomePosition(), 15.0f))
+ DoCastSelf(SPELL_ENSLAVE_GRONN_COSMETIC_LEFT);
+ else
+ {
+ pos = gronn->GetHomePosition();
+ pos.SetOrientation(pos.GetOrientation() - (float)M_PI / 1.5f);
+ if (pos.HasInLine(&me->GetHomePosition(), 15.0f))
+ DoCastSelf(SPELL_ENSLAVE_GRONN_COSMETIC_RIGHT);
+ }
+ }
+ break;
+ case EVENT_DECEITFUL_BLAST:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 25.0f, true, 0))
+ DoCast(target, SPELL_DECEITFUL_BLAST);
+
+ if (_events.GetTimeUntilEvent(EVENT_CHAINED_MIND) > 4 * IN_MILLISECONDS)
+ _events.Repeat(1s, 3s);
+ else
+ _events.Repeat(11s, 12s);
+ break;
+ case EVENT_CHAINED_MIND:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 25.0f, true, 0))
+ DoCast(target, SPELL_CHAINED_MIND);
+ _events.Repeat(18s, 27s);
+ break;
+ default:
+ break;
+ }
+ }
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ EventMap _events;
+};
+
+void AddSC_grim_batol()
+{
+ RegisterGrimBatolCreatureAI(npc_grim_batol_twilight_beguiler);
+}
\ No newline at end of file
diff --git a/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.h b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.h
index dc34e9fff72..e33e7fb63b3 100644
--- a/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.h
+++ b/src/server/scripts/EasternKingdoms/GrimBatol/grim_batol.h
@@ -75,6 +75,9 @@ enum GBCreatureIds
NPC_TWILIGHT_HATCHLING = 39388,
NPC_HATCHED_TWILIGHT_EGG = 40846,
+ // Generic Creatures
+ NPC_ENSLAVED_GRONN_BRUTE = 40166,
+
};
enum GBSpells
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
index 40d7d00268d..3ccff3fdd3e 100644
--- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
@@ -91,6 +91,7 @@ void AddSC_boss_general_umbriss();
void AddSC_boss_forgemaster_throngus();
void AddSC_boss_drahga_shadowburner();
void AddSC_boss_erudax();
+void AddSC_grim_batol();
void AddSC_boss_attumen(); //Karazhan
void AddSC_boss_curator();
void AddSC_boss_maiden_of_virtue();
@@ -311,8 +312,9 @@ void AddEasternKingdomsScripts()
AddSC_instance_grim_batol(); //Grim Batol
AddSC_boss_general_umbriss();
AddSC_boss_forgemaster_throngus();
- AddSC_boss_erudax();
AddSC_boss_drahga_shadowburner();
+ AddSC_boss_erudax();
+ AddSC_grim_batol();
AddSC_boss_attumen(); //Karazhan
AddSC_boss_curator();
AddSC_boss_maiden_of_virtue();