From ab5ce3e3728574988b6a0e7085e3cc0862025709 Mon Sep 17 00:00:00 2001 From: Hacki95 <62942638+Hacki95@users.noreply.github.com> Date: Mon, 5 Jul 2021 00:12:35 +0200 Subject: [PATCH] fix(Core/Script): Molten Core: Gehennas (#5680) Co-authored-by: @T1ti Co-authored-by: @sanctum32 --- .../rev_1620337536404777343.sql | 11 +++ .../MoltenCore/boss_gehennas.cpp | 71 +++++++++++++------ 2 files changed, 61 insertions(+), 21 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1620337536404777343.sql diff --git a/data/sql/updates/pending_db_world/rev_1620337536404777343.sql b/data/sql/updates/pending_db_world/rev_1620337536404777343.sql new file mode 100644 index 000000000..59ebb767c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1620337536404777343.sql @@ -0,0 +1,11 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1620337536404777343'); + +-- Timers update for NPC "Flamewaker Protector" +UPDATE `smart_scripts` SET `event_param1`=5000, `event_param2`=5000, `event_param3`=6500, `event_param4`=6500 WHERE `entryorguid`=12119 AND `source_type`=0 AND `id`=0 AND `link`=0; +UPDATE `smart_scripts` SET `event_param1`=5000, `event_param2`=10000, `event_param3`=7000, `event_param4`=7000 WHERE `entryorguid`=12119 AND `source_type`=0 AND `id`=1 AND `link`=0; + +-- Timers update for NPC "Flamewaker" +UPDATE `smart_scripts` SET `event_param1`=3000, `event_param2`=6000, `event_param3`=10000, `event_param4`=13000 WHERE `entryorguid`=11661 AND `source_type`=0 AND `id`=1 AND `link`=0; +UPDATE `smart_scripts` SET `event_param1`=3000, `event_param3`=4000, `event_param4`=6000 WHERE `entryorguid`=11661 AND `source_type`=0 AND `id`=0 AND `link`=0; +UPDATE `smart_scripts` SET `event_param1`=4000, `event_param2`=9000, `event_param3`=5000, `event_param4`=8000 WHERE `entryorguid`=11661 AND `source_type`=0 AND `id`=2 AND `link`=0; + diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp index d5280830b..e9caaf466 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp @@ -11,23 +11,23 @@ SDComment: Adds MC NYI SDCategory: Molten Core EndScriptData */ -#include "molten_core.h" -#include "ObjectMgr.h" -#include "ScriptedCreature.h" #include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "molten_core.h" enum Spells { - SPELL_GEHENNAS_CURSE = 19716, - SPELL_RAIN_OF_FIRE = 19717, - SPELL_SHADOW_BOLT = 19728, + SPELL_GEHENNAS_CURSE = 19716, + SPELL_RAIN_OF_FIRE = 19717, + SPELL_SHADOW_BOLT_RANDOM = 19728, + SPELL_SHADOW_BOLT_VICTIM = 19729, }; enum Events { EVENT_GEHENNAS_CURSE = 1, - EVENT_RAIN_OF_FIRE = 2, - EVENT_SHADOW_BOLT = 3, + EVENT_RAIN_OF_FIRE, + EVENT_SHADOW_BOLT, }; class boss_gehennas : public CreatureScript @@ -41,44 +41,73 @@ public: { } - void EnterCombat(Unit* victim) override + void EnterCombat(Unit* /*attacker*/) override { - BossAI::EnterCombat(victim); - events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 12000); + _EnterCombat(); + events.ScheduleEvent(EVENT_GEHENNAS_CURSE, urand(6000, 9000)); events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 10000); - events.ScheduleEvent(EVENT_SHADOW_BOLT, 6000); + events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(3000, 5000)); } void UpdateAI(uint32 diff) override { if (!UpdateVictim()) + { return; + } events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) + { return; + } - while (uint32 eventId = events.ExecuteEvent()) + while (uint32 const eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_GEHENNAS_CURSE: + { DoCastVictim(SPELL_GEHENNAS_CURSE); - events.ScheduleEvent(EVENT_GEHENNAS_CURSE, urand(22000, 30000)); + events.RepeatEvent(urand(25000, 30000)); break; + } case EVENT_RAIN_OF_FIRE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + { + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + { DoCast(target, SPELL_RAIN_OF_FIRE); - events.ScheduleEvent(EVENT_RAIN_OF_FIRE, urand(4000, 12000)); + } + events.RepeatEvent(6000); break; + } case EVENT_SHADOW_BOLT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) - DoCast(target, SPELL_SHADOW_BOLT); - events.ScheduleEvent(EVENT_SHADOW_BOLT, 7000); - break; - default: + { + if (urand(0, 1)) + { + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) + { + DoCast(target, SPELL_SHADOW_BOLT_RANDOM); + } + else + { + DoCastVictim(SPELL_SHADOW_BOLT_VICTIM); + } + } + else + { + DoCastVictim(SPELL_SHADOW_BOLT_VICTIM); + } + + events.RepeatEvent(5000); break; + } + } + + if (me->HasUnitState(UNIT_STATE_CASTING)) + { + return; } }