public static int GetSramBufferOffset(string fieldName, out FindOffsetResult result) { result = new(); return(fieldName.Contains(StructDelimiter) ? (int)fieldName.ParseEnum <SaveSlotUnknownOffset>() .GetOrThrowIfDefault(fieldName, OffsetNotFoundTemplate.InsertArgs(fieldName)) : InternalGetBufferOffset(typeof(SramSoE), fieldName, result) .GetOrThrowIfDefault(fieldName, NamedOffsetNotDefinedTemplate.InsertArgs(fieldName))); }
public static int GetSaveSlotBufferOffset(string fieldName, out FindOffsetResult result) { result = new(); int offset; if (fieldName.Contains(StructDelimiter)) { var enumValue = fieldName.Remove("[").Remove("]").ParseEnum <SaveSlotUnknownOffset>(); offset = (int)enumValue; result.Path = fieldName.Replace(StructDelimiter, "."); result.ParentType = enumValue.GetAttribute <EnumDataTypeAttribute>()?.EnumType; } else { offset = InternalGetBufferOffset(typeof(SaveSlotDataSoE), fieldName, result); } offset.ThrowIfDefault(fieldName, OffsetNotFoundTemplate.InsertArgs(fieldName)); return(SramSizes.Checksum + offset); }
private static int InternalGetBufferOffset(Type type, string fieldNameOrPath, FindOffsetResult result) { var index = fieldNameOrPath.IndexOf('.'); // check for path info if (index == -1) { var offset = FindFieldOffset(type, fieldNameOrPath, result); if (offset > -1) { return(offset); } throw new ArgumentException($"Type [{type.Name}] does not contain field [{fieldNameOrPath}]"); } var fieldName = fieldNameOrPath[..index];