示例#1
0
        internal static PexObjectStructInfo Create(PexParseMeta parse)
        {
            var ret = new PexObjectStructInfo();

            ret.Name = parse.ReadString();

            var count = parse.Reader.ReadUInt16();

            for (var i = 0; i < count; i++)
            {
                var member = PexObjectStructInfoMember.Create(parse);
                ret.Members.Add(member);
            }
            return(ret);
        }
示例#2
0
        internal static PexObject Create(PexParseMeta parse)
        {
            var ret = new PexObject();

            ret.Name = parse.ReadString();

            /*
             * This is the size of the entire object in bytes not some count variable for a loop. This also includes
             * the size of itself thus the - sizeof(uint)
             */
            var size       = parse.Reader.ReadUInt32() - sizeof(uint);
            var currentPos = parse.Reader.Position;

            ret.ParentClassName = parse.ReadString();
            ret.DocString       = parse.ReadString();

            if (parse.Category == GameCategory.Fallout4)
            {
                ret.IsConst = parse.Reader.ReadBoolean();
            }

            ret.RawUserFlags  = parse.Reader.ReadUInt32();
            ret.AutoStateName = parse.ReadString();

            if (parse.Category == GameCategory.Fallout4)
            {
                var infoCount = parse.Reader.ReadUInt16();
                for (var i = 0; i < infoCount; i++)
                {
                    var structInfo = PexObjectStructInfo.Create(parse);
                    ret.StructInfos.Add(structInfo);
                }
            }

            var variables = parse.Reader.ReadUInt16();

            for (var i = 0; i < variables; i++)
            {
                var variable = PexObjectVariable.Create(parse);
                ret.Variables.Add(variable);
            }

            var properties = parse.Reader.ReadUInt16();

            for (var i = 0; i < properties; i++)
            {
                var property = PexObjectProperty.Create(parse);
                ret.Properties.Add(property);
            }

            var states = parse.Reader.ReadUInt16();

            for (var i = 0; i < states; i++)
            {
                var state = PexObjectState.Create(parse);
                ret.States.Add(state);
            }

            var newPos = parse.Reader.Position;

            if (newPos != currentPos + size)
            {
                throw new InvalidDataException("Current position in Stream does not match expected position: " +
                                               $"Current: {newPos} Expected: {currentPos + size}");
            }

            return(ret);
        }