public static void LoadFromSystemDB(MieSystemDB systemDB, MieChatterNodeInfo chatterNodeInfo) { SQLiteCommand command = systemDB.Connection.CreateCommand(); command.CommandText = @"SELECT * FROM ChatterNodeEntries ORDER BY FileCode;"; using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read() == true) { var fileCode = (long)reader["FileCode"]; var nodeID = (int)(long)reader["NodeID"]; var xNodeType = (long)reader["NodeType"]; var xIsRootNode = (long)reader["IsRootNode"]; MieChatterNodeEntry.NNodeType nodeType = (MieChatterNodeEntry.NNodeType)Enum.ToObject(typeof(MieChatterNodeEntry.NNodeType), xNodeType); bool isRootNode = xIsRootNode == 0 ? false : true; MieChatterNodeEntry nodeEntry = new MieChatterNodeEntry( nodeType, nodeID, isRootNode); var nodeFile = chatterNodeInfo.GetNodeFile(fileCode); var rc = nodeFile.AddFlatNodeEntry(nodeEntry); } } foreach (var nodeFile in chatterNodeInfo.Files.Values) { nodeFile.BuildLink(); nodeFile.UpdateDepth(); } }
/// <summary> /// チャッター付加情報ファイルを読み込み、チャッターノード情報を返す。 /// チャッター付加情報は1ファイルの中に複数ファイルの情報が格納されている。 /// </summary> /// <param name="path">チャッター付加情報ファイルのパス</param> /// <param name="fileList">ファイルリストのパス</param> /// <returns>チャッターノード情報</returns> public static MieChatterNodeInfo LoadFromJson(string path, MieFileList fileList) { MieChatterNodeInfo mieChatterInfo = new MieChatterNodeInfo(); string ctext = LoadJson(path); ctext = ctext.Replace("$type", "MieChatterNodeDataTypeTag"); CreateChatterInfo(ctext, mieChatterInfo, fileList); return(mieChatterInfo); }
private static void CreateChatterInfo(string ctext, MieChatterNodeInfo mieChatterInfo, MieFileList fileList) { //// デシリアライズ var oeChatter = JsonConvert.DeserializeObject <MieOEChatter>(ctext); foreach (var chatterFile in oeChatter.ChatterFiles) { var fileID = chatterFile.Filename.Replace(".chatter", string.Empty); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(fileID); fileID = MieStringUtils.NormalizedFileID(fileID); MieChatterNodeFile chatterNodeFile = null; var fileCode = fileList.GetHashByFileID(fileID); if (fileCode == 0) { //// 言語情報から生成されたFileListに含まれないものは無視する。 continue; } else { chatterNodeFile = new MieChatterNodeFile(fileCode); mieChatterInfo.AddFile(chatterNodeFile); } foreach (var node in chatterFile.Nodes) { var dataType = node.MieChatterNodeDataTypeTag; var nodeID = node.NodeID; var isQuestionNode = node.IsQuestionNode; bool isRootNode = node.NodeID == 0 ? true : false; //// チャッターエントリー MieChatterNodeEntry.NNodeType nodeType = MieChatterNodeEntry.NNodeType.Unknown; MieChatterNodeEntry nodeEntry = new MieChatterNodeEntry(nodeType, nodeID, isRootNode); chatterNodeFile.AddFlatNodeEntry(nodeEntry); //// Link情報の登録 foreach (var link in node.Links) { MieChatterLink mieChatterLink = new MieChatterLink(link.FromNodeID, link.ToNodeID); chatterNodeFile.AddLinkEntry(mieChatterLink); } } } }
public static void LoadFromSystemDB(MieSystemDB systemDB, MieChatterNodeInfo convNodeInfo) { SQLiteCommand command = systemDB.Connection.CreateCommand(); command.CommandText = @"SELECT FileCode,FromNodeID,ToNodeID FROM ChatterNodeLinks ORDER BY FileCode;"; using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read() == true) { var fileCode = (long)reader["FileCode"]; var fromNodeID = (int)(long)reader["FromNodeID"]; var toNodeID = (int)(long)reader["ToNodeID"]; var nodeFile = convNodeInfo.GetNodeFile(fileCode); MieChatterLink nodeLink = new MieChatterLink(fromNodeID, toNodeID); nodeFile.AddLinkEntry(nodeLink); } } }
public static void SaveToDB(MieSystemDB systemDb, MieChatterNodeInfo nodeInfo) { using (SQLiteTransaction trans = systemDb.Connection.BeginTransaction()) { foreach (var nodeFile in nodeInfo.Files.Values) { if (nodeFile.FileCode == 0) { var msg = $"Unknown FileCode({nodeFile.FileCode}). Skipping File..."; logger.Warn(msg); } else { SaveToTable(systemDb.Connection, nodeFile, nodeFile.FileCode); } } trans.Commit(); } }
/// <summary> /// 指定したフォルダー内のチャッターファイルを読み込みチャッター情報を返す。 /// </summary> /// <param name="folderPath">フォルダーのパス</param> /// <param name="fileList">FileList</param> /// <returns>チャッター情報</returns> public static MieChatterNodeInfo LoadFromFolder(string folderPath, MieFileList fileList) { MieChatterNodeInfo mieChatterInfo = null; if (!Directory.Exists(folderPath)) { var msg = $"Error: Folder not exists. Folder({folderPath})"; logger.Error(msg); throw new Exception(msg); } string[] files = Directory.GetFiles(folderPath, "*.chatterbundle", SearchOption.AllDirectories); files .Where(file => Path.GetExtension(file).ToLower() == ".chatterbundle") .ToList() .ForEach(x => { mieChatterInfo = LoadFromJson(x, fileList); }); return(mieChatterInfo); }
public void LoadFromDB(MieSystemDB systemDb) { //// キャラクター情報の作成。 { this.CharacterAttributeFile = new MieCharacterAttributeFile(); MieTableCharacterAttributesDao.LoadFromSystemDB(systemDb, this.CharacterAttributeFile); MieTableSpeakerAttributesDao.LoadFromSystemDB(systemDb, this.CharacterAttributeFile); MieTableRaceAttributesDao.LoadFromSystemDB(systemDb, this.CharacterAttributeFile); } //// 言語情報を作成。 { this.LanguageInfo = new MieLanguageInfo(); MieTableLanguageDao.LoadFromSystemDB(systemDb, this.LanguageInfo); this.FileList = MieTableFileListDao.LoadFromSystemDB(systemDb); } //// 会話ノード情報を作成。 { this.ConversationInfo = new MieConversationNodeInfo(); MieTableConversationNodeLinksDao.LoadFromSystemDB(systemDb, this.ConversationInfo); MieTableConversationEntriesDao.LoadFromSystemDB(systemDb, this.ConversationInfo); } //// クエストノード情報を作成。 { this.QuestsInfo = new MieQuestsNodeInfo(); MieTableQuestsNodeLinksDao.LoadFromSystemDB(systemDb, this.QuestsInfo); MieTableQuestsEntriesDao.LoadFromSystemDB(systemDb, this.QuestsInfo); } //// チャッターノード情報を作成。 { this.ChatterInfo = new MieChatterNodeInfo(); MieTableChatterNodeLinksDao.LoadFromSystemDB(systemDb, this.ChatterInfo); MieTableChatterEntriesDao.LoadFromSystemDB(systemDb, this.ChatterInfo); } }