diff --git a/Projects/Server/Serialization/IGenericReader.cs b/Projects/Server/Serialization/IGenericReader.cs index 9f8617c85..ca88ba6b6 100644 --- a/Projects/Server/Serialization/IGenericReader.cs +++ b/Projects/Server/Serialization/IGenericReader.cs @@ -36,7 +36,16 @@ namespace Server DateTime ReadDateTime() => new(ReadLong(), DateTimeKind.Utc); TimeSpan ReadTimeSpan() => new(ReadLong()); - DateTime ReadDeltaTime() => new(ReadLong() + DateTime.UtcNow.Ticks, DateTimeKind.Utc); + + DateTime ReadDeltaTime() + { + return ReadLong() switch + { + long.MinValue => DateTime.MinValue, + long.MaxValue => DateTime.MaxValue, + var delta => new DateTime(delta + DateTime.UtcNow.Ticks, DateTimeKind.Utc) + }; + } decimal ReadDecimal() => new(stackalloc int[4] { ReadInt(), ReadInt(), ReadInt(), ReadInt() }); int ReadEncodedInt() { diff --git a/Projects/Server/Serialization/IGenericWriter.cs b/Projects/Server/Serialization/IGenericWriter.cs index 5507f8799..36be59a1a 100644 --- a/Projects/Server/Serialization/IGenericWriter.cs +++ b/Projects/Server/Serialization/IGenericWriter.cs @@ -41,7 +41,7 @@ namespace Server var ticks = (value.Kind switch { DateTimeKind.Local => value.ToUniversalTime(), - DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), _ => value }).Ticks; @@ -49,10 +49,21 @@ namespace Server } void WriteDeltaTime(DateTime value) { + if (value == DateTime.MinValue) + { + Write(long.MinValue); + return; + } + + if (value == DateTime.MaxValue) + { + Write(long.MaxValue); + } + var ticks = (value.Kind switch { DateTimeKind.Local => value.ToUniversalTime(), - DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), _ => value }).Ticks;