예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// クエスト付加情報ファイルを読み込み、クエストノード情報を返す。
        /// クエスト付加情報は1ファイルの中に複数ファイルの情報が格納されている。
        /// </summary>
        /// <param name="path">クエスト付加情報ファイルのパス</param>
        /// <param name="fileList">FileList</param>
        /// <returns>クエストノード情報</returns>
        public static MieQuestsNodeInfo LoadFromJson(string path, MieFileList fileList)
        {
            MieQuestsNodeInfo mieQuestsNodeInfo = new MieQuestsNodeInfo();
            string            jtext             = LoadJson(path);

            jtext = jtext.Replace("$type", "MieQuestsNodeDataTypeTag");
            var oeQuests = JsonConvert.DeserializeObject <MieOEQuests>(jtext);

            foreach (var questFile in oeQuests.Quests)
            {
                var questTypeNumber = questFile.QuestType;

                //// QuestsFileの処理
                MieQuestsNodeFile mieQuestsNodeFile = null;

                var fileID = questFile.Filename.Replace(".quest", string.Empty);
                //// FileIDを統一形式に変換する。
                fileID = MieFileUtils.ConvertFileIDToCommon(fileID);
                fileID = MieStringUtils.NormalizedFileID(fileID);

                var fileCode = fileList.GetHashByFileID(fileID);
                if (fileCode == 0)
                {
                    //// 言語情報から生成されたFileListに含まれないものは無視する。
                    continue;
                }
                else
                {
                    mieQuestsNodeFile = new MieQuestsNodeFile(fileCode);
                    mieQuestsNodeInfo.AddFile(mieQuestsNodeFile);
                }

                //// QuestEntryの処理
                foreach (var node in questFile.Nodes)
                {
                    var  nodeType   = GetQuestNodeDataTypeTag(node.MieQuestsNodeDataTypeTag);
                    bool isRootNode = node.NodeID == 0 ? true : false;

                    var questsNode = new MieQuestsNodeEntry(
                        nodeType,
                        node.NodeID,
                        isRootNode);
                    mieQuestsNodeFile.AddFlatNodeEntry(questsNode);

                    //// EndStatusNodeを追加する。
                    AddEndStatusNode(mieQuestsNodeFile, node);

                    //// リンク情報作成
                    foreach (var link in node.Links)
                    {
                        MieQuestsLink mieQuestsLinks = new MieQuestsLink(link.FromNodeID, link.ToNodeID);
                        mieQuestsNodeFile.AddLinkEntry(mieQuestsLinks);
                    }
                }

                mieQuestsNodeFile.BuildLink();
                mieQuestsNodeFile.UpdateDepth();
            }

            return(mieQuestsNodeInfo);
        }
        /// <summary>
        /// JSON形式の会話ファイルを読み込み、会話ファイルを返す。
        /// [非OE DLL]
        /// </summary>
        /// <param name="path">会話ファイルのパス</param>
        /// <param name="fileList">FileLIst</param>
        /// <returns>会話ファイル</returns>
        private static MieConversationNodeFile LoadFromJson(string path, MieFileList fileList)
        {
            MieConversationNodeFile mieConversationsFile = null;

            var ctext = LoadJson(path);

            ctext = ctext.Replace("$type", "MieFlowChartsDataTypeTag");
            var oeConversations = JsonConvert.DeserializeObject <MieOEConversations>(ctext);

            foreach (var conv in oeConversations.Conversations)
            {
                var fileID = conv.Filename.Replace(".conversation", string.Empty);
                //// FileIDを統一形式に変換する。
                fileID = MieFileUtils.ConvertFileIDToCommon(fileID);
                fileID = MieStringUtils.NormalizedFileID(fileID);

                var fileCode = fileList.GetHashByFileID(fileID);
                if (fileCode == 0)
                {
                    //// 言語情報から生成されたFileListに含まれないものは無視する。
                    continue;
                }
                else
                {
                    mieConversationsFile = new MieConversationNodeFile(fileCode);
                }

                //// ノード情報作成
                foreach (var node in conv.Nodes)
                {
                    var nodeType = GetFlowChartsDataTypeTag(node.MieFlowChartsDataTypeTag);

                    MieConversationNodeEntry conversationNode = null;

                    Guid speakerGuid;
                    if (node.SpeakerGuid == null)
                    {
                        speakerGuid = default(Guid);
                    }
                    else
                    {
                        speakerGuid = new Guid(node.SpeakerGuid);
                    }

                    Guid listenerGuid;
                    if (node.ListenerGuid == null)
                    {
                        listenerGuid = default(Guid);
                    }
                    else
                    {
                        listenerGuid = new Guid(node.ListenerGuid);
                    }

                    //// Root node は NodeIDで判断する。
                    conversationNode = new MieConversationNodeEntry(
                        nodeType,
                        node.NodeID,
                        speakerGuid,
                        listenerGuid,
                        node.NodeID == 0 ? true : false,
                        node.IsQuestionNode);

                    //// リンク情報作成
                    foreach (var link in node.Links)
                    {
                        MieConversationLink mieConversationLinks = new MieConversationLink(link.FromNodeID, link.ToNodeID);
                        mieConversationsFile.AddLinkEntry(mieConversationLinks);
                    }

                    mieConversationsFile.AddFlatNodeEntry(conversationNode);
                }

                //// キャラクターマップ情報作成
                foreach (var map in conv.CharacterMappings)
                {
                    MieCharacterMapEntry mapEntry = new MieCharacterMapEntry(new Guid(map.Guid));
                    mieConversationsFile.AddCharacterMapEntry(mapEntry);
                }
            }

            if (mieConversationsFile != null)
            {
                mieConversationsFile.BuildLink();
                mieConversationsFile.UpdateDepth();
            }

            return(mieConversationsFile);
        }