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
            }
        }
Esempio n. 2
0
 public static DebugModel FromBinaryPacket(BinaryPacket packet)
 {
     return(new DebugModel
     {
         Data = packet.Data,
         FrameIdentifier = packet.PacketHeader.FrameIdentifier,
         PacketType = packet.PacketHeader.PacketType,
         SessionTime = packet.PacketHeader.SessionTime,
     });
 }
Esempio n. 3
0
        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>();
 }