예제 #1
0
        /// <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 + "]";
                }
            }
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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();
                }
            }
        }
예제 #5
0
        /// <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!");
        }