Exemple #1
0
            public static TransStruct CreateTransStruct(int id, ref FileStruct.TSDialogTrans tsDialogTrans)
            {
                TransStruct ss = new TransStruct();

                ss.id           = id;
                ss.flags        = tsDialogTrans.flags;
                ss.srTransIndex = tsDialogTrans.srTransIndex;
                ss.tTrigIndex   = tsDialogTrans.tTrigIndex;
                ss.actionIndex  = tsDialogTrans.actionIndex;
                ss.nxDLG        = Utils.CharsToString(tsDialogTrans.nxDLG).ToUpper();
                ss.nxStateIndex = tsDialogTrans.nxStateIndex;
                ss.srJournIndex = tsDialogTrans.srJournIndex;
                return(ss);
            }
        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);
        }