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