From b4a0e9f6fdc4e6475419e467d01e66fe9fd7ce8a Mon Sep 17 00:00:00 2001 From: Etorix <92535668+EtorixDev@users.noreply.github.com> Date: Wed, 28 Jan 2026 05:57:00 -0800 Subject: [PATCH] Questify: Improve panel override patch and add ctx option to resume Auto Complete. (#698) * Improve panel override, add ctx option. * Improve panel text. --- src/equicordplugins/questify/index.tsx | 86 +++++++++++++++-------- src/equicordplugins/questify/settings.tsx | 28 ++++---- src/equicordplugins/questify/styles.css | 9 +-- 3 files changed, 76 insertions(+), 47 deletions(-) diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 517a4c190..a00811453 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -245,12 +245,14 @@ function shouldHideMembersListActivelyPlayingIcon(): boolean { return disableMembersListActivelyPlayingIcon || disableQuestsEverything; } -function QuestTileContextMenu(children: React.ReactNode[], props: { quest: any; }) { +function QuestTileContextMenu(children: React.ReactNode[], props: { quest: any; }, isClaimedMenu: boolean = false): void { const isIgnored = questIsIgnored(props.quest.id); + const isEnrolled = !!props.quest.userStatus?.enrolledAt; + const canAutoComplete = !isClaimedMenu && isEnrolled && canQuestAutoComplete(props.quest); children.unshift(( - {!isIgnored ? ( + {!isClaimedMenu && (!isIgnored ? ( { removeIgnoredQuest(props.quest.id); }} /> - )} - {activeQuestIntervals.has(props.quest.id) && + ))} + {activeQuestIntervals.has(props.quest.id) ? ( + />) : canAutoComplete ? ( + { processQuestForAutoComplete(props.quest); }} + />) : null } = durationWithLeeway; const progressFormatted = `${String(Math.floor(timeRemaining / 60)).padStart(2, "0")}:${String(timeRemaining % 60).padStart(2, "0")}`; @@ -993,31 +1025,27 @@ function getQuestPanelPercentComplete({ quest, percentCompleteText }: { quest: Q } function getQuestPanelSubtitleText(quest: Quest): string | null { + const questStatus = getQuestStatus(quest); + const questCompleted = !!quest.userStatus?.completedAt && questStatus === QuestStatus.Unclaimed; const intervalData = activeQuestIntervals.get(quest.id); + const rewardItem = quest.config.rewardsConfig.rewards[0] || null; + const completingText = getQuestAcceptedButtonText(quest, true) || "Completing"; + const completedText = questCompleted ? "Completed" : null; - if (!intervalData) { + if (!intervalData && !completedText) { return null; } - const rewardItem = quest.config.rewardsConfig.rewards[0] || null; - const completingText = getQuestAcceptedButtonText(quest, true) || "Completing"; - - if (rewardItem.orbQuantity) { - return `${completingText} for ${rewardItem.orbQuantity} Orbs.`; - } else if (rewardItem.messages?.nameWithArticle) { - return `${completingText} for ${rewardItem.messages.nameWithArticle}.`; + if (rewardItem?.orbQuantity) { + return `${completedText || completingText} for ${rewardItem.orbQuantity} Orbs.`; + } else if (rewardItem?.messages?.nameWithArticle) { + return `${completedText || completingText} for ${rewardItem.messages.nameWithArticle}.`; } else { - return `${completingText} for an unrecognized reward.`; + return `${completedText || completingText} for an unrecognized reward.`; } } function getQuestPanelTitleText(quest: Quest): string | null { - const intervalData = activeQuestIntervals.get(quest.id); - - if (!intervalData) { - return null; - } - return normalizeQuestName(quest.config.messages.questName); } @@ -1286,8 +1314,8 @@ export default definePlugin({ // be completed Quest which is actively being auto-completed. find: "questDeliveryOverride)?", replacement: { - match: /(\i=)(\i.\i.questDeliveryOverride)/, - replace: "$1$self.getQuestPanelOverride()??$2" + match: /(?<=null}\);return )(\i\?\i:\i)/, + replace: "$self.getQuestPanelOverride()??($1)" } }, { diff --git a/src/equicordplugins/questify/settings.tsx b/src/equicordplugins/questify/settings.tsx index e64dbfdc1..aab19ecdb 100644 --- a/src/equicordplugins/questify/settings.tsx +++ b/src/equicordplugins/questify/settings.tsx @@ -558,7 +558,7 @@ function QuestButtonSettings(): JSX.Element { value === currentQuestButtonMiddleClickAction} @@ -584,7 +584,7 @@ function QuestButtonSettings(): JSX.Element { value === restyleQuestsGradientValue} @@ -1009,7 +1009,7 @@ function RestyleQuestsSetting() { value === unclaimedSubsort} @@ -1173,7 +1173,7 @@ function ReorderQuestsSetting(): JSX.Element { value === ignoredSubsort} @@ -1205,7 +1205,7 @@ function ReorderQuestsSetting(): JSX.Element {