protected override void Deserialize() { BinaryPacket.SetPosition(0); BinaryPacket.ReadByteArray(7); //Offset unk = BinaryPacket.ReadInt16(); //unk serverTime = BinaryPacket.ReadInt64(); //Server time serverCount = BinaryPacket.ReadInt16(); //Channel count for (int serverId = 0; serverId < serverCount; ++serverId) { WorldServerInfo wsi = new WorldServerInfo(); wsi.ChannelId = BinaryPacket.ReadInt16(); //Channel ID wsi.Id = BinaryPacket.ReadInt16(); //Server ID Int16 unkValue = BinaryPacket.ReadInt16(); //unk wsi.ChannelName = BinaryPacket.ReadString(62, Encoding.Unicode); //Channel name wsi.ServerName = BinaryPacket.ReadString(62, Encoding.Unicode); //Server name BinaryPacket.ReadByte(); //unk wsi.ServerIp = BinaryPacket.ReadString(16, Encoding.ASCII); //IP address BinaryPacket.ReadByte(); //unk BinaryPacket.ReadByteArray(84); //unk wsi.ServerPort = BinaryPacket.ReadInt16(); //Server port wsi.PopulationStatus = BinaryPacket.ReadByte(); //Population status (light, crowded, etc) wsi.IsPublic = BinaryPacket.ReadByte(); //Is publicly joinable BinaryPacket.ReadByte(); //unk wsi.CharacterCount = BinaryPacket.ReadByte(); //Number of character own by the player on this channel wsi.CharacterDeleteCount = BinaryPacket.ReadByte(); //Number of character in delete state on this channel BinaryPacket.ReadInt16(); //unk wsi.RelogingDelayTime = BinaryPacket.ReadInt64(); //Reloging time allowed wsi.LastLoginTime = BinaryPacket.ReadInt64(); //Last login time wsi.XpDropBonus = BinaryPacket.ReadByte(); //Wp ordrop bonus available BinaryPacket.ReadByteArray(13); //unk wsi.Medal = BinaryPacket.ReadByte(); //Medal } }
public static DebugModel FromBinaryPacket(BinaryPacket packet) { return(new DebugModel { Data = packet.Data, FrameIdentifier = packet.PacketHeader.FrameIdentifier, PacketType = packet.PacketHeader.PacketType, SessionTime = packet.PacketHeader.SessionTime, }); }
internal static void Serialize(BinaryPacket bp, Stream stream) { var fieldsInfos = new List <FieldInfo>(); fieldsInfos.AddRange(bp.GetType().GetProperties().Where(p => Attribute.IsDefined(p, typeof(FieldAttribute))).Select(x => FieldInfo.FromPropertyInfo(x, bp))); fieldsInfos.AddRange(bp.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static).Where(p => Attribute.IsDefined(p, typeof(FieldAttribute))).Select(x => FieldInfo.FromFieldInfo(x, bp))); stream.WriteByte(bp.Header); foreach (var fieldInfo in fieldsInfos.OrderBy(x => x.Field.Order)) { var value = fieldInfo.Value; if (value is Byte) { stream.WriteByte((Byte)value); } else if (value is Byte[]) { var byteValue = (Byte[])value; stream.Write(byteValue, 0, byteValue.Length); } else if (value is String) { var byteValue = SerializeString((String)value, fieldInfo.Field.Length); stream.Write(byteValue, 0, byteValue.Length); } else if (value is Int16) { var byteValue = SerializeInt((Int16)value); stream.Write(byteValue, 0, byteValue.Length); } else if (value is Int32) { var byteValue = SerializeInt((Int32)value); stream.Write(byteValue, 0, byteValue.Length); } else { throw new NotImplementedException(); } } }
public WorldInformationsPacket(BinaryPacket binaryPacket) : base(binaryPacket) { WorldServers = new List <WorldServerInfo>(); }