diff options
-rw-r--r-- | sql/updates/world/master/2022_02_06_00_world.sql | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 64 |
2 files changed, 71 insertions, 0 deletions
diff --git a/sql/updates/world/master/2022_02_06_00_world.sql b/sql/updates/world/master/2022_02_06_00_world.sql new file mode 100644 index 00000000000..11eb4aa2ed9 --- /dev/null +++ b/sql/updates/world/master/2022_02_06_00_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `areatrigger_template` WHERE (`IsServerSide`=0 AND `Id`=23072); +INSERT INTO `areatrigger_template` (`Id`, `IsServerSide`, `Type`, `Flags`, `Data0`, `Data1`, `Data2`, `Data3`, `Data4`, `Data5`, `VerifiedBuild`) VALUES +(23072, 0, 4, 0, 20, 20, 16, 16, 8, 8, 41488); + +DELETE FROM `areatrigger_create_properties` WHERE `Id`=19042; +INSERT INTO `areatrigger_create_properties` (`Id`, `AreaTriggerId`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `TimeToTarget`, `TimeToTargetScale`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `ScriptName`, `VerifiedBuild`) VALUES +(19042, 23072, 0, 0, 0, 0, -1, 0, 0, 0, 30000, 4, 20, 20, 16, 16, 8, 8, 'areatrigger_pal_ashen_hallow', 41488); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index a4422b84949..5749661271e 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -93,6 +93,14 @@ enum PaladinSpells SPELL_PALADIN_ZEAL_AURA = 269571, }; +enum PaladinCovenantSpells +{ + SPELL_PALADIN_ASHEN_HALLOW = 316958, + SPELL_PALADIN_ASHEN_HALLOW_DAMAGE = 317221, + SPELL_PALADIN_ASHEN_HALLOW_HEAL = 317223, + SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER = 330382 +}; + enum PaladinSpellVisualKit { PALADIN_VISUAL_KIT_DIVINE_STORM = 73892 @@ -106,6 +114,61 @@ enum PaladinSpellVisual PALADIN_VISUAL_SPELL_HOLY_SHOCK_HEAL_CRIT = 83880, }; +// 19042 - Ashen Hallow +struct areatrigger_pal_ashen_hallow : AreaTriggerAI +{ + areatrigger_pal_ashen_hallow(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) {} + + void RefreshPeriod() + { + if (Unit* caster = at->GetCaster()) + { + if (AuraEffect const* ashen = caster->GetAuraEffect(SPELL_PALADIN_ASHEN_HALLOW, EFFECT_1)) + _period = Milliseconds(ashen->GetPeriod()); + } + } + + void OnCreate() override + { + RefreshPeriod(); + _refreshTimer = _period; + } + + void OnUpdate(uint32 diff) override + { + _refreshTimer -= Milliseconds(diff); + + while (_refreshTimer <= 0s) + { + if (Unit* caster = at->GetCaster()) + { + caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_HEAL); + caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_DAMAGE); + } + + RefreshPeriod(); + + _refreshTimer += _period; + } + } + + void OnUnitEnter(Unit* unit) override + { + if (unit->GetGUID() == at->GetCasterGuid()) + unit->CastSpell(unit, SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER, true); + } + + void OnUnitExit(Unit* unit) override + { + if (unit->GetGUID() == at->GetCasterGuid()) + unit->RemoveAura(SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER); + } + +private: + Milliseconds _refreshTimer; + Milliseconds _period; +}; + /* // 31850 - Ardent Defender class spell_pal_ardent_defender : public SpellScriptLoader @@ -1308,6 +1371,7 @@ class spell_pal_zeal : public AuraScript void AddSC_paladin_spell_scripts() { //new spell_pal_ardent_defender(); + RegisterAreaTriggerAI(areatrigger_pal_ashen_hallow); RegisterSpellScript(spell_pal_blessing_of_protection); RegisterSpellScript(spell_pal_blinding_light); RegisterSpellScript(spell_pal_crusader_might); |