From 7a4a409cae9b2958b3e2652d819b0ce617c5f071 Mon Sep 17 00:00:00 2001 From: Petric Date: Fri, 4 Sep 2020 08:44:09 +0100 Subject: [PATCH] fix(Core/Script): Anomalus (#3325) * Correct rift spawning/ empowering timings and Rift Shield cancellation Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- .../rev_1598051293888466200.sql | 18 ++++++ .../Northrend/Nexus/Nexus/boss_anomalus.cpp | 58 +++++++++++++------ 2 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1598051293888466200.sql diff --git a/data/sql/updates/pending_db_world/rev_1598051293888466200.sql b/data/sql/updates/pending_db_world/rev_1598051293888466200.sql new file mode 100644 index 000000000..203133a17 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1598051293888466200.sql @@ -0,0 +1,18 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1598051293888466200'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 26918; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 26918) 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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26918, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 11, 48019, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Reset - Cast \'Arcaneform\''), +(26918, 0, 1, 0, 60, 0, 100, 0, 1000, 1000, 1000, 1000, 0, 11, 47737, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Update - Cast \'Charged Chaotic Energy Burst\''), +(26918, 0, 2, 0, 60, 0, 100, 0, 5000, 5000, 10000, 10000, 0, 11, 47692, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Update - Cast Summon Arcane Wraith'), +(26918, 0, 3, 4, 8, 0, 100, 0, 47747, 0, 0, 0, 0, 28, 47687, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Spell Hit - Remove Aura Chaotic Rift Aura'), +(26918, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 47733, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Spell Hit - Cast Chaotic Rift Aura'), +(26918, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Spell Hit - Set Event Phase'), +(26918, 0, 6, 0, 60, 1, 100, 0, 10000, 10000, 10000, 10000, 0, 11, 47692, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Update - Cast Summon Arcane Wraith'), +(26918, 0, 7, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 26763, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaotic Rift - On Death - Set Data'); + +DELETE FROM `spell_dbc` WHERE `ID` = 47747; +INSERT INTO `spell_dbc` (`ID`, `Category`, `DispelType`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesExB`, `AttributesExC`, `AttributesExD`, `AttributesExE`, `AttributesExF`, `AttributesExG`, `ShapeshiftMask`, `ShapeshiftExclude`, `Targets`, `TargetCreatureType`, `RequiresSpellFocus`, `FacingCasterFlags`, `CasterAuraState`, `TargetAuraState`, `ExcludeCasterAuraState`, `ExcludeTargetAuraState`, `CasterAuraSpell`, `TargetAuraSpell`, `ExcludeCasterAuraSpell`, `ExcludeTargetAuraSpell`, `CastingTimeIndex`, `RecoveryTime`, `CategoryRecoveryTime`, `InterruptFlags`, `AuraInterruptFlags`, `ChannelInterruptFlags`, `ProcTypeMask`, `ProcChance`, `ProcCharges`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `PowerType`, `ManaCost`, `ManaCostPerLevel`, `ManaPerSecond`, `ManaPerSecondPerLevel`, `RangeIndex`, `Speed`, `ModalNextSpell`, `CumulativeAura`, `Totem_1`, `Totem_2`, `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`, `ReagentCount_1`, `ReagentCount_2`, `ReagentCount_3`, `ReagentCount_4`, `ReagentCount_5`, `ReagentCount_6`, `ReagentCount_7`, `ReagentCount_8`, `EquippedItemClass`, `EquippedItemSubclass`, `EquippedItemInvTypes`, `Effect_1`, `Effect_2`, `Effect_3`, `EffectDieSides_1`, `EffectDieSides_2`, `EffectDieSides_3`, `EffectRealPointsPerLevel_1`, `EffectRealPointsPerLevel_2`, `EffectRealPointsPerLevel_3`, `EffectBasePoints_1`, `EffectBasePoints_2`, `EffectBasePoints_3`, `EffectMechanic_1`, `EffectMechanic_2`, `EffectMechanic_3`, `ImplicitTargetA_1`, `ImplicitTargetA_2`, `ImplicitTargetA_3`, `ImplicitTargetB_1`, `ImplicitTargetB_2`, `ImplicitTargetB_3`, `EffectRadiusIndex_1`, `EffectRadiusIndex_2`, `EffectRadiusIndex_3`, `EffectAura_1`, `EffectAura_2`, `EffectAura_3`, `EffectAuraPeriod_1`, `EffectAuraPeriod_2`, `EffectAuraPeriod_3`, `EffectMultipleValue_1`, `EffectMultipleValue_2`, `EffectMultipleValue_3`, `EffectChainTargets_1`, `EffectChainTargets_2`, `EffectChainTargets_3`, `EffectItemType_1`, `EffectItemType_2`, `EffectItemType_3`, `EffectMiscValue_1`, `EffectMiscValue_2`, `EffectMiscValue_3`, `EffectMiscValueB_1`, `EffectMiscValueB_2`, `EffectMiscValueB_3`, `EffectTriggerSpell_1`, `EffectTriggerSpell_2`, `EffectTriggerSpell_3`, `EffectPointsPerCombo_1`, `EffectPointsPerCombo_2`, `EffectPointsPerCombo_3`, `EffectSpellClassMaskA_1`, `EffectSpellClassMaskA_2`, `EffectSpellClassMaskA_3`, `EffectSpellClassMaskB_1`, `EffectSpellClassMaskB_2`, `EffectSpellClassMaskB_3`, `EffectSpellClassMaskC_1`, `EffectSpellClassMaskC_2`, `EffectSpellClassMaskC_3`, `SpellVisualID_1`, `SpellVisualID_2`, `SpellIconID`, `ActiveIconID`, `SpellPriority`, `Name_Lang_enUS`, `Name_Lang_enGB`, `Name_Lang_koKR`, `Name_Lang_frFR`, `Name_Lang_deDE`, `Name_Lang_enCN`, `Name_Lang_zhCN`, `Name_Lang_enTW`, `Name_Lang_zhTW`, `Name_Lang_esES`, `Name_Lang_esMX`, `Name_Lang_ruRU`, `Name_Lang_ptPT`, `Name_Lang_ptBR`, `Name_Lang_itIT`, `Name_Lang_Unk`, `Name_Lang_Mask`, `NameSubtext_Lang_enUS`, `NameSubtext_Lang_enGB`, `NameSubtext_Lang_koKR`, `NameSubtext_Lang_frFR`, `NameSubtext_Lang_deDE`, `NameSubtext_Lang_enCN`, `NameSubtext_Lang_zhCN`, `NameSubtext_Lang_enTW`, `NameSubtext_Lang_zhTW`, `NameSubtext_Lang_esES`, `NameSubtext_Lang_esMX`, `NameSubtext_Lang_ruRU`, `NameSubtext_Lang_ptPT`, `NameSubtext_Lang_ptBR`, `NameSubtext_Lang_itIT`, `NameSubtext_Lang_Unk`, `NameSubtext_Lang_Mask`, `Description_Lang_enUS`, `Description_Lang_enGB`, `Description_Lang_koKR`, `Description_Lang_frFR`, `Description_Lang_deDE`, `Description_Lang_enCN`, `Description_Lang_zhCN`, `Description_Lang_enTW`, `Description_Lang_zhTW`, `Description_Lang_esES`, `Description_Lang_esMX`, `Description_Lang_ruRU`, `Description_Lang_ptPT`, `Description_Lang_ptBR`, `Description_Lang_itIT`, `Description_Lang_Unk`, `Description_Lang_Mask`, `AuraDescription_Lang_enUS`, `AuraDescription_Lang_enGB`, `AuraDescription_Lang_koKR`, `AuraDescription_Lang_frFR`, `AuraDescription_Lang_deDE`, `AuraDescription_Lang_enCN`, `AuraDescription_Lang_zhCN`, `AuraDescription_Lang_enTW`, `AuraDescription_Lang_zhTW`, `AuraDescription_Lang_esES`, `AuraDescription_Lang_esMX`, `AuraDescription_Lang_ruRU`, `AuraDescription_Lang_ptPT`, `AuraDescription_Lang_ptBR`, `AuraDescription_Lang_itIT`, `AuraDescription_Lang_Unk`, `AuraDescription_Lang_Mask`, `ManaCostPct`, `StartRecoveryCategory`, `StartRecoveryTime`, `MaxTargetLevel`, `SpellClassSet`, `SpellClassMask_1`, `SpellClassMask_2`, `SpellClassMask_3`, `MaxTargets`, `DefenseType`, `PreventionType`, `StanceBarOrder`, `EffectChainAmplitude_1`, `EffectChainAmplitude_2`, `EffectChainAmplitude_3`, `MinFactionID`, `MinReputation`, `RequiredAuraVision`, `RequiredTotemCategoryID_1`, `RequiredTotemCategoryID_2`, `RequiredAreasID`, `SchoolMask`, `RuneCostID`, `SpellMissileID`, `PowerDisplayID`, `Field227`, `Field228`, `Field229`, `SpellDescriptionVariableID`, `SpellDifficultyID`) VALUES +(47747,0,0,0,536870912,4,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,101,0,0,0,0,22,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,6,0,0,1,0,0,0,0,0,49,0,0,0,0,0,22,0,0,7,0,0,11,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10626,0,1952,0,0,"Charge Rifts",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16712190,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16712190,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16712190,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16712190,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 003d18437..0a2b2c187 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -31,7 +31,9 @@ enum Events { EVENT_ANOMALUS_SPARK = 1, EVENT_ANOMALUS_HEALTH = 2, - EVENT_ANOMALUS_ARCANE_ATTRACTION = 3 + EVENT_ANOMALUS_ARCANE_ATTRACTION = 3, + EVENT_ANOMALUS_SPAWN_RIFT = 4, + EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED = 5 }; class ChargeRifts : public BasicEvent @@ -69,6 +71,7 @@ class boss_anomalus : public CreatureScript } bool achievement; + uint16 activeRifts; void Reset() { @@ -88,8 +91,12 @@ class boss_anomalus : public CreatureScript { if (type == me->GetEntry()) { - me->RemoveAura(SPELL_RIFT_SHIELD); - me->InterruptNonMeleeSpells(false); + if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD)) + { + events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000); + me->RemoveAura(SPELL_RIFT_SHIELD); + me->InterruptNonMeleeSpells(false); + } achievement = false; } } @@ -97,6 +104,7 @@ class boss_anomalus : public CreatureScript void JustSummoned(Creature* summon) { summons.Summon(summon); + activeRifts++; } void EnterCombat(Unit* who) @@ -104,9 +112,11 @@ class boss_anomalus : public CreatureScript Talk(SAY_AGGRO); BossAI::EnterCombat(who); + activeRifts = 0; events.SetTimer(45000); events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000); events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); if (IsHeroic()) events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8000); } @@ -129,29 +139,43 @@ class boss_anomalus : public CreatureScript switch (events.ExecuteEvent()) { - case EVENT_ANOMALUS_HEALTH: - if (me->HealthBelowPct(51)) - { - Talk(SAY_RIFT); - Talk(EMOTE_RIFT); - - me->CastSpell(me, SPELL_CREATE_RIFT, false); - me->CastSpell(me, SPELL_RIFT_SHIELD, true); - me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000)); - events.DelayEvents(46000); - break; - } - events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000); - break; case EVENT_ANOMALUS_SPARK: me->CastSpell(me->GetVictim(), SPELL_SPARK, false); events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000); break; + case EVENT_ANOMALUS_HEALTH: + if (me->HealthBelowPct(51)) + { + //First time we reach 51%, the next rift going to be empowered following timings. + events.CancelEvent(EVENT_ANOMALUS_SPAWN_RIFT); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1000); + break; + } + events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000); + break; case EVENT_ANOMALUS_ARCANE_ATTRACTION: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true)) me->CastSpell(target, SPELL_ARCANE_ATTRACTION, false); events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15000); break; + case EVENT_ANOMALUS_SPAWN_RIFT: + Talk(SAY_RIFT); + Talk(EMOTE_RIFT); + me->CastSpell(me, SPELL_CREATE_RIFT, false); + //Once we hit 51% hp mark, after each rift we spawn an empowered + events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + break; + case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED: + Talk(SAY_RIFT); + Talk(EMOTE_RIFT); + + me->CastSpell(me, SPELL_CREATE_RIFT, false); + me->CastSpell(me, SPELL_RIFT_SHIELD, true); + me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000)); + events.DelayEvents(46000); + //As we just spawned an empowered spawn a normal one + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + break; } DoMeleeAttackIfReady();