Exemplo n.º 1
0
 // 解析WZ文件
 public void ParseWzFile()
 {
     WzTools.CreateWzKey(this.type);
     this.ParseMainWzDirectory();
     GC.Collect();
     GC.WaitForPendingFinalizers();
 }
Exemplo n.º 2
0
        public void SaveToDisk(string path)
        {
            string temp = System.IO.Path.GetTempPath();

            if (Directory.Exists(temp + @"HaRepacker$temp.build"))
            {
                WzTools.DelDir(temp + @"HaRepacker$temp.build");
            }
            WzTools.CreateWzKey(this.type);
            this.CreateVersionHash();
            this.wzDir.SetHash(this.versionHash);
            Directory.CreateDirectory(temp + @"HaRepacker$temp.build");
            this.wzDir.GenerateDataFile(temp + @"HaRepacker$temp.build");
            uint         imgOffsets = this.wzDir.GetImgOffsets(this.wzDir.GetOffsets(0x3e));
            BinaryWriter wzWriter   = new BinaryWriter(File.Create(path));

            for (int i = 0; i < 4; i++)
            {
                wzWriter.Write((byte)this.ident[i]);
            }
            wzWriter.Write((long)(imgOffsets - 60));
            wzWriter.Write(60);
            WzTools.WriteNullTerminatedString(wzWriter, "Package file v1.0 Copyright 2002 Wizet, ZMS");
            wzWriter.Write(this.version);
            this.wzDir.SaveDirectory(wzWriter);
            this.wzDir.SaveImages(wzWriter, temp + @"HaRepacker$temp.build");
            wzWriter.Close();
            WzTools.DelDir(temp + @"\HaRepacker$temp.build");
        }
Exemplo n.º 3
0
        // 解析WZ文件
        public void ParseWzFile()
        {
            WzTools.CreateWzKey(WzMapleVersion.GMS);
            // 将内存中的数据初始化为一个二进制流准备读取
            BinaryReader reader = new BinaryReader(new MemoryStream(this.wzFileBytes));

            while (reader.PeekChar() != -1)
            {
                int    num             = reader.ReadInt32(); // 读取4个字节 05 00 00 00
                char[] stringToDecrypt = new char[num];
                for (int i = 0; i < num; i++)
                {
                    stringToDecrypt[i] = (char)((ushort)reader.ReadInt16());   // 读取2个字节 05 00
                }
                reader.ReadUInt16();
                string item = WzTools.DecryptString(stringToDecrypt);
                if ((reader.PeekChar() == -1) && (item[item.Length - 1] == '/'))
                {
                    item = item.TrimEnd("/".ToCharArray()) + "g";
                }
                this.listEntries.Add(item);
            }
            reader.Close();
        }