Esempio n. 1
0
            partial void CustomEnd(OverlayStream stream, int finalPos, int offset)
            {
                if (stream.Complete)
                {
                    return;
                }
                var startPos  = stream.Position;
                var groupMeta = stream.GetGroup();

                if (!groupMeta.IsGroup)
                {
                    return;
                }
                if (groupMeta.GroupType != (int)GroupTypeEnum.TopicChildren)
                {
                    return;
                }
                this._grupData = stream.ReadMemory(checked ((int)groupMeta.TotalLength));
                var formKey = FormKey.Factory(_package.MetaData.MasterReferences !, BinaryPrimitives.ReadUInt32LittleEndian(groupMeta.ContainedRecordTypeSpan));

                if (formKey != this.FormKey)
                {
                    throw new ArgumentException("Dialog children group did not match the FormID of the parent.");
                }
                var contentSpan = this._grupData.Value.Slice(_package.MetaData.Constants.GroupConstants.HeaderLength);

                this.Items = BinaryOverlayList <IDialogItemGetter> .FactoryByArray(
                    contentSpan,
                    _package,
                    getter : (s, p) => DialogItemBinaryOverlay.DialogItemFactory(new OverlayStream(s, p), p),
                    locs : ParseRecordLocations(
                        stream: new OverlayStream(contentSpan, _package),
                        trigger: DialogItem_Registration.TriggeringRecordType,
                        constants: GameConstants.Oblivion.MajorConstants,
                        skipHeader: false));
            }