public override void Deserialize(Packet rawPacket) { this.rawPacket = rawPacket; var reader = new ArrayPacketReader(rawPacket.Payload); reader.Skip(1); Seed = new byte[4]; reader.Read(Seed, 0, 4); ClientVersion = new Version(reader.ReadInt(), reader.ReadInt(), reader.ReadInt(), reader.ReadInt()); }
public override void Deserialize(Packet rawPacket) { this.rawPacket = rawPacket; var reader = new ArrayPacketReader(rawPacket.Payload); reader.Skip(1); var size = reader.ReadUShort(); GumpId = (GumpInstanceId)reader.ReadUInt(); GumpTypeId = (GumpTypeId)reader.ReadUInt(); X = reader.ReadInt(); Y = reader.ReadInt(); int clen = reader.ReadInt() - 4; int dlen = (int)reader.ReadUInt(); byte[] data = new byte[clen]; reader.Read(data, 0, clen); byte[] decData = new byte[dlen]; Decompress(data, 0, decData, dlen); Commands = Encoding.UTF8.GetString(decData); uint linesNum = reader.ReadUInt(); if (linesNum > 0) { clen = reader.ReadInt() - 4; dlen = reader.ReadInt(); data = new byte[clen]; reader.Read(data, 0, clen); decData = new byte[dlen]; Decompress(data, 0, decData, dlen); TextLines = new string[linesNum]; for (int i = 0, index = 0; i < linesNum; i++) { int length = (decData[index++] << 8) | decData[index++]; byte[] text = new byte[length * 2]; Buffer.BlockCopy(decData, index, text, 0, text.Length); index += text.Length; TextLines[i] = Encoding.BigEndianUnicode.GetString(text); } } else { TextLines = Array.Empty <string>(); } }
public override void Deserialize(Packet rawPacket) { this.rawPacket = rawPacket; var reader = new ArrayPacketReader(rawPacket.Payload); reader.Skip(3); SpeakerId = reader.ReadObjectId(); SpeakerBody = reader.ReadModelId(); Type = (SpeechType)reader.ReadByte(); Color = reader.ReadColor(); Font = reader.ReadUShort(); MessageId = new MessageId(reader.ReadInt()); Name = reader.ReadString(29); Arguments = reader.ReadNullTerminatedUnicodeString(); }
public override void Deserialize(Packet rawPacket) { this.rawPacket = rawPacket; var reader = new ArrayPacketReader(rawPacket.Payload); reader.Skip(1); var packetSize = reader.ReadUShort(); SpeakerId = reader.ReadObjectId(); SpeakerBody = reader.ReadModelId(); reader.ReadByte(); // type Color = reader.ReadColor(); Font = reader.ReadUShort(); MessageId = new MessageId(reader.ReadInt()); reader.ReadByte(); // ignoring flags Name = reader.ReadString(30); Affix = reader.ReadNullTerminatedString(); }
private int ReceiveSeed(IPullStream inputStream, int batchLength, UltimaClientConnectionStatus nextStatus) { int byteReceived = 0; if (receivedPosition == 0) { var firstByte = inputStream.ReadByte(); byteReceived++; receivedPosition++; receivedSeed[0] = (byte)firstByte; if (firstByte != 0xEF) { var seed = new byte[4]; inputStream.Read(seed, 1, 3); seed[0] = (byte)firstByte; var packet = new Packet(PacketDefinitions.LoginSeed.Id, seed); OnPacketReceived(packet); Status = nextStatus; receivedPosition = 0; this.loginSeed = BitConverter.ToUInt32(seed.Reverse().ToArray(), 0); if (requiresEncryption) { receiveNewGameStream = new ClientNewGamePullStream(seed); receiveNewGameStream.BaseStream = diagnosticPullStream; sendNewGameStream = new ClientNewGamePushStream(seed); NewGameEncryptionStarted?.Invoke(seed); } else if (encryption == EncryptionSetup.EncryptedServer) { NewGameEncryptionStarted?.Invoke(seed); } return 4; } } if (batchLength > byteReceived) { var remaining = 21 - receivedPosition; var len = batchLength - byteReceived; len = (len > remaining) ? remaining : len; inputStream.Read(receivedSeed, receivedPosition, len); receivedPosition += len; byteReceived += len; } if (receivedPosition >= 21) { var packet = new Packet(PacketDefinitions.ExtendedLoginSeed.Id, receivedSeed); OnPacketReceived(packet); Status = nextStatus; receivedPosition = 0; this.loginSeed = BitConverter.ToUInt32(receivedSeed.Skip(1).Take(4).Reverse().ToArray(), 0); var reader = new ArrayPacketReader(receivedSeed); reader.Skip(5); encryptionVersion = new Version(reader.ReadInt(), reader.ReadInt(), reader.ReadInt(), reader.ReadInt()); if (requiresEncryption) { receiveNewGameStream = new ClientNewGamePullStream(receivedSeed); receiveNewGameStream.BaseStream = diagnosticPullStream; sendNewGameStream = new ClientNewGamePushStream(receivedSeed); NewGameEncryptionStarted?.Invoke(receivedSeed); } else if (encryption == EncryptionSetup.EncryptedServer) { NewGameEncryptionStarted?.Invoke(receivedSeed); } } return byteReceived; }