diff options
author | Naddley <64811442+Naddley@users.noreply.github.com> | 2024-06-19 04:36:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 04:36:06 +0200 |
commit | e54e3ed2040d0c21c3b05433269044568572cb7a (patch) | |
tree | 714a86f333e8155b0fbb229b4a6d0181ac87afbc /src | |
parent | 07e5b8d2dec62638c7a7b710a49488498a0ea6a7 (diff) |
Scripts/KingsRest: Added scripts for Animated Guardian and Minion of Zul (#30031)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 12 | ||||
-rw-r--r-- | src/server/scripts/Zandalar/KingsRest/kings_rest.cpp | 145 |
2 files changed, 150 insertions, 7 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index c77febf47c2..5ad8c3e71d1 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4749,6 +4749,18 @@ void SpellMgr::LoadSpellInfoCorrections() // ENDOF STORMSONG VALLEY SPELLS // + // KINGS REST SPELLS + // + + // Fixate + ApplySpellFix({ 269936 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF; + }); + + // ENDOF KINGS REST SPELLS + + // // SEPULCHER OF THE FIRST ONES // diff --git a/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp b/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp index 190c189f5f8..c4cda8e23e6 100644 --- a/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp +++ b/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp @@ -20,33 +20,41 @@ #include "Conversation.h" #include "GameObject.h" #include "InstanceScript.h" -#include "TemporarySummon.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellAuras.h" +#include "SpellScript.h" +#include "TemporarySummon.h" #include "Unit.h" #include "kings_rest.h" enum KingsRestData { // Creature - NPC_SHADOW_OF_ZUL = 137020, + NPC_SHADOW_OF_ZUL = 137020, + + // Creature text + SAY_ANIMATED_GUARDIAN_ENGAGE = 0, // DisplayIDs - DISPLAY_INVISIBLE_ZUL = 11686, + DISPLAY_INVISIBLE_ZUL = 11686, // Spell Visuals - SPELL_VISUAL_ZUL_OPEN_GOB = 77330, + SPELL_VISUAL_ZUL_OPEN_GOB = 77330, // Conversation - CONV_ZUL_KINGS_REST_INTRO = 7690, + CONV_ZUL_KINGS_REST_INTRO = 7690, // Spells - SPELL_ZUL_SHADOWFORM = 269058 + SPELL_ZUL_SHADOWFORM = 269058, + SPELL_SUPPRESSION_SLAM_SELECTOR = 270002, + SPELL_SUPPRESSION_SLAM_DAMAGE = 270003, + SPELL_RELEASED_INHIBITORS = 270016 }; constexpr Position ShadowOfZulIntroSpawnPosition = { -944.9617f, 2646.5268f, 832.8684f, 4.716575f }; -// XX - KingsRest - Trigger Intro Event with Shadow of Zul +// 67 - KingsRest - Trigger Intro Event with Shadow of Zul struct at_kings_rest_trigger_intro_event_with_zul : AreaTriggerAI { at_kings_rest_trigger_intro_event_with_zul(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } @@ -139,11 +147,134 @@ private: EventMap _events; }; +enum AnimatedGuardianEvent +{ + EVENT_SUPPRESSION_SLAM = 1 +}; + +// 133935 - Animated Guardian +struct npc_kings_rest_animated_guardian : public ScriptedAI +{ + npc_kings_rest_animated_guardian(Creature* creature) : ScriptedAI(creature), _suppressionSlamCasts(0), _releasedInhibitors(false) { } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_ANIMATED_GUARDIAN_ENGAGE); + _events.ScheduleEvent(EVENT_SUPPRESSION_SLAM, 12s); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override + { + if (!_releasedInhibitors && me->HealthBelowPctDamaged(50, damage)) + { + _releasedInhibitors = true; + _events.DelayEvents(1200ms); + DoCast(SPELL_RELEASED_INHIBITORS); + } + } + + void Reset() override + { + _events.Reset(); + _suppressionSlamCasts = 0; + _releasedInhibitors = false; + } + + 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_SUPPRESSION_SLAM: + DoCast(SPELL_SUPPRESSION_SLAM_SELECTOR); + _suppressionSlamCasts++; + _events.ScheduleEvent(EVENT_SUPPRESSION_SLAM, _suppressionSlamCasts % 2 == 0 ? 12s : 13300ms); + break; + default: + break; + } + } + } + +private: + EventMap _events; + int32 _suppressionSlamCasts; + bool _releasedInhibitors; +}; + +// 270002 - Suppression Slam +class spell_kings_rest_suppression_slam : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUPPRESSION_SLAM_DAMAGE }); + } + + void HandleHit(SpellEffIndex /*effIndex*/) + { + // @TODO: visual is a bit off - requires SPELL_ATTR12_UNK11 impl + GetCaster()->CastSpell(GetHitUnit(), SPELL_SUPPRESSION_SLAM_DAMAGE, false); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_kings_rest_suppression_slam::HandleHit, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 269935 - Bound by Shadow +class spell_kings_rest_bound_by_shadow : public AuraScript +{ + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL) + return; + + GetTarget()->KillSelf(); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_kings_rest_bound_by_shadow::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 276031 - Pit of Despair +class spell_kings_rest_pit_of_despair : public AuraScript +{ + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetCaster()->KillSelf(); + } + + void Register() override + { + AfterEffectApply += AuraEffectRemoveFn(spell_kings_rest_pit_of_despair::OnApply, EFFECT_0, SPELL_AURA_MOD_FEAR, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_kings_rest() { + // Creature + RegisterKingsRestCreatureAI(npc_kings_rest_animated_guardian); + // Areatrigger RegisterAreaTriggerAI(at_kings_rest_trigger_intro_event_with_zul); // Conversation new conversation_kings_rest_intro(); + + // Spells + RegisterSpellScript(spell_kings_rest_suppression_slam); + RegisterSpellScript(spell_kings_rest_bound_by_shadow); + RegisterSpellScript(spell_kings_rest_pit_of_despair); } |