/// <summary> /// Handles the Click event of the btnBrowse control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> void btnBrowse_Click(object sender, EventArgs e) { using (var f = new QuestUITypeEditorForm(null)) { // If we require distinct, skip items we already have in the list if (RequireDistinct) { var listItems = lstItems.Items.OfType <QuestID>().ToImmutable(); f.SkipItems = (x => listItems.Any(y => y == x.ID)); } if (f.ShowDialog(this) != DialogResult.OK) { return; } var item = f.SelectedItem; _selectedItem = item.ID; var qdc = QuestDescriptionCollection.Create(ContentPaths.Dev); var qd = qdc[item.ID]; txtItem.Text = item.ID.ToString(); if (qd != null) { txtItem.Text += " [" + qd.Name + "]"; } } }
/// <summary> /// Handles the Click event of the btnQuestDelete control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> void btnQuestDelete_Click(object sender, EventArgs e) { var quest = pgQuest.SelectedObject as EditorQuest; if (quest == null) { return; } const string confirmMsg = "Are you sure you wish to delete the quest `{0}` [ID: {1}]?"; if (MessageBox.Show(string.Format(confirmMsg, quest.Name, quest.ID), "Delete?", MessageBoxButtons.YesNo) == DialogResult.No) { return; } // Delete from database _dbController.GetQuery <DeleteQuestQuery>().Execute(quest.ID); // Delete descriptions var qdc = (QuestDescriptionCollection)QuestDescriptionCollection.Create(ContentPaths.Dev); var qd = qdc[quest.ID]; if (qd != null) { qdc.Remove(qd); qdc.Save(); } MessageBox.Show(string.Format("Quest `{0}` [ID: {1}] successfully deleted.", quest.Name, quest.ID)); pgQuest.SelectedObject = null; }
/// <summary> /// Gets the string to draw for a list item. /// </summary> /// <param name="x">The item to draw.</param> /// <returns>The string to draw for a list item.</returns> static string GetDrawString(QuestID x) { var qdc = QuestDescriptionCollection.Create(ContentPaths.Dev); var t = qdc[x]; if (t == null) { return(x.ToString()); } else { return(t.QuestID + ". " + t.Name + " - " + t.Description); } }
/// <summary> /// Sets the current quest. /// </summary> /// <param name="questID">The quest ID.</param> /// <param name="isNew">Set to new if this is a new quest; otherwise set as false.</param> void SetQuest(QuestID questID, bool isNew) { pgQuest.SelectedObject = new EditorQuest(questID, _dbController); if (isNew) { var qdc = (QuestDescriptionCollection)QuestDescriptionCollection.Create(ContentPaths.Dev); var qd = qdc[questID]; if (qd != null) { qdc.Remove(qd); qdc.Save(); } } }
/// <summary> /// Handles the Click event of the btnQuestSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> void btnQuestSave_Click(object sender, EventArgs e) { var v = pgQuest.SelectedObject as EditorQuest; if (v == null) { return; } // Description var qdc = (QuestDescriptionCollection)QuestDescriptionCollection.Create(ContentPaths.Dev); var qd = qdc[v.ID] as QuestDescription; if (qd == null) { // Remove an existing IQuestDescription that is not of type QuestDescription, so we can write to it var rawQD = qdc[v.ID]; if (rawQD != null) { qdc.Remove(rawQD); } // Add the new QuestDescription type qd = new QuestDescription { QuestID = v.ID }; qdc.Add(qd); } qd.Name = v.Name; qd.Description = v.Description; qdc.Save(); // Main quest table values _dbController.GetQuery <InsertUpdateQuestQuery>().Execute(v); // DELETE then INSERT to ensure everything updates correctly // You cannot just simply delete the quest as this will // delete all links in other tables due to the DB key relationship // Required items to start/finish _dbController.GetQuery <DeleteQuestRequireStartItemQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRequireStartItemQuery>().Execute(v.ID, v.StartItems.Select(x => (KeyValuePair <ItemTemplateID, byte>)x)); _dbController.GetQuery <DeleteQuestRequireFinishItemQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRequireFinishItemQuery>().Execute(v.ID, v.FinishItems.Select(x => (KeyValuePair <ItemTemplateID, byte>)x)); // Required quests to start/finish _dbController.GetQuery <DeleteQuestRequireStartQuestQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRequireStartQuestQuery>().Execute(v.ID, v.StartQuests); _dbController.GetQuery <DeleteQuestRequireFinishQuestQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRequireFinishQuestQuery>().Execute(v.ID, v.FinishQuests); // Other requirements _dbController.GetQuery <DeleteQuestRequireKillQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRequireKillQuery>().Execute(v.ID, v.Kills.Select(x => (KeyValuePair <CharacterTemplateID, ushort>)x)); // Rewards _dbController.GetQuery <DeleteQuestRewardItemQuery>().Execute(v.ID); _dbController.GetQuery <InsertQuestRewardItemQuery>().Execute(v.ID, v.RewardItems.Select(x => (KeyValuePair <ItemTemplateID, byte>)x)); SetQuest(v.ID, false); QuestManager.Instance.Reload(v.ID); pgQuest.SelectedObject = null; pgQuest.SelectedObject = v; MessageBox.Show("Quest ID `" + v.ID + "` successfully saved!"); }