diff --git a/src/Prospect.Unreal/Runtime/UWorld.cs b/src/Prospect.Unreal/Runtime/UWorld.cs index 34db3f9..97c569c 100644 --- a/src/Prospect.Unreal/Runtime/UWorld.cs +++ b/src/Prospect.Unreal/Runtime/UWorld.cs @@ -286,7 +286,16 @@ public abstract partial class UWorld : FNetworkNotify, IAsyncDisposable } else { - throw new NotImplementedException("Encryption"); + // The Cycle client offers an EncryptionToken in NMT_Hello. A UE + // connection only switches to AES once the server replies with + // NMT_EncryptionAck — the token is an offer, not a requirement. + // Implementing the full AES-GCM packet handler is a large effort, + // so first proceed WITHOUT encryption: never send the ack and go + // straight to the challenge. If the client keeps talking plaintext + // we're done; if it insists on encryption it will drop here and we + // know AES is mandatory. + Logger.Warning("Client sent EncryptionToken ({Len} chars) — proceeding WITHOUT encryption (no EncryptionAck)", encryptionToken.Length); + connection.SendChallengeControlMessage(); } } break;