Пример #1
0
        /// <summary>
        /// EndStatusNodeIDを追加する。
        /// </summary>
        /// <param name="mieQuestsNodeFile">QuestsNodeFile</param>
        /// <param name="node">Node</param>
        private static void AddEndStatusNode(MieQuestsNodeFile mieQuestsNodeFile, Node node)
        {
            if (node.EndStates == null)
            {
                return;
            }

            foreach (var endStatsuNode in node.EndStates)
            {
                var questsNode = new MieQuestsNodeEntry(
                    MieQuestsNodeEntry.NNodeType.EndStateNode,
                    endStatsuNode.DescriptionID,
                    false);
                mieQuestsNodeFile.AddFlatNodeEntry(questsNode);
            }
        }
Пример #2
0
        private static void SaveToTable(SQLiteConnection connection, MieQuestsNodeFile nodeFile, long fileCode)
        {
            SQLiteCommand cmd = connection.CreateCommand();

            cmd.CommandText = "INSERT INTO QuestsNodeLinks VALUES(@FileCode,@FromNodeID,@ToNodeID);";
            //// パラメータのセット
            cmd.Parameters.Add("FileCode", System.Data.DbType.Int64);
            cmd.Parameters.Add("FromNodeID", System.Data.DbType.Int32);
            cmd.Parameters.Add("ToNodeID", System.Data.DbType.Int32);
            foreach (var link in nodeFile.Links)
            {
                cmd.Parameters["FileCode"].Value   = fileCode;
                cmd.Parameters["FromNodeID"].Value = link.FromeNode;
                cmd.Parameters["ToNodeID"].Value   = link.ToNode;

                cmd.ExecuteNonQuery();
            }
        }
Пример #3
0
        /// <summary>
        /// 指定したファイルのクエストノードを保存する。
        /// </summary>
        /// <param name="connection">DB接続情報</param>
        /// <param name="nodeFile">NodeFile</param>
        /// <param name="fileCode">FileCode</param>
        private static void SaveToTable(SQLiteConnection connection, MieQuestsNodeFile nodeFile, long fileCode)
        {
            SQLiteCommand cmd = connection.CreateCommand();

            cmd.CommandText = "INSERT INTO QuestsNodeEntries VALUES(@FileCode,@NodeID,@NodeType,@IsRootNode);";
            //// パラメータのセット
            cmd.Parameters.Add("FileCode", System.Data.DbType.Int64);
            cmd.Parameters.Add("NodeID", System.Data.DbType.Int32);
            cmd.Parameters.Add("NodeType", System.Data.DbType.Int32);
            cmd.Parameters.Add("IsRootNode", System.Data.DbType.Boolean);

            foreach (var node in nodeFile.FlatNodes.Values)
            {
                //// 値のセット
                cmd.Parameters["FileCode"].Value   = fileCode;
                cmd.Parameters["NodeID"].Value     = node.NodeID;
                cmd.Parameters["NodeType"].Value   = node.NodeType;
                cmd.Parameters["IsRootNode"].Value = node.IsRootNode;

                cmd.ExecuteNonQuery();
            }
        }
Пример #4
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);
        }