From 3a20534bbde8fe725e2798135d6225c8b0cad535 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 08:35:03 +0300 Subject: [PATCH 1/9] Qualifier 296 fix + small Android support update - Fixed qualifiers for Windows platform and build 296 (removed from Action.cs and Condition.cs because changes in ACEventBase.cs and ParameterObject.cs fixes it) - For Android - added .xapk reading, added unpacking videos if it was saved by Video Android extension (it won't add to Binary Files in the project) --- Nebula.CLI/Program.cs | 1 + .../Chunks/FrameChunks/Events/ACEventBase.cs | 11 ++++++++++ .../Data/Chunks/FrameChunks/Events/Action.cs | 16 --------------- .../Chunks/FrameChunks/Events/Condition.cs | 16 --------------- .../Events/Parameters/ParameterObject.cs | 20 +++++++++++++++++++ .../Data/Chunks/FrameChunks/FrameEvents.cs | 4 ---- Nebula.Core/FileReaders/APKFileReader.cs | 17 +++++++++++++++- 7 files changed, 48 insertions(+), 37 deletions(-) diff --git a/Nebula.CLI/Program.cs b/Nebula.CLI/Program.cs index 7a413bd..5e469b9 100644 --- a/Nebula.CLI/Program.cs +++ b/Nebula.CLI/Program.cs @@ -129,6 +129,7 @@ static void AutoDetectReader() case ".zip": NebulaCore.CurrentReader = new OpenFileReader(); break; + case ".xapk": case ".apk": NebulaCore.CurrentReader = new APKFileReader(); break; diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index a8c0574..c4c40f3 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -42,6 +42,7 @@ public class ACEventBase : Chunk public Event Parent = null; public bool DoAdd = true; + public bool Fusion296PC = NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5; // needed for checkings here and in ParameterObject.cs for qualifiers public override void ReadCCN(ByteReader reader, params object[] extraInfo) { @@ -65,6 +66,9 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { + // same as in ParameterObject.cs + if (Fusion296PC && (ObjectInfo & 0x8000) != 0) + return null; if (Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; else if (NebulaCore.MFA && Parent?.Parent.EventObjects.Count > 0) @@ -292,6 +296,13 @@ public string GetObjectName() Qualifier[] qualifier = Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).ToArray()!; if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); + // same thing as in ParameterObject.cs, also fixes for not finding some other qualifiers in some actions and conditions + if (Fusion296PC && (ObjectInfo & 0x8000) != 0) + { + Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; + Parent?.Parent.Qualifiers.Add(newQualifier); + return GetQualifierName(newQualifier); + } return "Unknown Object"; } diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs index 1fcccf0..acb1cbb 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs @@ -60,22 +60,6 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) Parameters[i].ReadCCN(reader); Parameters[i].FrameEvents = Parent.Parent; } - - // Qualifier - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - bool doAdd = true; - foreach (Qualifier qualifier in Parent.Parent.Qualifiers) - if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) - doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); - - if (doAdd) - Parent.Parent.Qualifiers.Add(new Qualifier() - { - ObjectInfo = ObjectInfo, - Type = ObjectType - }); - } } Fix((List)extraInfo[0], reader, endPosition); diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs index 907a245..ec3ac8c 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs @@ -64,22 +64,6 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) Parameters[i].ReadCCN(reader); Parameters[i].FrameEvents = Parent.Parent; } - - // Qualifier - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - bool doAdd = true; - foreach (Qualifier qualifier in Parent.Parent.Qualifiers) - if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) - doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); - - if (doAdd) - Parent.Parent.Qualifiers.Add(new Qualifier() - { - ObjectInfo = ObjectInfo, - Type = ObjectType - }); - } } Fix((List)extraInfo[0], reader); diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index bf9b849..557632b 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -10,6 +10,8 @@ public class ParameterObject : ParameterChunk public ushort ObjectInfo; public short ObjectType; + ACEventBase ace = new ACEventBase(); // for getting public bool Fusion296PC + public ParameterObject() { ChunkName = "ParameterObject"; @@ -20,6 +22,14 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) ObjectInfoList = reader.ReadShort(); ObjectInfo = reader.ReadUShort(); ObjectType = reader.ReadShort(); + + // adds qualifiers if it couldn't find any for Windows, Build >= 296 and Fusion >= 2.5 with 0x8000 bit mask + if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + { + bool exists = Parent?.FrameEvents?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; + if (!exists) + Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } } public override void WriteMFA(ByteWriter writer, params object[] extraInfo) @@ -40,11 +50,21 @@ public override string ToString() Qualifier[] qualifier = Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).ToArray()!; if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); + // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, but didn't find qualifiers, add current qualifier + if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + { + Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; + Parent?.FrameEvents?.Qualifiers.Add(newQualifier); + return GetQualifierName(newQualifier); + } return "Unknown Object"; } public ObjectInfo? GetObject() { + // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, return null + if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + return null; if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; else if (NebulaCore.MFA && Parent?.FrameEvents?.EventObjects.Count > 0) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/FrameEvents.cs b/Nebula.Core/Data/Chunks/FrameChunks/FrameEvents.cs index 055785f..213c63e 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/FrameEvents.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/FrameEvents.cs @@ -84,10 +84,6 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) qualifier.ReadCCN(reader); Qualifiers.Add(qualifier); } - - // Just incase, 296 shouldnt be writing qualifiers anyway - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5) - Qualifiers.Clear(); } else if (identifier == "ERes") EventCount = reader.ReadInt(); diff --git a/Nebula.Core/FileReaders/APKFileReader.cs b/Nebula.Core/FileReaders/APKFileReader.cs index a6f76e6..8729f63 100644 --- a/Nebula.Core/FileReaders/APKFileReader.cs +++ b/Nebula.Core/FileReaders/APKFileReader.cs @@ -11,7 +11,7 @@ namespace Nebula.Core.FileReaders { public class APKFileReader : IFileReader { - public string Name => "APK"; + public string Name => "APK/XAPK"; public Dictionary Icons { get { return _icons; } set { _icons = value; } } private Dictionary _icons = new Dictionary(); @@ -47,6 +47,21 @@ public void LoadGame(ByteReader fileReader, string filePath) entry.Open().CopyTo(ms); SoundBank.ExternalFiles[Path.GetFileNameWithoutExtension(entry.Name)] = ms.ToArray(); // saving it to dictionary } + else if (Path.GetExtension(entry.Name) == ".mp4") // for unpacking video files saved by Video Android extension + { + using var stream = entry.Open(); + using var memoryStream = new MemoryStream(); + stream.CopyTo(memoryStream); + byte[] fileData = memoryStream.ToArray(); + + // add videos to binary files list for dumping + BinaryFile binFile = new BinaryFile + { + FileName = entry.Name, + FileData = fileData + }; + NebulaCore.PackageData.BinaryFiles.Items.Add(binFile); + } } if (Directory.GetParent(entry.FullName)?.Name == "fonts" && Path.GetExtension(entry.Name) == ".ttf") { From bfaa343ac9a93a9c7728953d16e9d15d5292b157 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 09:37:38 +0300 Subject: [PATCH 2/9] some changes --- .../Data/Chunks/FrameChunks/Events/ACEventBase.cs | 5 ++--- .../Events/Parameters/ParameterObject.cs | 8 +++----- Nebula.Core/FileReaders/APKFileReader.cs | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index c4c40f3..1416b9a 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -42,7 +42,6 @@ public class ACEventBase : Chunk public Event Parent = null; public bool DoAdd = true; - public bool Fusion296PC = NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5; // needed for checkings here and in ParameterObject.cs for qualifiers public override void ReadCCN(ByteReader reader, params object[] extraInfo) { @@ -67,7 +66,7 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { // same as in ParameterObject.cs - if (Fusion296PC && (ObjectInfo & 0x8000) != 0) + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) return null; if (Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; @@ -297,7 +296,7 @@ public string GetObjectName() if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); // same thing as in ParameterObject.cs, also fixes for not finding some other qualifiers in some actions and conditions - if (Fusion296PC && (ObjectInfo & 0x8000) != 0) + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) { Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; Parent?.Parent.Qualifiers.Add(newQualifier); diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index 557632b..9437e06 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -10,8 +10,6 @@ public class ParameterObject : ParameterChunk public ushort ObjectInfo; public short ObjectType; - ACEventBase ace = new ACEventBase(); // for getting public bool Fusion296PC - public ParameterObject() { ChunkName = "ParameterObject"; @@ -24,7 +22,7 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) ObjectType = reader.ReadShort(); // adds qualifiers if it couldn't find any for Windows, Build >= 296 and Fusion >= 2.5 with 0x8000 bit mask - if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) { bool exists = Parent?.FrameEvents?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; if (!exists) @@ -51,7 +49,7 @@ public override string ToString() if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, but didn't find qualifiers, add current qualifier - if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) { Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; Parent?.FrameEvents?.Qualifiers.Add(newQualifier); @@ -63,7 +61,7 @@ public override string ToString() public ObjectInfo? GetObject() { // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, return null - if (ace.Fusion296PC && (ObjectInfo & 0x8000) != 0) + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) return null; if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; diff --git a/Nebula.Core/FileReaders/APKFileReader.cs b/Nebula.Core/FileReaders/APKFileReader.cs index 8729f63..0712ba0 100644 --- a/Nebula.Core/FileReaders/APKFileReader.cs +++ b/Nebula.Core/FileReaders/APKFileReader.cs @@ -11,10 +11,20 @@ namespace Nebula.Core.FileReaders { public class APKFileReader : IFileReader { - public string Name => "APK/XAPK"; + public string Name => "Android"; public Dictionary Icons { get { return _icons; } set { _icons = value; } } private Dictionary _icons = new Dictionary(); + private static readonly List VideoExtensions = new List + { + ".mp4", + ".mkv", + ".m4a", + ".mov", + ".webm", + ".avi" + }; + public string FilePath { get { return _filePath; } set { _filePath = value; } } public string _filePath = string.Empty; @@ -47,7 +57,7 @@ public void LoadGame(ByteReader fileReader, string filePath) entry.Open().CopyTo(ms); SoundBank.ExternalFiles[Path.GetFileNameWithoutExtension(entry.Name)] = ms.ToArray(); // saving it to dictionary } - else if (Path.GetExtension(entry.Name) == ".mp4") // for unpacking video files saved by Video Android extension + else if (VideoExtensions.Contains(Path.GetExtension(entry.Name))) // for unpacking video files saved by Video Android extension { using var stream = entry.Open(); using var memoryStream = new MemoryStream(); From 774e4d8cfa106add7c3e92e13d4022e91ac633c6 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 10:03:25 +0300 Subject: [PATCH 3/9] reverted in ACEventBase, made diff in ParamObject --- .../Chunks/FrameChunks/Events/ACEventBase.cs | 10 ---------- .../Events/Parameters/ParameterObject.cs | 20 ++++--------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index 1416b9a..a8c0574 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -65,9 +65,6 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { - // same as in ParameterObject.cs - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - return null; if (Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; else if (NebulaCore.MFA && Parent?.Parent.EventObjects.Count > 0) @@ -295,13 +292,6 @@ public string GetObjectName() Qualifier[] qualifier = Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).ToArray()!; if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); - // same thing as in ParameterObject.cs, also fixes for not finding some other qualifiers in some actions and conditions - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; - Parent?.Parent.Qualifiers.Add(newQualifier); - return GetQualifierName(newQualifier); - } return "Unknown Object"; } diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index 9437e06..2368af8 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -20,13 +20,6 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) ObjectInfoList = reader.ReadShort(); ObjectInfo = reader.ReadUShort(); ObjectType = reader.ReadShort(); - - // adds qualifiers if it couldn't find any for Windows, Build >= 296 and Fusion >= 2.5 with 0x8000 bit mask - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - bool exists = Parent?.FrameEvents?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; - if (!exists) - Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); } } @@ -48,21 +41,16 @@ public override string ToString() Qualifier[] qualifier = Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).ToArray()!; if (qualifier.Length > 0) return GetQualifierName(qualifier.First()); - // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, but didn't find qualifiers, add current qualifier - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - Qualifier? newQualifier = new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }; - Parent?.FrameEvents?.Qualifiers.Add(newQualifier); - return GetQualifierName(newQualifier); - } return "Unknown Object"; } public ObjectInfo? GetObject() { - // if Build >= 296, Windows and Fusion >= 2.5, has 0x8000 bit mask with qualifiers, return null if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - return null; + { + if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) return null; else if (NebulaCore.MFA && Parent?.FrameEvents?.EventObjects.Count > 0) From cd09357363f2e998f437f7bd845cddaafd6b9758 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 10:10:31 +0300 Subject: [PATCH 4/9] oops --- .../Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index 2368af8..c8e43d8 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -20,7 +20,6 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) ObjectInfoList = reader.ReadShort(); ObjectInfo = reader.ReadUShort(); ObjectType = reader.ReadShort(); - } } public override void WriteMFA(ByteWriter writer, params object[] extraInfo) From d59baf570798fb349afed755335d6ca603d8f56c Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 11:37:13 +0300 Subject: [PATCH 5/9] returned qualifier code in act and cond --- .../Data/Chunks/FrameChunks/Events/Action.cs | 30 +++++++++++++++---- .../Chunks/FrameChunks/Events/Condition.cs | 30 +++++++++++++++---- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs index acb1cbb..5869b1e 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs @@ -45,10 +45,30 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) } else { - if (ObjectType == -7 || ObjectType >= 0) - ObjectInfo = reader.ReadUShort(); + if (ObjectType == -7 || ObjectType >= 0) + { + ObjectInfo = reader.ReadUShort(); + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + bool exists = Parent?.Parent?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; + if (!exists) + Parent?.Parent?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + bool doAdd = true; + foreach (Qualifier qualifier in Parent.Parent.Qualifiers) + if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) + doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); - Flags296.Value = reader.ReadByte(); + if (doAdd) + Parent.Parent.Qualifiers.Add(new Qualifier() + { + ObjectInfo = ObjectInfo, + Type = ObjectType + }); + } + } + + + Flags296.Value = reader.ReadByte(); EventFlags["Always"] = Flags296["Always"]; EventFlags["Repeat"] = Flags296["Repeat"]; OtherFlags["Negated"] = Flags296["Negated"]; @@ -59,8 +79,8 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) Parameters[i] = new Parameter(); Parameters[i].ReadCCN(reader); Parameters[i].FrameEvents = Parent.Parent; - } - } + } + } Fix((List)extraInfo[0], reader, endPosition); reader.Seek(endPosition); diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs index ec3ac8c..edeaf66 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs @@ -49,8 +49,28 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) } else { - if (ObjectType == -7 || ObjectType >= 0) - ObjectInfo = reader.ReadUShort(); + if (ObjectType == -7 || ObjectType >= 0) + { + ObjectInfo = reader.ReadUShort(); + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + bool exists = Parent?.Parent?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; + if (!exists) + Parent?.Parent?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + bool doAdd = true; + foreach (Qualifier qualifier in Parent.Parent.Qualifiers) + if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) + doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); + + if (doAdd) + Parent.Parent.Qualifiers.Add(new Qualifier() + { + ObjectInfo = ObjectInfo, + Type = ObjectType + }); + } + } + Flags296.Value = reader.ReadByte(); EventFlags["Always"] = Flags296["Always"]; OtherFlags["NoInterdependence"] = Flags296["NoInterdependence"]; @@ -62,9 +82,9 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) { Parameters[i] = new Parameter(); Parameters[i].ReadCCN(reader); - Parameters[i].FrameEvents = Parent.Parent; - } - } + Parameters[i].FrameEvents = Parent.Parent; + } + } Fix((List)extraInfo[0], reader); reader.Seek(endPosition); From 1c3340378771c6b47f7ecbcddcc87335c84dfe64 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Tue, 26 May 2026 11:47:32 +0300 Subject: [PATCH 6/9] another oops --- .../Data/Chunks/FrameChunks/Events/Action.cs | 46 +++++++++---------- .../Chunks/FrameChunks/Events/Condition.cs | 46 +++++++++---------- 2 files changed, 42 insertions(+), 50 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs index 5869b1e..486132c 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Action.cs @@ -45,30 +45,10 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) } else { - if (ObjectType == -7 || ObjectType >= 0) - { - ObjectInfo = reader.ReadUShort(); - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - bool exists = Parent?.Parent?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; - if (!exists) - Parent?.Parent?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); - bool doAdd = true; - foreach (Qualifier qualifier in Parent.Parent.Qualifiers) - if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) - doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); - - if (doAdd) - Parent.Parent.Qualifiers.Add(new Qualifier() - { - ObjectInfo = ObjectInfo, - Type = ObjectType - }); - } - } - + if (ObjectType == -7 || ObjectType >= 0) + ObjectInfo = reader.ReadUShort(); - Flags296.Value = reader.ReadByte(); + Flags296.Value = reader.ReadByte(); EventFlags["Always"] = Flags296["Always"]; EventFlags["Repeat"] = Flags296["Repeat"]; OtherFlags["Negated"] = Flags296["Negated"]; @@ -79,8 +59,24 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) Parameters[i] = new Parameter(); Parameters[i].ReadCCN(reader); Parameters[i].FrameEvents = Parent.Parent; - } - } + } + + // Qualifier + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + bool doAdd = true; + foreach (Qualifier qualifier in Parent.Parent.Qualifiers) + if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) + doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); + + if (doAdd) + Parent.Parent.Qualifiers.Add(new Qualifier() + { + ObjectInfo = ObjectInfo, + Type = ObjectType + }); + } + } Fix((List)extraInfo[0], reader, endPosition); reader.Seek(endPosition); diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs index edeaf66..20afaee 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Condition.cs @@ -49,28 +49,8 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) } else { - if (ObjectType == -7 || ObjectType >= 0) - { - ObjectInfo = reader.ReadUShort(); - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - bool exists = Parent?.Parent?.Qualifiers.Where(q => q.ObjectInfo == ObjectInfo && q.Type == ObjectType).Any() == true; - if (!exists) - Parent?.Parent?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); - bool doAdd = true; - foreach (Qualifier qualifier in Parent.Parent.Qualifiers) - if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) - doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); - - if (doAdd) - Parent.Parent.Qualifiers.Add(new Qualifier() - { - ObjectInfo = ObjectInfo, - Type = ObjectType - }); - } - } - + if (ObjectType == -7 || ObjectType >= 0) + ObjectInfo = reader.ReadUShort(); Flags296.Value = reader.ReadByte(); EventFlags["Always"] = Flags296["Always"]; OtherFlags["NoInterdependence"] = Flags296["NoInterdependence"]; @@ -82,9 +62,25 @@ public override void ReadCCN(ByteReader reader, params object[] extraInfo) { Parameters[i] = new Parameter(); Parameters[i].ReadCCN(reader); - Parameters[i].FrameEvents = Parent.Parent; - } - } + Parameters[i].FrameEvents = Parent.Parent; + } + + // Qualifier + if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + bool doAdd = true; + foreach (Qualifier qualifier in Parent.Parent.Qualifiers) + if (qualifier.ObjectInfo == ObjectInfo && qualifier.Type == ObjectType) + doAdd = false; // throw new Exception("Adding duplicate qualifiers to the qualifier list!"); + + if (doAdd) + Parent.Parent.Qualifiers.Add(new Qualifier() + { + ObjectInfo = ObjectInfo, + Type = ObjectType + }); + } + } Fix((List)extraInfo[0], reader); reader.Seek(endPosition); From 7c1b7c34c6b0df22a5b37725265fc98342f3f4e3 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Wed, 27 May 2026 11:41:46 +0300 Subject: [PATCH 7/9] moved GetObject to ObjectCommon to fix qualifiers moved it so it could still do the same thing, but also fix qualifiers as parameters in events --- .../Chunks/FrameChunks/Events/ACEventBase.cs | 7 +--- .../Events/Parameters/ParameterExpression.cs | 7 +--- .../Events/Parameters/ParameterObject.cs | 13 ++----- .../Events/Parameters/ParameterPosition.cs | 8 ++--- .../ObjectChunks/ObjectCommon/ObjectCommon.cs | 34 +++++++++++++++++++ 5 files changed, 40 insertions(+), 29 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index a8c0574..73f928f 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -65,12 +65,7 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { - if (Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && Parent?.Parent.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + return ObjectCommon.GetObjectACEventBase(ObjectInfo, ObjectType, this); } public string GetGlobalValueName(ParameterChunk param) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs index 2758f25..46ca1a7 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs @@ -553,12 +553,7 @@ public override string ToString() public ObjectInfo? GetObject() { - if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && Parent?.FrameEvents?.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); } public string GetGlobalValueName() diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index c8e43d8..f8b44ed 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -1,5 +1,6 @@ using Nebula.Core.Data.Chunks.AppChunks; using Nebula.Core.Data.Chunks.ObjectChunks; +using Nebula.Core.Data.Chunks.ObjectChunks.ObjectCommon; using Nebula.Core.Memory; namespace Nebula.Core.Data.Chunks.FrameChunks.Events.Parameters @@ -45,17 +46,7 @@ public override string ToString() public ObjectInfo? GetObject() { - if (NebulaCore.Build >= 296 && NebulaCore.Windows && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) - Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); - } - if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && Parent?.FrameEvents?.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); } public string GetQualifierName(Qualifier qualifier) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs index b1a9ec8..a0d34bb 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs @@ -1,6 +1,7 @@ using ILGPU.IR.Types; using Nebula.Core.Data.Chunks.AppChunks; using Nebula.Core.Data.Chunks.ObjectChunks; +using Nebula.Core.Data.Chunks.ObjectChunks.ObjectCommon; using Nebula.Core.Memory; namespace Nebula.Core.Data.Chunks.FrameChunks.Events.Parameters @@ -96,12 +97,7 @@ public override string ToString() public ObjectInfo? GetObject() { - if (Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfoParent).Any() == true) - return null; - else if (NebulaCore.MFA && Parent?.FrameEvents?.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)Parent.FrameEvents.EventObjects[ObjectInfoParent].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfoParent]; + return ObjectCommon.GetObject(ObjectInfoParent, TypeParent, this); } public string GetObjectName() diff --git a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs index a8a8382..9e3c2fb 100644 --- a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs +++ b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs @@ -1,4 +1,6 @@ using Nebula.Core.Data.Chunks.ChunkTypes; +using Nebula.Core.Data.Chunks.FrameChunks.Events; +using Nebula.Core.Data.Chunks.FrameChunks.Events.Parameters; using Nebula.Core.Memory; using System.Diagnostics; using System.Drawing; @@ -236,6 +238,38 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) } + // method for getting object/qualifier in ACEventBase + public static ObjectInfo? GetObjectACEventBase(ushort ObjectInfo, short ObjectType, ACEventBase ace) + { + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + ace.Parent?.Parent.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && ace.Parent?.Parent.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)ace.Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + } + + //method for getting object/qualifier in different places + public static ObjectInfo? GetObject(ushort ObjectInfo, short ObjectType, ParameterChunk paramChunk) + { + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + paramChunk.Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && paramChunk.Parent?.FrameEvents?.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)paramChunk.Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + } + public void GetOffset(ByteReader reader, int index, bool check = false) { ushort Offset = reader.ReadUShort(); From 038e118e57acc78014b42c433c7b38695d9c7490 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Wed, 27 May 2026 12:04:51 +0300 Subject: [PATCH 8/9] changed from 2 diff methods to 1 --- .../Chunks/FrameChunks/Events/ACEventBase.cs | 2 +- .../Events/Parameters/ParameterExpression.cs | 2 +- .../Events/Parameters/ParameterObject.cs | 2 +- .../Events/Parameters/ParameterPosition.cs | 2 +- .../ObjectChunks/ObjectCommon/ObjectCommon.cs | 52 ++++++++++--------- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index 73f928f..03c297b 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -65,7 +65,7 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { - return ObjectCommon.GetObjectACEventBase(ObjectInfo, ObjectType, this); + return ObjectCommon.GetObject(ObjectInfo, ObjectType, this, null); } public string GetGlobalValueName(ParameterChunk param) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs index 46ca1a7..e500470 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs @@ -553,7 +553,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); + return ObjectCommon.GetObject(ObjectInfo, ObjectType, null, this); } public string GetGlobalValueName() diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index f8b44ed..183926c 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -46,7 +46,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); + return ObjectCommon.GetObject(ObjectInfo, ObjectType, null, this); } public string GetQualifierName(Qualifier qualifier) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs index a0d34bb..64972ab 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs @@ -97,7 +97,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfoParent, TypeParent, this); + return ObjectCommon.GetObject(ObjectInfoParent, TypeParent, null, this); } public string GetObjectName() diff --git a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs index 9e3c2fb..8a94548 100644 --- a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs +++ b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs @@ -238,36 +238,38 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) } - // method for getting object/qualifier in ACEventBase - public static ObjectInfo? GetObjectACEventBase(ushort ObjectInfo, short ObjectType, ACEventBase ace) + // method for getting objects/qualifiers to prevent copy paste + public static ObjectInfo? GetObject(ushort ObjectInfo, short ObjectType, ACEventBase ace, ParameterChunk paramChunk) { - if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + if (ace != null) { - if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) - ace.Parent?.Parent.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + ace.Parent?.Parent.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && ace.Parent?.Parent.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)ace.Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; } - if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && ace.Parent?.Parent.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)ace.Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; - } - - //method for getting object/qualifier in different places - public static ObjectInfo? GetObject(ushort ObjectInfo, short ObjectType, ParameterChunk paramChunk) - { - if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + else if (paramChunk != null) { - if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) - paramChunk.Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) + { + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + paramChunk.Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); + } + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && paramChunk.Parent?.FrameEvents?.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)paramChunk.Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; } - if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && paramChunk.Parent?.FrameEvents?.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)paramChunk.Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + return null; } public void GetOffset(ByteReader reader, int index, bool check = false) From 4463f9cb1ddc30d0b429014ebe8e44313f051672 Mon Sep 17 00:00:00 2001 From: EX0RCIST Date: Thu, 28 May 2026 06:28:56 +0300 Subject: [PATCH 9/9] Revert "changed from 2 diff methods to 1" This reverts commit 038e118e57acc78014b42c433c7b38695d9c7490. --- .../Chunks/FrameChunks/Events/ACEventBase.cs | 2 +- .../Events/Parameters/ParameterExpression.cs | 2 +- .../Events/Parameters/ParameterObject.cs | 2 +- .../Events/Parameters/ParameterPosition.cs | 2 +- .../ObjectChunks/ObjectCommon/ObjectCommon.cs | 52 +++++++++---------- 5 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs index 03c297b..73f928f 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/ACEventBase.cs @@ -65,7 +65,7 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfo, ObjectType, this, null); + return ObjectCommon.GetObjectACEventBase(ObjectInfo, ObjectType, this); } public string GetGlobalValueName(ParameterChunk param) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs index e500470..46ca1a7 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterExpression.cs @@ -553,7 +553,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfo, ObjectType, null, this); + return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); } public string GetGlobalValueName() diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs index 183926c..f8b44ed 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterObject.cs @@ -46,7 +46,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfo, ObjectType, null, this); + return ObjectCommon.GetObject(ObjectInfo, ObjectType, this); } public string GetQualifierName(Qualifier qualifier) diff --git a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs index 64972ab..a0d34bb 100644 --- a/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs +++ b/Nebula.Core/Data/Chunks/FrameChunks/Events/Parameters/ParameterPosition.cs @@ -97,7 +97,7 @@ public override string ToString() public ObjectInfo? GetObject() { - return ObjectCommon.GetObject(ObjectInfoParent, TypeParent, null, this); + return ObjectCommon.GetObject(ObjectInfoParent, TypeParent, this); } public string GetObjectName() diff --git a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs index 8a94548..9e3c2fb 100644 --- a/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs +++ b/Nebula.Core/Data/Chunks/ObjectChunks/ObjectCommon/ObjectCommon.cs @@ -238,38 +238,36 @@ public override void WriteMFA(ByteWriter writer, params object[] extraInfo) } - // method for getting objects/qualifiers to prevent copy paste - public static ObjectInfo? GetObject(ushort ObjectInfo, short ObjectType, ACEventBase ace, ParameterChunk paramChunk) + // method for getting object/qualifier in ACEventBase + public static ObjectInfo? GetObjectACEventBase(ushort ObjectInfo, short ObjectType, ACEventBase ace) { - if (ace != null) + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) { - if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) - ace.Parent?.Parent.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); - } - if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && ace.Parent?.Parent.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)ace.Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + ace.Parent?.Parent.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); } - else if (paramChunk != null) + if (ace.Parent?.Parent.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && ace.Parent?.Parent.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)ace.Parent.Parent.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + } + + //method for getting object/qualifier in different places + public static ObjectInfo? GetObject(ushort ObjectInfo, short ObjectType, ParameterChunk paramChunk) + { + if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) { - if (NebulaCore.Windows && NebulaCore.Build >= 296 && NebulaCore.Fusion >= 2.5 && (ObjectInfo & 0x8000) != 0) - { - if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) - paramChunk.Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); - } - if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) - return null; - else if (NebulaCore.MFA && paramChunk.Parent?.FrameEvents?.EventObjects.Count > 0) - return NebulaCore.PackageData.FrameItems.Items[(int)paramChunk.Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; - else - return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo && x.Type == ObjectType).Any() != true) + paramChunk.Parent?.FrameEvents?.Qualifiers.Add(new Qualifier() { ObjectInfo = ObjectInfo, Type = ObjectType }); } - return null; + if (paramChunk.Parent?.FrameEvents?.Qualifiers.Where(x => x.ObjectInfo == ObjectInfo).Any() == true) + return null; + else if (NebulaCore.MFA && paramChunk.Parent?.FrameEvents?.EventObjects.Count > 0) + return NebulaCore.PackageData.FrameItems.Items[(int)paramChunk.Parent.FrameEvents.EventObjects[ObjectInfo].ItemHandle]; + else + return NebulaCore.PackageData.FrameItems.Items[ObjectInfo]; } public void GetOffset(ByteReader reader, int index, bool check = false)