using Mina.Core.Buffer; using FSO.Common.Serialization.TypeSerializers; namespace FSO.Common.Serialization.Primitives { [cTSOValue(0x9736027)] public class cTSOTopicUpdateMessage : IoBufferSerializable, IoBufferDeserializable { public uint MessageId { get; set; } = 0xA97360C5; public uint StructType { get; set; } public uint StructId { get; set; } public uint StructField { get; set; } public uint[] DotPath { get; set; } public uint Unknown1 { get; set; } public uint Unknown2 { get; set; } public object Value { get; set; } public string ReasonText { get; set; } public void Serialize(IoBuffer output, ISerializationContext context) { output.PutUInt32(Unknown1); //Update counter output.PutUInt32(MessageId); //Message id output.PutUInt32(Unknown2); //Unknown if (DotPath != null) { output.PutUInt32((uint)DotPath.Length); foreach(var component in DotPath){ output.PutUInt32(component); } } else { //Vector size output.PutUInt32(3); output.PutUInt32(StructType); output.PutUInt32(StructId); output.PutUInt32(StructField); } //Write value context.ModelSerializer.Serialize(output, Value, context, true); output.PutPascalVLCString(ReasonText); } public void Deserialize(IoBuffer input, ISerializationContext context) { Unknown1 = input.GetUInt32(); MessageId = input.GetUInt32(); Unknown2 = input.GetUInt32(); var vectorSize = input.GetUInt32(); DotPath = new uint[vectorSize]; for(int i=0; i < vectorSize; i++){ DotPath[i] = input.GetUInt32(); } var valueType = input.GetUInt32(); this.Value = context.ModelSerializer.Deserialize(valueType, input, context); //this.ReasonText = input.GetPascalVLCString(); } } }