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); }