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();