internal static void QuestLogPatch(QuestLog __instance, int ___questPage, List <List <IQuest> > ___pages, int ___currentPage, IQuest ____shownQuest, List <string> ____objectiveText) { try { bool isCPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position string toSpeak = " ", extra = ""; if (___questPage == -1) { #region Quest Lists if (!firstTimeInIndividualQuest) { firstTimeInIndividualQuest = true; } for (int i = 0; i < __instance.questLogButtons.Count; i++) { if (___pages.Count() > 0 && ___pages[___currentPage].Count() > i) { if (!__instance.questLogButtons[i].containsPoint(x, y)) { continue; } string name = ___pages[___currentPage][i].GetName(); int daysLeft = ___pages[___currentPage][i].GetDaysLeft(); toSpeak = $"{name}"; if (daysLeft > 0 && ___pages[___currentPage][i].ShouldDisplayAsComplete()) { toSpeak += $"\t\n {daysLeft} days left"; } toSpeak += ___pages[___currentPage][i].ShouldDisplayAsComplete() ? " completed!" : ""; break; } } if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y)) { toSpeak = "Previous page button"; } else if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y)) { toSpeak = "Next page button"; } else if (__instance.upperRightCloseButton != null && __instance.upperRightCloseButton.visible && __instance.upperRightCloseButton.containsPoint(x, y)) { toSpeak = "Close menu button"; } if (questLogQuery != toSpeak) { questLogQuery = toSpeak; MainClass.ScreenReader.Say(toSpeak, true); } #endregion } else { #region Individual quest bool containsReward = __instance.HasReward() || __instance.HasMoneyReward(); string description = Game1.parseText(____shownQuest.GetDescription(), Game1.dialogueFont, __instance.width - 128); string title = ____shownQuest.GetName(); if (firstTimeInIndividualQuest || (isCPressed && !isNarratingQuestInfo)) { if (firstTimeInIndividualQuest) { toSpeak = "Back button"; } if (____shownQuest.ShouldDisplayAsComplete()) { #region Quest completed menu extra = $"Quest: {title} Completed!"; if (__instance.HasMoneyReward()) { extra += $"you recieved {____shownQuest.GetMoneyReward()}g"; } #endregion } else { #region Quest in-complete menu extra = $"Title: {title}. \t\n Description: {description}"; for (int j = 0; j < ____objectiveText.Count; j++) { string parsed_text = Game1.parseText(____objectiveText[j], width: __instance.width - 192, whichFont: Game1.dialogueFont); if (____shownQuest != null && ____shownQuest is SpecialOrder) { OrderObjective order_objective = ((SpecialOrder)____shownQuest).objectives[j]; if (order_objective.GetMaxCount() > 1 && order_objective.ShouldShowProgress()) { parsed_text += "\n\t" + order_objective.GetCount() + " of " + order_objective.GetMaxCount() + " completed"; } } extra += $"\t\nOrder {j + 1}: {parsed_text} \t\n"; } if (____shownQuest != null) { int daysLeft = ____shownQuest.GetDaysLeft(); if (daysLeft > 0) { extra += $"\t\n{daysLeft} days left."; } } #endregion } isNarratingQuestInfo = true; Task.Delay(200).ContinueWith(_ => { isNarratingQuestInfo = false; }); questLogQuery = " "; } if (!firstTimeInIndividualQuest) { if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y)) { toSpeak = (___currentPage > 0) ? "Previous page button" : "Back button"; } else if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y)) { toSpeak = "Next page button"; } else if (__instance.cancelQuestButton != null && __instance.cancelQuestButton.visible && __instance.cancelQuestButton.containsPoint(x, y)) { toSpeak = "Cancel quest button"; } else if (__instance.upperRightCloseButton != null && __instance.upperRightCloseButton.visible && __instance.upperRightCloseButton.containsPoint(x, y)) { toSpeak = "Close menu button"; } else if (containsReward && __instance.rewardBox.containsPoint(x, y)) { toSpeak = "Left click to collect reward"; } } if (firstTimeInIndividualQuest || (questLogQuery != toSpeak)) { questLogQuery = toSpeak; MainClass.ScreenReader.Say(extra + " \n\t" + toSpeak, true); if (firstTimeInIndividualQuest) { firstTimeInIndividualQuest = false; } } #endregion } } catch (Exception e) { MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}"); } }
public override void receiveLeftClick(int x, int y, bool playSound = true) { base.receiveLeftClick(x, y, playSound); if (Game1.activeClickableMenu == null) { return; } if (questPage == -1) { for (int i = 0; i < questLogButtons.Count; i++) { if (pages.Count > 0 && pages[currentPage].Count > i && questLogButtons[i].containsPoint(x, y)) { Game1.playSound("smallSelect"); questPage = i; _shownQuest = pages[currentPage][i]; _objectiveText = _shownQuest.GetObjectiveDescriptions(); _shownQuest.MarkAsViewed(); scrollAmount = 0f; SetScrollBarFromAmount(); if (Game1.options.SnappyMenus) { currentlySnappedComponent = getComponentWithID(102); currentlySnappedComponent.rightNeighborID = -7777; currentlySnappedComponent.downNeighborID = (HasMoneyReward() ? 103 : (_shownQuest.CanBeCancelled() ? 104 : (-1))); snapCursorToCurrentSnappedComponent(); } return; } } if (currentPage < pages.Count - 1 && forwardButton.containsPoint(x, y)) { nonQuestPageForwardButton(); return; } if (currentPage > 0 && backButton.containsPoint(x, y)) { nonQuestPageBackButton(); return; } Game1.playSound("bigDeSelect"); exitThisMenu(); return; } Quest quest = _shownQuest as Quest; if (questPage != -1 && _shownQuest.ShouldDisplayAsComplete() && _shownQuest.HasMoneyReward() && rewardBox.containsPoint(x, y)) { Game1.player.Money += _shownQuest.GetMoneyReward(); Game1.playSound("purchaseRepeat"); _shownQuest.OnMoneyRewardClaimed(); } else if (questPage != -1 && quest != null && !quest.completed && (bool)quest.canBeCancelled && cancelQuestButton.containsPoint(x, y)) { quest.accepted.Value = false; if (quest.dailyQuest.Value && quest.dayQuestAccepted.Value == Game1.Date.TotalDays) { Game1.player.acceptedDailyQuest.Set(newValue: false); } Game1.player.questLog.Remove(quest); pages[currentPage].RemoveAt(questPage); questPage = -1; Game1.playSound("trashcan"); if (Game1.options.SnappyMenus && currentPage == 0) { currentlySnappedComponent = getComponentWithID(0); snapCursorToCurrentSnappedComponent(); } } else if (!NeedsScroll() || backButton.containsPoint(x, y)) { exitQuestPage(); } if (NeedsScroll()) { if (downArrow.containsPoint(x, y) && scrollAmount < _contentHeight - _scissorRectHeight) { DownArrowPressed(); Game1.playSound("shwip"); } else if (upArrow.containsPoint(x, y) && scrollAmount > 0f) { UpArrowPressed(); Game1.playSound("shwip"); } else if (scrollBar.containsPoint(x, y)) { scrolling = true; } else if (scrollBarBounds.Contains(x, y)) { scrolling = true; } else if (!downArrow.containsPoint(x, y) && x > xPositionOnScreen + width && x < xPositionOnScreen + width + 128 && y > yPositionOnScreen && y < yPositionOnScreen + height) { scrolling = true; leftClickHeld(x, y); releaseLeftClick(x, y); } } }