Fixed eventGroup reading

master
REDxEYE 4 years ago
parent d8872e71e1
commit 188a67e48c

@ -21,7 +21,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public List<int> NumberOfConditions = new List<int>(); public List<int> NumberOfConditions = new List<int>();
public Events(Chunk chunk) : base(chunk) { } public Events(Chunk chunk) : base(chunk)
{
}
public override void Print(bool ext) public override void Print(bool ext)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -34,7 +37,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public override void Read() public override void Read()
{ {
while(true) while (true)
{ {
var identifier = Reader.ReadAscii(4); var identifier = Reader.ReadAscii(4);
if (identifier == Header) if (identifier == Header)
@ -46,14 +49,14 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
{ {
NumberOfConditions.Add(Reader.ReadInt16()); 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]; Quailifers = new Quailifer[qualifierCount + 1];
for (int i = 0; i < qualifierCount; i++) for (int i = 0; i < qualifierCount; i++)
{ {
var newQualifier = new Quailifer(Reader); var newQualifier = new Quailifer(Reader);
QualifiersList.Add(newQualifier);//fucking python types QualifiersList.Add(newQualifier); //fucking python types
//THIS IS NOT DONE //THIS IS NOT DONE
} }
} }
else if (identifier == EventCount) else if (identifier == EventCount)
@ -71,9 +74,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
} }
} }
else if (identifier == End) break; else if (identifier == End) break;
} }
} }
} }
@ -82,10 +83,15 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public int ObjectInfo; public int ObjectInfo;
public int Type; public int Type;
public Quailifer Qualifier; public Quailifer Qualifier;
List<int> _objects = new List<int>(); List<int> _objects = new List<int>();
public Quailifer(Chunk chunk) : base(chunk) { } public Quailifer(Chunk chunk) : base(chunk)
public Quailifer(ByteReader reader) : base(reader) { } {
}
public Quailifer(ByteReader reader) : base(reader)
{
}
public override void Print(bool ext) public override void Print(bool ext)
{ {
@ -102,7 +108,6 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
ObjectInfo = Reader.ReadUInt16(); ObjectInfo = Reader.ReadUInt16();
Type = Reader.ReadInt16(); Type = Reader.ReadInt16();
Qualifier = this; Qualifier = this;
} }
} }
@ -117,8 +122,13 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public List<Condition> Conditions = new List<Condition>(); public List<Condition> Conditions = new List<Condition>();
public List<Action> Actions = new List<Action>(); public List<Action> Actions = new List<Action>();
public EventGroup(Chunk chunk) : base(chunk) { } public EventGroup(Chunk chunk) : base(chunk)
public EventGroup(ByteReader reader) : base(reader) { } {
}
public EventGroup(ByteReader reader) : base(reader)
{
}
public override void Print(bool ext) public override void Print(bool ext)
{ {
@ -137,30 +147,44 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
var numberOfConditions = Reader.ReadByte(); var numberOfConditions = Reader.ReadByte();
var numberOfActions = Reader.ReadByte(); var numberOfActions = Reader.ReadByte();
var flags = Reader.ReadUInt16(); var flags = Reader.ReadUInt16();
var nop = Reader.ReadInt16(); if (Settings.Build >= 284)
IsRestricted = Reader.ReadInt32(); {
RestrictCpt = Reader.ReadInt32(); 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++) for (int i = 0; i < numberOfConditions; i++)
{ {
var item = new Condition(Reader); var item = new Condition(Reader);
item.Read(); item.Read();
Conditions.Add(item); Conditions.Add(item);
} }
for (int i = 0; i < numberOfActions; i++) for (int i = 0; i < numberOfActions; i++)
{ {
var item = new Action(Reader); var item = new Action(Reader);
item.Read(); item.Read();
Actions.Add(item); Actions.Add(item);
} }
Reader.Seek(currentPosition + size); Reader.Seek(currentPosition + size);
Console.WriteLine("IF:"); Console.WriteLine("IF:");
if (Conditions!=null) if (Conditions != null)
{ {
foreach (var item in Conditions) foreach (var item in Conditions)
{ {
Console.WriteLine("\t" + item.ToString()); Console.WriteLine("\t" + item.ToString());
} }
} }
Console.WriteLine("DO:"); Console.WriteLine("DO:");
if (Actions != null) if (Actions != null)
{ {
@ -169,20 +193,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
Console.WriteLine("\t" + item.ToString()); Console.WriteLine("\t" + item.ToString());
} }
} }
} }
public void Write(ByteWriter Writer) public void Write(ByteWriter Writer)
{ {
} }
} }
}
}

@ -241,6 +241,7 @@ namespace DotNetCTFDumper.MMFParser.Data
MfaBuild = Reader.ReadInt32(); MfaBuild = Reader.ReadInt32();
Product = Reader.ReadInt32(); Product = Reader.ReadInt32();
BuildVersion = Reader.ReadInt32(); BuildVersion = Reader.ReadInt32();
Settings.Build = BuildVersion;
LangId = Reader.ReadInt32(); LangId = Reader.ReadInt32();
Name = Helper.AutoReadUnicode(Reader); Name = Helper.AutoReadUnicode(Reader);
Description = Helper.AutoReadUnicode(Reader); Description = Helper.AutoReadUnicode(Reader);
@ -335,8 +336,7 @@ namespace DotNetCTFDumper.MMFParser.Data
{ {
IconImages.Add(Reader.ReadInt32()); IconImages.Add(Reader.ReadInt32());
} }
//I STUCK HERE
QualCount = Reader.ReadInt32(); QualCount = Reader.ReadInt32();
CustomQuals = new List<Tuple<string, int>>(); CustomQuals = new List<Tuple<string, int>>();
for (int i = 0; i < QualCount; i++) //qualifiers for (int i = 0; i < QualCount; i++) //qualifiers

@ -33,7 +33,6 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
public override void Read() public override void Read()
{ {
long currentPosition = Reader.Tell(); long currentPosition = Reader.Tell();
uint headerSize = Reader.ReadUInt32(); uint headerSize = Reader.ReadUInt32();
int menuOffset = Reader.ReadInt32(); int menuOffset = Reader.ReadInt32();
@ -52,9 +51,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
AccelId = new List<short>(); AccelId = new List<short>();
for (int i = 0; i < accelSize / 8; i++) for (int i = 0; i < accelSize / 8; i++)
{ {
AccelShift.Add(Reader.ReadByte()); AccelShift.Add(Reader.ReadByte());
Reader.Skip(1); Reader.Skip(1);
AccelKey.Add(Reader.ReadInt16()); AccelKey.Add(Reader.ReadInt16());
AccelId.Add(Reader.ReadInt16()); AccelId.Add(Reader.ReadInt16());
@ -66,7 +63,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
{ {
writer.WriteInt32(20); writer.WriteInt32(20);
writer.WriteInt32(20); writer.WriteInt32(20);
writer.WriteInt32(458); writer.WriteInt32(0);
ByteWriter menuDataWriter = new ByteWriter(new MemoryStream()); ByteWriter menuDataWriter = new ByteWriter(new MemoryStream());
@ -75,7 +72,9 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
item.Write(menuDataWriter); 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(AccelKey.Count * 8);
writer.WriteInt32(0); writer.WriteInt32(0);
writer.WriteWriter(menuDataWriter); writer.WriteWriter(menuDataWriter);
@ -97,7 +96,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
newItem.Read(); newItem.Read();
Items.Add(newItem); Items.Add(newItem);
if (newItem.Name.Contains("About")) break; // if (newItem.Name.Contains("About")) break;
if (ByteFlag.GetFlag((uint) newItem.Flags, 4)) if (ByteFlag.GetFlag((uint) newItem.Flags, 4))
{ {
Load(reader); Load(reader);
@ -114,8 +113,8 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
public class AppMenuItem : ChunkLoader public class AppMenuItem : ChunkLoader
{ {
public string Name = ""; public string Name = "";
public short Flags = 0; public Int16 Flags = 0;
public short Id = 0; public Int16 Id = 0;
public string Mnemonic = null; public string Mnemonic = null;
public AppMenuItem(ByteReader reader) : base(reader) public AppMenuItem(ByteReader reader) : base(reader)
@ -150,10 +149,10 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
{ {
if (Name[i] == '&') if (Name[i] == '&')
{ {
Mnemonic = Name[i + 1].ToString().ToUpper(); Mnemonic = Name[i + 1].ToString();
Name = Name.Replace("&", "");
break;
} }
//Name = Name.Replace("&", "");
} }
Console.WriteLine(Name); Console.WriteLine(Name);
@ -172,12 +171,12 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders
} }
String MName = Name; 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);
} }
} }
} }
Loading…
Cancel
Save