From 1f00a96b1e8a98171242c10703a59bfa8940afd0 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 9 May 2022 12:45:56 -0400 Subject: [PATCH] Scripts/Spells: Fix monk roll Port From (https://github.com/TrinityCore/TrinityCore/commit/e0790d81078a491650279188d0c189526fed472c) --- Source/Scripts/Spells/Monk.cs | 71 ++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/Source/Scripts/Spells/Monk.cs b/Source/Scripts/Spells/Monk.cs index 67521e5b7..d5e22db31 100644 --- a/Source/Scripts/Spells/Monk.cs +++ b/Source/Scripts/Spells/Monk.cs @@ -32,6 +32,9 @@ namespace Scripts.Spells.Monk public const uint CracklingJadeLightningKnockbackCd = 117953; public const uint ProvokeSingleTarget = 116189; public const uint ProvokeAoe = 118635; + public const uint NoFeatherFall = 79636; + public const uint RollBackward = 109131; + public const uint RollForward = 107427; public const uint SoothingMist = 115175; public const uint StanceOfTheSpiritedCrane = 154436; public const uint StaggerDamageAura = 124255; @@ -142,9 +145,73 @@ namespace Scripts.Spells.Monk } } - //static constexpr SpellEffIndex AuraStaggerEffectTick = EFFECT_0; - //static constexpr SpellEffIndex AuraStaggerEffectTotal = EFFECT_1; + [Script] // 109132 - Roll + class spell_monk_roll : SpellScript + { + public override bool Validate(SpellInfo spellInfo) + { + return ValidateSpellInfo(SpellIds.RollBackward, SpellIds.RollForward, SpellIds.NoFeatherFall); + } + SpellCastResult CheckCast() + { + if (GetCaster().HasUnitState(UnitState.Root)) + return SpellCastResult.Rooted; + return SpellCastResult.SpellCastOk; + } + + void HandleDummy(uint effIndex) + { + GetCaster().CastSpell(GetCaster(), GetCaster().HasUnitMovementFlag(MovementFlag.Backward) ? SpellIds.RollBackward : SpellIds.RollForward, + new CastSpellExtraArgs(TriggerCastFlags.IgnoreCastInProgress)); + GetCaster().CastSpell(GetCaster(), SpellIds.NoFeatherFall, true); + } + + public override void Register() + { + OnCheckCast.Add(new CheckCastHandler(CheckCast)); + OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy)); + } + } + + // 107427 - Roll + [Script] // 109131 - Roll (backward) + class spell_monk_roll_aura : AuraScript + { + void CalcMovementAmount(AuraEffect aurEff, ref int amount, ref bool canBeRecalculated) + { + amount += 100; + } + + void CalcImmunityAmount(AuraEffect aurEff, ref int amount, ref bool canBeRecalculated) + { + amount -= 100; + } + + void ChangeRunBackSpeed(AuraEffect aurEff, AuraEffectHandleModes mode) + { + GetTarget().SetSpeed(UnitMoveType.RunBack, GetTarget().GetSpeed(UnitMoveType.Run)); + } + + void RestoreRunBackSpeed(AuraEffect aurEff, AuraEffectHandleModes mode) + { + GetTarget().UpdateSpeed(UnitMoveType.RunBack); + } + + public override void Register() + { + // Values need manual correction + DoEffectCalcAmount.Add(new EffectCalcAmountHandler(CalcMovementAmount, 0, AuraType.ModSpeedNoControl)); + DoEffectCalcAmount.Add(new EffectCalcAmountHandler(CalcMovementAmount, 2, AuraType.ModMinimumSpeed)); + DoEffectCalcAmount.Add(new EffectCalcAmountHandler(CalcImmunityAmount, 5, AuraType.MechanicImmunity)); + DoEffectCalcAmount.Add(new EffectCalcAmountHandler(CalcImmunityAmount, 6, AuraType.MechanicImmunity)); + + // This is a special aura that sets backward run speed equal to forward speed + AfterEffectApply.Add(new EffectApplyHandler(ChangeRunBackSpeed, 4, AuraType.UseNormalMovementSpeed, AuraEffectHandleModes.Real)); + AfterEffectRemove.Add(new EffectApplyHandler(RestoreRunBackSpeed, 4, AuraType.UseNormalMovementSpeed, AuraEffectHandleModes.Real)); + } + } + [Script] // 115069 - Stagger class spell_monk_stagger : AuraScript {