From 0d8d0d62ecdb2ebb3187e77da94594fb7394b57c Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Wed, 6 Dec 2017 14:48:47 -0300 Subject: [PATCH] Fixed ragdolling in multiplayer --- .../Source/Characters/Character.cs | 8 +++--- .../Source/Characters/CharacterNetworking.cs | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index b38a85f58..c29fb7eaf 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -303,7 +303,7 @@ namespace Barotrauma private float stunTimer; public float Stun { - get { return stunTimer; } + get { return IsRagdolled ? 1.0f : stunTimer; } set { if (GameMain.Client != null) return; @@ -686,7 +686,7 @@ namespace Barotrauma case InputType.Use: return !(dequeuedInput.HasFlag(InputNetFlags.Use)) && (prevDequeuedInput.HasFlag(InputNetFlags.Use)); case InputType.Ragdoll: - return !(dequeuedInput.HasFlag(InputType.Ragdoll)) && (prevDequeuedInput.HasFlag(InputType.Ragdoll)); + return !(dequeuedInput.HasFlag(InputNetFlags.Ragdoll)) && (prevDequeuedInput.HasFlag(InputNetFlags.Ragdoll)); default: return false; } @@ -722,6 +722,7 @@ namespace Barotrauma case InputType.Attack: return dequeuedInput.HasFlag(InputNetFlags.Attack); case InputType.Ragdoll: + if (dequeuedInput.HasFlag(InputNetFlags.Ragdoll)) DebugConsole.NewMessage("RAGDOLL", Color.Lime); return dequeuedInput.HasFlag(InputNetFlags.Ragdoll); } return false; @@ -1448,7 +1449,7 @@ namespace Barotrauma UpdateControlled(deltaTime, cam); - if (Stun > 0.0f) + if (stunTimer > 0.0f) { stunTimer -= deltaTime; if (stunTimer < 0.0f && GameMain.Server != null) @@ -1472,7 +1473,6 @@ namespace Barotrauma if (IsRagdolled) { ((HumanoidAnimController)AnimController).Crouching = false; - Stun = Math.Max(0.1f, Stun); AnimController.ResetPullJoints(); selectedConstruction = null; diff --git a/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs index 5abc8331e..217156842 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs @@ -128,6 +128,12 @@ namespace Barotrauma if (!AllowInput) { AnimController.Frozen = false; + if (memInput.Count > 0) + { + prevDequeuedInput = dequeuedInput; + dequeuedInput = memInput[memInput.Count - 1].states; + memInput.RemoveAt(memInput.Count - 1); + } } else if (memInput.Count == 0) { @@ -289,20 +295,20 @@ namespace Barotrauma newInteract = msg.ReadUInt16(); } - if (AllowInput) + //if (AllowInput) + //{ + if (NetIdUtils.IdMoreRecent((ushort)(networkUpdateID - i), LastNetworkUpdateID) && (i < 60)) { - if (NetIdUtils.IdMoreRecent((ushort)(networkUpdateID - i), LastNetworkUpdateID) && (i < 60)) - { - NetInputMem newMem = new NetInputMem(); - newMem.states = newInput; - newMem.intAim = newAim; - newMem.interact = newInteract; + NetInputMem newMem = new NetInputMem(); + newMem.states = newInput; + newMem.intAim = newAim; + newMem.interact = newInteract; - newMem.networkUpdateID = (ushort)(networkUpdateID - i); + newMem.networkUpdateID = (ushort)(networkUpdateID - i); - memInput.Insert(i, newMem); - } + memInput.Insert(i, newMem); } + //} } if (NetIdUtils.IdMoreRecent(networkUpdateID, LastNetworkUpdateID))