Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #4
0
        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);
                }
            }
        }
Exemple #5
0
        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);
            }
        }