Пример #1
0
		internal static IWzImageProperty[] ParsePropertyList(uint offset, WzBinaryReader reader, IWzObject parent, WzImage parentImg)
		{
			List<IWzImageProperty> properties = new List<IWzImageProperty>();
			int entryCount = reader.ReadCompressedInt();
			for (int i = 0; i < entryCount; i++)
			{
				string name = reader.ReadStringBlock(offset);
                byte ptype = reader.ReadByte();
                switch (ptype)
				{
					case 0:
						properties.Add(new WzNullProperty(name, i) { Parent = parent, ParentImage = parentImg });
						break;
					case 0x0B:
					case 2:
						properties.Add(new WzUnsignedShortProperty(name, reader.ReadUInt16()) { Parent = parent, ParentImage = parentImg });
						break;
					case 3:
						properties.Add(new WzCompressedIntProperty(name, reader.ReadCompressedInt()) { Parent = parent, ParentImage = parentImg });
						break;
					case 4:
						byte type = reader.ReadByte();
						if (type == 0x80)
							properties.Add(new WzByteFloatProperty(name, reader.ReadSingle()) { Parent = parent, ParentImage = parentImg });
						else if (type == 0)
							properties.Add(new WzByteFloatProperty(name, 0f) { Parent = parent, ParentImage = parentImg });
						break;
					case 5:
						properties.Add(new WzDoubleProperty(name, reader.ReadDouble()) { Parent = parent, ParentImage = parentImg });
						break;
					case 8:
						properties.Add(new WzStringProperty(name, reader.ReadStringBlock(offset)) { Parent = parent });
						break;
					case 9:
						int eob = (int)(reader.ReadUInt32() + reader.BaseStream.Position);
						WzExtendedProperty exProp = new WzExtendedProperty(offset, eob, name);
						exProp.Parent = parent;
						exProp.ParentImage = parentImg;
						exProp.ParseExtendedProperty(reader);
						properties.Add(exProp);
						if (reader.BaseStream.Position != eob) reader.BaseStream.Position = eob;
						break;
                    default:
                        {
                            Console.WriteLine("Unknown type: {0} | {1}", ptype, name); 
                            break;
                        }
				}
			}
			return properties.ToArray();
		}
Пример #2
0
        public static int DetectMapleVersion(string path, string fileName)
        {
            using (FileStream stream = new FileStream(path + "\\" + fileName, FileMode.Open, FileAccess.Read)) {
                var values = Enum.GetValues(typeof(WzMapleVersion)).Cast <WzMapleVersion>();
                foreach (var v in values)
                {
                    using (WzBinaryReader reader = new WzBinaryReader(stream, v.EncryptionKey())) {
                        byte b = reader.ReadByte();
                        if (b != 0x73 || reader.ReadString() != "Property" || reader.ReadUInt16() != 0)
                        {
                            continue;
                        }
                        return((int)v);
                    }
                }
            }

            return(-1);
        }
Пример #3
0
		/// <summary>
		/// Parses the wz list file
		/// </summary>
		public void ParseWzFile()
		{
			//WzTools.CreateWzKey(WzMapleVersion.GMS);//what?
			WzBinaryReader wzParser = new WzBinaryReader(new MemoryStream(wzFileBytes), WzIv);
			while (wzParser.PeekChar() != -1)
			{
				int Len = wzParser.ReadInt32();
				char[] List = new char[Len];
				for (int i = 0; i < Len; i++)
					List[i] = (char)wzParser.ReadInt16();
				wzParser.ReadUInt16();
				string Decrypted = wzParser.DecryptString(List);
				if (wzParser.PeekChar() == -1)
					if (Decrypted[Decrypted.Length - 1] == '/')
						Decrypted = Decrypted.TrimEnd("/".ToCharArray()) + "g"; // Last char should always be a g (.img)
				listEntries.Add(Decrypted);
			}
			wzParser.Close();
		}
Пример #4
0
 /// <summary>
 /// Parses a wz list file on the disk
 /// </summary>
 /// <param name="filePath">Path to the wz file</param>
 public static List<string> ParseListFile(string filePath, byte[] WzIv)
 {
     List<string> listEntries = new List<string>();
     byte[] wzFileBytes = File.ReadAllBytes(filePath);
     WzBinaryReader wzParser = new WzBinaryReader(new MemoryStream(wzFileBytes), WzIv);
     while (wzParser.PeekChar() != -1)
     {
         int len = wzParser.ReadInt32();
         char[] strChrs = new char[len];
         for (int i = 0; i < len; i++)
             strChrs[i] = (char)wzParser.ReadInt16();
         wzParser.ReadUInt16(); //encrypted null
         string decryptedStr = wzParser.DecryptString(strChrs);
         listEntries.Add(decryptedStr);
     }
     wzParser.Close();
     int lastIndex= listEntries.Count - 1;
     string lastEntry = listEntries[lastIndex];
     listEntries[lastIndex] = lastEntry.Substring(0, lastEntry.Length - 1) + "g";
     return listEntries;
 }
 internal static List<IWzImageProperty> ParsePropertyList(uint offset, WzBinaryReader reader, IWzObject parent, WzImage parentImg)
 {
     int entryCount = reader.ReadCompressedInt();
     List<IWzImageProperty> properties = new List<IWzImageProperty>(entryCount);
     for (int i = 0; i < entryCount; i++)
     {
         string name = reader.ReadStringBlock(offset);
         switch (reader.ReadByte())
         {
             case 0:
                 properties.Add(new WzNullProperty(name) { Parent = parent/*, ParentImage = parentImg*/ });
                 break;
             case 0x0B:
             case 2:
                 properties.Add(new WzUnsignedShortProperty(name, reader.ReadUInt16()) { Parent = parent/*, ParentImage = parentImg*/ });
                 break;
             case 3:
                 properties.Add(new WzCompressedIntProperty(name, reader.ReadCompressedInt()) { Parent = parent/*, ParentImage = parentImg*/ });
                 break;
             case 4:
                 byte type = reader.ReadByte();
                 if (type == 0x80)
                     properties.Add(new WzByteFloatProperty(name, reader.ReadSingle()) { Parent = parent/*, ParentImage = parentImg*/ });
                 else if (type == 0)
                     properties.Add(new WzByteFloatProperty(name, 0f) { Parent = parent/*, ParentImage = parentImg*/ });
                 break;
             case 5:
                 properties.Add(new WzDoubleProperty(name, reader.ReadDouble()) { Parent = parent/*, ParentImage = parentImg*/ });
                 break;
             case 8:
                 properties.Add(new WzStringProperty(name, reader.ReadStringBlock(offset)) { Parent = parent });
                 break;
             case 9:
                 int eob = (int)(reader.ReadUInt32() + reader.BaseStream.Position);
                 IWzImageProperty exProp = ParseExtendedProp(reader, offset, eob, name, parent, parentImg);
                 properties.Add(exProp);
                 if (reader.BaseStream.Position != eob) reader.BaseStream.Position = eob;
                 break;
             default:
                 throw new Exception("Unknown property type at ParsePropertyList");
         }
     }
     return properties;
 }