Core/Auras: Implemented SPELL_AURA_DISABLE_INERTIA (506)

Port From (https://github.com/TrinityCore/TrinityCore/commit/d945a118db6d2b423a77c419eb8dd7f4732802a2)
This commit is contained in:
hondacrx
2022-05-10 09:38:14 -04:00
parent 9ee18f2c9e
commit 1f21e6893f
3 changed files with 50 additions and 0 deletions
+6
View File
@@ -5749,6 +5749,12 @@ namespace Game.Entities
if (HasAura(196055)) //DH DoubleJump
setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveEnableDoubleJump, m_movementCounter++));
if (HasAuraType(AuraType.IgnoreMovementForces))
setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveSetIgnoreMovementForces, m_movementCounter++));
if (HasAuraType(AuraType.DisableInertia))
setCompoundState.StateChanges.Add(new MoveSetCompoundState.MoveStateChange(ServerOpcodes.MoveDisableInertia, m_movementCounter++));
if (!setCompoundState.StateChanges.Empty())
{
setCompoundState.MoverGUID = GetGUID();
@@ -395,6 +395,32 @@ namespace Game.Entities
return true;
}
public bool SetDisableInertia(bool disable)
{
if (disable == HasExtraUnitMovementFlag2(MovementFlags3.DisableInertia))
return false;
if (disable)
AddExtraUnitMovementFlag2(MovementFlags3.DisableInertia);
else
RemoveExtraUnitMovementFlag2(MovementFlags3.DisableInertia);
Player playerMover = GetUnitBeingMoved()?.ToPlayer();
if (playerMover != null)
{
MoveSetFlag packet = new(disable ? ServerOpcodes.MoveDisableInertia : ServerOpcodes.MoveEnableInertia);
packet.MoverGUID = GetGUID();
packet.SequenceIndex = m_movementCounter++;
playerMover.SendPacket(packet);
MoveUpdate moveUpdate = new();
moveUpdate.Status = m_movementInfo;
SendMessageToSet(moveUpdate, playerMover);
}
return true;
}
public void JumpTo(float speedXY, float speedZ, float angle, Position dest = null)
{
if (dest != null)
+18
View File
@@ -2303,6 +2303,24 @@ namespace Game.Spells
target.SetIgnoreMovementForces(apply);
}
[AuraEffectHandler(AuraType.IgnoreMovementForces)]
void HandleDisableInertia(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply)
{
if (!mode.HasFlag(AuraEffectHandleModes.SendForClientMask))
return;
Unit target = aurApp.GetTarget();
if (!apply)
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target.HasAuraType(GetAuraType()))
return;
}
target.SetDisableInertia(apply);
}
/****************************/
/*** THREAT ***/
/****************************/