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