コード例 #1
0
ファイル: OBL_File.cs プロジェクト: LazyBone152/XV2-Tools
        public static OBL_File Parse(byte[] bytes)
        {
            OBL_File oblFile = new OBL_File();

            int lobbyCount  = BitConverter.ToInt32(bytes, 8);
            int battleCount = BitConverter.ToInt32(bytes, 12);
            int questCount  = BitConverter.ToInt32(bytes, 16);
            int hcCount     = BitConverter.ToInt32(bytes, 20);

            //Validate the file size
            if (32 + (20 * lobbyCount) + (20 * battleCount) + (20 * questCount) + (20 * hcCount) != bytes.Length)
            {
                throw new InvalidDataException("OBL parse failed. File size validation failed!");
            }

            //Calculate offsets
            int lobbyOffset  = 32;
            int battleOffset = lobbyOffset + (20 * lobbyCount);
            int questOffset  = battleOffset + (20 * battleCount);
            int hcOffset     = questOffset + (20 * questCount);

            //Read data
            oblFile.LobbyCues         = OBL_Cue.ReadAll(bytes, lobbyOffset, lobbyCount);
            oblFile.BattleCues        = OBL_Cue.ReadAll(bytes, battleOffset, battleCount);
            oblFile.QuestCues         = OBL_Cue.ReadAll(bytes, questOffset, questCount);
            oblFile.HeroColosseumCues = OBL_Cue.ReadAll(bytes, hcOffset, hcCount);

            return(oblFile);
        }
コード例 #2
0
ファイル: OBL_File.cs プロジェクト: LazyBone152/XV2-Tools
        public byte[] Write()
        {
            List <byte> bytes = new List <byte>();

            //Header
            bytes.AddRange(BitConverter.GetBytes((uint)1279414051)); //signature
            bytes.AddRange(BitConverter.GetBytes((ushort)65534));    //endianness
            bytes.AddRange(BitConverter.GetBytes((ushort)32));       //header size
            bytes.AddRange(BitConverter.GetBytes((uint)LobbyCues.Count));
            bytes.AddRange(BitConverter.GetBytes((uint)BattleCues.Count));
            bytes.AddRange(BitConverter.GetBytes((uint)QuestCues.Count));
            bytes.AddRange(BitConverter.GetBytes((uint)HeroColosseumCues.Count));
            bytes.AddRange(new byte[8]); //Padding?

            //Entries
            bytes.AddRange(OBL_Cue.WriteAll(LobbyCues));
            bytes.AddRange(OBL_Cue.WriteAll(BattleCues));
            bytes.AddRange(OBL_Cue.WriteAll(QuestCues));
            bytes.AddRange(OBL_Cue.WriteAll(HeroColosseumCues));

            //Validate the file size
            if (32 + (20 * LobbyCues.Count) + (20 * BattleCues.Count) + (20 * QuestCues.Count) + (20 * HeroColosseumCues.Count) != bytes.Count)
            {
                throw new InvalidDataException("OBL rebuild failed. File size validation failed!");
            }

            return(bytes.ToArray());
        }