Exemplo n.º 1
0
        public static string ExcelTypeToManaged(ExcelColumnDataType type)
        {
            switch (type)
            {
            case ExcelColumnDataType.String:
                return("SeString");

            case ExcelColumnDataType.Bool:
                return("bool");

            case ExcelColumnDataType.Int8:
                return("sbyte");

            case ExcelColumnDataType.UInt8:
                return("byte");

            case ExcelColumnDataType.Int16:
                return("short");

            case ExcelColumnDataType.UInt16:
                return("ushort");

            case ExcelColumnDataType.Int32:
                return("int");

            case ExcelColumnDataType.UInt32:
                return("uint");

            case ExcelColumnDataType.Float32:
                return("float");

            case ExcelColumnDataType.Int64:
                return("long");

            case ExcelColumnDataType.UInt64:
                return("ulong");

            case ExcelColumnDataType.PackedBool0:
            case ExcelColumnDataType.PackedBool1:
            case ExcelColumnDataType.PackedBool2:
            case ExcelColumnDataType.PackedBool3:
            case ExcelColumnDataType.PackedBool4:
            case ExcelColumnDataType.PackedBool5:
            case ExcelColumnDataType.PackedBool6:
            case ExcelColumnDataType.PackedBool7:
                return("bool");

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Read a field from the current stream position
        /// </summary>
        /// <param name="type">The sheet type to read</param>
        /// <typeparam name="T">The CLR type to store the read data in</typeparam>
        /// <returns>The read data stored in the provided type</returns>
        /// <exception cref="ArgumentOutOfRangeException">An invalid column type was provided</exception>
        private T ReadField <T>(ExcelColumnDataType type)
        {
            var data = ReadFieldInternal(type);

            if (_sheet._Lumina.Options.ExcelSheetStrictCastingEnabled)
            {
                return((T)data);
            }

            if (data is T castedData)
            {
                return(castedData);
            }

            return(default);
Exemplo n.º 3
0
        /// <summary>
        /// Read a field from the current stream position
        /// </summary>
        /// <param name="type">The sheet type to read</param>
        /// <typeparam name="T">The CLR type to store the read data in</typeparam>
        /// <returns>The read data stored in the provided type</returns>
        /// <exception cref="ArgumentOutOfRangeException">An invalid column type was provided</exception>
        private T?ReadField <T>(ExcelColumnDataType type)
        {
            var data = ReadFieldInternal(type);

            if (_sheet.GameData.Options.ExcelSheetStrictCastingEnabled)
            {
                return((T)data);
            }

            // todo: this is f*****g shit but is a wip fix so that you can still ReadField< string > and get something back because 1am brain can't figure it out rn
            if (typeof(T) == typeof(string) && data is SeString seString)
            {
                // haha f**k you c#
                return((T)(object)seString.RawString);
            }

            if (data is T castedData)
            {
                return(castedData);
            }

            return(default);
Exemplo n.º 4
0
        private object ReadFieldInternal(ExcelColumnDataType type)
        {
            var br = _dataFile.Reader;

            object?data = null;

            switch (type)
            {
            case ExcelColumnDataType.String:
            {
                var stringOffset = br.ReadUInt32();
                var raw          = br.ReadRawOffsetData(_rowOffset + _sheet.Header.DataOffset + stringOffset);

                if (Sheet.GameData.Options.ResolveKnownRsvSheetValues)
                {
                    var replacement = ReplaceRsvKeyWithValue(raw);
                    if (replacement != null)
                    {
                        data = replacement;
                        break;
                    }
                }

                data = new SeString(raw);
                break;
            }

            case ExcelColumnDataType.Bool:
            {
                data = br.ReadByte() != 0;
                break;
            }

            case ExcelColumnDataType.Int8:
            {
                data = br.ReadSByte();
                break;
            }

            case ExcelColumnDataType.UInt8:
            {
                data = br.ReadByte();
                break;
            }

            case ExcelColumnDataType.Int16:
            {
                data = br.ReadInt16();
                break;
            }

            case ExcelColumnDataType.UInt16:
            {
                data = br.ReadUInt16();
                break;
            }

            case ExcelColumnDataType.Int32:
            {
                data = br.ReadInt32();
                break;
            }

            case ExcelColumnDataType.UInt32:
            {
                data = br.ReadUInt32();
                break;
            }

            // case ExcelColumnDataType.Unk:
            // break;
            case ExcelColumnDataType.Float32:
            {
                data = br.ReadSingle();
                break;
            }

            case ExcelColumnDataType.Int64:
            {
                data = br.ReadUInt64();
                break;
            }

            case ExcelColumnDataType.UInt64:
            {
                data = br.ReadUInt64();
                break;
            }

            // case ExcelColumnDataType.Unk2:
            // break;
            case ExcelColumnDataType.PackedBool0:
            case ExcelColumnDataType.PackedBool1:
            case ExcelColumnDataType.PackedBool2:
            case ExcelColumnDataType.PackedBool3:
            case ExcelColumnDataType.PackedBool4:
            case ExcelColumnDataType.PackedBool5:
            case ExcelColumnDataType.PackedBool6:
            case ExcelColumnDataType.PackedBool7:
            {
                var shift = (int)type - (int)ExcelColumnDataType.PackedBool0;
                var bit   = 1 << shift;

                var rawData = br.ReadByte();

                data = (rawData & bit) == bit;

                break;
            }

            default:
                throw new ArgumentOutOfRangeException("type", $"invalid excel column type: {type}");
            }

            return(data);
        }
Exemplo n.º 5
0
        public T ReadOffset <T>(int offset, ExcelColumnDataType type)
        {
            Stream.Position = _RowOffset + offset;

            return(ReadField <T>(type));
        }
Exemplo n.º 6
0
        private T ReadField <T>(ExcelColumnDataType type)
        {
            var br = _DataFile.Reader;

            object data = null;

            switch (type)
            {
            case ExcelColumnDataType.String:
            {
                var stringOffset = br.ReadUInt32();
                data = br.ReadStringOffset(_RowOffset + _Sheet.Header.DataOffset + stringOffset);

                break;
            }

            case ExcelColumnDataType.Bool:
            {
                data = br.ReadByte() != 0;
                break;
            }

            case ExcelColumnDataType.Int8:
            {
                data = br.ReadSByte();
                break;
            }

            case ExcelColumnDataType.UInt8:
            {
                data = br.ReadByte();
                break;
            }

            case ExcelColumnDataType.Int16:
            {
                data = br.ReadInt16();
                break;
            }

            case ExcelColumnDataType.UInt16:
            {
                data = br.ReadUInt16();
                break;
            }

            case ExcelColumnDataType.Int32:
            {
                data = br.ReadInt32();
                break;
            }

            case ExcelColumnDataType.UInt32:
            {
                data = br.ReadUInt32();
                break;
            }

            // case ExcelColumnDataType.Unk:
            // break;
            case ExcelColumnDataType.Float32:
            {
                data = br.ReadSingle();
                break;
            }

            case ExcelColumnDataType.Int64:
            {
                data = br.ReadUInt64();
                break;
            }

            case ExcelColumnDataType.UInt64:
            {
                data = br.ReadUInt64();
                break;
            }

            // case ExcelColumnDataType.Unk2:
            // break;
            case ExcelColumnDataType.PackedBool0:
            case ExcelColumnDataType.PackedBool1:
            case ExcelColumnDataType.PackedBool2:
            case ExcelColumnDataType.PackedBool3:
            case ExcelColumnDataType.PackedBool4:
            case ExcelColumnDataType.PackedBool5:
            case ExcelColumnDataType.PackedBool6:
            case ExcelColumnDataType.PackedBool7:
            {
                var shift = (int)type - (int)ExcelColumnDataType.PackedBool0;
                var bit   = 1 << shift;

                var rawData = br.ReadByte();

                data = (rawData & bit) == bit;

                break;
            }

            default:
                throw new ArgumentOutOfRangeException("type", $"invalid excel column type: {type}");
            }

            return((T)data);
        }