From 1acb895eaf8ea06daf4b51b44b47e6fcd767af7b Mon Sep 17 00:00:00 2001 From: CloneTrooper1019 Date: Wed, 20 Jan 2021 14:45:58 -0600 Subject: [PATCH] 0.462.0.416719 --- BinaryFormat/Chunks/INST.cs | 4 +--- BinaryFormat/Chunks/PRNT.cs | 8 ++------ BinaryFormat/Chunks/PROP.cs | 16 ++++------------ DataTypes/CFrame.cs | 2 +- DataTypes/Vector2int16.cs | 4 ++-- DataTypes/Vector3int16.cs | 6 +++--- Generated/Classes.cs | 10 +++++++++- Generated/Enums.cs | 2 +- RobloxFile.cs | 12 ++++++++++++ RobloxFileFormat.dll | Bin 364544 -> 364544 bytes Tree/Attributes.cs | 15 ++++++--------- Tree/Instance.cs | 10 +++++----- Tree/Property.cs | 15 +++------------ XmlFormat/IO/XmlFileReader.cs | 6 +++--- XmlFormat/IO/XmlFileWriter.cs | 4 +--- XmlFormat/Tokens/Content.cs | 5 +---- XmlFormat/XmlRobloxFile.cs | 14 +++++++++----- 17 files changed, 63 insertions(+), 70 deletions(-) diff --git a/BinaryFormat/Chunks/INST.cs b/BinaryFormat/Chunks/INST.cs index 5b53b03..b4a208b 100644 --- a/BinaryFormat/Chunks/INST.cs +++ b/BinaryFormat/Chunks/INST.cs @@ -33,9 +33,7 @@ namespace RobloxFiles.BinaryFormat.Chunks if (instType == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"INST - Unknown class: {ClassName} while reading INST chunk."); - + RobloxFile.LogError($"INST - Unknown class: {ClassName} while reading INST chunk."); return; } diff --git a/BinaryFormat/Chunks/PRNT.cs b/BinaryFormat/Chunks/PRNT.cs index ce2e244..2f862c4 100644 --- a/BinaryFormat/Chunks/PRNT.cs +++ b/BinaryFormat/Chunks/PRNT.cs @@ -33,17 +33,13 @@ namespace RobloxFiles.BinaryFormat.Chunks if (child == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"PRNT: could not parent {childId} to {parentId} because child {childId} was null."); - + RobloxFile.LogError($"PRNT: could not parent {childId} to {parentId} because child {childId} was null."); continue; } if (parentId >= 0 && parent == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"PRNT: could not parent {childId} to {parentId} because parent {parentId} was null."); - + RobloxFile.LogError($"PRNT: could not parent {childId} to {parentId} because parent {parentId} was null."); continue; } diff --git a/BinaryFormat/Chunks/PROP.cs b/BinaryFormat/Chunks/PROP.cs index e7d5e13..6f255a4 100644 --- a/BinaryFormat/Chunks/PROP.cs +++ b/BinaryFormat/Chunks/PROP.cs @@ -58,9 +58,7 @@ namespace RobloxFiles.BinaryFormat.Chunks if (instance == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"PROP: No instance @{id} for property {ClassName}.{Name}"); - + RobloxFile.LogError($"PROP: No instance @{id} for property {ClassName}.{Name}"); continue; } @@ -368,9 +366,7 @@ namespace RobloxFiles.BinaryFormat.Chunks if (info == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"Enum cast failed for {inst.ClassName}.{Name} using value {value}!"); - + RobloxFile.LogError($"Enum cast failed for {inst.ClassName}.{Name} using value {value}!"); return value; } @@ -378,9 +374,7 @@ namespace RobloxFiles.BinaryFormat.Chunks } catch { - if (RobloxFile.LogErrors) - Console.Error.WriteLine($"Enum cast failed for {inst.ClassName}.{Name} using value {value}!"); - + RobloxFile.LogError($"Enum cast failed for {inst.ClassName}.{Name} using value {value}!"); return value; } }); @@ -545,9 +539,7 @@ namespace RobloxFiles.BinaryFormat.Chunks break; default: - if (RobloxFile.LogErrors) - Console.Error.WriteLine("Unhandled property type: {0}!", Type); - + RobloxFile.LogError($"Unhandled property type: {Type}!"); break; // } diff --git a/DataTypes/CFrame.cs b/DataTypes/CFrame.cs index 5521edc..e229f88 100644 --- a/DataTypes/CFrame.cs +++ b/DataTypes/CFrame.cs @@ -181,7 +181,7 @@ namespace RobloxFiles.DataTypes internal CFrame(Attribute attr) { Vector3 pos = new Vector3(attr); - byte rawOrientId = attr.readByte(); + byte rawOrientId = attr.ReadByte(); if (rawOrientId > 0) { diff --git a/DataTypes/Vector2int16.cs b/DataTypes/Vector2int16.cs index 6b91dea..3b25585 100644 --- a/DataTypes/Vector2int16.cs +++ b/DataTypes/Vector2int16.cs @@ -21,8 +21,8 @@ namespace RobloxFiles.DataTypes internal Vector2int16(Attribute attr) { - X = attr.readShort(); - Y = attr.readShort(); + X = attr.ReadShort(); + Y = attr.ReadShort(); } private delegate Vector2int16 Operator(Vector2int16 a, Vector2int16 b); diff --git a/DataTypes/Vector3int16.cs b/DataTypes/Vector3int16.cs index 6acdb35..7d89efe 100644 --- a/DataTypes/Vector3int16.cs +++ b/DataTypes/Vector3int16.cs @@ -27,9 +27,9 @@ namespace RobloxFiles.DataTypes internal Vector3int16(Attribute attr) { - X = attr.readShort(); - Y = attr.readShort(); - Z = attr.readShort(); + X = attr.ReadShort(); + Y = attr.ReadShort(); + Z = attr.ReadShort(); } private delegate Vector3int16 Operator(Vector3int16 a, Vector3int16 b); diff --git a/Generated/Classes.cs b/Generated/Classes.cs index cc96ac4..db77343 100644 --- a/Generated/Classes.cs +++ b/Generated/Classes.cs @@ -1,5 +1,5 @@ // Auto-generated list of creatable Roblox classes. -// Updated as of 0.460.0.416222 +// Updated as of 0.462.0.416719 using System; @@ -732,6 +732,14 @@ namespace RobloxFiles public Vector3 Torque_ = new Vector3(); } + public class UniversalConstraint : Constraint + { + public bool LimitsEnabled; + public float MaxAngle = 45; + public float Radius = 0.2f; + public float Restitution; + } + public class VectorForce : Constraint { public bool ApplyAtCenterOfMass; diff --git a/Generated/Enums.cs b/Generated/Enums.cs index 968cfc1..3267663 100644 --- a/Generated/Enums.cs +++ b/Generated/Enums.cs @@ -1,5 +1,5 @@ // Auto-generated list of Roblox enums. -// Updated as of 0.460.0.416222 +// Updated as of 0.462.0.416719 namespace RobloxFiles.Enums { diff --git a/RobloxFile.cs b/RobloxFile.cs index aba5b69..9ac246c 100644 --- a/RobloxFile.cs +++ b/RobloxFile.cs @@ -137,5 +137,17 @@ namespace RobloxFiles { return Task.Run(() => Save(filePath)); } + + /// + /// Logs an error that occurred while opening a RobloxFile if logs are enabled. + /// + /// + internal static void LogError(string message) + { + if (!LogErrors) + return; + + Console.Error.WriteLine(message); + } } } diff --git a/RobloxFileFormat.dll b/RobloxFileFormat.dll index dfa80cb0c8d5107dbcf7bb26915480d813b8c4f4..67bf0282f598d2df5fe3b9a6cf18aa2e954fc6b2 100644 GIT binary patch delta 54271 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 diff --git a/Tree/Attributes.cs b/Tree/Attributes.cs index 6494dcc..6e926ff 100644 --- a/Tree/Attributes.cs +++ b/Tree/Attributes.cs @@ -57,9 +57,9 @@ namespace RobloxFiles // internal BinaryWriter writer; internal int ReadInt() => reader.ReadInt32(); - internal byte readByte() => reader.ReadByte(); - internal bool readBool() => reader.ReadBoolean(); - internal short readShort() => reader.ReadInt16(); + internal byte ReadByte() => reader.ReadByte(); + internal bool ReadBool() => reader.ReadBoolean(); + internal short ReadShort() => reader.ReadInt16(); internal float ReadFloat() => reader.ReadSingle(); internal double ReadDouble() => reader.ReadDouble(); internal string ReadString() => reader.ReadString(true); @@ -103,14 +103,13 @@ namespace RobloxFiles switch (DataType) { - ////////////////////////// case AttributeType.Null: break; case AttributeType.String: Value = ReadString(); break; case AttributeType.Bool: - Value = readBool(); + Value = ReadBool(); break; case AttributeType.Int: Value = ReadInt(); @@ -185,7 +184,7 @@ namespace RobloxFiles Value = new Rect(this); break; case AttributeType.PhysicalProperties: - bool custom = readBool(); + bool custom = ReadBool(); if (custom) Value = new PhysicalProperties(this); @@ -197,9 +196,7 @@ namespace RobloxFiles case AttributeType.Region3int16: Value = new Region3int16(this); break; - default: - throw new InvalidDataException($"Cannot handle AttributeType {DataType}!"); - ////////////////////////// + default: throw new InvalidDataException($"Cannot handle AttributeType {DataType}!"); } reader = null; diff --git a/Tree/Instance.cs b/Tree/Instance.cs index 65e319f..eff3d12 100644 --- a/Tree/Instance.cs +++ b/Tree/Instance.cs @@ -18,6 +18,7 @@ namespace RobloxFiles public Instance() { Name = ClassName; + RefreshProperties(); } /// The ClassName of this Instance. @@ -506,12 +507,11 @@ namespace RobloxFiles /// A reference to the property that will be added. internal void AddProperty(ref Property prop) { + string name = prop.Name; + RemoveProperty(name); + prop.Instance = this; - - if (props.ContainsKey(prop.Name)) - props.Remove(prop.Name); - - props.Add(prop.Name, prop); + props.Add(name, prop); } /// diff --git a/Tree/Property.cs b/Tree/Property.cs index 6e406fa..7a4f4ab 100644 --- a/Tree/Property.cs +++ b/Tree/Property.cs @@ -211,10 +211,7 @@ namespace RobloxFiles } else { - if (!RobloxFile.LogErrors) - return false; - - Console.Error.WriteLine($"RobloxFiles.Property - Property {Instance.ClassName}.{Name} does not exist!"); + RobloxFile.LogError($"RobloxFiles.Property - Property {Instance.ClassName}.{Name} does not exist!"); } } } @@ -248,10 +245,7 @@ namespace RobloxFiles } catch { - if (!RobloxFile.LogErrors) - return; - - Console.Error.WriteLine($"RobloxFiles.Property - Failed to cast value {value} into property {Instance.ClassName}.{Name}"); + RobloxFile.LogError($"RobloxFiles.Property - Failed to cast value {value} into property {Instance.ClassName}.{Name}"); } } else if (valueType != null) @@ -267,10 +261,7 @@ namespace RobloxFiles } catch { - if (!RobloxFile.LogErrors) - return; - - Console.Error.WriteLine($"RobloxFiles.Property - Failed to implicitly cast value {value} into property {Instance.ClassName}.{Name}"); + RobloxFile.LogError($"RobloxFiles.Property - Failed to implicitly cast value {value} into property {Instance.ClassName}.{Name}"); } } } diff --git a/XmlFormat/IO/XmlFileReader.cs b/XmlFormat/IO/XmlFileReader.cs index 74f8119..1ab4806 100644 --- a/XmlFormat/IO/XmlFileReader.cs +++ b/XmlFormat/IO/XmlFileReader.cs @@ -109,7 +109,7 @@ namespace RobloxFiles.XmlFormat if (!tokenHandler.ReadProperty(prop, propNode) && RobloxFile.LogErrors) { var readError = error($"Could not read property: {prop.GetFullName()}!"); - Console.Error.WriteLine(readError.Message); + RobloxFile.LogError(readError.Message); } instance.AddProperty(ref prop); @@ -117,7 +117,7 @@ namespace RobloxFiles.XmlFormat else if (RobloxFile.LogErrors) { var tokenError = error($"No {nameof(IXmlPropertyToken)} found for property type: {propType}!"); - Console.Error.WriteLine(tokenError.Message); + RobloxFile.LogError(tokenError.Message); } } } @@ -142,7 +142,7 @@ namespace RobloxFiles.XmlFormat if (RobloxFile.LogErrors) { var typeError = error($"Unknown class {className} while reading Item."); - Console.Error.WriteLine(typeError.Message); + RobloxFile.LogError(typeError.Message); } return null; diff --git a/XmlFormat/IO/XmlFileWriter.cs b/XmlFormat/IO/XmlFileWriter.cs index dffd385..fe7e4f2 100644 --- a/XmlFormat/IO/XmlFileWriter.cs +++ b/XmlFormat/IO/XmlFileWriter.cs @@ -94,9 +94,7 @@ namespace RobloxFiles.XmlFormat if (handler == null) { - if (RobloxFile.LogErrors) - Console.Error.WriteLine("XmlDataWriter.WriteProperty: No token handler found for property type: {0}", propType); - + RobloxFile.LogError($"XmlRobloxFileWriter.WriteProperty: No token handler found for property type: {propType}"); return null; } diff --git a/XmlFormat/Tokens/Content.cs b/XmlFormat/Tokens/Content.cs index e1073bf..df83b82 100644 --- a/XmlFormat/Tokens/Content.cs +++ b/XmlFormat/Tokens/Content.cs @@ -30,10 +30,7 @@ namespace RobloxFiles.XmlFormat.PropertyTokens } catch { - if (!RobloxFile.LogErrors) - return true; - - Console.Error.WriteLine("ContentToken: Got illegal base64 string: {0}", data); + RobloxFile.LogError($"ContentToken: Got illegal base64 string: {data}"); } } } diff --git a/XmlFormat/XmlRobloxFile.cs b/XmlFormat/XmlRobloxFile.cs index ab8ce26..f727cae 100644 --- a/XmlFormat/XmlRobloxFile.cs +++ b/XmlFormat/XmlRobloxFile.cs @@ -97,11 +97,7 @@ namespace RobloxFiles } else if (refId != "null") { - string name = refProp.GetFullName(); - - if (LogErrors) - Console.Error.WriteLine("XmlRobloxFile: Could not resolve reference for {0}", name); - + LogError($"XmlRobloxFile: Could not resolve reference for {refProp.GetFullName()}"); refProp.Value = null; } } @@ -112,6 +108,14 @@ namespace RobloxFiles foreach (Property sharedProp in sharedProps) { SharedString shared = sharedProp.CastValue(); + + if (shared == null) + { + var nullBuffer = Array.Empty(); + shared = SharedString.FromBuffer(nullBuffer); + sharedProp.Value = shared; + } + SharedStrings.Add(shared.Key); } }