gameserver: consume Cycle's extra header bit -> bunches align (NMT_Hello parses)
Build Game Server / build (push) Successful in 22s
Build Game Server / build (push) Successful in 22s
Bit-decoded real client packets: the header is 65 bits (not stock UE 4.27's 64). One extra bit sits between the ack history and the packet-info payload; consuming it realigns bHasPacketInfoPayload + jitter + bHasServerFrameTime, and the first control-channel bunch parses (ChIndex 0, open, reliable = NMT_Hello). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user