示例#1
0
        public static HakKeyEntry Read(BinaryReader read)
        {
            HakKeyEntry ret = new HakKeyEntry();

            ret.Resref   = coder.GetString(read.ReadBytes(32)).TrimEnd();
            ret.ResID    = read.ReadInt32();
            ret.ResType  = read.ReadInt16();
            ret.Reserved = read.ReadInt16();

            return(ret);
        }
示例#2
0
        public override void Compile()
        {
            HakHeader          header     = new HakHeader();
            List <HakKeyEntry> keys       = new List <HakKeyEntry>();
            List <HakResEntry> resEntries = new List <HakResEntry>();
            List <Byte[]>      resources  = new List <byte[]>();

            foreach (KeyValuePair <string, CTArtifact> pair in m_afx)
            {
                if (!File.Exists(pair.Value.Path))
                {
                    continue;
                }

                HakKeyEntry key = new HakKeyEntry();
                key.ResID    = keys.Count;
                key.Resref   = pair.Key;
                key.ResType  = pair.Value.ErfID;
                key.Reserved = 0;
                keys.Add(key);

                byte[] resVal = File.ReadAllBytes(pair.Value.Path);
                resources.Add(resVal);

                HakResEntry res = new HakResEntry();
                res.ResourceSize = resVal.Length;
                resEntries.Add(res);
            }

            try
            {
                if (File.Exists(Path))
                {
                    File.Delete(Path);
                }
                BinaryWriter writer = new BinaryWriter(File.OpenWrite(Path));

                header.Header            = "HAK V1.1";
                header.StringTableSize   = 0;
                header.StringCount       = 0;
                header.EntryCount        = keys.Count;
                header.OffsetToString    = HakHeader.Size;
                header.OffsetToKeyList   = HakHeader.Size;
                header.OffsetToResources = HakHeader.Size + (keys.Count * HakKeyEntry.Size);
                header.BuildYear         = DateTime.Now.Year - 1900;
                header.BuildDay          = DateTime.Now.Day;
                header.DescriptionIndex  = 0;

                header.Write(writer);
                foreach (var key in keys)
                {
                    key.Write(writer);
                }

                int ResourceOffset = header.OffsetToResources + (resEntries.Count * HakResEntry.Size);
                for (int i = 0; i < resEntries.Count; ++i)
                {
                    resEntries[i].OffsetToResource = ResourceOffset;
                    resEntries[i].Write(writer);
                    ResourceOffset += resEntries[i].ResourceSize;
                }

                for (int i = 0; i < resources.Count; ++i)
                {
                    writer.Write(resources[i]);
                }

                writer.Flush();
            }
            catch (Exception)
            {
                CTDebug.Error("Could not save {0}. Make sure the file is not in use.", Path);
            }
        }