mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-27 18:06:02 +00:00
Range Check: UnitXP mode
Added Range Check Mode dropdown (Vanilla / UnitXP) and UnitXP Range Threshold input field under the 40y-Range Check settings in the GUI
In UnitXP mode, UnitInRange bypasses librange entirely and queries UnitXP("distanceBetween") directly with the configured yard threshold
librange scan loop is disabled when UnitXP mode is active — no TargetUnit cycling, no spellbook scanning, no combat interruption
Fixed UnitInRange referencing librange as an undefined local instead of pfUI.api.librange, which caused silent nil returns
This commit is contained in:
+15
-2
@@ -141,9 +141,22 @@ function pfUI.api.UnitInRange(unit)
|
||||
return nil
|
||||
elseif CheckInteractDistance(unit, 4) then
|
||||
return 1
|
||||
else
|
||||
return librange:UnitInSpellRange(unit)
|
||||
end
|
||||
|
||||
-- UnitXP precise mode: skip librange entirely, use direct distance check
|
||||
if C.unitframes.rangecheck_mode == "unitxp" and _G.UnitXP then
|
||||
local threshold = tonumber(C.unitframes.rangecheck_distance) or 40
|
||||
local success, distance = pcall(_G.UnitXP, "distanceBetween", "player", unit)
|
||||
if success and distance then
|
||||
return distance <= threshold and 1 or nil
|
||||
end
|
||||
-- fallthrough to librange if UnitXP fails
|
||||
end
|
||||
|
||||
if pfUI.api.librange then
|
||||
return pfUI.api.librange:UnitInSpellRange(unit)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- [ RunOOC ]
|
||||
|
||||
@@ -216,6 +216,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", nil, "portraittexture", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "layout", "default")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck_mode", "vanilla")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck_distance", "40")
|
||||
pfUI:UpdateConfig("unitframes", nil, "buffdetect", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanabar", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanaheight", "10")
|
||||
|
||||
+2
-1
@@ -189,7 +189,8 @@ librange:SetScript("OnUpdate", function()
|
||||
return UnitXP("distanceBetween", "player", unit)
|
||||
end)
|
||||
if unitxp_success and unitxp_distance then
|
||||
unitdata[unit] = unitxp_distance < 45 and 1 or 0
|
||||
local threshold = (tonumber(C.unitframes.rangecheck_distance) or 40) + 5
|
||||
unitdata[unit] = unitxp_distance < threshold and 1 or 0
|
||||
this.id = this.id + 1
|
||||
return
|
||||
end
|
||||
|
||||
@@ -943,6 +943,10 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function ()
|
||||
"8:" .. T["Slow"],
|
||||
"16:" .. T["Very Slow"],
|
||||
},
|
||||
["uf_rangecheck_mode"] = {
|
||||
"vanilla:" .. T["Vanilla (Spellbook)"],
|
||||
"unitxp:" .. T["UnitXP (Precise)"],
|
||||
},
|
||||
["uf_raidlayout"] = {
|
||||
"1x40:" .. "1x40",
|
||||
"2x20:" .. "2x20",
|
||||
@@ -1998,6 +2002,8 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function ()
|
||||
|
||||
CreateConfig(U[c], T["Group Options"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Enable 40y-Range Check"], C.unitframes, "rangecheck", "checkbox", nil, nil, nil, nil, "vanilla" )
|
||||
CreateConfig(nil, T["Range Check Mode"], C.unitframes, "rangecheck_mode", "dropdown", pfUI.gui.dropdowns.uf_rangecheck_mode, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, T["UnitXP Range Threshold (yards)"], C.unitframes, "rangecheck_distance", nil, nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, T["Range Check Interval"], C.unitframes, "rangechecki", "dropdown", pfUI.gui.dropdowns.uf_rangecheckinterval, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, T["Use Raid Frames To Display Group Members"], C.unitframes, "raidforgroup", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Self In Raid Frames"], C.unitframes, "selfinraid", "checkbox")
|
||||
|
||||
Reference in New Issue
Block a user