diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 570073674..77d495b20 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -410,7 +410,6 @@ namespace Game.Entities SetIsCombatDisallowed(cInfo.FlagsExtra.HasFlag(CreatureFlagsExtra.CannotEnterCombat)); - LoadTemplateRoot(); InitializeMovementFlags(); LoadCreaturesAddon(); @@ -1684,8 +1683,15 @@ namespace Game.Entities void LoadTemplateRoot() { - if (GetMovementTemplate().IsRooted()) - SetControlled(true, UnitState.Root); + SetTemplateRooted(GetMovementTemplate().IsRooted()); + } + + public bool IsTemplateRooted() { return _staticFlags.HasFlag(CreatureStaticFlags.Sessile); } + + public void SetTemplateRooted(bool rooted) + { + _staticFlags.ApplyFlag(CreatureStaticFlags.Sessile, rooted); + SetControlled(rooted, UnitState.Root); } public override bool HasQuest(uint questId) @@ -2521,6 +2527,8 @@ namespace Game.Entities void InitializeMovementFlags() { + LoadTemplateRoot(); + // It does the same, for now UpdateMovementFlags(); } diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index a42e0d2f4..814c0e27e 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -721,7 +721,7 @@ namespace Game.Entities SendMessageToSet(packet, true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root) && !ToCreature().GetMovementTemplate().IsRooted()) + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root) && !ToCreature().IsTemplateRooted()) { if (IsGravityDisabled()) SetAnimTier(AnimTier.Fly); @@ -1096,7 +1096,7 @@ namespace Game.Entities SendMessageToSet(packet, true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root) && !ToCreature().GetMovementTemplate().IsRooted()) + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root) && !ToCreature().IsTemplateRooted()) { if (IsGravityDisabled()) SetAnimTier(AnimTier.Fly); @@ -1224,7 +1224,7 @@ namespace Game.Entities SetStunned(false); break; case UnitState.Root: - if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity) || GetVehicle() != null || (IsCreature() && ToCreature().GetMovementTemplate().IsRooted())) + if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2) || HasAuraType(AuraType.ModRootDisableGravity) || GetVehicle() != null || (IsCreature() && ToCreature().IsTemplateRooted())) return; ClearUnitState(state);