From 7d6b86fb2e83cdf1272e68d853c5d7ca5a668d71 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 5 Jan 2023 17:26:59 -0500 Subject: [PATCH] Core/Auras: Implemented SPELL_AURA_MOD_ROOT_DISABLE_GRAVITY Port From (https://github.com/TrinityCore/TrinityCore/commit/dbed48becc30e10b4b17d95f595056d08a987bad) --- Source/Game/Entities/Player/Player.cs | 5 ++++- Source/Game/Entities/Unit/Unit.Movement.cs | 4 ++-- Source/Game/Entities/Unit/Unit.Spells.cs | 2 +- Source/Game/Spells/Auras/AuraEffect.cs | 22 ++++++++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 0221f1226..68cd8abc6 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -5245,7 +5245,7 @@ namespace Game.Entities MoveSetCompoundState setCompoundState = new(); // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied. - if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2)) + if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity)) setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveRoot, m_movementCounter++)); if (HasAuraType(AuraType.FeatherFall)) @@ -5257,6 +5257,9 @@ namespace Game.Entities if (HasAuraType(AuraType.Hover)) setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveSetHovering, m_movementCounter++)); + if (HasAuraType(AuraType.ModRootDisableGravity) || HasAuraType(AuraType.ModStunDisableGravity)) + setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveDisableGravity, m_movementCounter++)); + if (HasAuraType(AuraType.CanTurnWhileFalling)) setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveSetCanTurnWhileFalling, m_movementCounter++)); diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index d986eaf5a..e99b34989 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -1223,7 +1223,7 @@ namespace Game.Entities SetStunned(false); break; case UnitState.Root: - if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || GetVehicle() != null || (IsCreature() && ToCreature().GetMovementTemplate().IsRooted())) + if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity) || GetVehicle() != null || (IsCreature() && ToCreature().GetMovementTemplate().IsRooted())) return; ClearUnitState(state); @@ -1258,7 +1258,7 @@ namespace Game.Entities if (HasUnitState(UnitState.Stunned) || HasAuraType(AuraType.ModStun) || HasAuraType(AuraType.ModStunDisableGravity)) SetStunned(true); - if (HasUnitState(UnitState.Root) || HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2)) + if (HasUnitState(UnitState.Root) || HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity)) SetRooted(true); if (HasUnitState(UnitState.Confused) || HasAuraType(AuraType.ModConfuse)) diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 9650ec865..aeda7bb24 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -1819,7 +1819,7 @@ namespace Game.Entities public bool HasInvisibilityAura() { return HasAuraType(AuraType.ModInvisibility); } public bool IsFeared() { return HasAuraType(AuraType.ModFear); } public bool IsFrozen() { return HasAuraState(AuraStateType.Frozen); } - public bool HasRootAura() { return HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2); } + public bool HasRootAura() { return HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity); } public bool IsPolymorphed() { uint transformId = GetTransformSpell(); diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index be53c05ed..9e51de1ad 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -2467,6 +2467,28 @@ namespace Game.Spells target.SetControlled(false, UnitState.Fleeing); } + [AuraEffectHandler(AuraType.ModRootDisableGravity)] + void HandleAuraModRootAndDisableGravity(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) + { + if (!mode.HasAnyFlag(AuraEffectHandleModes.Real)) + return; + + Unit target = aurApp.GetTarget(); + + target.SetControlled(apply, UnitState.Root); + + // Do not remove DisableGravity if there are more than this auraEffect of that kind on the unit or if it's a creature with DisableGravity on its movement template. + if (!apply + && (target.HasAuraType(GetAuraType()) + || target.HasAuraType(AuraType.ModStunDisableGravity) + || (target.IsCreature() && target.ToCreature().GetMovementTemplate().Flight == CreatureFlightMovementType.DisableGravity))) + return; + + if (target.SetDisableGravity(apply)) + if (!apply && !target.IsFlying()) + target.GetMotionMaster().MoveFall(); + } + [AuraEffectHandler(AuraType.ModStunDisableGravity)] void HandleAuraModStunAndDisableGravity(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) {