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; } }
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; }
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; }
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!"); } }
void Awake() { if (instance == null) { instance = this; } else if (instance != this) { Destroy(gameObject); } gameObject.SetActive(false); }
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); }
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; }
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; } } }
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); } }
protected override void StartNewIItem() { currentItem = new NPCQuest(); }
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; }
/* * 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"); } }
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); }
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; }
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); } } } }