From 8d7ba1061ce7bea8fbc7a2425d36ea28b70750cf Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 16 Feb 2022 13:05:11 -0500 Subject: [PATCH] Core/Spells: Implemented target 137 TARGET_DEST_CASTER_MOVEMENT_DIRECTION Port From (https://github.com/TrinityCore/TrinityCore/commit/f515424217b6470b73269c7671a3086ff19c2359) --- .../Framework/Constants/Spells/SpellConst.cs | 2 +- Source/Game/Entities/Object/WorldObject.cs | 4 +- Source/Game/Spells/Spell.cs | 42 +++++++++++++++++++ Source/Game/Spells/SpellInfo.cs | 2 +- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index 50afe7a9f..259549c3d 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -2711,7 +2711,7 @@ namespace Framework.Constants UnitLineCasterToDestEnemy = 134, UnitLineCasterToDest = 135, Unk136 = 136, - Unk137 = 137, + DestCasterMovementDirection = 137, DestDestGround = 138, Unk139 = 139, Unk140 = 140, diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index eb8f83990..3b478342c 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -3591,13 +3591,13 @@ namespace Game.Entities public void SetMovementFlags(MovementFlag f) { flags = f; } public void AddMovementFlag(MovementFlag f) { flags |= f; } public void RemoveMovementFlag(MovementFlag f) { flags &= ~f; } - public bool HasMovementFlag(MovementFlag f) { return Convert.ToBoolean(flags & f); } + public bool HasMovementFlag(MovementFlag f) { return (flags & f) != 0; } public MovementFlag2 GetMovementFlags2() { return flags2; } public void SetMovementFlags2(MovementFlag2 f) { flags2 = f; } public void AddMovementFlag2(MovementFlag2 f) { flags2 |= f; } public void RemoveMovementFlag2(MovementFlag2 f) { flags2 &= ~f; } - public bool HasMovementFlag2(MovementFlag2 f) { return Convert.ToBoolean(flags2 & f); } + public bool HasMovementFlag2(MovementFlag2 f) { return (flags2 & f) != 0; } public void SetFallTime(uint time) { jump.fallTime = time; } diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index dfe2c0065..69d50b174 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -876,6 +876,7 @@ namespace Game.Spells break; } case Targets.DestCasterFrontLeap: + case Targets.DestCasterMovementDirection: { Unit unitCaster = m_caster.ToUnit(); if (unitCaster == null) @@ -883,6 +884,47 @@ namespace Game.Spells float dist = spellEffectInfo.CalcRadius(unitCaster); float angle = targetType.CalcDirectionAngle(); + if (targetType.GetTarget() == Targets.DestCasterMovementDirection) + { + switch (m_caster.m_movementInfo.GetMovementFlags() & (MovementFlag.Forward | MovementFlag.Backward | MovementFlag.StrafeLeft | MovementFlag.StrafeRight)) + { + case MovementFlag.None: + case MovementFlag.Forward: + case MovementFlag.Forward | MovementFlag.Backward: + case MovementFlag.StrafeLeft | MovementFlag.StrafeRight: + case MovementFlag.Forward | MovementFlag.StrafeLeft | MovementFlag.StrafeRight: + case MovementFlag.Forward | MovementFlag.Backward | MovementFlag.StrafeLeft | MovementFlag.StrafeRight: + angle = 0.0f; + break; + case MovementFlag.Backward: + case MovementFlag.Backward | MovementFlag.StrafeLeft | MovementFlag.StrafeRight: + angle = MathF.PI; + break; + case MovementFlag.StrafeLeft: + case MovementFlag.Forward | MovementFlag.Backward | MovementFlag.StrafeLeft: + angle = (MathF.PI / 2); + break; + case MovementFlag.Forward | MovementFlag.StrafeLeft: + angle = (MathF.PI / 4); + break; + case MovementFlag.Backward | MovementFlag.StrafeLeft: + angle = (3 * MathF.PI / 4); + break; + case MovementFlag.StrafeRight: + case MovementFlag.Forward | MovementFlag.Backward | MovementFlag.StrafeRight: + angle = (-MathF.PI / 2); + break; + case MovementFlag.Forward | MovementFlag.StrafeRight: + angle = (-MathF.PI / 4); + break; + case MovementFlag.Backward | MovementFlag.StrafeRight: + angle = (-3 * MathF.PI / 4); + break; + default: + angle = 0.0f; + break; + } + } Position pos = new(dest.Position); diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index 19dab186f..8f8ac0dbf 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -5060,7 +5060,7 @@ namespace Game.Spells new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Dest, SpellTargetSelectionCategories.Line, SpellTargetCheckTypes.Enemy, SpellTargetDirectionTypes.None), // 134 TARGET_UNIT_LINE_CASTER_TO_DEST_ENEMY new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Dest, SpellTargetSelectionCategories.Line, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 135 TARGET_UNIT_LINE_CASTER_TO_DEST new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 136 - new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 137 + new StaticData(SpellTargetObjectTypes.Dest, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 137 TARGET_DEST_CASTER_MOVEMENT_DIRECTION new StaticData(SpellTargetObjectTypes.Dest, SpellTargetReferenceTypes.Dest, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 138 TARGET_DEST_DEST_GROUND new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 139 new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 140