public static ReplicationData ReadReplicationData(this PacketReader reader) { var result = new ReplicationData(); byte primaryIdArray = reader.ReadByte(); result.UnitNetID = reader.ReadNetID(); for (var primaryId = 0; primaryId < result.Data.Length; primaryId++) { if ((primaryIdArray & (1 << primaryId)) == 0) { continue; } var seconadaryIdArray = reader.ReadUInt32(); var dataCount = reader.ReadByte(); var data = reader.ReadBytes(dataCount); result.Data[primaryId] = new Tuple <uint, byte[]>(seconadaryIdArray, data); } return(result); }
public static void WriteReplicationData(this PacketWriter writer, ReplicationData result) { byte primaryIdArray = 0; for (var primaryId = 0; primaryId < result.Data.Length; primaryId++) { if (result.Data[primaryId].Item1 != 0) { primaryIdArray |= (byte)(1 << primaryId); } } writer.WriteByte(primaryIdArray); writer.WriteNetID(result.UnitNetID); for (var primaryId = 0; primaryId < result.Data.Length; primaryId++) { if (result.Data[primaryId].Item1 != 0) { writer.WriteUInt32(result.Data[primaryId].Item1); writer.WriteByte((byte)result.Data[primaryId].Item2.Length); writer.WriteBytes(result.Data[primaryId].Item2); } } }