Esempio n. 1
0
            public static StateStruct CreateStateStruct(int id, ref FileStruct.TSDialogState tsDialogState)
            {
                StateStruct ss = new StateStruct();

                ss.id           = id;
                ss.srStateIndex = tsDialogState.srStateIndex;
                ss.sTrigIndex   = tsDialogState.sTrigIndex;
                ss.transIndex   = tsDialogState.transIndex;
                ss.transCount   = tsDialogState.transCount;
                return(ss);
            }
Esempio n. 2
0
        public static ResourceClass.IResource ReadQDLGResourceFile(bool headerOnly,
                                                                   ChitinKey ckey, FileStream fileStream, int fileOffset, int fileSize)
        {
            ResourceClass.QDLGFile dlgFile = new ResourceClass.QDLGFile(ckey.name);

            #region Check file header

            buff = new byte[FileStruct.TSDialogHeaderSize];
            fileStream.Position = fileOffset;

            FileStruct.TSDialogHeader dlgHead =
                (FileStruct.TSDialogHeader)ReadBuffer <FileStruct.TSDialogHeader>
                    (fileStream, buff, FileStruct.TSDialogHeaderSize);

            if (GlobalDefs.RES_QDLG_SIGNATURE != Utils.CharsToString(dlgHead.signature))
            {
                throw new ArgumentException("Warning: Invalid signature in *.dlg file.");
            }

            #endregion Check file header

            #region Load up the supporting sTrigger / tTrigger / Action lists

            // sTrigger
            buff = new byte[FileStruct.TSDialogSTriggerSize];
            fileStream.Position = dlgHead.sTrigOffset + fileOffset;

            dlgFile.sTrigList = new string[dlgHead.sTrigCount];
            for (int c = 0; c < dlgHead.sTrigCount; c++)
            {
                FileStruct.TSDialogSTrigger sTrigger =
                    (FileStruct.TSDialogSTrigger)ReadBuffer <FileStruct.TSDialogSTrigger>
                        (fileStream, buff, FileStruct.TSDialogSTriggerSize);

                dlgFile.sTrigList[c] = ReadOffsetStringBuffer(fileStream, sTrigger.sTrigOffset + fileOffset, sTrigger.sTrigSize);
            }

            // tTrigger
            buff = new byte[FileStruct.TSDialogTTriggerSize];
            fileStream.Position = dlgHead.tTrigOffset + fileOffset;

            dlgFile.tTrigList = new string[dlgHead.tTrigCount];
            for (int c = 0; c < dlgHead.tTrigCount; c++)
            {
                FileStruct.TSDialogTTrigger tTrigger =
                    (FileStruct.TSDialogTTrigger)ReadBuffer <FileStruct.TSDialogTTrigger>
                        (fileStream, buff, FileStruct.TSDialogTTriggerSize);

                dlgFile.tTrigList[c] = ReadOffsetStringBuffer(fileStream, tTrigger.tTrigOffset + fileOffset, tTrigger.tTrigSize);
            }

            // aTrigger
            buff = new byte[FileStruct.TSDialogActionSize];
            fileStream.Position = dlgHead.actionOffset + fileOffset;

            dlgFile.actionList = new string[dlgHead.actionCount];
            for (int c = 0; c < dlgHead.actionCount; c++)
            {
                FileStruct.TSDialogAction action =
                    (FileStruct.TSDialogAction)ReadBuffer <FileStruct.TSDialogAction>
                        (fileStream, buff, FileStruct.TSDialogActionSize);

                dlgFile.actionList[c] = ReadOffsetStringBuffer(fileStream, action.actionOffset + fileOffset, action.actionSize);
            }

            #endregion Load up the supporting sTrigger / tTrigger / Action lists

            #region Load important file stuff

            // Load up dialog states / statement
            buff = new byte[FileStruct.TSDialogStateSize];
            fileStream.Position = dlgHead.stateOffset + fileOffset;

            dlgFile.stateList = new ResourceClass.QDLGFile.StateStruct[dlgHead.stateCount];
            for (int c = 0; c < dlgHead.stateCount; c++)
            {
                FileStruct.TSDialogState tsDlgState =
                    (FileStruct.TSDialogState)ReadBuffer <FileStruct.TSDialogState>
                        (fileStream, buff, FileStruct.TSDialogStateSize);

                dlgFile.stateList[c] = ResourceClass.QDLGFile.CreateStateStruct(c, ref tsDlgState);
            }

            // Load up dialog trans / responses
            buff = new byte[FileStruct.TSDialogTransSize];
            fileStream.Position = dlgHead.transOffset + fileOffset;

            dlgFile.transList = new ResourceClass.QDLGFile.TransStruct[dlgHead.transCount];
            for (int c = 0; c < dlgHead.transCount; c++)
            {
                FileStruct.TSDialogTrans tsDlgTrans =
                    (FileStruct.TSDialogTrans)ReadBuffer <FileStruct.TSDialogTrans>
                        (fileStream, buff, FileStruct.TSDialogTransSize);

                dlgFile.transList[c] = ResourceClass.QDLGFile.CreateTransStruct(c, ref tsDlgTrans);
            }

            #endregion Load important file stuff

            fileStream.Close();

            return(dlgFile);
        }