diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Events.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Events.cs index 83aa1d9..51fee0e 100644 --- a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Events.cs +++ b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Events.cs @@ -21,7 +21,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public List NumberOfConditions = new List(); - public Events(Chunk chunk) : base(chunk) { } + public Events(Chunk chunk) : base(chunk) + { + } + public override void Print(bool ext) { throw new NotImplementedException(); @@ -34,7 +37,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public override void Read() { - while(true) + while (true) { var identifier = Reader.ReadAscii(4); if (identifier == Header) @@ -46,14 +49,14 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events { NumberOfConditions.Add(Reader.ReadInt16()); } - var qualifierCount = Reader.ReadInt16();//should be 0, so i dont give a fuck + + var qualifierCount = Reader.ReadInt16(); //should be 0, so i dont give a fuck Quailifers = new Quailifer[qualifierCount + 1]; for (int i = 0; i < qualifierCount; i++) { var newQualifier = new Quailifer(Reader); - QualifiersList.Add(newQualifier);//fucking python types + QualifiersList.Add(newQualifier); //fucking python types //THIS IS NOT DONE - } } else if (identifier == EventCount) @@ -71,9 +74,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events } } else if (identifier == End) break; - } - } } @@ -82,10 +83,15 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public int ObjectInfo; public int Type; public Quailifer Qualifier; - List _objects = new List(); + List _objects = new List(); - public Quailifer(Chunk chunk) : base(chunk) { } - public Quailifer(ByteReader reader) : base(reader) { } + public Quailifer(Chunk chunk) : base(chunk) + { + } + + public Quailifer(ByteReader reader) : base(reader) + { + } public override void Print(bool ext) { @@ -102,7 +108,6 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events ObjectInfo = Reader.ReadUInt16(); Type = Reader.ReadInt16(); Qualifier = this; - } } @@ -117,8 +122,13 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public List Conditions = new List(); public List Actions = new List(); - public EventGroup(Chunk chunk) : base(chunk) { } - public EventGroup(ByteReader reader) : base(reader) { } + public EventGroup(Chunk chunk) : base(chunk) + { + } + + public EventGroup(ByteReader reader) : base(reader) + { + } public override void Print(bool ext) { @@ -137,30 +147,44 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events var numberOfConditions = Reader.ReadByte(); var numberOfActions = Reader.ReadByte(); var flags = Reader.ReadUInt16(); - var nop = Reader.ReadInt16(); - IsRestricted = Reader.ReadInt32(); - RestrictCpt = Reader.ReadInt32(); + if (Settings.Build >= 284) + { + var nop = Reader.ReadInt16(); + IsRestricted = Reader.ReadInt32(); + RestrictCpt = Reader.ReadInt32(); + } + else + { + IsRestricted = Reader.ReadInt16(); + RestrictCpt = Reader.ReadInt16(); + Identifier = Reader.ReadInt16(); + Undo = Reader.ReadInt16(); + } + for (int i = 0; i < numberOfConditions; i++) { var item = new Condition(Reader); item.Read(); Conditions.Add(item); } + for (int i = 0; i < numberOfActions; i++) { var item = new Action(Reader); item.Read(); Actions.Add(item); } + Reader.Seek(currentPosition + size); Console.WriteLine("IF:"); - if (Conditions!=null) + if (Conditions != null) { foreach (var item in Conditions) { Console.WriteLine("\t" + item.ToString()); } } + Console.WriteLine("DO:"); if (Actions != null) { @@ -169,20 +193,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events Console.WriteLine("\t" + item.ToString()); } } - - } public void Write(ByteWriter Writer) { - } } - - - - - - - -} +} \ No newline at end of file diff --git a/NetMFAPatcher/MMFParser/Data/MFA.cs b/NetMFAPatcher/MMFParser/Data/MFA.cs index f0eb5aa..a523b4a 100644 --- a/NetMFAPatcher/MMFParser/Data/MFA.cs +++ b/NetMFAPatcher/MMFParser/Data/MFA.cs @@ -241,6 +241,7 @@ namespace DotNetCTFDumper.MMFParser.Data MfaBuild = Reader.ReadInt32(); Product = Reader.ReadInt32(); BuildVersion = Reader.ReadInt32(); + Settings.Build = BuildVersion; LangId = Reader.ReadInt32(); Name = Helper.AutoReadUnicode(Reader); Description = Helper.AutoReadUnicode(Reader); @@ -335,8 +336,7 @@ namespace DotNetCTFDumper.MMFParser.Data { IconImages.Add(Reader.ReadInt32()); } - - //I STUCK HERE + QualCount = Reader.ReadInt32(); CustomQuals = new List>(); for (int i = 0; i < QualCount; i++) //qualifiers diff --git a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs index d8e0588..b868e9d 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs @@ -33,7 +33,6 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders public override void Read() { - long currentPosition = Reader.Tell(); uint headerSize = Reader.ReadUInt32(); int menuOffset = Reader.ReadInt32(); @@ -52,9 +51,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders AccelId = new List(); for (int i = 0; i < accelSize / 8; i++) { - AccelShift.Add(Reader.ReadByte()); - Reader.Skip(1); AccelKey.Add(Reader.ReadInt16()); AccelId.Add(Reader.ReadInt16()); @@ -66,7 +63,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders { writer.WriteInt32(20); writer.WriteInt32(20); - writer.WriteInt32(458); + writer.WriteInt32(0); ByteWriter menuDataWriter = new ByteWriter(new MemoryStream()); @@ -75,7 +72,9 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders item.Write(menuDataWriter); } - writer.WriteUInt32((uint) ( menuDataWriter.BaseStream.Position)+62);//shit + writer.WriteUInt32((uint) menuDataWriter.BaseStream.Position); + + writer.WriteUInt32((uint) (24 + menuDataWriter.BaseStream.Position)); writer.WriteInt32(AccelKey.Count * 8); writer.WriteInt32(0); writer.WriteWriter(menuDataWriter); @@ -97,7 +96,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders newItem.Read(); Items.Add(newItem); - if (newItem.Name.Contains("About")) break; + // if (newItem.Name.Contains("About")) break; if (ByteFlag.GetFlag((uint) newItem.Flags, 4)) { Load(reader); @@ -114,8 +113,8 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders public class AppMenuItem : ChunkLoader { public string Name = ""; - public short Flags = 0; - public short Id = 0; + public Int16 Flags = 0; + public Int16 Id = 0; public string Mnemonic = null; public AppMenuItem(ByteReader reader) : base(reader) @@ -150,10 +149,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders { if (Name[i] == '&') { - Mnemonic = Name[i + 1].ToString().ToUpper(); + Mnemonic = Name[i + 1].ToString(); + Name = Name.Replace("&", ""); + break; } - - //Name = Name.Replace("&", ""); } Console.WriteLine(Name); @@ -172,12 +171,12 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders } String MName = Name; - if (Mnemonic!=null) + if (Mnemonic != null) { - //MName = MName.Replace(Mnemonic, "&" + Mnemonic); + MName = MName.ReplaceFirst(Mnemonic, "&" + Mnemonic); } - writer.WriteUnicode(MName); + writer.WriteUnicode(MName, true); } } } \ No newline at end of file