public byte[] Build(Blowfish blowfish, uint source, uint target) { SubPacketAttribute attribute = (SubPacketAttribute)Attribute.GetCustomAttribute(GetType(), typeof(SubPacketAttribute)); byte[] payload; using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) Write(writer); payload = stream.ToArray(); } if (attribute.ServerOpcode != SubPacketServerOpcode.None) { SubMessageHeader = new MessageHeader { Unknown1 = 0x14, Opcode = (ushort)attribute.ServerOpcode, Timestamp = (uint)DateTimeOffset.Now.ToUnixTimeSeconds() }; payload = SubMessageHeader.Marshal().Concat(payload).ToArray(); } blowfish?.Encipher(payload, 0, payload.Length); SubHeader = new Header { Size = (ushort)(Header.Length + payload.Length), Type = attribute.ServerOpcode != SubPacketServerOpcode.None ? SubPacketType.Message : attribute.Type, Source = source, Target = target }; return(SubHeader.Marshal().Concat(payload).ToArray()); }