public byte[] Serialize() { if (IsImmediate) /* chat, whatever */ { var ret = new MemoryStream(); var w = new BinaryWriter(ret); w.Write((byte)0xfe); w.Write(OrderString); w.Write(TargetString); return(ret.ToArray()); } switch (OrderString) { // Format: // u8 : orderID. // 0xFF: Full serialized order. // varies: rest of order. default: // TODO: specific serializers for specific orders. { var ret = new MemoryStream(); var w = new BinaryWriter(ret); w.Write((byte)0xFF); w.Write(OrderString); w.Write(UIntFromActor(Subject)); OrderFields fields = 0; if (TargetActor != null) { fields |= OrderFields.TargetActor; } if (TargetLocation != CPos.Zero) { fields |= OrderFields.TargetLocation; } if (TargetString != null) { fields |= OrderFields.TargetString; } if (Queued) { fields |= OrderFields.Queued; } if (ExtraLocation != CPos.Zero) { fields |= OrderFields.ExtraLocation; } w.Write((byte)fields); if (TargetActor != null) { w.Write(UIntFromActor(TargetActor)); } if (TargetLocation != CPos.Zero) { w.Write(TargetLocation.ToInt2()); } if (TargetString != null) { w.Write(TargetString); } if (ExtraLocation != CPos.Zero) { w.Write(ExtraLocation.ToInt2()); } return(ret.ToArray()); } } }