diff --git a/FModel/PakReader/Parsers/PropertyTagData/BaseProperty.cs b/FModel/PakReader/Parsers/PropertyTagData/BaseProperty.cs index 563579ae..66a7bb48 100644 --- a/FModel/PakReader/Parsers/PropertyTagData/BaseProperty.cs +++ b/FModel/PakReader/Parsers/PropertyTagData/BaseProperty.cs @@ -69,7 +69,7 @@ namespace FModel.PakReader.Parsers.PropertyTagData "Int8Property" => new Int8Property(reader), "MapProperty" => new MapProperty(reader, tag), "SetProperty" => new SetProperty(reader, tag), - "EnumProperty" => new EnumProperty(reader, tag), + "EnumProperty" => new EnumProperty(reader, tag, readType), _ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."), }; return prop; @@ -105,7 +105,7 @@ namespace FModel.PakReader.Parsers.PropertyTagData "Int8Property" => new Int8Property(reader).Value, "MapProperty" => new MapProperty(reader, tag).Value, "SetProperty" => new SetProperty(reader, tag).Value, - "EnumProperty" => new EnumProperty(reader, tag).Value, + "EnumProperty" => new EnumProperty(reader, tag, readType).Value, _ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."), }; return prop; diff --git a/FModel/PakReader/Parsers/PropertyTagData/EnumProperty.cs b/FModel/PakReader/Parsers/PropertyTagData/EnumProperty.cs index 66eba63c..c3975d46 100644 --- a/FModel/PakReader/Parsers/PropertyTagData/EnumProperty.cs +++ b/FModel/PakReader/Parsers/PropertyTagData/EnumProperty.cs @@ -8,31 +8,31 @@ namespace FModel.PakReader.Parsers.PropertyTagData { Value = new FName(ByteToEnum(tag.EnumName.String, 0)); } - internal EnumProperty(PackageReader reader, FPropertyTag tag) + internal EnumProperty(PackageReader reader, FPropertyTag tag, ReadType readType) { Position = reader.Position; - if (reader is IoPackageReader) - { - object byteValue = tag.EnumType.String == "IntProperty" ? reader.ReadInt32() : reader.ReadByte(); - Value = new FName(ByteToEnum(tag.EnumName.String, byteValue)); - } - else + if (!(reader is IoPackageReader) || readType != ReadType.NORMAL) { Value = reader.ReadFName(); } + else + { + var byteValue = tag.EnumType.String == "IntProperty" ? reader.ReadInt32() : reader.ReadByte(); + Value = new FName(ByteToEnum(tag.EnumName.String, byteValue)); + } } - private static string ByteToEnum(string enumName, object value) + private static string ByteToEnum(string enumName, int value) { - string result; - if (enumName == null) return value.ToString(); + string result; + if (Globals.EnumMappings.TryGetValue(enumName, out var values)) { - result = values.TryGetValue((int)value, out var member) ? string.Concat(enumName, "::", member) : string.Concat(enumName, "::", value); + result = values.TryGetValue(value, out var member) ? string.Concat(enumName, "::", member) : string.Concat(enumName, "::", value); } else {