From: miniduikboot <5243971+miniduikboot@users.noreply.github.com> Date: Fri, 2 Apr 2021 22:08:51 +0000 (+0200) Subject: Fix InnerShipStatus deserializing X-Git-Tag: v1.4.0~14^2~13^2~3 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=47aebe7b7b564893efa42bea96fe09eac3a412f6;p=rhonda%2Fimpostor.git Fix InnerShipStatus deserializing 3.31 now distributes them as multiple messages This also explains the two weird bytes in HeliSabotage, so these can be removed too --- diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs index 575a64a..c571c5a 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs @@ -56,31 +56,13 @@ namespace Impostor.Server.Net.Inner.Objects return; } - if (initialState) + while (reader.Position < reader.Length) { - // TODO: (_systems[SystemTypes.Doors] as DoorsSystemType).SetDoors(); - foreach (var systemType in SystemTypeHelpers.AllTypes) + IMessageReader msgReader = reader.ReadMessage(); + SystemTypes type = (SystemTypes)msgReader.Tag; + if (_systems.TryGetValue(type, out var value)) { - if (_systems.TryGetValue(systemType, out var system)) - { - system.Deserialize(reader, true); - } - } - } - else - { - var count = reader.ReadPackedUInt32(); - - foreach (var systemType in SystemTypeHelpers.AllTypes) - { - // TODO: Not sure what is going on here, check. - if ((count & 1 << (int)(systemType & (SystemTypes.ShipTasks | SystemTypes.Doors))) != 0L) - { - if (_systems.TryGetValue(systemType, out var system)) - { - system.Deserialize(reader, false); - } - } + value.Deserialize(msgReader, initialState); } } } diff --git a/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs index f29c4b8..22a2a22 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs @@ -31,9 +31,6 @@ namespace Impostor.Server.Net.Inner.Objects.Systems.ShipStatus public void Deserialize(IMessageReader reader, bool initialState) { - // TODO: Find out what these 2 bytes are used for - _ = reader.ReadByte(); - _ = reader.ReadByte(); Countdown = reader.ReadSingle(); Timer = reader.ReadSingle(); ActiveConsoles.Clear(); // TODO: Thread safety