ForeverUI : titres de quête de camelot 1.60.1.70450

- Suivi des objectifs : titre « [niveau(+)] Titre (Type) », comme
  QuestObjectiveTrackerMixin:UpdateSingle avec QuestUtilsOverrides :
  préfixe de niveau toujours posé, « + » pour une élite, puis le type pour
  quatre cas (Élite, Donjon, JcJ, Raid), tirés du questTag de
  GetQuestLogTitle comparé aux textes du client (ELITE,
  CALENDAR_TYPE_DUNGEON, CALENDAR_TYPE_PVP, RAID). Pas de couleur de
  difficulté : la CVar showQuestDifficultyColor n'existe pas en 3.3.5.
- Journal : même étiquette de type pour les quatre cas (l'élite seule
  avant) ; lignes de quête décalées de 4 (titleFrameLeftPadding).
- « Lien dans la discussion » retiré des menus du suivi et du journal
  (camelot ne le garde qu'en mode manette) ; Maj-clic lie toujours la
  quête.
SUIVI_DES_QUETES.md : décision 1 révisée.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adrestie
2026-10-17 23:59:16 +02:00
parent f14ce96caa
commit 2fd1b024e4
3 changed files with 61 additions and 24 deletions
+20 -9
View File
@@ -49,7 +49,6 @@ local TEXT = {
viewPage = OBJECTIVES_VIEW_IN_QUESTLOG, -- OBJECTIVES_VIEW_IN_QUESTLOG (in 3.3.5)
viewMap = L.OBJECTIVETRACKER_OPEN_MAP, -- OBJECTIVES_SHOW_QUEST_MAP
untrack = L.OBJECTIVETRACKER_UNTRACK, -- OBJECTIVES_STOP_TRACKING
shareInChat = L.OBJECTIVETRACKER_SHARE_IN_CHAT, -- SHARE_IN_CHAT
abandonQuest = ABANDON_QUEST_ABBREV, -- ABANDON_QUEST_ABBREV (in 3.3.5)
viewAchievement = OBJECTIVES_VIEW_ACHIEVEMENT, -- OBJECTIVES_VIEW_ACHIEVEMENT (in 3.3.5)
minutes = "%.2d:%.2d", -- MINUTES_SECONDS
@@ -471,6 +470,23 @@ end
-- Widths are set by hand: the block is not placed yet when its texts are measured, and
-- 3.3.5 only measures a text that has a width (camelot relies on anchors).
-- camelot 70450 block title (QuestObjectiveTrackerMixin:UpdateSingle with QuestUtilsOverrides):
-- "[" level ("+" if elite) "] " title, then the quest type ("(Elite)", "(Dungeon)"...). The
-- difficulty color (showQuestDifficultyColor) is a modern CVar 3.3.5 lacks: not applied.
local function trackerTitle(title, level, questTag)
if not title then
return title
end
local tagText = ForeverUI.QuestTagText and ForeverUI.QuestTagText(questTag)
if tagText then
title = title .. " " .. tagText
end
if level and level > 0 then
title = "[" .. level .. ((questTag == ELITE) and "+" or "") .. "] " .. title
end
return title
end
local function setBlockTitle(b, text)
b.title:SetWidth(G.width - G.blockX + b.right)
b.title:SetHeight(0)
@@ -717,7 +733,7 @@ local function displayQuests(lineFrame, initialOffset, maxHeight, frameWidth)
for w = 1, numWatched do
local index = GetQuestIndexForWatch(w)
if index then
local title, _, _, _, _, _, isComplete, _, questID = GetQuestLogTitle(index)
local title, level, questTag, _, _, _, isComplete, _, questID = GetQuestLogTitle(index)
local required = GetQuestLogRequiredMoney(index)
local numObjectives = GetNumQuestLeaderBoards(index)
local failed = isComplete and isComplete < 0
@@ -752,7 +768,7 @@ local function displayQuests(lineFrame, initialOffset, maxHeight, frameWidth)
button = T.object(objects, lineFrame, index, object, charges)
b.right = -(G.itemSide + G.rightGap)
end
setBlockTitle(b, title)
setBlockTitle(b, trackerTitle(title, level, questTag))
local animate = {}
if isComplete then
@@ -1019,12 +1035,7 @@ local function questClick(b, mouse)
table.insert(l, { text = SHARE_QUEST, func = function() WatchFrame_ShareQuest(nil, w) end })
end
end
table.insert(l, { text = TEXT.shareInChat, func = function()
local link = GetQuestLink(index)
if link and not (ChatEdit_InsertLink and ChatEdit_InsertLink(link)) then
ChatFrame_OpenChat(link)
end
end })
-- camelot 70450 drops "Share in chat" outside the gamepad UI; Shift-click links the quest
table.insert(l, { text = TEXT.abandonQuest, func = function() WatchFrame_AbandonQuest(nil, w) end })
-- WotLK manual ordering
local n = #VISIBLE_WATCHES
+32 -13
View File
@@ -67,7 +67,6 @@ local TEXT = {
ready = L.QUESTLOG_READY, -- QUEST_WATCH_QUEST_READY
details = L.QUESTLOG_CLICK_DETAILS, -- CLICK_QUEST_DETAILS
untrack = L.QUESTLOG_UNTRACK_QUEST, -- UNTRACK_QUEST
shareInChat = L.QUESTLOG_SHARE_IN_CHAT, -- SHARE_IN_CHAT
trackAll = L.QUESTLOG_TRACK_ALL, -- QUEST_LOG_TRACK_ALL
untrackAll = L.QUESTLOG_UNTRACK_ALL, -- QUEST_LOG_UNTRACK_ALL
-- Quest details page
@@ -122,10 +121,36 @@ local function entry(index)
}
end
-- camelot 70450 QuestMapFrameOverrides.titleFrameLeftPadding
local QUEST_LEFT_PADDING = 4
local function isElite(info)
return info.questTag == ELITE
end
-- camelot QuestUtilsOverrides.GetQuestTagText (1.60.1.70450): the quest type as text, for four
-- types only: "(Elite)", "(Dungeon)", "(PvP)", "(Raid)" (CALENDAR_TYPE_DUNGEON, CALENDAR_TYPE_PVP,
-- RAID). 3.3.5 GetQuestLogTitle gives the type as a localized text (QuestInfo.dbc): compared with
-- the client's own strings; "Raid (10)" / "Raid (25)" start with RAID. Group and Heroic: nothing.
-- Shared with the objective tracker.
local function questTagText(tag)
if not tag or tag == "" then
return nil
end
local label
if tag == ELITE then
label = ELITE
elseif tag == CALENDAR_TYPE_DUNGEON or tag == LFG_TYPE_DUNGEON then
label = CALENDAR_TYPE_DUNGEON
elseif tag == PVP or tag == CALENDAR_TYPE_PVP then
label = CALENDAR_TYPE_PVP
elseif RAID and string.sub(tag, 1, string.len(RAID)) == RAID then
label = RAID
end
return label and format(PARENS_TEMPLATE, label) or nil
end
ForeverUI.QuestTagText = questTagText
-- QuestLogQuests_GetTitle with camelot's override: "[" level ("+" if elite) "] ",
-- preceded by "[n] " if n party members have the quest.
local function questTitle(info)
@@ -335,15 +360,7 @@ local function questMenu(row)
disabled = not shareable,
func = function() shareQuest(index) end,
})
table.insert(l, {
text = TEXT.shareInChat,
func = function()
local link = GetQuestLink(index)
if link and not (ChatEdit_InsertLink and ChatEdit_InsertLink(link)) then
ChatFrame_OpenChat(link)
end
end,
})
-- camelot 70450 drops "Share in chat" outside the gamepad UI; Shift-click links the quest
table.insert(l, {
text = ABANDON_QUEST,
func = function() abandonQuest(index) end,
@@ -1744,8 +1761,9 @@ local function fillQuest(v, b, info, count)
b.text:SetText(questTitle(info))
color(b.text, c)
color(b.tag, c)
if isElite(info) then
b.tag:SetText(format(PARENS_TEMPLATE, ELITE))
local tagText = questTagText(info.questTag)
if tagText then
b.tag:SetText(tagText)
b.tag:Show()
b.text:SetPoint("RIGHT", b.tag, "LEFT", -4, 0)
else
@@ -1885,7 +1903,8 @@ function J.update()
count.q = count.q + 1
local b = acquire(v, v.quests, count.q, createQuest)
fillQuest(v, b, info, count)
place(b, "quest", 0)
-- camelot 70450 QuestMapFrameOverrides.titleFrameLeftPadding: quest rows 4 px in
place(b, "quest", QUEST_LEFT_PADDING)
end
end
end
+9 -2
View File
@@ -55,8 +55,15 @@ sa lueur, lueurs d'animation, cadre de l'objet de quête. Feuille
## Décisions (2026-09-25)
1. **Titre** : Camelot par défaut — titre seul, doré uniforme, sans niveau ni
couleur de difficulté.
1. **Titre** : ~~Camelot par défaut — titre seul, doré uniforme, sans niveau ni
couleur de difficulté.~~ **Révisé le 2026-10-17** (camelot 1.60.1.70450,
appliqué à la demande de l'utilisateur) : `[niveau(+)] Titre (Type)` —
préfixe de niveau toujours posé, « + » pour une quête élite
(`QuestUtilsOverrides.GetQuestTitlePrefix`), puis le type pour quatre cas
seulement : (Élite), (Donjon), (JcJ), (Raid) (`GetQuestTagText`). Toujours
doré uniforme : la couleur de difficulté dépend de la CVar moderne
`showQuestDifficultyColor`, absente de 3.3.5. « Lien dans la discussion »
quitte le menu de la quête (camelot ne le garde qu'en mode manette).
2. **Fonctions propres à WotLK** : gardées, habillées Camelot — tri et filtres
dans le bouton filtre de l'en-tête, déplacement manuel dans le menu de la
quête, minuteurs de quête en barre de temps dans le bloc.