示例#1
0
        private static void SelectTargetFile(SelectTargetFileMessage message)
        {
            Window sender = message.Target as Window;

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.DefaultExt = message.FileExtension;
            dlg.Filter = message.FileExtensionFilter;
            dlg.OverwritePrompt = message.PromptForOverwrite;

            if (dlg.ShowDialog(sender) != true)
            {
                return;
            }

            message.SelectedFilePath = dlg.FileName;
        }
示例#2
0
        private void SaveQuestLine()
        {
            MessageBox.Show("Do not use this to overwrite your original *.hqm file!  This is still incomplete!  You have been warned.");

            SelectTargetFileMessage message = new SelectTargetFileMessage
            {
                FileExtension = ".hqm",
                FileExtensionFilter = "HQM Files (*.hqm)|*.hqm|All Files (*.*)|*.*",
                PromptForOverwrite = true
            };
            this.MessengerInstance.Send(message);
            if (String.IsNullOrEmpty(message.SelectedFilePath))
            {
                return;
            }

            QuestLine questLine = new QuestLine();

            questLine.Version = 20;
            questLine.PassCode = this.passCode;
            questLine.Description = this.description;

            int maxQuestSetId = this.questSetsMutable.Max(x => x.Id);

            questLine.QuestSets = new QuestSet[this.questSetsMutable.Count];
            for (int questSetIndex = 0; questSetIndex < questLine.QuestSets.Length; questSetIndex++)
            {
                var questSet = this.questSetsMutable[questSetIndex];

                // TODO: preserve old IDs, probably with a Dictionary<int, int>?
                // Remember newly created ones will have negative IDs.
                questSet.Id = questSetIndex;

                QuestSet outputQuestSet = questLine.QuestSets[questSetIndex] = new QuestSet();

                outputQuestSet.Id = questSetIndex;
                outputQuestSet.Name = questSet.Name;
                outputQuestSet.Description = String.Empty;
            }

            var quests = this.questSetsMutable.SelectMany(questSet => questSet.Quests).ToArray();

            // TODO: preserve old IDs, probably with a Dictionary<int, int>?
            // Remember newly created ones will have negative IDs.
            for (int questIndex = 0; questIndex < quests.Length; questIndex++)
            {
                quests[questIndex].Id = questIndex;
            }

            questLine.Quests = new Quest[quests.Length];
            for (int questIndex = 0; questIndex < questLine.Quests.Length; questIndex++)
            {
                var quest = quests[questIndex];
                var outputQuest = questLine.Quests[questIndex] = new Quest();

                outputQuest.Id = questIndex;
                outputQuest.Name = quest.Name;
                outputQuest.Description = quest.Description;
                outputQuest.Icon = Conversions.ItemStackViewModelToItemStack(quest.Icon);
                outputQuest.XPos = quest.XPos;
                outputQuest.YPos = quest.YPos;
                outputQuest.IsBig = quest.IsBig;
                outputQuest.QuestSetId = quest.QuestSet.Id;
                outputQuest.ModifiedParentRequirementCount = quest.ModifiedParentRequirement.UseModifiedParentRequirement ? quest.ModifiedParentRequirement.ModifiedParentRequirementCount : default(int?);
                outputQuest.RepeatType = quest.RepeatOption.RepeatType;
                outputQuest.RepeatIntervalHours = quest.RepeatOption.RepeatIntervalHours;
                outputQuest.TriggerType = quest.TriggerOption.TriggerType;
                outputQuest.TriggerTaskCount = quest.TriggerOption.TaskCount;

                outputQuest.ReputationRewards = quest.ReputationRewards.Select(reward => new ReputationReward { Id = reward.ReputationId, Value = reward.Value }).ToArray();

                // TODO: tasks.
                outputQuest.Tasks = new QuestTask[0];
            }

            foreach (var questLink in this.questSetsMutable.SelectMany(questSet => questSet.QuestLinks).Concat(this.crossSetQuestLinksMutable))
            {
                var q = questLine.Quests[questLink.ToQuest.Id];
                q.RequiredQuestIds = (q.RequiredQuestIds ?? Enumerable.Empty<int>()).Concat(new[] { questLink.FromQuest.Id }).ToArray();
            }

            questLine.Reputations = new Reputation[this.reputationsMutable.Count];

            for (int reputationIndex = 0; reputationIndex < questLine.Reputations.Length; reputationIndex++)
            {
                questLine.Reputations[reputationIndex] = Conversions.ReputationViewModelToReputation(this.reputationsMutable[reputationIndex]);
            }

            // TODO: bags.
            questLine.Tiers = new RewardBagTier[0];
            questLine.Bags = new RewardBag[0];

            using (var stream = File.OpenWrite(message.SelectedFilePath))
            {
                new HQMQuestLineWriter().WriteQuestLine(questLine, stream);
            }
        }