コード例 #1
0
 public DBCReader(string fileName)
 {
     if (!File.Exists(fileName))
     {
         throw new FileNotFoundException("The required DBC file \"" + fileName + "\" was not found.");
     }
     this.m_fileName = fileName;
     using (FileStream fileStream = new FileStream(this.m_fileName, FileMode.Open, FileAccess.Read))
     {
         using (BinaryReader binReader = new BinaryReader((Stream)fileStream))
         {
             if (binReader.ReadUInt32() != 1128416343U)
             {
                 throw new InvalidDataException("Not a (W)DBC file.");
             }
             this.m_recordCount = binReader.ReadInt32();
             this.m_fieldCount  = binReader.ReadInt32();
             this.m_recordSize  = binReader.ReadInt32();
             int count = binReader.ReadInt32();
             binReader.BaseStream.Position = binReader.BaseStream.Length - (long)count;
             byte[] stringTable = binReader.ReadBytes(count);
             using (this.converter = (DBCRecordConverter)Activator.CreateInstance <TConverter>())
             {
                 this.converter.Init(stringTable);
                 this.InitReader();
                 this.MapRecords(binReader);
             }
         }
     }
 }
コード例 #2
0
        public override CharStartOutfit ConvertTo(byte[] rawData, ref int id)
        {
            id = DBCRecordConverter.GetInt32(rawData, 0);
            int             currIndex = 0;
            CharStartOutfit outfit    = default(CharStartOutfit);

            outfit.Id = DBCRecordConverter.GetUInt32(rawData, currIndex++);
            uint temp = DBCRecordConverter.GetUInt32(rawData, currIndex++);

            outfit.Race   = (RaceId)(temp & 255u);
            outfit.Class  = (ClassId)((temp & 65280u) >> 8);
            outfit.Gender = (GenderType)((temp & 16711680u) >> 16);
            for (int i = 0; i < 12; i++)
            {
                outfit.ItemIds[i] = DBCRecordConverter.GetUInt32(rawData, currIndex++);
            }

            currIndex += 12;
            for (int i = 0; i < 12; i++)
            {
                outfit.ItemSlots[i] = (InventorySlotType)DBCRecordConverter.GetUInt32(rawData, currIndex++);
            }

            return(outfit);
        }
コード例 #3
0
 public override ChatChannelEntry ConvertTo(byte[] rawData, ref int id)
 {
     id = DBCRecordConverter.GetInt32(rawData, 0);
     return(new ChatChannelEntry()
     {
         Id = DBCRecordConverter.GetUInt32(rawData, 0),
         ChannelFlags = (ChatChannelFlags)DBCRecordConverter.GetUInt32(rawData, 1)
     });
 }
コード例 #4
0
        public string GetString(byte[] data, ClientLocale locale, int stringOffset)
        {
            int int32 = DBCRecordConverter.GetInt32(data, (int)(stringOffset + locale));
            int num   = 0;

            do
            {
                ;
            }while (this.m_stringTable[int32 + num++] != (byte)0);
            return(WCellConstants.DefaultEncoding.GetString(this.m_stringTable, int32, num - 1) ?? "");
        }
コード例 #5
0
        protected static int CopyTo(byte[] bytes, object obj, int index)
        {
            foreach (MemberInfo member in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
                     .Cast <MemberInfo>()
                     .Concat <MemberInfo>(
                         (IEnumerable <MemberInfo>)obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)))
            {
                if (!member.IsReadonly() &&
                    member.GetCustomAttributes(typeof(NotPersistentAttribute), true).Length <= 0)
                {
                    object obj1 = Utility.ChangeType((object)DBCRecordConverter.GetInt32(bytes, index++),
                                                     member.GetVariableType());
                    member.SetUnindexedValue(obj, obj1);
                }
            }

            return(index);
        }
コード例 #6
0
ファイル: DBCReader.cs プロジェクト: NecroSharper/WCell
        public DBCReader(string fileName)
        {
            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException("The required DBC file \"" + fileName + "\" was not found.");
            }

            m_fileName = fileName;

            using (var fileStream = new FileStream(m_fileName, FileMode.Open, FileAccess.Read))
            {
                using (var binReader = new BinaryReader(fileStream))
                {
                    if (binReader.ReadUInt32() != DBCHeader)
                    {
                        throw new InvalidDataException("Not a (W)DBC file.");
                    }

                    m_recordCount = binReader.ReadInt32();
                    m_fieldCount  = binReader.ReadInt32();
                    m_recordSize  = binReader.ReadInt32();
                    var stringTableSize = binReader.ReadInt32();

                    binReader.BaseStream.Position = binReader.BaseStream.Length - stringTableSize;

                    var stringTable = binReader.ReadBytes(stringTableSize);

                    using (converter = new TConverter())
                    {
                        converter.Init(stringTable);
                        InitReader();
                        MapRecords(binReader);
                    }
                }
            }
        }