MoltenMercury/libWyvernzora/IO/Packaging/AFS/AFSPackage.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace libWyvernzora.IO.Packaging
{
    public class AFSPackageLoader : PackageContinuous 
    {
        public AFSPackageLoader(ExStream exs, String title = null)
            : base(exs)
        {
            if (StreamTools.ReadASCII(m_bs, 4) != "AFS\0") throw new InvalidDataException();
            Int32 fcount = StreamTools.ReadI32(m_bs, BitSequence.LittleEndian);
            List<PackageEntry> files = new List<PackageEntry>();

            for (int i = 0; i < fcount; i++)
            {
                PackageEntry macro = new PackageEntry();
                macro.Offset = StreamTools.ReadI32(m_bs, BitSequence.LittleEndian);
                macro.Length = StreamTools.ReadI32(m_bs, BitSequence.LittleEndian);
                files.Add(macro);
            }

            Int32 indx_start = StreamTools.ReadI32(m_bs, BitSequence.LittleEndian);
            Int32 indx_len = m_bs.ReadInt(BitSequence.LittleEndian);

            m_bs.Position = indx_start;

            for (int i = 0; i < fcount; i++)
            {
                files[i].Name = StreamTools.ReadASCII(m_bs, 0x20).Replace("\0", "");

                Int16 f_dy = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int16 f_dd = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int16 f_dm = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int16 f_th = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int16 f_tm = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int16 f_ts = StreamTools.ReadI16(m_bs, BitSequence.LittleEndian);
                Int32 f_rsize = StreamTools.ReadI32(m_bs, BitSequence.LittleEndian);

                files[i].SetAdditionalProperty("Date", new DateTime(f_dy, f_dd, f_dm, f_th, f_tm, f_ts));
                files[i].SetAdditionalProperty("Data", f_rsize.ToString());
            }

            foreach (PackageEntry entry in files)
            { PushEntry(entry); GetInputStream(entry); }

            m_root.Title = title;
        }

        public AFSPackageLoader(String path, String title = null)
            : this(new ExStream(path, FileMode.Open, FileAccess.Read), 
            (title == null) ? Path.GetMainFileName(path) : title) { }

        public override long GetEntryLengthInPhysicalFileDB(PackageEntry entry)
        {
            Int32 index = m_map[entry];
            Int64 pos = index * 12 + 8;
            m_bs.Position = pos;
后面还有 47 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。