mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-21 20:00:48 +00:00
Compare commits
2
Commits
v9.0.27
...
8ea5c81789
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ea5c81789 | ||
|
|
39a46563a1 |
+23
-90
@@ -3,56 +3,15 @@ pfUI:RegisterModule("tracking", function ()
|
||||
MINIMAP_TRACKING_FRAME:UnregisterAllEvents()
|
||||
MINIMAP_TRACKING_FRAME:Hide()
|
||||
|
||||
local function HasEntries(tbl)
|
||||
for _ in pairs(tbl) do
|
||||
return true
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local rawborder, border = GetBorderSize()
|
||||
local size = tonumber(C.appearance.minimap.tracking_size)
|
||||
local pulse = C.appearance.minimap.tracking_pulse == "1"
|
||||
|
||||
-- Tracking spells identified by SpellID + expected icon path.
|
||||
-- SpellID is the primary identifier (stable, locale-independent).
|
||||
-- Icon path is used as secondary confirmation when scanning the spellbook.
|
||||
local knownTrackingSpells = {
|
||||
any = {
|
||||
{ id = 2481, icon = "Racial_Dwarf_FindTreasure" }, -- Find Treasure
|
||||
{ id = 2580, icon = "Spell_Nature_Earthquake" }, -- Find Minerals
|
||||
{ id = 2383, icon = "INV_Misc_Flower_02" }, -- Find Herbs (Rank 1)
|
||||
{ id = 8387, icon = "INV_Misc_Flower_02" }, -- Find Herbs (Rank 2)
|
||||
{ id = 52917, icon = "INV_TradeSkillItem_03" }, -- Find Trees (TurtleWow)
|
||||
},
|
||||
HUNTER = {
|
||||
{ id = 1494, icon = "Ability_Tracking" }, -- Track Beasts
|
||||
{ id = 19883, icon = "Spell_Holy_PrayerOfHealing" }, -- Track Humanoids
|
||||
{ id = 19884, icon = "Spell_Shadow_DarkSummoning" }, -- Track Undead
|
||||
{ id = 19885, icon = "Ability_Stealth" }, -- Track Hidden
|
||||
{ id = 19880, icon = "Spell_Frost_SummonWaterElemental" }, -- Track Elementals
|
||||
{ id = 19878, icon = "Spell_Shadow_SummonFelHunter" }, -- Track Demons
|
||||
{ id = 19882, icon = "Ability_Racial_Avatar" }, -- Track Giants
|
||||
{ id = 19879, icon = "INV_Misc_Head_Dragon_01" }, -- Track Dragonkin
|
||||
},
|
||||
PALADIN = {
|
||||
{ id = 5502, icon = "Spell_Holy_SenseUndead" }, -- Sense Undead
|
||||
},
|
||||
WARLOCK = {
|
||||
{ id = 5500, icon = "Spell_Shadow_Metamorphosis" }, -- Sense Demons
|
||||
},
|
||||
DRUID = {
|
||||
{ id = 5225, icon = "Ability_Tracking" }, -- Track Humanoids (Cat Form only)
|
||||
},
|
||||
}
|
||||
|
||||
-- Build a flat lookup: spellId -> entry, for fast spellbook matching
|
||||
local spellIdLookup = {}
|
||||
for _, entries in pairs(knownTrackingSpells) do
|
||||
for _, entry in ipairs(entries) do
|
||||
spellIdLookup[entry.id] = entry
|
||||
end
|
||||
end
|
||||
-- Tracking spells come from ClassicAPI's native GetNumTrackingTypes /
|
||||
-- GetTrackingInfo (see the DLL's docs/API.md "Tracking"). The DLL
|
||||
-- enumerates them straight from the spellbook by tracking-aura effect,
|
||||
-- so there is no spell table to maintain here and server-custom trackers
|
||||
-- (e.g. Turtle's Find Trees) are picked up automatically.
|
||||
|
||||
local state = {
|
||||
texture = nil,
|
||||
@@ -128,50 +87,24 @@ pfUI:RegisterModule("tracking", function ()
|
||||
end)
|
||||
|
||||
function pfUI.tracking:RefreshSpells()
|
||||
local playerClass = UnitClassBase("player")
|
||||
local isCatForm = pfUI.tracking:PlayerIsDruidInCatForm(playerClass)
|
||||
state.spells = {}
|
||||
if not GetNumTrackingTypes then return end
|
||||
|
||||
-- Build set of valid SpellIDs for this class
|
||||
local validIds = {}
|
||||
for _, entry in ipairs(knownTrackingSpells.any) do
|
||||
validIds[entry.id] = true
|
||||
end
|
||||
if knownTrackingSpells[playerClass] then
|
||||
for _, entry in ipairs(knownTrackingSpells[playerClass]) do
|
||||
validIds[entry.id] = true
|
||||
end
|
||||
end
|
||||
-- Druid Track Humanoids (5225) only casts in Cat Form. Hide it out of
|
||||
-- form so the menu never offers a tracker that would fail to cast.
|
||||
local isCatForm = pfUI.tracking:PlayerIsDruidInCatForm(UnitClassBase("player"))
|
||||
|
||||
-- Druids only get Track Humanoids in Cat Form
|
||||
if playerClass == "DRUID" and not isCatForm then
|
||||
validIds[5225] = nil
|
||||
end
|
||||
|
||||
-- Scan spellbook: match by icon path, confirm SpellID is valid for this class
|
||||
for tabIndex = 1, GetNumSpellTabs() do
|
||||
local _, _, offset, numSpells = GetSpellTabInfo(tabIndex)
|
||||
for spellIndex = offset + 1, offset + numSpells do
|
||||
local spellTexture = GetSpellTexture(spellIndex, BOOKTYPE_SPELL)
|
||||
local spellName = GetSpellName(spellIndex, BOOKTYPE_SPELL)
|
||||
|
||||
if pfUI.tracking.invalidSpells[spellName] then
|
||||
spellTexture = nil
|
||||
end
|
||||
|
||||
if spellTexture then
|
||||
local lowerTexture = string.lower(spellTexture)
|
||||
for spellId, entry in pairs(spellIdLookup) do
|
||||
if validIds[spellId] and not state.spells[spellId]
|
||||
and strfind(lowerTexture, string.lower(entry.icon)) then
|
||||
state.spells[spellId] = {
|
||||
index = spellIndex,
|
||||
name = spellName,
|
||||
texture = spellTexture,
|
||||
spellId = spellId,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
for i = 1, GetNumTrackingTypes() do
|
||||
local name, texture, _, _, spellId = GetTrackingInfo(i)
|
||||
local castable = not (spellId == 5225 and not isCatForm)
|
||||
if name and texture and castable
|
||||
and not pfUI.tracking.invalidSpells[name] then
|
||||
state.spells[i] = {
|
||||
index = i, -- tracking index, passed to SetTracking()
|
||||
name = name,
|
||||
texture = texture,
|
||||
spellId = spellId,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -187,7 +120,7 @@ pfUI:RegisterModule("tracking", function ()
|
||||
elseif not texture then
|
||||
state.texture = nil
|
||||
|
||||
if pulse and HasEntries(state.spells) then
|
||||
if pulse and next(state.spells) ~= nil then
|
||||
pfUI.tracking.pulse = true
|
||||
pfUI.tracking.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark")
|
||||
pfUI.tracking.icon:SetVertexColor(1,1,1,1)
|
||||
@@ -217,7 +150,7 @@ pfUI:RegisterModule("tracking", function ()
|
||||
checked = spell.texture == state.texture,
|
||||
arg1 = spell,
|
||||
func = function (arg1)
|
||||
CastSpell(arg1.index, BOOKTYPE_SPELL)
|
||||
SetTracking(arg1.index)
|
||||
CloseDropDownMenus()
|
||||
end
|
||||
})
|
||||
|
||||
@@ -23,7 +23,7 @@ do
|
||||
-- ClassicAPI dependency check.
|
||||
-- pfUI relies pervasively on the modern C_* / SuperWoW / nameplate / focus
|
||||
-- API surface that ClassicAPI polyfills, so presence is required.
|
||||
local PFUI_CLASSIC_API_MIN = 11201 -- (X*10000 + Y*100 + Z)
|
||||
local PFUI_CLASSIC_API_MIN = 11204 -- (X*10000 + Y*100 + Z)
|
||||
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
||||
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
||||
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
||||
|
||||
Reference in New Issue
Block a user