diff --git a/sql/updates/world/4.3.4/2021_09_13_00_world.sql b/sql/updates/world/4.3.4/2021_09_13_00_world.sql
new file mode 100644
index 0000000000..7d58e6d82e
--- /dev/null
+++ b/sql/updates/world/4.3.4/2021_09_13_00_world.sql
@@ -0,0 +1,10 @@
+UPDATE `creature` SET `modelid`= 0 WHERE `id` IN (10424, 10419, 10418, 10420, 11043, 10422, 10425, 10426, 10421, 10423, 10997, 10544);
+UPDATE `creature_template` SET `ScriptName`= '' WHERE `entry`= 10812;
+UPDATE `creature` SET `Id`= 10813, `modelid`= 0 WHERE `guid`= 52149;
+
+UPDATE `creature_template` SET `ScriptName`= 'boss_balnazzar' WHERE `entry`= 10813;
+
+DELETE FROM `creature_text` WHERE `CreatureID`= 10813;
+INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `comment`) VALUES
+(10813, 0, 0, 'You fools think you can defeat me so easily? Face the true might of the Nathrezim!', 14, 0, 100, 0, 0, 0, 6447, 'Balnazzar - Aggro'),
+(10813, 1, 0, 'Damn you mortals! All my plans of revenge, all my hate...I will be avenged...', 12, 0, 100, 0, 0, 0, 6442, 'Balnazzar - Death');
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp
new file mode 100644
index 0000000000..da54b6461b
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp
@@ -0,0 +1,125 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * 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 "ScriptedCreature.h"
+#include "stratholme.h"
+
+enum Spells
+{
+ // Balnazzar
+ SPELL_MINDBLAST = 80750,
+ SPELL_PSYCHIC_SCREAM = 13704,
+ SPELL_SLEEP = 66290,
+ SPELL_DOMINATION = 17405,
+ SPELL_SHADOW_SHOCK = 17399
+};
+
+enum Events
+{
+ EVENT_MIND_BLAST = 1,
+ EVENT_SLEEP,
+ EVENT_PSYCHIC_SCREAM,
+ EVENT_DOMINATION,
+ EVENT_SHADOW_SHOCK,
+};
+
+enum Texts
+{
+ SAY_AGGRO = 0,
+ SAY_DEATH = 1,
+};
+
+struct boss_balnazzar : public BossAI
+{
+ boss_balnazzar(Creature* creature) : BossAI(creature, DATA_BALNAZZAR) { }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO, who);
+ events.ScheduleEvent(EVENT_MIND_BLAST, 7s);
+ events.ScheduleEvent(EVENT_SLEEP, 11s);
+ events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 21s);
+ events.ScheduleEvent(EVENT_DOMINATION, 30s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 33s);
+ }
+
+ void JustDied(Unit* killer) override
+ {
+ BossAI::JustDied(killer);
+ Talk(SAY_DEATH, killer);
+ }
+
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ _EnterEvadeMode();
+ _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 EVENT_MIND_BLAST:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.f, false, false))
+ DoCast(target, SPELL_MINDBLAST);
+ else
+ DoCastVictim(SPELL_MINDBLAST);
+ events.Repeat(7s);
+ break;
+ case EVENT_SLEEP:
+ DoCastVictim(SPELL_SLEEP);
+ events.Repeat(11s);
+ break;
+ case EVENT_PSYCHIC_SCREAM:
+ DoCastAOE(SPELL_PSYCHIC_SCREAM);
+ events.RescheduleEvent(EVENT_MIND_BLAST, 6s);
+ events.Repeat(27s);
+ break;
+ case EVENT_DOMINATION:
+ if (SelectTarget(SELECT_TARGET_RANDOM, 0, 30.f, false, false))
+ DoCastVictim(SPELL_DOMINATION);
+ events.Repeat(12s);
+ break;
+ case EVENT_SHADOW_SHOCK:
+ DoCastAOE(SPELL_SHADOW_SHOCK);
+ // @TODO: need repeat timer
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+void AddSC_boss_balnazzar()
+{
+ RegisterStratholmeCreatureAI(boss_balnazzar);
+}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
deleted file mode 100644
index cadf14ea57..0000000000
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * 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 .
- */
-
-/* ScriptData
-SDName: Boss_Dathrohan_Balnazzar
-SD%Complete: 95
-SDComment: Possibly need to fix/improve summons after death
-SDCategory: Stratholme
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- //Dathrohan spells
- SPELL_CRUSADERSHAMMER = 17286, //AOE stun
- SPELL_CRUSADERSTRIKE = 17281,
- SPELL_HOLYSTRIKE = 17284, //weapon dmg +3
-
- //Transform
- SPELL_BALNAZZARTRANSFORM = 17288, //restore full HP/mana, trigger spell Balnazzar Transform Stun
-
- //Balnazzar spells
- SPELL_SHADOWSHOCK = 17399,
- SPELL_MINDBLAST = 17287,
- SPELL_PSYCHICSCREAM = 13704,
- SPELL_SLEEP = 12098,
- SPELL_MINDCONTROL = 15690
-};
-
-enum Creatures
-{
- NPC_DATHROHAN = 10812,
- NPC_BALNAZZAR = 10813,
- NPC_ZOMBIE = 10698 //probably incorrect
-};
-
-struct SummonDef
-{
- float m_fX, m_fY, m_fZ, m_fOrient;
-};
-
-SummonDef m_aSummonPoint[]=
-{
- {3444.156f, -3090.626f, 135.002f, 2.240f}, //G1 front, left
- {3449.123f, -3087.009f, 135.002f, 2.240f}, //G1 front, right
- {3446.246f, -3093.466f, 135.002f, 2.240f}, //G1 back left
- {3451.160f, -3089.904f, 135.002f, 2.240f}, //G1 back, right
-
- {3457.995f, -3080.916f, 135.002f, 3.784f}, //G2 front, left
- {3454.302f, -3076.330f, 135.002f, 3.784f}, //G2 front, right
- {3460.975f, -3078.901f, 135.002f, 3.784f}, //G2 back left
- {3457.338f, -3073.979f, 135.002f, 3.784f} //G2 back, right
-};
-
-class boss_dathrohan_balnazzar : public CreatureScript
-{
-public:
- boss_dathrohan_balnazzar() : CreatureScript("boss_dathrohan_balnazzar") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_dathrohan_balnazzarAI(creature);
- }
-
- struct boss_dathrohan_balnazzarAI : public ScriptedAI
- {
- boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- m_uiCrusadersHammer_Timer = 8000;
- m_uiCrusaderStrike_Timer = 12000;
- m_uiMindBlast_Timer = 6000;
- m_uiHolyStrike_Timer = 18000;
- m_uiShadowShock_Timer = 4000;
- m_uiPsychicScream_Timer = 16000;
- m_uiDeepSleep_Timer = 20000;
- m_uiMindControl_Timer = 10000;
- m_bTransformed = false;
- }
-
- uint32 m_uiCrusadersHammer_Timer;
- uint32 m_uiCrusaderStrike_Timer;
- uint32 m_uiMindBlast_Timer;
- uint32 m_uiHolyStrike_Timer;
- uint32 m_uiShadowShock_Timer;
- uint32 m_uiPsychicScream_Timer;
- uint32 m_uiDeepSleep_Timer;
- uint32 m_uiMindControl_Timer;
- bool m_bTransformed;
-
- void Reset() override
- {
- Initialize();
-
- if (me->GetEntry() == NPC_BALNAZZAR)
- me->UpdateEntry(NPC_DATHROHAN);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- static uint32 uiCount = sizeof(m_aSummonPoint)/sizeof(SummonDef);
-
- for (uint8 i=0; iSummonCreature(NPC_ZOMBIE,
- m_aSummonPoint[i].m_fX, m_aSummonPoint[i].m_fY, m_aSummonPoint[i].m_fZ, m_aSummonPoint[i].m_fOrient,
- TEMPSUMMON_TIMED_DESPAWN, HOUR*IN_MILLISECONDS);
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- }
-
- void UpdateAI(uint32 uiDiff) override
- {
- if (!UpdateVictim())
- return;
-
- //START NOT TRANSFORMED
- if (!m_bTransformed)
- {
- //MindBlast
- if (m_uiMindBlast_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_MINDBLAST);
- m_uiMindBlast_Timer = urand(15000, 20000);
- } else m_uiMindBlast_Timer -= uiDiff;
-
- //CrusadersHammer
- if (m_uiCrusadersHammer_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_CRUSADERSHAMMER);
- m_uiCrusadersHammer_Timer = 12000;
- } else m_uiCrusadersHammer_Timer -= uiDiff;
-
- //CrusaderStrike
- if (m_uiCrusaderStrike_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_CRUSADERSTRIKE);
- m_uiCrusaderStrike_Timer = 15000;
- } else m_uiCrusaderStrike_Timer -= uiDiff;
-
- //HolyStrike
- if (m_uiHolyStrike_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_HOLYSTRIKE);
- m_uiHolyStrike_Timer = 15000;
- } else m_uiHolyStrike_Timer -= uiDiff;
-
- //BalnazzarTransform
- if (HealthBelowPct(40))
- {
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
-
- //restore hp, mana and stun
- DoCast(me, SPELL_BALNAZZARTRANSFORM);
- me->UpdateEntry(NPC_BALNAZZAR);
- m_bTransformed = true;
- }
- }
- else
- {
- //MindBlast
- if (m_uiMindBlast_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_MINDBLAST);
- m_uiMindBlast_Timer = urand(15000, 20000);
- } else m_uiMindBlast_Timer -= uiDiff;
-
- //ShadowShock
- if (m_uiShadowShock_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_SHADOWSHOCK);
- m_uiShadowShock_Timer = 11000;
- } else m_uiShadowShock_Timer -= uiDiff;
-
- //PsychicScream
- if (m_uiPsychicScream_Timer <= uiDiff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_PSYCHICSCREAM);
-
- m_uiPsychicScream_Timer = 20000;
- } else m_uiPsychicScream_Timer -= uiDiff;
-
- //DeepSleep
- if (m_uiDeepSleep_Timer <= uiDiff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_SLEEP);
-
- m_uiDeepSleep_Timer = 15000;
- } else m_uiDeepSleep_Timer -= uiDiff;
-
- //MindControl
- if (m_uiMindControl_Timer <= uiDiff)
- {
- DoCastVictim(SPELL_MINDCONTROL);
- m_uiMindControl_Timer = 15000;
- } else m_uiMindControl_Timer -= uiDiff;
- }
-
- DoMeleeAttackIfReady();
- }
- };
-
-};
-
-void AddSC_boss_dathrohan_balnazzar()
-{
- new boss_dathrohan_balnazzar();
-}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 07d8438a12..2afdbea4e4 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -49,6 +49,17 @@ enum StratholmeMisc
Position const timmyTheCruelSpawnPosition = { 3625.358f, -3188.108f, 130.3985f, 4.834562f };
EllipseBoundary const beforeScarletGate(Position(3671.158f, -3181.79f), 60.0f, 40.0f);
+ObjectData const creatureData[] =
+{
+ { BOSS_HEARTSINGER_FORRESTEN, DATA_HEARTHSINGER_FORRESTEN },
+ { BOSS_TIMMY_THE_CRUEL, DATA_TIMMY_THE_CRUEL },
+ { BOSS_COMMANDER_MALOR, DATA_COMMANDER_MALOR },
+ { BOSS_WILLEY_HOPEBREAKER, DATA_WILLEY_HOPEBREAKER },
+ { BOSS_INSTRUCTOR_GALFORD, DATA_INSTRUCTOR_GALFORD },
+ { BOSS_BALNAZZAR, DATA_BALNAZZAR },
+ { 0, 0 }, // END
+};
+
class instance_stratholme : public InstanceMapScript
{
public:
@@ -59,8 +70,10 @@ class instance_stratholme : public InstanceMapScript
instance_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
+ SetBossNumber(MAX_ENCOUNTER);
+ LoadObjectData(creatureData, nullptr);
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ for (uint8 i = 0; i < MAX_ENCOUNTER_OLD; ++i)
EncounterState[i] = NOT_STARTED;
for (uint8 i = 0; i < 5; ++i)
@@ -70,7 +83,7 @@ class instance_stratholme : public InstanceMapScript
scarletsKilled = 0;
}
- uint32 EncounterState[MAX_ENCOUNTER];
+ uint32 EncounterState[MAX_ENCOUNTER_OLD];
uint8 scarletsKilled;
bool IsSilverHandDead[5];
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
index c70f8fe2a8..8d66a96499 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
@@ -23,6 +23,27 @@
#define StratholmeScriptName "instance_stratholme"
#define DataHeader "STR"
+enum STRData
+{
+ // Crusader Square
+ DATA_HEARTHSINGER_FORRESTEN = 0,
+ DATA_TIMMY_THE_CRUEL = 1,
+ DATA_COMMANDER_MALOR = 2,
+ DATA_WILLEY_HOPEBREAKER = 3,
+ DATA_INSTRUCTOR_GALFORD = 4,
+ DATA_BALNAZZAR = 5,
+ // The Gauntlet
+ DATA_THE_UNFORGIVEN = 6,
+ DATA_BARONESS_ANASTARI = 7,
+ DATA_NERUBEKAN = 8,
+ DATA_MALEKI_THE_PALLID = 9,
+ DATA_MAGISTRATE_BARTHILAS = 10,
+ DATA_RAMSTEIN_THE_GORGER = 11,
+ DATA_LORD_AURIUIS_RIVENDARE = 12,
+
+ MAX_ENCOUNTER
+};
+
enum STRDataTypes
{
TYPE_BARON_RUN = 1,
@@ -47,6 +68,14 @@ enum STRDataTypes
enum STRCreatureIds
{
+ // Crusader Square
+ BOSS_HEARTSINGER_FORRESTEN = 10558,
+ BOSS_TIMMY_THE_CRUEL = 10808,
+ BOSS_COMMANDER_MALOR = 11032,
+ BOSS_WILLEY_HOPEBREAKER = 10997,
+ BOSS_INSTRUCTOR_GALFORD = 10811,
+ BOSS_BALNAZZAR = 10813,
+
NPC_CRYSTAL = 10415, // ziggurat crystal
NPC_BARON = 10440, // ziggurat crystal
NPC_YSIDA_TRIGGER = 16100, // ziggurat crystal
@@ -99,7 +128,7 @@ enum STRMisc
{
//! amount of crusade monsters required to be killed in order for timmy the cruel to spawn
TIMMY_THE_CRUEL_CRUSADERS_REQUIRED = 15,
- MAX_ENCOUNTER = 6
+ MAX_ENCOUNTER_OLD = 6
};
template
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
index 3bb5084bce..4ef07cf6b6 100644
--- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
@@ -174,7 +174,7 @@ void AddSC_boss_ramstein_the_gorger();
void AddSC_boss_timmy_the_cruel();
void AddSC_boss_postmaster_malown();
void AddSC_boss_baron_rivendare();
-void AddSC_boss_dathrohan_balnazzar();
+void AddSC_boss_balnazzar();
void AddSC_boss_order_of_silver_hand();
void AddSC_instance_stratholme();
void AddSC_stratholme();
@@ -407,7 +407,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_timmy_the_cruel();
AddSC_boss_postmaster_malown();
AddSC_boss_baron_rivendare();
- AddSC_boss_dathrohan_balnazzar();
+ AddSC_boss_balnazzar();
AddSC_boss_order_of_silver_hand();
AddSC_instance_stratholme();
AddSC_stratholme();