diff --git a/Subsurface/Source/Items/Components/Machines/Pump.cs b/Subsurface/Source/Items/Components/Machines/Pump.cs index 97911bfa5..cf7def032 100644 --- a/Subsurface/Source/Items/Components/Machines/Pump.cs +++ b/Subsurface/Source/Items/Components/Machines/Pump.cs @@ -236,8 +236,13 @@ namespace Barotrauma.Items.Components public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { - FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f; - IsActive = msg.ReadBoolean(); + float flowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f; + bool isActive = msg.ReadBoolean(); + + if (!item.CanClientAccess(c)) return; + + FlowPercentage = flowPercentage; + IsActive = isActive; } public void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null) diff --git a/Subsurface/Source/Items/Components/Machines/Radar.cs b/Subsurface/Source/Items/Components/Machines/Radar.cs index c1903dbc3..c7c6a449a 100644 --- a/Subsurface/Source/Items/Components/Machines/Radar.cs +++ b/Subsurface/Source/Items/Components/Machines/Radar.cs @@ -433,7 +433,11 @@ namespace Barotrauma.Items.Components public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { - IsActive = msg.ReadBoolean(); + bool isActive = msg.ReadBoolean(); + + if (!item.CanClientAccess(c)) return; + + IsActive = isActive; isActiveTickBox.Selected = IsActive; item.CreateServerEvent(this); diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs index fff852a7b..6c4a5f286 100644 --- a/Subsurface/Source/Items/Components/Machines/Reactor.cs +++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs @@ -563,11 +563,18 @@ namespace Barotrauma.Items.Components public void ServerRead(NetIncomingMessage msg, Client c) { - AutoTemp = msg.ReadBoolean(); - ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8); + bool autoTemp = msg.ReadBoolean(); + float shutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8); + float coolingRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); + float fissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); - CoolingRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); - FissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); + if (!item.CanClientAccess(c)) return; + + AutoTemp = autoTemp; + ShutDownTemp = shutDownTemp; + + CoolingRate = coolingRate; + FissionRate = fissionRate; //need to create a server event to notify all clients of the changed state unsentChanges = true; diff --git a/Subsurface/Source/Items/Components/Machines/Steering.cs b/Subsurface/Source/Items/Components/Machines/Steering.cs index 3b198e660..e34a28b4c 100644 --- a/Subsurface/Source/Items/Components/Machines/Steering.cs +++ b/Subsurface/Source/Items/Components/Machines/Steering.cs @@ -488,7 +488,11 @@ namespace Barotrauma.Items.Components public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { - AutoPilot = msg.ReadBoolean(); + bool autoPilot = msg.ReadBoolean(); + + if (!item.CanClientAccess(c)) return; + + AutoPilot = autoPilot; if (!AutoPilot) { diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 4ea7d2100..930cd9810 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -1356,6 +1356,11 @@ namespace Barotrauma return Vector2.Distance(WorldPosition, worldPosition) < PickDistance; } + public bool CanClientAccess(Client c) + { + return c != null && c.Character != null && c.Character.CanAccessItem(this); + } + public bool Pick(Character picker, bool ignoreRequiredItems=false, bool forceSelectKey=false, bool forceActionKey=false) { bool hasRequiredSkills = true;