示例#1
0
 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)));
 }
示例#2
0
        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);
        }
示例#3
0
        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];