private void QuestTabSelect_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var tab = MainWindow.Instance.questTabSelect;

            if (tab.SelectedItem != null && tab.SelectedItem is TabItem tabItem && tabItem.DataContext != null)
            {
                NPCQuest selectedTabChar = tabItem.DataContext as NPCQuest;
                if (selectedTabChar != null)
                {
                    Quest = selectedTabChar;
                }
            }

            if (tab.SelectedItem is null)
            {
                MainWindow.Instance.questTabGrid.IsEnabled             = false;
                MainWindow.Instance.questTabGrid.Visibility            = Visibility.Collapsed;
                MainWindow.Instance.questTabGridNoSelection.Visibility = Visibility.Visible;
            }
            else
            {
                MainWindow.Instance.questTabGrid.IsEnabled             = true;
                MainWindow.Instance.questTabGrid.Visibility            = Visibility.Visible;
                MainWindow.Instance.questTabGridNoSelection.Visibility = Visibility.Collapsed;
            }
        }
Exemplo n.º 2
0
	void LoadFinishedQuest(NPCQuest nq, string[] questDetails){
		nq.isAccepted = nq.isComplete = nq.isFinished = true;
		nq.talkDone = nq.itemDone = nq.killDone = true;
		nq.numberKilled = nq.numberToKill;
		nq.numberObtained = nq.numberToObtain;
		
		nq.LoadFinishedQuest();
	}
 // Update is called once per frame
 void Update()
 {
     if (Complete)
     {
         NPCQuest n = GetComponent <NPCQuest>();
         n.enabled = false;
     }
 }
        private void QuestTabButtonAdd_Click(object sender, RoutedEventArgs e)
        {
            NPCQuest item = new NPCQuest();

            MainWindow.CurrentProject.data.quests.Add(item);
            MetroTabItem tabItem = CreateTab(item);

            MainWindow.Instance.questTabSelect.Items.Add(tabItem);
            MainWindow.Instance.questTabSelect.SelectedIndex = MainWindow.Instance.questTabSelect.Items.Count - 1;
        }
Exemplo n.º 5
0
	string FindQuestType(NPCQuest nq){
		string temp = "";
		if(nq.talkingCompletesQuest)
			temp += "Talk";
		if(nq.numberToKill > 0)
			temp += "Kill";	
		if(nq.numberToObtain > 0)
			temp += "Loot";
		
		return temp;
	}
Exemplo n.º 6
0
    public void CompleteQuest(NPCQuest quest)
    {
        if (player.Inventory.Count + quest.QuestReward.Count <= player.MaxInventorySpace)
        {
            for (int i = 0; i < quest.QuestReward.Count; i += 0)
            {
                bool addedItem = player.AddItem(quest.QuestReward[i]);
                if (addedItem)
                {
                    quest.QuestReward.RemoveAt(i);
                }
                else
                {
                    Debug.Log("Stack is full");
                }
            }

            if (quest.QuestReward.Count == 0)
            {
                player.AddExp(quest.QuestExpReward);
                player.ModifyGold(quest.QuestGoldReward);
                quest.isFinished = true;
                player.questsComplete.Add(quest);

                if (quest.qego != null && !quest.EnableQuestGOPerm)
                {
                    quest.qego.DisableGameObjects();
                }
                if (quest.numberToObtain > 0)
                {
                    for (int i = 0; i < player.Inventory.Count; i++)
                    {
                        if (player.Inventory[i].Name == quest.nameOfItem)
                        {
                            player.Inventory[i].CurStacks -= quest.numberToObtain;
                            if (player.Inventory[i].CurStacks <= 0)
                            {
                                player.Inventory.RemoveAt(i);
                            }
                        }
                    }
                }

                player.QuestsInProgress.Remove(quest);
                EnterDialog();
            }
        }
        else
        {
            Debug.Log("Inventory is Full!");
        }
    }
Exemplo n.º 7
0
    void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }

        gameObject.SetActive(false);
    }
Exemplo n.º 8
0
        public NPCQuest ParseQuest()
        {
            NPCQuest q = new NPCQuest()
            {
                ID          = asset.ReadUInt16("ID"),
                Title       = local?.ReadString("Name") ?? "",
                description = local?.ReadString("Description") ?? "",
                GUID        = asset.Has("GUID") ? asset.ReadString("GUID") : Guid.NewGuid().ToString("N"),
                conditions  = ParseConditions("").ToList(),
                rewards     = ParseRewards("").ToList()
            };

            return(q);
        }
Exemplo n.º 9
0
	string FindQuestInfoOnType(NPCQuest nq){
		string seperator = "&";
		string temp = "";
		
		string type = FindQuestType(nq);
		
		if(type == "Talk"){
			temp += nq.talkDone.ToString();
		}
		else if(type == "Kill"){
			temp += nq.killDone.ToString() + seperator;
			temp += nq.numberKilled.ToString();
		}
		else if(type == "Loot"){
			temp += nq.itemDone.ToString() + seperator;
			temp += nq.numberObtained.ToString();
		}
		else if(type == "TalkKill"){
			temp += nq.talkDone.ToString() + seperator;
			temp += nq.killDone.ToString() + seperator;
			temp += nq.numberKilled.ToString();
		}
		else if(type == "TalkLoot"){
			temp += nq.talkDone.ToString() + seperator;
			temp += nq.itemDone.ToString() + seperator;
			temp += nq.numberObtained.ToString();
		}
		else if(type == "KillLoot"){
			temp += nq.killDone.ToString() + seperator;
			temp += nq.itemDone.ToString() + seperator;
			temp += nq.numberKilled.ToString() + seperator;
			temp += nq.numberObtained.ToString();
		}
		else if(type == "TalkKillLoot"){
			temp += nq.talkDone + seperator;
			temp += nq.killDone.ToString() + seperator;
			temp += nq.itemDone.ToString() + seperator;
			temp += nq.numberKilled.ToString() + seperator;
			temp += nq.numberObtained.ToString();
		}
		
		return temp;
	}
Exemplo n.º 10
0
        public override void Apply(Simulation simulation)
        {
            if (Reset)
            {
                switch (simulation.GetQuestStatus(ID))
                {
                case Quest_Status.Completed:
                {
                    simulation.Flags.Remove(ID);
                }
                break;

                case Quest_Status.Active:
                {
                    simulation.Quests.Remove(ID);
                }
                break;

                case Quest_Status.Ready:
                {
                    simulation.Quests.Remove(ID);
                    simulation.Flags[ID] = 1;

                    NPCQuest questAsset = MainWindow.CurrentProject.data.quests.Single(d => d.ID == ID);

                    foreach (Condition c in questAsset.conditions)
                    {
                        c.Apply(simulation);
                    }

                    foreach (Rewards.Reward r in questAsset.rewards)
                    {
                        r.Give(simulation);
                    }
                }
                break;

                default:
                case Quest_Status.None:
                    break;
                }
            }
        }
Exemplo n.º 11
0
        public QuestView_Window(NPCCharacter character, Simulation simulation, NPCQuest quest, EMode mode = EMode.PREVIEW)
        {
            InitializeComponent();

            Quest = quest;

            switch (mode)
            {
            case EMode.PREVIEW:
                acceptButton.IsEnabled    = false;
                acceptButton.Visibility   = Visibility.Collapsed;
                continueButton.IsEnabled  = false;
                continueButton.Visibility = Visibility.Collapsed;
                break;

            case EMode.BEGIN_QUEST:
                continueButton.IsEnabled  = false;
                continueButton.Visibility = Visibility.Collapsed;
                break;

            case EMode.END_QUEST:
                acceptButton.IsEnabled  = false;
                acceptButton.Visibility = Visibility.Collapsed;
                break;
            }

            formatter.Markup(title, SimulationTool.ReplacePlaceholders(character, simulation, quest.title));
            formatter.Markup(desc, SimulationTool.ReplacePlaceholders(character, simulation, quest.description));

            foreach (NPC.Conditions.Condition c in quest.conditions)
            {
                string text = c.FormatCondition(simulation);

                if (text == null)
                {
                    continue;
                }

                Border b = new Border()
                {
                    BorderBrush     = App.Current.Resources["AccentColor"] as Brush,
                    BorderThickness = new Thickness(1),
                    CornerRadius    = new CornerRadius(4)
                };

                TextBlock tb = new TextBlock();
                formatter.Markup(tb, text);

                Label l = new Label()
                {
                    Content = tb
                };

                b.Child = l;

                goalsPanel.Children.Add(b);
            }

            foreach (NPC.Rewards.Reward r in quest.rewards)
            {
                string text = r.FormatReward(simulation);

                if (text == null)
                {
                    continue;
                }

                Border b = new Border()
                {
                    BorderBrush     = App.Current.Resources["AccentColor"] as Brush,
                    BorderThickness = new Thickness(1),
                    CornerRadius    = new CornerRadius(4)
                };

                TextBlock tb = new TextBlock();
                formatter.Markup(tb, text);

                Label l = new Label()
                {
                    Content = tb
                };

                b.Child = l;

                rewardsPanel.Children.Add(b);
            }
        }
Exemplo n.º 12
0
	protected override void StartNewIItem()
	{
		currentItem = new NPCQuest();
	}
Exemplo n.º 13
0
    void DisplayQuestTracker()
    {
        //Quest titles
        GUILayout.BeginHorizontal();

        GUILayout.BeginVertical();
        GUILayout.Box(ToolTipStyle.Bold + ToolTipStyle.Red +
                      "Quests" +
                      ToolTipStyle.EndColor + ToolTipStyle.EndBold,
                      GUILayout.Height(30), GUILayout.Width(_questWindowRect.width / 2 - 10));

        GUILayout.BeginHorizontal();
        questTrackerShowActive   = GUILayout.Toggle(questTrackerShowActive, "Active");
        questTrackerShowComplete = GUILayout.Toggle(questTrackerShowComplete, "Done");
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();

        questScrollPos = GUILayout.BeginScrollView(questScrollPos,
                                                   GUILayout.MaxWidth(_questWindowRect.width / 2 - 10),
                                                   GUILayout.MaxHeight(_questWindowRect.height - 25));
        for (int i = 0; i < playerQuests.Count; i++)
        {
            bool draw = false;
            if (playerQuests[i].isFinished && questTrackerShowComplete)
            {
                draw = true;
            }
            if (!playerQuests[i].isFinished && questTrackerShowActive)
            {
                draw = true;
            }
            if (draw)
            {
                if (GUILayout.Button(playerQuests[i].QuestInfo(), GUILayout.Height(40)))
                {
                    selectedNPCQuest = playerQuests[i];
                }
            }
        }
        GUILayout.EndScrollView();

        GUILayout.EndVertical();

        GUILayout.FlexibleSpace();

        //Quest Info
        GUILayout.BeginVertical();
        if (selectedNPCQuest != null)
        {
            questScrollPosBody = GUILayout.BeginScrollView(questScrollPosBody,
                                                           GUILayout.MaxWidth(_questWindowRect.width / 2 - 10),
                                                           GUILayout.MaxHeight(_questWindowRect.height - 25));

            GUILayout.Box(ToolTipStyle.Bold + ToolTipStyle.Blue +
                          selectedNPCQuest.QuestName +
                          ToolTipStyle.EndColor + ToolTipStyle.EndBold,
                          GUILayout.Height(30));

            GUILayout.Box(selectedNPCQuest.QuestText, "NPCDialog", GUILayout.MaxWidth(_questWindowRect.width / 2 - 10),
                          GUILayout.MaxHeight(200));

            GUILayout.BeginVertical();
            GUILayout.Box(selectedNPCQuest.QuestRewardString());
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            for (int i = 0; i < selectedNPCQuest.QuestReward.Count; i++)
            {
                GUILayout.Box(
                    new GUIContent(selectedNPCQuest.QuestReward[i].Icon, string.Format("QuestReward{0}", i)),
                    selectedNPCQuest.QuestReward[i].Rarity.ToString(),
                    GUILayout.Height(40), GUILayout.Width(40));
            }
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
            GUILayout.Box(selectedNPCQuest.questTracker);
            GUILayout.EndVertical();
            GUILayout.BeginHorizontal();
            if (!selectedNPCQuest.isFinished)
            {
                string trackOrNot = selectedNPCQuest.trackSteps ? "Stop Tracking" : "Track this Quest";
                if (GUILayout.Button(trackOrNot))
                {
                    selectedNPCQuest.trackSteps = !selectedNPCQuest.trackSteps;
                }
                GUILayout.Space(5);
                if (GUILayout.Button("Cancel Quest", GUILayout.Width(90)))
                {
                    selectedNPCQuest.CancelQuest();
                    selectedNPCQuest = null;
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.EndScrollView();
        }
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();
    }
 public GameQuestAsset(NPCQuest quest, EGameAssetOrigin origin) : base(quest.Title, quest.ID, Guid.Parse(quest.GUID), "Quest", origin)
 {
     this.quest = quest;
 }
Exemplo n.º 15
0
	/*
	 * 0 - ID
	 * 1 - Accepted
	 * 2 - Completed
	 * 3 - Finished
	 * 4 - TalkDone
	 * 5 - KillDone
	 * 6 - ItemDone
	 * 7 - KillNum
	 * 8 - LootNum
	 * */
	
	void ApplyQuestInfoByType(NPCQuest nq, string[] questDetails){
		string type = FindQuestType(nq);
		if(type == "Talk"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.talkDone = TrueOrFalse(questDetails[4]);
			nq.LoadInProgressQuest();
		}
		else if(type == "Kill"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.killDone = TrueOrFalse(questDetails[4]);
			nq.numberKilled = Int32.Parse(questDetails[5]);
			nq.LoadInProgressQuest();
		}
		else if(type == "Loot"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.itemDone = TrueOrFalse(questDetails[4]);
			nq.LoadInProgressQuest();
		}
		else if(type == "TalkKill"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.talkDone = TrueOrFalse(questDetails[4]);
			nq.killDone = TrueOrFalse(questDetails[5]);
			nq.numberKilled = Int32.Parse(questDetails[6]);
			nq.LoadInProgressQuest();
		}
		else if(type == "TalkLoot"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.talkDone = TrueOrFalse(questDetails[4]);
			nq.itemDone = TrueOrFalse(questDetails[5]);
			nq.numberObtained = Int32.Parse (questDetails[6]);
			nq.LoadInProgressQuest();
		}
		else if(type == "KillLoot"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.killDone = TrueOrFalse(questDetails[4]);
			nq.itemDone = TrueOrFalse(questDetails[5]);
			nq.numberKilled = Int32.Parse (questDetails[6]);
			nq.numberObtained = Int32.Parse (questDetails[7]);
			nq.LoadInProgressQuest();
		}
		else if(type == "TalkKillLoot"){
			nq.isAccepted = true;
			nq.isComplete = TrueOrFalse(questDetails[2]);
			nq.isFinished = false;
			nq.talkDone = TrueOrFalse(questDetails[4]);
			nq.killDone = TrueOrFalse(questDetails[5]);
			nq.itemDone = TrueOrFalse(questDetails[6]);
			nq.numberKilled = Int32.Parse(questDetails[7]);
			nq.numberObtained = Int32.Parse(questDetails[8]);
			nq.LoadInProgressQuest();
		}
		else {
			Debug.Log ("wtf");
		}
	}
Exemplo n.º 16
0
	public void DisplayQuest(NPCQuest newQuest)
	{
		if(newQuest != null)
		{
			state = NPCGUIState.quest;
			PlayerManager.Instance.Hero.questLog.selectedQuest = newQuest.quest;
			conversationGUI.DisplayConversation(newQuest.conversation);
		}
	}
        public QuestTabViewModel()
        {
            MainWindow.Instance.questTabSelect.SelectionChanged += QuestTabSelect_SelectionChanged;
            MainWindow.Instance.questTabButtonAdd.Click         += QuestTabButtonAdd_Click;
            NPCQuest empty = new NPCQuest();

            Quest = empty;
            UpdateTabs();

            ContextMenu cmenu = new ContextMenu();

            cmenu.Items.Add(ContextHelper.CreateAddFromTemplateButton(typeof(Condition), (result) =>
            {
                if (result is Condition item)
                {
                    AddCondition(new Universal_ItemList(item, true));
                }
            }));

            MainWindow.Instance.questAddConditionButton.ContextMenu = cmenu;

            ContextMenu cmenu2 = new ContextMenu();

            cmenu2.Items.Add(ContextHelper.CreateAddFromTemplateButton(typeof(Reward), (result) =>
            {
                if (result is Reward item)
                {
                    AddReward(new Universal_ItemList(item, true));
                }
            }));

            MainWindow.Instance.questAddRewardButton.ContextMenu = cmenu2;

            ContextMenu cmenu3 = new ContextMenu();

            cmenu3.Items.Add(ContextHelper.CreateAddFromTemplateButton(typeof(NPCQuest), (result) =>
            {
                if (result is NPCQuest item)
                {
                    MainWindow.CurrentProject.data.quests.Add(item);
                    MetroTabItem tabItem = CreateTab(item);
                    MainWindow.Instance.questTabSelect.Items.Add(tabItem);
                    MainWindow.Instance.questTabSelect.SelectedIndex = MainWindow.Instance.questTabSelect.Items.Count - 1;
                }
            }));

            MainWindow.Instance.questTabButtonAdd.ContextMenu = cmenu3;

            MainWindow.Instance.questTitleBox.ContextMenu = ContextHelper.CreateContextMenu(ContextHelper.EContextOption.Group_Rich | ContextHelper.EContextOption.Group_TextEdit);
            MainWindow.Instance.questDescBox.ContextMenu  = ContextHelper.CreateContextMenu(ContextHelper.EContextOption.Group_Rich | ContextHelper.EContextOption.Group_TextEdit);

            var questIdBoxContext = new ContextMenu();

            questIdBoxContext.Items.Add(ContextHelper.CreateFindUnusedIDButton((id) =>
            {
                this.ID = id;
                MainWindow.Instance.questIdBox.Value = id;
            }, GameIntegration.EGameAssetCategory.NPC));

            MainWindow.Instance.questIdBox.ContextMenu = questIdBoxContext;
        }
        private MetroTabItem CreateTab(NPCQuest quest)
        {
            MetroTabItem tabItem = new MetroTabItem();

            tabItem.CloseButtonEnabled       = true;
            tabItem.CloseTabCommand          = CloseTabCommand;
            tabItem.CloseTabCommandParameter = tabItem;
            var binding = new Binding()
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Mode = BindingMode.OneWay,
                Path = new PropertyPath("UIText")
            };
            Label l = new Label();

            l.SetBinding(Label.ContentProperty, binding);
            tabItem.Header      = l;
            tabItem.DataContext = quest;

            var             cmenu      = new ContextMenu();
            List <MenuItem> cmenuItems = new List <MenuItem>()
            {
                ContextHelper.CreateCopyButton((object sender, RoutedEventArgs e) =>
                {
                    Save();

                    ContextMenu context = (sender as MenuItem).Parent as ContextMenu;
                    MetroTabItem target = context.PlacementTarget as MetroTabItem;
                    ClipboardManager.SetObject(Universal_ItemList.ReturnType.Quest, target.DataContext);
                }),
                ContextHelper.CreateDuplicateButton((object sender, RoutedEventArgs e) =>
                {
                    Save();

                    ContextMenu context = (sender as MenuItem).Parent as ContextMenu;
                    MetroTabItem target = context.PlacementTarget as MetroTabItem;
                    var cloned          = (target.DataContext as NPCQuest).Clone();

                    MainWindow.CurrentProject.data.quests.Add(cloned);
                    MetroTabItem ti = CreateTab(cloned);
                    MainWindow.Instance.questTabSelect.Items.Add(ti);
                }),
                ContextHelper.CreatePasteButton((object sender, RoutedEventArgs e) =>
                {
                    if (ClipboardManager.TryGetObject(ClipboardManager.QuestFormat, out var obj) && !(obj is null) && obj is NPCQuest cloned)
                    {
                        MainWindow.CurrentProject.data.quests.Add(cloned);
                        MetroTabItem ti = CreateTab(cloned);
                        MainWindow.Instance.questTabSelect.Items.Add(ti);
                    }
                })
            };

            foreach (var cmenuItem in cmenuItems)
            {
                cmenu.Items.Add(cmenuItem);
            }

            tabItem.ContextMenu = cmenu;
            return(tabItem);
        }
Exemplo n.º 19
0
        public QuestView_Window(NPCCharacter character, Simulation simulation, NPCQuest quest, EMode mode = EMode.PREVIEW)
        {
            InitializeComponent();

            Quest = quest;

            switch (mode)
            {
            case EMode.PREVIEW:
                acceptButton.IsEnabled    = false;
                acceptButton.Visibility   = Visibility.Collapsed;
                continueButton.IsEnabled  = false;
                continueButton.Visibility = Visibility.Collapsed;
                break;

            case EMode.BEGIN_QUEST:
                continueButton.IsEnabled  = false;
                continueButton.Visibility = Visibility.Collapsed;
                break;

            case EMode.END_QUEST:
                acceptButton.IsEnabled  = false;
                acceptButton.Visibility = Visibility.Collapsed;
                break;
            }

            formatter.Markup(title, SimulationTool.ReplacePlaceholders(character, simulation, quest.Title));
            formatter.Markup(desc, SimulationTool.ReplacePlaceholders(character, simulation, quest.description));

            foreach (NPC.Conditions.Condition c in quest.conditions)
            {
                string text = c.FormatCondition(simulation);

                if (text == null)
                {
                    continue;
                }

                Grid g = new Grid();

                Border b = new Border()
                {
                    BorderBrush     = App.Current.Resources["AccentColor"] as Brush,
                    BorderThickness = new Thickness(1),
                    CornerRadius    = new CornerRadius(4)
                };

                TextBlock tb = new TextBlock();
                formatter.Markup(tb, text);

                Label l = new Label()
                {
                    Content = tb
                };

                Image i = new Image()
                {
                    Width  = 26,
                    Height = 26,
                    Margin = new Thickness(5)
                };

                g.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = GridLength.Auto
                });
                g.ColumnDefinitions.Add(new ColumnDefinition());

                g.Children.Add(i);
                g.Children.Add(l);
                Grid.SetColumn(l, 1);

                if (c is IUIL_Icon uIL && uIL.UpdateIcon(out var img))
                {
                    i.Visibility = Visibility.Visible;
                    i.Source     = img;
                }
Exemplo n.º 20
0
 public QuestTabViewModel()
 {
     Quest = new NPCQuest();
 }
        public void DisplayPage(NPCMessage message, int i, int page)
        {
            Simulation.OnPropertyChanged("");

            formatter.Markup(mainText, FormatText(message.pages[page]));

            lastPage = page;

            if (!canDisplayNextPage)
            {
                foreach (NPCResponse res in Dialogue.responses)
                {
                    if ((res.VisibleInAll || res.visibleIn.Length <= i || res.visibleIn[i] == 1) && res.conditions.All(d => d.Check(Simulation)))
                    {
                        Border border = new Border()
                        {
                            BorderBrush     = App.Current.Resources["AccentColor"] as Brush,
                            BorderThickness = new Thickness(1),
                            CornerRadius    = new CornerRadius(4),
                            Margin          = new Thickness(0, 2.5, 0, 2.5)
                        };

                        border.PreviewMouseLeftButtonDown += (sender, e) =>
                        {
                            bool shouldClose = true;

                            if (res.openQuestId > 0)
                            {
                                shouldClose = false;

                                NPCQuest questAsset = MainWindow.CurrentProject.data.quests.Single(d => d.id == res.openQuestId);

                                Quest_Status questStatus = Simulation.GetQuestStatus(questAsset.id);

                                QuestView_Window.EMode _mode;

                                switch (questStatus)
                                {
                                case Quest_Status.Ready:
                                    _mode = QuestView_Window.EMode.END_QUEST;
                                    break;

                                default:
                                    _mode = QuestView_Window.EMode.BEGIN_QUEST;
                                    break;
                                }

                                QuestView_Window qvw = new QuestView_Window(Character, Simulation, questAsset, _mode);
                                if (qvw.ShowDialog() == true)
                                {
                                    foreach (NPC.Conditions.Condition c in res.conditions)
                                    {
                                        c.Apply(Simulation);
                                    }

                                    foreach (NPC.Rewards.Reward r in res.rewards)
                                    {
                                        r.Give(Simulation);
                                    }

                                    if (res.openDialogueId > 0)
                                    {
                                        Previous = Start;

                                        NPCDialogue next = MainWindow.CurrentProject.data.dialogues.Single(d => d.id == res.openDialogueId);

                                        Dialogue = next;

                                        Display();
                                    }
                                }

                                return;
                            }
                            else if (res.openVendorId > 0)
                            {
                                shouldClose = false;

                                NPCVendor vendorAsset = MainWindow.CurrentProject.data.vendors.Single(d => d.id == res.openVendorId);

                                VendorView_Window qvw = new VendorView_Window(Character, Simulation, vendorAsset);

                                qvw.ShowDialog();

                                foreach (NPC.Conditions.Condition c in res.conditions)
                                {
                                    c.Apply(Simulation);
                                }

                                foreach (NPC.Rewards.Reward r in res.rewards)
                                {
                                    r.Give(Simulation);
                                }

                                if (res.openDialogueId > 0)
                                {
                                    Previous = Start;

                                    NPCDialogue next = MainWindow.CurrentProject.data.dialogues.Single(d => d.id == res.openDialogueId);

                                    Dialogue = next;

                                    Display();
                                }

                                return;
                            }

                            foreach (NPC.Conditions.Condition c in res.conditions)
                            {
                                c.Apply(Simulation);
                            }

                            foreach (NPC.Rewards.Reward r in res.rewards)
                            {
                                r.Give(Simulation);
                            }

                            if (res.openDialogueId > 0)
                            {
                                Previous = Dialogue;

                                NPCDialogue next = MainWindow.CurrentProject.data.dialogues.Single(d => d.id == res.openDialogueId);

                                Dialogue = next;

                                Display();
                            }
                            else if (shouldClose)
                            {
                                Close();
                            }
                        };

                        Grid g = new Grid();


                        TextBlock tb = new TextBlock();
                        formatter.Markup(tb, FormatText(res.mainText));

                        Label l = new Label()
                        {
                            Content             = tb,
                            HorizontalAlignment = HorizontalAlignment.Center,
                            Margin = new Thickness(5)
                        };

                        g.Children.Add(l);

                        PackIconMaterial icon = null;

                        if (res.openQuestId > 0)
                        {
                            switch (Simulation.GetQuestStatus(res.openQuestId))
                            {
                            case Quest_Status.Ready:
                                icon = new PackIconMaterial()
                                {
                                    Kind = PackIconMaterialKind.Help
                                };
                                break;

                            default:
                                icon = new PackIconMaterial()
                                {
                                    Kind = PackIconMaterialKind.Exclamation
                                };
                                break;
                            }
                        }
                        else if (res.openVendorId > 0)
                        {
                            icon = new PackIconMaterial()
                            {
                                Kind = PackIconMaterialKind.ShoppingOutline
                            };
                        }

                        if (icon != null)
                        {
                            icon.VerticalAlignment   = VerticalAlignment.Center;
                            icon.HorizontalAlignment = HorizontalAlignment.Left;
                            icon.Margin     = new Thickness(5);
                            icon.Foreground = App.Current.Resources["AccentColor"] as Brush;

                            g.Children.Add(icon);
                        }

                        border.Child = g;
                        responsesPanel.Children.Add(border);
                    }
                }
            }
        }