Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Certain interactions can not sync and cause an error due to packet size being too big or cause remote packet read error #415

Open
SokyranTheDragon opened this issue Jan 6, 2024 · 0 comments
Labels
bug Something isn't working.

Comments

@SokyranTheDragon
Copy link
Member

There's (at least) 2 ways to reach the packet size limit using vanilla RimWorld functionality:

The first (and fully vanilla way) to achieve this is trying to designate an area of at least 10918 cells (106 by 103 area). This will be met with an error due to packet size being too big, causing the interaction to not sync. If at least one of those cells was skipped (already designated before), syncing will work as intended. However, it may happen when designating smaller area depending on extra data that's synced (for example designator needing to sync extra data). This can be worked around by designating smaller areas, however - this is mildly annoying to do.

The second way to achieve this requires having significant enough amount of ThingDefs - at least 5054 (assuming all non-vanilla defs are included in stockpile configuration). Vanilla + DLCs have 2605 ThingDefs in total, so at the moment (and in the foreseeable future) this issue can only happen with extra mods (besides MP and Harmony). The issue itself happens when trying to copy/paste stockpile settings. There's no way to work around this besides manually changing the stockpile settings or removing some of the mods.

The 2 possible errors for designators (depending on how close the packet was to the size limit):

The first one (very close to packet size limit) - host only, a client will get remote packet read error.

Exception handling packet by LocalServerConn: Multiplayer.Common.PacketSendException: Packet Server_Command too big for sending (65538>65536)
  at Multiplayer.Common.ConnectionBase.Send (Multiplayer.Common.Packets id, System.Byte[] message, System.Boolean reliable) [0x0003c] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.CommandHandler.Send (Multiplayer.Common.CommandType cmd, System.Int32 factionId, System.Int32 mapId, System.Byte[] data, Multiplayer.Common.ServerPlayer sourcePlayer, Multiplayer.Common.ServerPlayer fauxSource) [0x00141] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.ServerPlayingState.HandleClientCommand (Multiplayer.Common.ByteReader data) [0x0003e] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition.FastInvoke_HandleClientCommand_indirect(object,object[])
  at Multiplayer.Common.ConnectionBase.HandleReceiveMsg (System.Int32 msgId, System.Int32 fragState, Multiplayer.Common.ByteReader reader, System.Boolean reliable) [0x000f6] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.ConnectionBase.HandleReceiveRaw (Multiplayer.Common.ByteReader data, System.Boolean reliable) [0x00032] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Client.Networking.LocalClientConnection+<>c__DisplayClass5_0.<SendRaw>b__0 () [0x00016] in <eeab71685d9f4a769b786d9dc34b45cf>:0  

The second one, happens when not too close to packet size limit.

Root level exception in OnGUI(): Multiplayer.Common.PacketSendException: Packet Client_Command too big for sending (65861>65536)
  at (wrapper dynamic-method) Verse.Designator.Verse.Designator.DesignateMultiCell_Patch2(Verse.Designator,System.Collections.Generic.IEnumerable`1<Verse.IntVec3>)
  at Verse.DesignatorManager.ProcessInputEvents () [0x0012c] in <cd7169108ea74757aa50c5b33d275c15>:0 
  at (wrapper dynamic-method) RimWorld.MapInterface.RimWorld.MapInterface.HandleMapClicks_Patch2(RimWorld.MapInterface)
  at (wrapper dynamic-method) RimWorld.UIRoot_Play.RimWorld.UIRoot_Play.UIRootOnGUI_Patch1(RimWorld.UIRoot_Play)
  at Verse.Root.OnGUI () [0x0003d] in <cd7169108ea74757aa50c5b33d275c15>:0  

The 2 possible errors for copy/pasting stockpile settings (depending on how close the packet was to the size limit):

The first one (very close to packet size limit) - host only, a client will get remote packet read error.

Exception handling packet by LocalServerConn: Multiplayer.Common.PacketSendException: Packet Server_Command too big for sending (65539>65536)
  at Multiplayer.Common.ConnectionBase.Send (Multiplayer.Common.Packets id, System.Byte[] message, System.Boolean reliable) [0x0003c] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.CommandHandler.Send (Multiplayer.Common.CommandType cmd, System.Int32 factionId, System.Int32 mapId, System.Byte[] data, Multiplayer.Common.ServerPlayer sourcePlayer, Multiplayer.Common.ServerPlayer fauxSource) [0x00141] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.ServerPlayingState.HandleClientCommand (Multiplayer.Common.ByteReader data) [0x0003e] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition.FastInvoke_HandleClientCommand_indirect(object,object[])
  at Multiplayer.Common.ConnectionBase.HandleReceiveMsg (System.Int32 msgId, System.Int32 fragState, Multiplayer.Common.ByteReader reader, System.Boolean reliable) [0x000f6] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Common.ConnectionBase.HandleReceiveRaw (Multiplayer.Common.ByteReader data, System.Boolean reliable) [0x00032] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Client.Networking.LocalClientConnection+<>c__DisplayClass5_0.<SendRaw>b__0 () [0x00016] in <eeab71685d9f4a769b786d9dc34b45cf>:0  

The second one, happens when not too close to packet size limit.

Multiplayer.Common.PacketSendException: Packet Client_Command too big for sending (224097>65536)
  at Multiplayer.Common.ConnectionBase.Send (Multiplayer.Common.Packets id, System.Byte[] message, System.Boolean reliable) [0x0003c] in <762e3bbc3a3648f0ac767508b9375a1d>:0 
  at Multiplayer.Client.Extensions.SendCommand (Multiplayer.Common.ConnectionBase conn, Multiplayer.Common.CommandType type, System.Int32 mapId, System.Byte[] data) [0x0002e] in <eeab71685d9f4a769b786d9dc34b45cf>:0 
  at Multiplayer.Client.SyncHandler.SendSyncCommand (System.Int32 mapId, Multiplayer.Common.ByteWriter data) [0x00014] in <eeab71685d9f4a769b786d9dc34b45cf>:0 
  at Multiplayer.Client.SyncMethod.DoSync (System.Object target, System.Object[] args) [0x001d8] in <eeab71685d9f4a769b786d9dc34b45cf>:0 
  at Multiplayer.Client.SyncTemplates.General (System.Int32 internalId, System.Object instance, System.Object[] args) [0x00012] in <eeab71685d9f4a769b786d9dc34b45cf>:0 
  at (wrapper dynamic-method) RimWorld.StorageSettings.RimWorld.StorageSettings.CopyFrom_Patch0(RimWorld.StorageSettings,RimWorld.StorageSettings)
  at RimWorld.StorageSettingsClipboard.PasteInto (RimWorld.StorageSettings s) [0x00000] in <cd7169108ea74757aa50c5b33d275c15>:0 
  at RimWorld.StorageSettingsClipboard+<>c__DisplayClass6_0.<CopyPasteGizmosFor>b__1 () [0x0000b] in <cd7169108ea74757aa50c5b33d275c15>:0 
  at Verse.Command_Action.ProcessInput (UnityEngine.Event ev) [0x00007] in <cd7169108ea74757aa50c5b33d275c15>:0 
  at Verse.GizmoGridDrawer.DrawGizmoGrid (System.Collections.Generic.IEnumerable`1[T] gizmos, System.Single startX, Verse.Gizmo& mouseoverGizmo, System.Func`2[T,TResult] customActivatorFunc, System.Func`2[T,TResult] highlightFunc, System.Func`2[T,TResult] lowlightFunc) [0x00707] in <cd7169108ea74757aa50c5b33d275c15>:0 
  at RimWorld.InspectGizmoGrid.DrawInspectGizmoGridFor (System.Collections.Generic.IEnumerable`1[T] selectedObjects, Verse.Gizmo& mouseoverGizmo) [0x0017a] in <cd7169108ea74757aa50c5b33d275c15>:0  currentSelectable: null 
@SokyranTheDragon SokyranTheDragon added the bug Something isn't working. label Jan 6, 2024
@SokyranTheDragon SokyranTheDragon changed the title Certain interactions can not sync and cause an error due to packet size being too big Certain interactions can not sync and cause an error due to packet size being too big or cause remote packet read error Jan 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working.
Projects
None yet
Development

No branches or pull requests

1 participant