diff --git a/src/Prospect.Unreal/Net/UNetConnection.cs b/src/Prospect.Unreal/Net/UNetConnection.cs index 8bf0239..dbf1b04 100644 --- a/src/Prospect.Unreal/Net/UNetConnection.cs +++ b/src/Prospect.Unreal/Net/UNetConnection.cs @@ -532,6 +532,19 @@ public abstract class UNetConnection : UPlayer return; } + // The Cycle client (UE4 R3.5.0) writes one extra bit between the packet's + // ack history and the packet-info payload that stock UE 4.27 (EngineNetVer + // 16) does not. Bit-decoding real client packets showed the header is 65 + // bits, not 64: consuming this bit realigns everything downstream — the + // bHasPacketInfoPayload flag, the 10-bit jitter clock and bHasServerFrameTime + // then land exactly, and the first control-channel bunch parses cleanly + // (ChIndex 0, NMT_Hello). Observed always 0 in captures. + var bCycleExtraHeaderBit = reader.ReadBit(); + if (bCycleExtraHeaderBit) + { + Logger.Warning("[HS-HDR] Cycle extra header bit was set (expected 0)"); + } + var bHasPacketInfoPayload = true; if (reader.EngineNetVer() > EEngineNetworkVersionHistory.HISTORY_JITTER_IN_HEADER)