feat(learner): Phase 4 — real-time tooltip for learned spawns
This commit is contained in:
@@ -2961,6 +2961,65 @@ function QuestieLearner:OnQuestLogUpdate()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- Real-time tooltip for learned spawns
|
||||||
|
-- Hooks into GameTooltip to show "Learned spawn: (x, y) from N kills"
|
||||||
|
-- when hovering over an NPC that has been learned.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local _tooltipHookRegistered = false
|
||||||
|
|
||||||
|
--- Adds a "Learned spawn: (x, y) from N kills" line to the tooltip
|
||||||
|
--- for the NPC represented by the given unit token.
|
||||||
|
--- Called by the GameTooltip OnTooltipSetUnit hook.
|
||||||
|
---@param unitToken string WoW unit token (e.g. "mouseover")
|
||||||
|
local function _AddLearnedSpawnTooltipLine(unitToken)
|
||||||
|
if not Questie or not Questie.dbLearner then return end
|
||||||
|
local guid = UnitGUID(unitToken)
|
||||||
|
if not guid then return end
|
||||||
|
|
||||||
|
local guidType, _, _, _, _, npcIdStr, _ = strsplit("-", guid)
|
||||||
|
if guidType ~= "Creature" and guidType ~= "Vehicle" then return end
|
||||||
|
|
||||||
|
local npcId = tonumber(npcIdStr)
|
||||||
|
if not npcId then return end
|
||||||
|
|
||||||
|
local entry = Questie.dbLearner.global.npcs[npcId]
|
||||||
|
if not entry or not entry[7] then return end
|
||||||
|
|
||||||
|
-- Find the first zone with spawn data
|
||||||
|
local spawnsByZone = entry[7]
|
||||||
|
local zoneId = next(spawnsByZone)
|
||||||
|
if not zoneId then return end
|
||||||
|
|
||||||
|
local zoneSpawns = spawnsByZone[zoneId]
|
||||||
|
if not zoneSpawns or #zoneSpawns == 0 then return end
|
||||||
|
|
||||||
|
-- Use the first recorded coordinate
|
||||||
|
local x = zoneSpawns[1][1]
|
||||||
|
local y = zoneSpawns[1][2]
|
||||||
|
local kills = entry.mc or 0
|
||||||
|
|
||||||
|
local formattedX = ("%.1f"):format(x)
|
||||||
|
local formattedY = ("%.1f"):format(y)
|
||||||
|
GameTooltip:AddDoubleLine("Learned spawn", ("(%s, %s) from %d kill%s"):format(
|
||||||
|
formattedX, formattedY, kills, kills == 1 and "" or "s"))
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Registers the GameTooltip OnTooltipSetUnit hook once.
|
||||||
|
--- Safe to call multiple times; guard prevents double-hook.
|
||||||
|
local function _RegisterLearnedSpawnTooltipHook()
|
||||||
|
if _tooltipHookRegistered then return end
|
||||||
|
_tooltipHookRegistered = true
|
||||||
|
GameTooltip:HookScript("OnTooltipSetUnit", function()
|
||||||
|
-- self == GameTooltip
|
||||||
|
local _, unitToken = self:GetUnit()
|
||||||
|
if unitToken then
|
||||||
|
_AddLearnedSpawnTooltipLine(unitToken)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
-- Event registration
|
-- Event registration
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
@@ -3024,6 +3083,7 @@ function QuestieLearner:Initialize()
|
|||||||
QuestieLearner.data = Questie.dbLearner.global
|
QuestieLearner.data = Questie.dbLearner.global
|
||||||
self:RegisterEvents()
|
self:RegisterEvents()
|
||||||
self:InjectLearnedData()
|
self:InjectLearnedData()
|
||||||
|
_RegisterLearnedSpawnTooltipHook()
|
||||||
|
|
||||||
local QuestieLearnerComms = QuestieLoader:ImportModule("QuestieLearnerComms")
|
local QuestieLearnerComms = QuestieLoader:ImportModule("QuestieLearnerComms")
|
||||||
if QuestieLearnerComms and QuestieLearnerComms.Initialize then
|
if QuestieLearnerComms and QuestieLearnerComms.Initialize then
|
||||||
|
|||||||
Reference in New Issue
Block a user