mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-30 23:46:57 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03ea3d5aa5 | ||
|
|
2b4d33d46a | ||
|
|
94dcfb3dad | ||
|
|
0890905eb6 | ||
|
|
6c76a88467 | ||
|
|
35c32f365e | ||
|
|
6dcb5162be | ||
|
|
8afafe71cf | ||
|
|
99ed538ee7 | ||
|
|
f382039f21 | ||
|
|
8307dd757e |
+1
-1
@@ -13,7 +13,7 @@ do
|
|||||||
-- on. There pfUI does load, and will throw wherever it reaches for something
|
-- on. There pfUI does load, and will throw wherever it reaches for something
|
||||||
-- the installed DLL doesn't have yet -- the popup names the cause so those
|
-- the installed DLL doesn't have yet -- the popup names the cause so those
|
||||||
-- errors aren't a mystery.
|
-- errors aren't a mystery.
|
||||||
local PFUI_CLASSIC_API_MIN = 11703 -- (X*10000 + Y*100 + Z)
|
local PFUI_CLASSIC_API_MIN = 11800 -- (X*10000 + Y*100 + Z)
|
||||||
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
||||||
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
||||||
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
||||||
|
|||||||
+21
-48
@@ -1353,15 +1353,18 @@ end
|
|||||||
|
|
||||||
-- [ Bar Layout Options ] --
|
-- [ Bar Layout Options ] --
|
||||||
-- 'barsize' size of bar in number of buttons
|
-- 'barsize' size of bar in number of buttons
|
||||||
-- returns: array of options as strings for pfUI.gui.bar
|
-- returns: array of options as strings for pfUI.gui.bar: every grid
|
||||||
|
-- that fits the bar exactly, plus common uneven ones
|
||||||
function pfUI.api.BarLayoutOptions(barsize)
|
function pfUI.api.BarLayoutOptions(barsize)
|
||||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutOptions: barsize "..tostring(barsize).." is invalid")
|
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutOptions: barsize "..tostring(barsize).." is invalid")
|
||||||
local options, seen = {}, {}
|
local options, seen = {}, {}
|
||||||
local function add(option)
|
local function add(option)
|
||||||
if not seen[option] then table.insert(options, option); seen[option] = true end
|
if not seen[option] then table.insert(options, option); seen[option] = true end
|
||||||
end
|
end
|
||||||
for i,layout in ipairs(pfGridmath[barsize]) do
|
for cols = 1, barsize do
|
||||||
add(string.format("%d x %d",layout[1],layout[2]))
|
if barsize % cols == 0 then
|
||||||
|
add(string.format("%d x %d", cols, barsize / cols))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
for _, option in ipairs({
|
for _, option in ipairs({
|
||||||
"1 x 12", "1 x 10", "2 x 10", "2 x 5", "3 x 10", "3 x 5", "3 x 3",
|
"1 x 12", "1 x 10", "2 x 10", "2 x 5", "3 x 10", "3 x 5", "3 x 3",
|
||||||
@@ -1381,49 +1384,23 @@ function pfUI.api.BarLayoutOptions(barsize)
|
|||||||
return options
|
return options
|
||||||
end
|
end
|
||||||
|
|
||||||
-- [ Bar Layout Formfactor ] --
|
-- 'formfactor' has to be a "cols x rows" string; the actionbar module resets
|
||||||
-- 'option' string option as used in pfUI_config.bars[bar].option
|
-- a stored layout that isn't one before it lays out a bar
|
||||||
-- returns: integer formfactor
|
|
||||||
local formfactors = {}
|
|
||||||
setmetatable(formfactors, {__mode = "v"}) -- weak table so values not referenced are collected on next gc
|
|
||||||
function pfUI.api.BarLayoutFormfactor(option)
|
|
||||||
if formfactors[option] then
|
|
||||||
return formfactors[option]
|
|
||||||
else
|
|
||||||
for barsize,_ in ipairs(pfGridmath) do
|
|
||||||
local options = pfUI.api.BarLayoutOptions(barsize)
|
|
||||||
for i,opt in ipairs(options) do
|
|
||||||
if opt == option then
|
|
||||||
formfactors[option] = i
|
|
||||||
return formfactors[option]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function ResolveBarLayout(barsize, formfactor, uneven)
|
local function ResolveBarLayout(barsize, formfactor, uneven)
|
||||||
local layout = tostring(formfactor or "")
|
local _, _, a, b = string.find(formfactor, "(%d+)%s*x%s*(%d+)")
|
||||||
local _, _, a, b = string.find(layout, "(%d+)%s*x%s*(%d+)")
|
local cols, rows = tonumber(a), tonumber(b)
|
||||||
if a and b then
|
cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols))
|
||||||
local cols, rows = tonumber(a), tonumber(b)
|
rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows))
|
||||||
cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols))
|
local orientation = string.upper(uneven or "DOWN")
|
||||||
rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows))
|
local mode = (orientation == "LEFT" or orientation == "RIGHT") and "cols" or "rows"
|
||||||
local orientation = string.upper(uneven or "DOWN")
|
if mode == "rows" then
|
||||||
local mode = (orientation == "LEFT" or orientation == "RIGHT") and "cols" or "rows"
|
cols = math.max(1, math.min(cols, barsize))
|
||||||
if mode == "rows" then
|
rows = math.max(1, math.ceil(barsize / cols))
|
||||||
cols = math.max(1, math.min(cols, barsize))
|
else
|
||||||
rows = math.max(1, math.ceil(barsize / cols))
|
rows = math.max(1, math.min(rows, barsize))
|
||||||
else
|
cols = math.max(1, math.ceil(barsize / rows))
|
||||||
rows = math.max(1, math.min(rows, barsize))
|
|
||||||
cols = math.max(1, math.ceil(barsize / rows))
|
|
||||||
end
|
|
||||||
return cols, rows, mode, orientation
|
|
||||||
end
|
end
|
||||||
local index = pfUI.api.BarLayoutFormfactor(layout)
|
return cols, rows, mode, orientation
|
||||||
if not index then return nil end
|
|
||||||
local cols, rows = unpack(pfGridmath[barsize][index])
|
|
||||||
return cols, rows, "rows", "DOWN"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- [ Bar Layout Size ] --
|
-- [ Bar Layout Size ] --
|
||||||
@@ -1434,7 +1411,6 @@ end
|
|||||||
function pfUI.api.BarLayoutSize(bar,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
function pfUI.api.BarLayoutSize(bar,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
||||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutSize: barsize "..tostring(barsize).." is invalid")
|
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutSize: barsize "..tostring(barsize).." is invalid")
|
||||||
local cols, rows = ResolveBarLayout(barsize, formfactor, uneven)
|
local cols, rows = ResolveBarLayout(barsize, formfactor, uneven)
|
||||||
if not cols or not rows then cols, rows = unpack(pfGridmath[barsize][1]) end
|
|
||||||
local width = (iconsize + bordersize*2+padding) * cols + padding
|
local width = (iconsize + bordersize*2+padding) * cols + padding
|
||||||
local height = (iconsize + bordersize*2+padding) * rows + padding
|
local height = (iconsize + bordersize*2+padding) * rows + padding
|
||||||
bar._size = {width,height}
|
bar._size = {width,height}
|
||||||
@@ -1452,9 +1428,6 @@ end
|
|||||||
function pfUI.api.BarButtonAnchor(button,basename,buttonindex,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
function pfUI.api.BarButtonAnchor(button,basename,buttonindex,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
||||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarButtonAnchor: barsize "..tostring(barsize).." is invalid")
|
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarButtonAnchor: barsize "..tostring(barsize).." is invalid")
|
||||||
local cols, rows, mode, orientation = ResolveBarLayout(barsize, formfactor, uneven)
|
local cols, rows, mode, orientation = ResolveBarLayout(barsize, formfactor, uneven)
|
||||||
if not cols or not rows then
|
|
||||||
cols, rows, mode, orientation = unpack(pfGridmath[barsize][1]), "rows", "DOWN"
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fillmode: remap buttonindex to slotindex (grid position in native fill order)
|
-- fillmode: remap buttonindex to slotindex (grid position in native fill order)
|
||||||
-- only needed when fill direction differs from layout mode
|
-- only needed when fill direction differs from layout mode
|
||||||
|
|||||||
@@ -171,7 +171,6 @@ function pfUI:LoadConfig()
|
|||||||
pfUI:UpdateConfig("appearance", "bags", "newitem_color", "1,1,1,1")
|
pfUI:UpdateConfig("appearance", "bags", "newitem_color", "1,1,1,1")
|
||||||
pfUI:UpdateConfig("appearance", "bags", "borderlimit", "1")
|
pfUI:UpdateConfig("appearance", "bags", "borderlimit", "1")
|
||||||
pfUI:UpdateConfig("appearance", "bags", "borderonlygear", "0")
|
pfUI:UpdateConfig("appearance", "bags", "borderonlygear", "0")
|
||||||
pfUI:UpdateConfig("appearance", "bags", "fulltext", "1")
|
|
||||||
pfUI:UpdateConfig("appearance", "bags", "movable", "0")
|
pfUI:UpdateConfig("appearance", "bags", "movable", "0")
|
||||||
pfUI:UpdateConfig("appearance", "bags", "abovechat", "0")
|
pfUI:UpdateConfig("appearance", "bags", "abovechat", "0")
|
||||||
pfUI:UpdateConfig("appearance", "bags", "hidechat", "0")
|
pfUI:UpdateConfig("appearance", "bags", "hidechat", "0")
|
||||||
|
|||||||
+36
-74
@@ -3,19 +3,19 @@ setfenv(1, pfUI:GetEnvironment())
|
|||||||
|
|
||||||
do -- statusbars
|
do -- statusbars
|
||||||
local animations = {}
|
local animations = {}
|
||||||
local stepsize, val
|
local stepsize
|
||||||
local width, height, point
|
|
||||||
|
|
||||||
-- ClassicAPI before v1.18.0 leaves the UI scale in the size of an anchored
|
-- native StatusBar methods the bar overrides
|
||||||
-- frame, so the bar has to divide it back out
|
local statusbar = CreateFrame("StatusBar")
|
||||||
local scaledsize = CLASSIC_API_VERSION < 11800
|
local SetValue, SetMinMaxValues = statusbar.SetValue, statusbar.SetMinMaxValues
|
||||||
|
local SetOrientation, SetFrameLevel = statusbar.SetOrientation, statusbar.SetFrameLevel
|
||||||
|
|
||||||
local animate = CreateFrame("Frame", "pfStatusBarAnimation", UIParent)
|
local animate = CreateFrame("Frame", "pfStatusBarAnimation", UIParent)
|
||||||
animate:SetScript("OnUpdate", function()
|
animate:SetScript("OnUpdate", function()
|
||||||
stepsize = tonumber(pfUI_config.unitframes.animation_speed)
|
stepsize = tonumber(pfUI_config.unitframes.animation_speed)
|
||||||
|
|
||||||
for bar in pairs(animations) do
|
for bar in pairs(animations) do
|
||||||
if not bar.val_ or abs(bar.val_ - bar.val) < stepsize or bar.instant then
|
if not bar.val_ or abs(bar.val_ - bar.val) < stepsize then
|
||||||
bar:DisplayValue(bar.val)
|
bar:DisplayValue(bar.val)
|
||||||
elseif bar.val ~= bar.val_ then
|
elseif bar.val ~= bar.val_ then
|
||||||
bar:DisplayValue(bar.val_ + min((bar.val-bar.val_) / stepsize, max(bar.val-bar.val_, 30 / GetFramerate())))
|
bar:DisplayValue(bar.val_ + min((bar.val-bar.val_) / stepsize, max(bar.val-bar.val_, 30 / GetFramerate())))
|
||||||
@@ -25,7 +25,8 @@ do -- statusbars
|
|||||||
|
|
||||||
local handlers = {
|
local handlers = {
|
||||||
["DisplayValue"] = function(self, val)
|
["DisplayValue"] = function(self, val)
|
||||||
val = Clamp(val, self.min, self.max)
|
local smin, smax = self:GetMinMaxValues()
|
||||||
|
val = Clamp(val, smin, smax)
|
||||||
|
|
||||||
-- remove animation queue
|
-- remove animation queue
|
||||||
if val == self.val_ then
|
if val == self.val_ then
|
||||||
@@ -34,53 +35,20 @@ do -- statusbars
|
|||||||
|
|
||||||
-- set current visible value
|
-- set current visible value
|
||||||
self.val_ = val
|
self.val_ = val
|
||||||
|
SetValue(self, val)
|
||||||
|
|
||||||
if self.mode == "vertical" then
|
-- the background fills the missing part, all of an empty range
|
||||||
height = self:GetHeight()
|
self.bg:SetValue(smax > smin and (smax - val) / (smax - smin) or 1)
|
||||||
if scaledsize then height = height / self:GetEffectiveScale() end
|
|
||||||
point = height / (self.max - self.min) * (val - self.min)
|
|
||||||
|
|
||||||
-- keep values in limits
|
|
||||||
point = Clamp(point, 0, height)
|
|
||||||
|
|
||||||
-- set point to zero if value and max is zero
|
|
||||||
if val == 0 then point = 0 end
|
|
||||||
|
|
||||||
-- set status bar position/size
|
|
||||||
self.bar:SetPoint("TOPLEFT", self, "TOPLEFT", 0, - height + point)
|
|
||||||
self.bar:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 0)
|
|
||||||
|
|
||||||
-- set background bar position/size
|
|
||||||
self.bg:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0)
|
|
||||||
self.bg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, point)
|
|
||||||
else
|
|
||||||
width = self:GetWidth()
|
|
||||||
if scaledsize then width = width / self:GetEffectiveScale() end
|
|
||||||
point = width / (self.max - self.min) * (val - self.min)
|
|
||||||
|
|
||||||
-- keep values in limits
|
|
||||||
point = Clamp(point, 0, width)
|
|
||||||
|
|
||||||
-- set point to zero if value and max is zero
|
|
||||||
if val == 0 then point = 0 end
|
|
||||||
|
|
||||||
-- set status bar position/size
|
|
||||||
self.bar:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0)
|
|
||||||
self.bar:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", - width + point, 0)
|
|
||||||
|
|
||||||
-- set background bar position/size
|
|
||||||
self.bg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 0)
|
|
||||||
self.bg:SetPoint("TOPLEFT", self, "TOPLEFT", point, 0)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetMinMaxValues"] = function(self, smin, smax, smooth)
|
["SetMinMaxValues"] = function(self, smin, smax, smooth)
|
||||||
-- smoothen the transition by keeping the value at the same percentage as before
|
-- smoothen the transition by keeping the value at the same percentage as before
|
||||||
if smooth and self.max and self.max > 0 and smax > 0 and self.max ~= smax then
|
local _, oldmax = self:GetMinMaxValues()
|
||||||
self.val_ = (self.val_ or self.val) / self.max * smax
|
if smooth and oldmax > 0 and smax > 0 and oldmax ~= smax then
|
||||||
|
self.val_ = (self.val_ or self.val) / oldmax * smax
|
||||||
end
|
end
|
||||||
|
|
||||||
self.min, self.max = smin, smax
|
SetMinMaxValues(self, smin, smax)
|
||||||
self:DisplayValue(self.val_ or self.val)
|
self:DisplayValue(self.val_ or self.val)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@@ -93,41 +61,35 @@ do -- statusbars
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetStatusBarTexture"] = function(self, r, g, b, a)
|
|
||||||
self.bar:SetTexture(r, g, b, a)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["SetStatusBarColor"] = function(self, r, g, b, a)
|
|
||||||
self.bar:SetVertexColor(r, g, b, a)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["SetStatusBarBackgroundTexture"] = function(self, r, g, b, a)
|
|
||||||
self.bg:SetTexture(r, g, b, a)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["SetStatusBarBackgroundColor"] = function(self, r, g, b, a)
|
["SetStatusBarBackgroundColor"] = function(self, r, g, b, a)
|
||||||
self.bg:SetVertexColor(r, g, b, a)
|
self.bg:SetColorFill(r, g, b, a)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetOrientation"] = function(self, mode)
|
["SetOrientation"] = function(self, orientation)
|
||||||
self.mode = strlower(mode)
|
SetOrientation(self, orientation)
|
||||||
|
self.bg:SetOrientation(orientation)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- the background stays one level below the fill, under anything else
|
||||||
|
-- drawn on the fill's frame
|
||||||
|
["SetFrameLevel"] = function(self, level)
|
||||||
|
SetFrameLevel(self, level)
|
||||||
|
self.bg:SetFrameLevel(level - 1)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
function pfUI.api.CreateStatusBar(name, parent)
|
function pfUI.api.CreateStatusBar(name, parent)
|
||||||
local f = CreateFrame("Button", name, parent)
|
local f = CreateFrame("StatusBar", name, parent)
|
||||||
f:EnableMouse(false)
|
SetMinMaxValues(f, 0, 100)
|
||||||
|
SetValue(f, 0)
|
||||||
|
f.val = 0
|
||||||
|
|
||||||
f.bar = f:CreateTexture(nil, "NORMAL")
|
f.bg = CreateFrame("StatusBar", nil, f)
|
||||||
f.bar:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0)
|
f.bg:SetFrameLevel(f:GetFrameLevel() - 1)
|
||||||
f.bar:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0)
|
f.bg:SetAllPoints(f)
|
||||||
|
f.bg:SetReverseFill(true)
|
||||||
f.bg = f:CreateTexture(nil, "BACKGROUND")
|
f.bg:SetMinMaxValues(0, 1)
|
||||||
f.bg:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0)
|
f.bg:SetValue(1)
|
||||||
f.bg:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0)
|
|
||||||
|
|
||||||
-- set some default values
|
|
||||||
f.min, f.max, f.val = 0, 100, 0
|
|
||||||
|
|
||||||
-- add all handler functions to the object
|
-- add all handler functions to the object
|
||||||
for name, func in pairs(handlers) do
|
for name, func in pairs(handlers) do
|
||||||
|
|||||||
+57
-40
@@ -235,7 +235,50 @@ function pfUI.api.GetUnitStats(unitstr)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local aggrodata = { }
|
local aggrodata = { }
|
||||||
local aggroScan = nil -- static { u, t, tt } triples, built once so the hot scan allocates nothing
|
|
||||||
|
-- every unit whose target or target's target UnitHasAggro checks, as static
|
||||||
|
-- { u, t, tt } triples so the hot scan allocates nothing
|
||||||
|
local aggroScan = { }
|
||||||
|
do
|
||||||
|
local function add(u)
|
||||||
|
local t = u .. "target"
|
||||||
|
table.insert(aggroScan, { u = u, t = t, tt = t .. "target" })
|
||||||
|
end
|
||||||
|
|
||||||
|
add("pet")
|
||||||
|
add("player")
|
||||||
|
add("target")
|
||||||
|
add("mouseover")
|
||||||
|
|
||||||
|
add("focus")
|
||||||
|
add("focustarget")
|
||||||
|
add("focustargettarget")
|
||||||
|
|
||||||
|
add("pettarget")
|
||||||
|
add("playertarget")
|
||||||
|
add("targettarget")
|
||||||
|
add("mouseovertarget")
|
||||||
|
add("targettargettarget")
|
||||||
|
|
||||||
|
for i=1,4 do
|
||||||
|
add("party" .. i)
|
||||||
|
add("party" .. i .. "target")
|
||||||
|
add("partypet" .. i)
|
||||||
|
add("partypet" .. i .. "target")
|
||||||
|
end
|
||||||
|
|
||||||
|
for i=1,40 do
|
||||||
|
add("raid" .. i)
|
||||||
|
add("raid" .. i .. "target")
|
||||||
|
|
||||||
|
add("raidpet" .. i)
|
||||||
|
add("raidpet" .. i .. "target")
|
||||||
|
|
||||||
|
add("nameplate" .. i)
|
||||||
|
add("nameplate" .. i .. "target")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function pfUI.api.UnitHasAggro(unit)
|
function pfUI.api.UnitHasAggro(unit)
|
||||||
local now = GetTime()
|
local now = GetTime()
|
||||||
local data = aggrodata[unit]
|
local data = aggrodata[unit]
|
||||||
@@ -250,16 +293,6 @@ function pfUI.api.UnitHasAggro(unit)
|
|||||||
data.state = 0
|
data.state = 0
|
||||||
|
|
||||||
if UnitExists(unit) and UnitIsFriend(unit, "player") then
|
if UnitExists(unit) and UnitIsFriend(unit, "player") then
|
||||||
-- pfValidUnits never changes after load, so precompute the "<u>target" /
|
|
||||||
-- "<u>targettarget" token strings once instead of concatenating per call.
|
|
||||||
if not aggroScan then
|
|
||||||
aggroScan = {}
|
|
||||||
for u in pairs(pfValidUnits) do
|
|
||||||
local t = u .. "target"
|
|
||||||
table.insert(aggroScan, { u = u, t = t, tt = t .. "target" })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for i = 1, table.getn(aggroScan) do
|
for i = 1, table.getn(aggroScan) do
|
||||||
local s = aggroScan[i]
|
local s = aggroScan[i]
|
||||||
if UnitExists(s.t) and UnitIsUnit(s.t, unit) and UnitCanAttack(s.u, unit) then
|
if UnitExists(s.t) and UnitIsUnit(s.t, unit) and UnitCanAttack(s.u, unit) then
|
||||||
@@ -349,11 +382,10 @@ function pfUI.uf:UpdateVisibility()
|
|||||||
|
|
||||||
-- this runs for every frame five times a second, so only touch the
|
-- this runs for every frame five times a second, so only touch the
|
||||||
-- attribute when the unit actually changed
|
-- attribute when the unit actually changed
|
||||||
local unitstr = (self.label or "") .. (self.id or "")
|
local unitstr = self.label .. self.id
|
||||||
local unit = unitstr ~= "" and unitstr or nil
|
if unitstr ~= self.unitstr then
|
||||||
if unit ~= self.unitstr then
|
self.unitstr = unitstr
|
||||||
self.unitstr = unit
|
self:SetAttribute("unit", unitstr)
|
||||||
self:SetAttribute("unit", unit)
|
|
||||||
end
|
end
|
||||||
-- anything but "show"/"hide" means "show if the unit exists"
|
-- anything but "show"/"hide" means "show if the unit exists"
|
||||||
local visibility = "exists"
|
local visibility = "exists"
|
||||||
@@ -395,9 +427,7 @@ function pfUI.uf:UpdateVisibility()
|
|||||||
self:RegisterUnitEvents(visibility ~= "hide" and self.unitstr or nil)
|
self:RegisterUnitEvents(visibility ~= "hide" and self.unitstr or nil)
|
||||||
|
|
||||||
-- vanilla visibility
|
-- vanilla visibility
|
||||||
if self.unitname then
|
if visibility == "hide" then
|
||||||
self:Show()
|
|
||||||
elseif visibility == "hide" then
|
|
||||||
self:Hide()
|
self:Hide()
|
||||||
elseif visibility == "show" then
|
elseif visibility == "show" then
|
||||||
self:Show()
|
self:Show()
|
||||||
@@ -508,6 +538,8 @@ function pfUI.uf:UpdateConfig()
|
|||||||
if tonumber(f.config.height) < 0 then f.hp:Hide() end
|
if tonumber(f.config.height) < 0 then f.hp:Hide() end
|
||||||
pfUI.api.CreateBackdrop(f.hp, default_border)
|
pfUI.api.CreateBackdrop(f.hp, default_border)
|
||||||
|
|
||||||
|
-- one level above the backdrop for the bar's background, one more for its fill
|
||||||
|
f.hp.bar:SetFrameLevel(f.hp.backdrop:GetFrameLevel() + 2)
|
||||||
f.hp.bar:SetStatusBarTexture(pfUI.media[f.config.bartexture])
|
f.hp.bar:SetStatusBarTexture(pfUI.media[f.config.bartexture])
|
||||||
f.hp.bar:SetAllPoints(f.hp)
|
f.hp.bar:SetAllPoints(f.hp)
|
||||||
if f.config.verticalbar == "1" then
|
if f.config.verticalbar == "1" then
|
||||||
@@ -522,7 +554,7 @@ function pfUI.uf:UpdateConfig()
|
|||||||
if custombg == "1" then
|
if custombg == "1" then
|
||||||
local cr, cg, cb, ca = GetStringColor(custombgcolor)
|
local cr, cg, cb, ca = GetStringColor(custombgcolor)
|
||||||
cr, cg, cb, ca = tonumber(cr), tonumber(cg), tonumber(cb), tonumber(ca)
|
cr, cg, cb, ca = tonumber(cr), tonumber(cg), tonumber(cb), tonumber(ca)
|
||||||
f.hp.bar:SetStatusBarBackgroundTexture(cr,cg,cb,ca)
|
f.hp.bar:SetStatusBarBackgroundColor(cr,cg,cb,ca)
|
||||||
end
|
end
|
||||||
|
|
||||||
f.power:ClearAllPoints()
|
f.power:ClearAllPoints()
|
||||||
@@ -531,7 +563,7 @@ function pfUI.uf:UpdateConfig()
|
|||||||
if tonumber(f.config.pheight) < 0 then f.power:Hide() end
|
if tonumber(f.config.pheight) < 0 then f.power:Hide() end
|
||||||
|
|
||||||
pfUI.api.CreateBackdrop(f.power, default_border)
|
pfUI.api.CreateBackdrop(f.power, default_border)
|
||||||
f.power.bar:SetFrameLevel(f.power.backdrop:GetFrameLevel() + 1)
|
f.power.bar:SetFrameLevel(f.power.backdrop:GetFrameLevel() + 2)
|
||||||
f.power.bar:SetStatusBarTexture(pfUI.media[f.config.pbartexture])
|
f.power.bar:SetStatusBarTexture(pfUI.media[f.config.pbartexture])
|
||||||
f.power.bar:SetAllPoints(f.power)
|
f.power.bar:SetAllPoints(f.power)
|
||||||
|
|
||||||
@@ -541,7 +573,7 @@ function pfUI.uf:UpdateConfig()
|
|||||||
if custompbg == "1" then
|
if custompbg == "1" then
|
||||||
local cr, cg, cb, ca = GetStringColor(custompbgcolor)
|
local cr, cg, cb, ca = GetStringColor(custompbgcolor)
|
||||||
cr, cg, cb, ca = tonumber(cr), tonumber(cg), tonumber(cb), tonumber(ca)
|
cr, cg, cb, ca = tonumber(cr), tonumber(cg), tonumber(cb), tonumber(ca)
|
||||||
f.power.bar:SetStatusBarBackgroundTexture(cr,cg,cb,ca)
|
f.power.bar:SetStatusBarBackgroundColor(cr,cg,cb,ca)
|
||||||
end
|
end
|
||||||
|
|
||||||
local fontname, fontsize, fontstyle
|
local fontname, fontsize, fontstyle
|
||||||
@@ -1244,8 +1276,6 @@ function pfUI.uf.OnUpdate()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not this.label or this.label == "" then return end
|
|
||||||
|
|
||||||
-- update portrait on first visible frame
|
-- update portrait on first visible frame
|
||||||
if this.portrait and this.portrait.model and this.portrait.model.update then
|
if this.portrait and this.portrait.model and this.portrait.model.update then
|
||||||
this.portrait.model.lastUnit = UnitName(this.portrait.model.update)
|
this.portrait.model.lastUnit = UnitName(this.portrait.model.update)
|
||||||
@@ -1332,11 +1362,7 @@ end
|
|||||||
-- ============================================================
|
-- ============================================================
|
||||||
|
|
||||||
function pfUI.uf.OnClick()
|
function pfUI.uf.OnClick()
|
||||||
if not this.label and this.unitname then
|
pfUI.uf:ClickAction(arg1)
|
||||||
TargetByName(this.unitname, true)
|
|
||||||
else
|
|
||||||
pfUI.uf:ClickAction(arg1)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function pfUI.uf:ClickAction(button)
|
function pfUI.uf:ClickAction(button)
|
||||||
@@ -1433,13 +1459,6 @@ function pfUI.uf:CreateUnitFrame(unit, id, config, tick)
|
|||||||
f.config = config or pfUI_config.unitframes.fallback
|
f.config = config or pfUI_config.unitframes.fallback
|
||||||
f.tick = tick
|
f.tick = tick
|
||||||
|
|
||||||
-- disable events for unknown unitstrings
|
|
||||||
if not pfValidUnits[strlower(unit) .. id] then
|
|
||||||
f.unitname = unit
|
|
||||||
f.label, f.id = "", ""
|
|
||||||
f.RegisterEvent = function() return end
|
|
||||||
end
|
|
||||||
|
|
||||||
CreateBackdropShadow(f)
|
CreateBackdropShadow(f)
|
||||||
|
|
||||||
f.hp = CreateFrame("Frame",nil, f)
|
f.hp = CreateFrame("Frame",nil, f)
|
||||||
@@ -1490,7 +1509,7 @@ function pfUI.uf:CreateUnitFrame(unit, id, config, tick)
|
|||||||
|
|
||||||
f.incHeal = CreateFrame("Frame", nil, f.hp)
|
f.incHeal = CreateFrame("Frame", nil, f.hp)
|
||||||
-- Texture lives on hp.bar for correct draw order:
|
-- Texture lives on hp.bar for correct draw order:
|
||||||
-- hp.bar.bg (BACKGROUND) < incHeal (BORDER) < hp.bar.bar (NORMAL)
|
-- hp.bar.bg (a level below) < incHeal (BORDER) < hp.bar's fill (ARTWORK)
|
||||||
f.incHeal.texture = f.hp.bar:CreateTexture(nil, "BORDER")
|
f.incHeal.texture = f.hp.bar:CreateTexture(nil, "BORDER")
|
||||||
f.incHeal.texture:SetAllPoints(f.incHeal)
|
f.incHeal.texture:SetAllPoints(f.incHeal)
|
||||||
-- Override Show/Hide since texture lives on hp.bar, not incHeal
|
-- Override Show/Hide since texture lives on hp.bar, not incHeal
|
||||||
@@ -1556,9 +1575,7 @@ function pfUI.uf:CreateUnitFrame(unit, id, config, tick)
|
|||||||
f:Hide()
|
f:Hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
if f.label ~= "" then
|
f:SetAttribute("unit", f.label .. f.id)
|
||||||
f:SetAttribute("unit", f.label .. f.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- register frame for clique
|
-- register frame for clique
|
||||||
_G.ClickCastFrames = ClickCastFrames or {}
|
_G.ClickCastFrames = ClickCastFrames or {}
|
||||||
|
|||||||
Vendored
-50
@@ -1,50 +0,0 @@
|
|||||||
-- barlength = {[formfactor]={cols, rows}}
|
|
||||||
pfGridmath = {
|
|
||||||
[1] = {{1,1}},
|
|
||||||
[2] = {{2,1},{1,2}},
|
|
||||||
[3] = {{3,1},{1,3}},
|
|
||||||
[4] = {{4,1},{2,2},{1,4}},
|
|
||||||
[5] = {{5,1},{1,5}},
|
|
||||||
[6] = {{6,1},{3,2},{2,3},{1,6}},
|
|
||||||
[7] = {{7,1},{1,7}},
|
|
||||||
[8] = {{8,1},{4,2},{2,4},{1,8}},
|
|
||||||
[9] = {{9,1},{3,3},{1,9}},
|
|
||||||
[10] = {{10,1},{5,2},{2,5},{1,10}},
|
|
||||||
[11] = {{11,1},{1,11}},
|
|
||||||
[12] = {{12,1},{6,2},{4,3},{3,4},{2,6},{1,12}}
|
|
||||||
}
|
|
||||||
|
|
||||||
-- list of valid unitstrings
|
|
||||||
pfValidUnits = {}
|
|
||||||
pfValidUnits["pet"] = true
|
|
||||||
pfValidUnits["player"] = true
|
|
||||||
pfValidUnits["target"] = true
|
|
||||||
pfValidUnits["mouseover"] = true
|
|
||||||
|
|
||||||
pfValidUnits["focus"] = true
|
|
||||||
pfValidUnits["focustarget"] = true
|
|
||||||
pfValidUnits["focustargettarget"] = true
|
|
||||||
|
|
||||||
pfValidUnits["pettarget"] = true
|
|
||||||
pfValidUnits["playertarget"] = true
|
|
||||||
pfValidUnits["targettarget"] = true
|
|
||||||
pfValidUnits["mouseovertarget"] = true
|
|
||||||
pfValidUnits["targettargettarget"] = true
|
|
||||||
|
|
||||||
for i=1,4 do
|
|
||||||
pfValidUnits["party" .. i] = true
|
|
||||||
pfValidUnits["party" .. i .. "target"] = true
|
|
||||||
pfValidUnits["partypet" .. i] = true
|
|
||||||
pfValidUnits["partypet" .. i .. "target"] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
for i=1,40 do
|
|
||||||
pfValidUnits["raid" .. i] = true
|
|
||||||
pfValidUnits["raid" .. i .. "target"] = true
|
|
||||||
|
|
||||||
pfValidUnits["raidpet" .. i] = true
|
|
||||||
pfValidUnits["raidpet" .. i .. "target"] = true
|
|
||||||
|
|
||||||
pfValidUnits["nameplate" .. i] = true
|
|
||||||
pfValidUnits["nameplate" .. i .. "target"] = true
|
|
||||||
end
|
|
||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["deDE"] = {
|
|||||||
["Enable Energy Ticks"] = nil,
|
["Enable Energy Ticks"] = nil,
|
||||||
["Enable Extended Guild Information"] = nil,
|
["Enable Extended Guild Information"] = nil,
|
||||||
["Enable Frame Shadow"] = nil,
|
["Enable Frame Shadow"] = nil,
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = nil,
|
["Enable Indicators"] = nil,
|
||||||
["Enable Item Quality Color For Equipment Only"] = nil,
|
["Enable Item Quality Color For Equipment Only"] = nil,
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
||||||
|
|||||||
Vendored
-1
@@ -290,7 +290,6 @@ pfUI_translation["enUS"] = {
|
|||||||
["Enable Energy Ticks"] = nil,
|
["Enable Energy Ticks"] = nil,
|
||||||
["Enable Extended Guild Information"] = nil,
|
["Enable Extended Guild Information"] = nil,
|
||||||
["Enable Frame Shadow"] = nil,
|
["Enable Frame Shadow"] = nil,
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = nil,
|
["Enable Indicators"] = nil,
|
||||||
["Enable Item Quality Color For Equipment Only"] = nil,
|
["Enable Item Quality Color For Equipment Only"] = nil,
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["esES"] = {
|
|||||||
["Enable Energy Ticks"] = "Activar tics de energía",
|
["Enable Energy Ticks"] = "Activar tics de energía",
|
||||||
["Enable Extended Guild Information"] = "Activar información de hermandad extendida",
|
["Enable Extended Guild Information"] = "Activar información de hermandad extendida",
|
||||||
["Enable Frame Shadow"] = "Activar sombra del marco",
|
["Enable Frame Shadow"] = "Activar sombra del marco",
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = "Activar indicadores",
|
["Enable Indicators"] = "Activar indicadores",
|
||||||
["Enable Item Quality Color For Equipment Only"] = "Mostrar el color de calidad de objetos solo para equipo",
|
["Enable Item Quality Color For Equipment Only"] = "Mostrar el color de calidad de objetos solo para equipo",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "Activar ventana de chat \"Botín y spam\"",
|
["Enable \"Loot & Spam\" Chat Window"] = "Activar ventana de chat \"Botín y spam\"",
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["frFR"] = {
|
|||||||
["Enable Energy Ticks"] = "Activer la barre de rechargement d'énergie",
|
["Enable Energy Ticks"] = "Activer la barre de rechargement d'énergie",
|
||||||
["Enable Extended Guild Information"] = "Activer les informations de guilde étendues",
|
["Enable Extended Guild Information"] = "Activer les informations de guilde étendues",
|
||||||
["Enable Frame Shadow"] = "Activer l'ombre des cadres",
|
["Enable Frame Shadow"] = "Activer l'ombre des cadres",
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = "Activer les indicateurs",
|
["Enable Indicators"] = "Activer les indicateurs",
|
||||||
["Enable Item Quality Color For Equipment Only"] = "Activer la couleur de la qualité des objets seulement sur les pièces d'équipement",
|
["Enable Item Quality Color For Equipment Only"] = "Activer la couleur de la qualité des objets seulement sur les pièces d'équipement",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "Activer la fenêtre de chat \"Butins & Spam\"",
|
["Enable \"Loot & Spam\" Chat Window"] = "Activer la fenêtre de chat \"Butins & Spam\"",
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["koKR"] = {
|
|||||||
["Enable Energy Ticks"] = "Energy Ticks 활성화",
|
["Enable Energy Ticks"] = "Energy Ticks 활성화",
|
||||||
["Enable Extended Guild Information"] = "길드 정보 확장 사용",
|
["Enable Extended Guild Information"] = "길드 정보 확장 사용",
|
||||||
["Enable Frame Shadow"] = nil,
|
["Enable Frame Shadow"] = nil,
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = nil,
|
["Enable Indicators"] = nil,
|
||||||
["Enable Item Quality Color For Equipment Only"] = "착용장비 전용 아이템품질 색상 활성화",
|
["Enable Item Quality Color For Equipment Only"] = "착용장비 전용 아이템품질 색상 활성화",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "\"루팅 & 스팜\"채팅 창 사용",
|
["Enable \"Loot & Spam\" Chat Window"] = "\"루팅 & 스팜\"채팅 창 사용",
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["ruRU"] = {
|
|||||||
["Enable Energy Ticks"] = "Включить восполнение энергии",
|
["Enable Energy Ticks"] = "Включить восполнение энергии",
|
||||||
["Enable Extended Guild Information"] = "Включить расширенную информацию о гильдии",
|
["Enable Extended Guild Information"] = "Включить расширенную информацию о гильдии",
|
||||||
["Enable Frame Shadow"] = "Включить тень окон",
|
["Enable Frame Shadow"] = "Включить тень окон",
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = "Включить индикаторы",
|
["Enable Indicators"] = "Включить индикаторы",
|
||||||
["Enable Item Quality Color For Equipment Only"] = "Включить цвет качества предметов только для экипировки",
|
["Enable Item Quality Color For Equipment Only"] = "Включить цвет качества предметов только для экипировки",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "Включить окно чата \"Добыча & Спам\"",
|
["Enable \"Loot & Spam\" Chat Window"] = "Включить окно чата \"Добыча & Спам\"",
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["zhCN"] = {
|
|||||||
["Enable Energy Ticks"] = "显示能量刻度",
|
["Enable Energy Ticks"] = "显示能量刻度",
|
||||||
["Enable Extended Guild Information"] = "公会信息扩展显示",
|
["Enable Extended Guild Information"] = "公会信息扩展显示",
|
||||||
["Enable Frame Shadow"] = "启用框架阴影",
|
["Enable Frame Shadow"] = "启用框架阴影",
|
||||||
["Enable Full-Text Search"] = "启用全文搜索",
|
|
||||||
["Enable Indicators"] = "启用指示器",
|
["Enable Indicators"] = "启用指示器",
|
||||||
["Enable Item Quality Color For Equipment Only"] = "仅在装备上显示品质颜色",
|
["Enable Item Quality Color For Equipment Only"] = "仅在装备上显示品质颜色",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "启用[拾取、综合]聊天窗口",
|
["Enable \"Loot & Spam\" Chat Window"] = "启用[拾取、综合]聊天窗口",
|
||||||
|
|||||||
Vendored
-1
@@ -281,7 +281,6 @@ pfUI_translation["zhTW"] = {
|
|||||||
["Enable Energy Ticks"] = "顯示能量刻度",
|
["Enable Energy Ticks"] = "顯示能量刻度",
|
||||||
["Enable Extended Guild Information"] = "公會資訊擴展顯示",
|
["Enable Extended Guild Information"] = "公會資訊擴展顯示",
|
||||||
["Enable Frame Shadow"] = "啟用框架陰影",
|
["Enable Frame Shadow"] = "啟用框架陰影",
|
||||||
["Enable Full-Text Search"] = nil,
|
|
||||||
["Enable Indicators"] = nil,
|
["Enable Indicators"] = nil,
|
||||||
["Enable Item Quality Color For Equipment Only"] = "僅在裝備上顯示品質顏色",
|
["Enable Item Quality Color For Equipment Only"] = "僅在裝備上顯示品質顏色",
|
||||||
["Enable \"Loot & Spam\" Chat Window"] = "啟用[拾取、綜合]聊天視窗",
|
["Enable \"Loot & Spam\" Chat Window"] = "啟用[拾取、綜合]聊天視窗",
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
<Include file="..\env\locales_esES.lua"/>
|
<Include file="..\env\locales_esES.lua"/>
|
||||||
<Include file="..\env\locales_ruRU.lua"/>
|
<Include file="..\env\locales_ruRU.lua"/>
|
||||||
|
|
||||||
<Include file="..\env\tables.lua"/>
|
|
||||||
<Include file="..\env\profiles.lua"/>
|
<Include file="..\env\profiles.lua"/>
|
||||||
|
|
||||||
<Include file="..\env\translations_enUS.lua"/>
|
<Include file="..\env\translations_enUS.lua"/>
|
||||||
|
|||||||
+6
-4
@@ -482,13 +482,15 @@ function libpredict:ParseChatMessage(sender, msg, comm)
|
|||||||
if cmd and ctratarget and cmd == "RES" and ctratarget ~= "" and ctratarget ~= UNKNOWN then
|
if cmd and ctratarget and cmd == "RES" and ctratarget ~= "" and ctratarget ~= UNKNOWN then
|
||||||
msgtype = "Ress"
|
msgtype = "Ress"
|
||||||
target = ctratarget
|
target = ctratarget
|
||||||
|
elseif cmd == "RESNO" then
|
||||||
|
msgtype = "RessStop"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if msgtype == "Stop" and sender then
|
if msgtype == "Stop" and sender then
|
||||||
libpredict:HealStop(sender)
|
libpredict:HealStop(sender)
|
||||||
return
|
return
|
||||||
elseif ( msg == "RessStop" or msg == "RESNO" ) and sender then
|
elseif msgtype == "RessStop" and sender then
|
||||||
libpredict:RessStop(sender)
|
libpredict:RessStop(sender)
|
||||||
return
|
return
|
||||||
elseif msgtype == "Delay" and time then
|
elseif msgtype == "Delay" and time then
|
||||||
@@ -834,7 +836,6 @@ local pendingHots = {}
|
|||||||
|
|
||||||
-- Gather Data by User Actions
|
-- Gather Data by User Actions
|
||||||
hooksecurefunc("CastSpell", function(id, bookType)
|
hooksecurefunc("CastSpell", function(id, bookType)
|
||||||
if not libpredict.sender.enabled then return end
|
|
||||||
local effect, rank = libspell.GetSpellInfo(id, bookType)
|
local effect, rank = libspell.GetSpellInfo(id, bookType)
|
||||||
if not effect then return end
|
if not effect then return end
|
||||||
spell_queue[1] = effect
|
spell_queue[1] = effect
|
||||||
@@ -887,7 +888,6 @@ hooksecurefunc("CastSpell", function(id, bookType)
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
hooksecurefunc("CastSpellByName", function(effect, target)
|
hooksecurefunc("CastSpellByName", function(effect, target)
|
||||||
if not libpredict.sender.enabled then return end
|
|
||||||
local effect, rank = libspell.GetSpellInfo(effect)
|
local effect, rank = libspell.GetSpellInfo(effect)
|
||||||
if not effect then return end
|
if not effect then return end
|
||||||
|
|
||||||
@@ -951,7 +951,6 @@ hooksecurefunc("CastSpellByName", function(effect, target)
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
hooksecurefunc("UseAction", function(slot, target, selfcast)
|
hooksecurefunc("UseAction", function(slot, target, selfcast)
|
||||||
if not libpredict.sender.enabled then return end
|
|
||||||
if not IsCurrentAction(slot) then return end
|
if not IsCurrentAction(slot) then return end
|
||||||
local kind, id = GetActionInfo(slot)
|
local kind, id = GetActionInfo(slot)
|
||||||
local effect, rank
|
local effect, rank
|
||||||
@@ -1012,8 +1011,10 @@ hooksecurefunc("UseAction", function(slot, target, selfcast)
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
libpredict.sender = CreateFrame("Frame", "pfPredictionSender", UIParent)
|
libpredict.sender = CreateFrame("Frame", "pfPredictionSender", UIParent)
|
||||||
|
-- cleared when a HealComm addon already broadcasts this player's casts
|
||||||
libpredict.sender.enabled = true
|
libpredict.sender.enabled = true
|
||||||
libpredict.sender.SendHealCommMsg = function(self, msg)
|
libpredict.sender.SendHealCommMsg = function(self, msg)
|
||||||
|
if not self.enabled then return end
|
||||||
-- Smart channel selection: Only send to relevant channel to avoid duplicates
|
-- Smart channel selection: Only send to relevant channel to avoid duplicates
|
||||||
if IsInRaid() then
|
if IsInRaid() then
|
||||||
-- In raid: Only send to RAID (includes all raid members)
|
-- In raid: Only send to RAID (includes all raid members)
|
||||||
@@ -1026,6 +1027,7 @@ libpredict.sender.SendHealCommMsg = function(self, msg)
|
|||||||
-- BG groups are handled by RAID channel
|
-- BG groups are handled by RAID channel
|
||||||
end
|
end
|
||||||
libpredict.sender.SendResCommMsg = function(self, msg)
|
libpredict.sender.SendResCommMsg = function(self, msg)
|
||||||
|
if not self.enabled then return end
|
||||||
-- Smart channel selection: Only send to relevant channel to avoid duplicates
|
-- Smart channel selection: Only send to relevant channel to avoid duplicates
|
||||||
if IsInRaid() then
|
if IsInRaid() then
|
||||||
-- In raid: Only send to RAID (includes all raid members)
|
-- In raid: Only send to RAID (includes all raid members)
|
||||||
|
|||||||
+1
-14
@@ -382,8 +382,6 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
end
|
end
|
||||||
elseif self.spellID then
|
elseif self.spellID then
|
||||||
GameTooltip:SetSpellByID(self.spellID)
|
GameTooltip:SetSpellByID(self.spellID)
|
||||||
elseif self.spellslot and self.booktype then
|
|
||||||
GameTooltip:SetSpell(self.spellslot, self.booktype)
|
|
||||||
else
|
else
|
||||||
GameTooltip:SetAction(self.id)
|
GameTooltip:SetAction(self.id)
|
||||||
end
|
end
|
||||||
@@ -456,11 +454,6 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
id = self.bar == 1 and self.slot or sid-((self.bar)-1)*12
|
id = self.bar == 1 and self.slot or sid-((self.bar)-1)*12
|
||||||
end
|
end
|
||||||
|
|
||||||
-- overwrite with spell macro texture where possible
|
|
||||||
if self.spellslot and self.booktype then
|
|
||||||
texture = GetSpellTexture(self.spellslot, self.booktype)
|
|
||||||
end
|
|
||||||
|
|
||||||
if not self.showempty and self.backdrop and not texture and grid == 0 then
|
if not self.showempty and self.backdrop and not texture and grid == 0 then
|
||||||
self.backdrop:Hide()
|
self.backdrop:Hide()
|
||||||
self.hide = true
|
self.hide = true
|
||||||
@@ -590,9 +583,6 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
start, duration, enable = GetShapeshiftFormCooldown(button.id)
|
start, duration, enable = GetShapeshiftFormCooldown(button.id)
|
||||||
elseif button.bar == 12 then
|
elseif button.bar == 12 then
|
||||||
start, duration, enable = GetPetActionCooldown(button.id)
|
start, duration, enable = GetPetActionCooldown(button.id)
|
||||||
elseif button.spellslot and button.booktype then
|
|
||||||
start, duration = GetSpellCooldown(button.spellslot, button.booktype)
|
|
||||||
enable = 1
|
|
||||||
else
|
else
|
||||||
start, duration, enable = GetActionCooldown(button.id)
|
start, duration, enable = GetActionCooldown(button.id)
|
||||||
end
|
end
|
||||||
@@ -1150,8 +1140,6 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
f.count:SetJustifyH("RIGHT")
|
f.count:SetJustifyH("RIGHT")
|
||||||
f.count:SetJustifyV("BOTTOM")
|
f.count:SetJustifyV("BOTTOM")
|
||||||
|
|
||||||
f.scanmacro, f.spellslot, f.booktype = nil, nil, nil
|
|
||||||
|
|
||||||
-- range glow color
|
-- range glow color
|
||||||
f.rangeColor = GetStringColorObject(C.bars.rangecolor)
|
f.rangeColor = GetStringColorObject(C.bars.rangecolor)
|
||||||
|
|
||||||
@@ -1218,8 +1206,7 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- the stored layout is invalid, temporary fallback
|
-- the stored layout is invalid, temporary fallback
|
||||||
local _, _, fcols, frows = string.find(tostring(formfactor or ""), "(%d+)%s*x%s*(%d+)")
|
if not fcols2 or not frows2 then
|
||||||
if not ((fcols and frows) or pfGridmath[buttons][BarLayoutFormfactor(formfactor)]) then
|
|
||||||
formfactor = BarLayoutOptions(buttons)[1]
|
formfactor = BarLayoutOptions(buttons)[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+29
-55
@@ -6,8 +6,6 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
[1804] = {frame="picklock"},
|
[1804] = {frame="picklock"},
|
||||||
}
|
}
|
||||||
|
|
||||||
local scanner = libtipscan:GetScanner("input_search")
|
|
||||||
|
|
||||||
local function BagSortOpts()
|
local function BagSortOpts()
|
||||||
return {
|
return {
|
||||||
reverse = C.appearance.bags.sortreverse == "1",
|
reverse = C.appearance.bags.sortreverse == "1",
|
||||||
@@ -95,6 +93,7 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED")
|
pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED")
|
||||||
pfUI.bag:RegisterEvent("SPELLS_CHANGED")
|
pfUI.bag:RegisterEvent("SPELLS_CHANGED")
|
||||||
pfUI.bag:RegisterEvent("MERCHANT_CLOSED")
|
pfUI.bag:RegisterEvent("MERCHANT_CLOSED")
|
||||||
|
pfUI.bag:RegisterEvent("INVENTORY_SEARCH_UPDATE")
|
||||||
|
|
||||||
pfUI.bag.delay = { UpdateBag = {} }
|
pfUI.bag.delay = { UpdateBag = {} }
|
||||||
|
|
||||||
@@ -122,6 +121,11 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
pfUI.bag:UpdateItemLock()
|
pfUI.bag:UpdateItemLock()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if this.delay.UpdateSearch then
|
||||||
|
this.delay.UpdateSearch = nil
|
||||||
|
pfUI.bag:UpdateSearch()
|
||||||
|
end
|
||||||
|
|
||||||
for bag in pairs(this.delay.UpdateBag) do
|
for bag in pairs(this.delay.UpdateBag) do
|
||||||
this.delay.UpdateBag[bag] = nil
|
this.delay.UpdateBag[bag] = nil
|
||||||
pfUI.bag:UpdateBag(bag)
|
pfUI.bag:UpdateBag(bag)
|
||||||
@@ -159,6 +163,10 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
this.delay.UpdateItemLock = true
|
this.delay.UpdateItemLock = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if event == "INVENTORY_SEARCH_UPDATE" then
|
||||||
|
this.delay.UpdateSearch = true
|
||||||
|
end
|
||||||
|
|
||||||
if event == "PLAYERBANKSLOTS_CHANGED" then
|
if event == "PLAYERBANKSLOTS_CHANGED" then
|
||||||
this.delay.UpdateBag[-1] = true
|
this.delay.UpdateBag[-1] = true
|
||||||
end
|
end
|
||||||
@@ -377,6 +385,21 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- dim the slots that the bag search (C_Container.SetItemSearch) filters out
|
||||||
|
local searchInfo = {}
|
||||||
|
function pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||||
|
local info = C_Container.GetContainerItemInfo(bag, slot, searchInfo)
|
||||||
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(info and info.isFiltered and .25 or 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pfUI.bag:UpdateSearch()
|
||||||
|
for bag = -2, 11 do
|
||||||
|
for slot in ipairs(pfUI.bags[bag].slots) do
|
||||||
|
pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function pfUI.bag:UpdateSlot(bag, slot)
|
function pfUI.bag:UpdateSlot(bag, slot)
|
||||||
if not pfUI.bags[bag] then return end
|
if not pfUI.bags[bag] then return end
|
||||||
|
|
||||||
@@ -465,6 +488,7 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture)
|
SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture)
|
||||||
SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count)
|
SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count)
|
||||||
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5)
|
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5)
|
||||||
|
pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||||
|
|
||||||
local hasItem = texture and 1 or nil
|
local hasItem = texture and 1 or nil
|
||||||
pfUI.bags[bag].slots[slot].frame.hasItem = hasItem
|
pfUI.bags[bag].slots[slot].frame.hasItem = hasItem
|
||||||
@@ -1010,7 +1034,6 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
-- bag search
|
-- bag search
|
||||||
if not frame.search then
|
if not frame.search then
|
||||||
frame.search = CreateFrame("Frame", "pfBagSearch", frame)
|
frame.search = CreateFrame("Frame", "pfBagSearch", frame)
|
||||||
frame.search.db = {}
|
|
||||||
frame.search:SetHeight(12)
|
frame.search:SetHeight(12)
|
||||||
frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border)
|
frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border)
|
||||||
frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border)
|
frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border)
|
||||||
@@ -1035,51 +1058,12 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
|
|
||||||
frame.search.edit:SetScript("OnEditFocusLost", function()
|
frame.search.edit:SetScript("OnEditFocusLost", function()
|
||||||
this:SetText(T["Search"])
|
this:SetText(T["Search"])
|
||||||
for bag=-2, 11 do
|
C_Container.SetItemSearch("")
|
||||||
local bagsize = GetContainerNumSlots(bag)
|
|
||||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
||||||
for slot=1, bagsize do
|
|
||||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
frame.search.edit:SetScript("OnTextChanged", function()
|
frame.search.edit:SetScript("OnTextChanged", function()
|
||||||
if this:GetText() == T["Search"] then return end
|
if this:GetText() == T["Search"] then return end
|
||||||
for bag=-2, 11 do
|
C_Container.SetItemSearch(this:GetText())
|
||||||
local bagsize = GetContainerNumSlots(bag)
|
|
||||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
||||||
for slot=1, bagsize do
|
|
||||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(.25)
|
|
||||||
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bag, slot)
|
|
||||||
if itemCount then
|
|
||||||
local itemLink = GetContainerItemLink(bag, slot)
|
|
||||||
local itemstring = string.sub(itemLink, string.find(itemLink, "%[")+1, string.find(itemLink, "%]")-1)
|
|
||||||
|
|
||||||
if C.appearance.bags.fulltext == "1" then
|
|
||||||
if not frame.search.db[itemLink] then
|
|
||||||
scanner:SetBagItem(bag, slot)
|
|
||||||
local text = scanner:Text()
|
|
||||||
|
|
||||||
local str = ""
|
|
||||||
for k, v in pairs(text) do
|
|
||||||
str = str .. (v[1] or "") .. (v[2] or "")
|
|
||||||
end
|
|
||||||
|
|
||||||
frame.search.db[itemLink] = strlower(str)
|
|
||||||
end
|
|
||||||
|
|
||||||
if strfind(frame.search.db[itemLink], strlower(this:GetText()), 1, true) then
|
|
||||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if strfind(strlower(itemstring), strlower(this:GetText()), 1, true) then
|
|
||||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
frame.search:SetScript("OnLeave", function()
|
frame.search:SetScript("OnLeave", function()
|
||||||
@@ -1094,17 +1078,7 @@ pfUI:RegisterModule("bags", function ()
|
|||||||
|
|
||||||
frame.search:SetScript("OnHide", function()
|
frame.search:SetScript("OnHide", function()
|
||||||
frame.search.edit:SetText(T["Search"])
|
frame.search.edit:SetText(T["Search"])
|
||||||
for bag = -2, 11 do
|
C_Container.SetItemSearch("")
|
||||||
if pfUI.bags[bag] then
|
|
||||||
local bagsize = GetContainerNumSlots(bag)
|
|
||||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
||||||
for slot = 1, bagsize do
|
|
||||||
if pfUI.bags[bag] and pfUI.bags[bag].slots[slot] then
|
|
||||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|||||||
+6
-11
@@ -150,8 +150,8 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
-- One-shot poll: read C_Spell for the bar's unit, stamp or clear. Called
|
-- One-shot poll: read C_Spell for the bar's unit, stamp or clear. Called
|
||||||
-- from event handlers (cast start, target/focus change), never per-frame.
|
-- from event handlers (cast start, target/focus change), never per-frame.
|
||||||
local function RefreshBar(cb, rank)
|
local function RefreshBar(cb, rank)
|
||||||
local query = cb.unitstr ~= "" and cb.unitstr or cb.unitname
|
local query = cb.unitstr
|
||||||
if not query or (cb.unitstr ~= "" and not UnitExists(cb.unitstr)) then
|
if not UnitExists(query) then
|
||||||
ClearBar(cb)
|
ClearBar(cb)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -178,7 +178,7 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function CreateCastbar(name, parent, unitstr, unitname)
|
local function CreateCastbar(name, parent, unitstr)
|
||||||
local cb = CreateFrame("Frame", name, parent or UIParent)
|
local cb = CreateFrame("Frame", name, parent or UIParent)
|
||||||
|
|
||||||
cb:SetHeight(C.global.font_size * 1.5)
|
cb:SetHeight(C.global.font_size * 1.5)
|
||||||
@@ -186,7 +186,6 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
cb:SetFrameLevel(8)
|
cb:SetFrameLevel(8)
|
||||||
|
|
||||||
cb.unitstr = unitstr
|
cb.unitstr = unitstr
|
||||||
cb.unitname = unitname
|
|
||||||
|
|
||||||
-- icon
|
-- icon
|
||||||
cb.icon = CreateFrame("Frame", nil, cb)
|
cb.icon = CreateFrame("Frame", nil, cb)
|
||||||
@@ -277,7 +276,7 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
|
|
||||||
-- Non-player bars: if the unit disappears (target died / detarget),
|
-- Non-player bars: if the unit disappears (target died / detarget),
|
||||||
-- drop the bar immediately.
|
-- drop the bar immediately.
|
||||||
if this.unitstr ~= "" and this.unitstr ~= "player" and not UnitExists(this.unitstr) then
|
if this.unitstr ~= "player" and not UnitExists(this.unitstr) then
|
||||||
ClearBar(this)
|
ClearBar(this)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -423,13 +422,12 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
-- endMs. delay is a positive magnitude; OnUpdate signs it "+" for casts
|
-- endMs. delay is a positive magnitude; OnUpdate signs it "+" for casts
|
||||||
-- and "-" for channels. Skipped during a tradeskill merge.
|
-- and "-" for channels. Skipped during a tradeskill merge.
|
||||||
if this.endTime and not this.tradeskillTotal then
|
if this.endTime and not this.tradeskillTotal then
|
||||||
local query = this.unitstr ~= "" and this.unitstr or this.unitname
|
|
||||||
local startMs, endMs
|
local startMs, endMs
|
||||||
if this.isChannel then
|
if this.isChannel then
|
||||||
local _, _, _, s, e = C_Spell.UnitChannelInfo(query)
|
local _, _, _, s, e = C_Spell.UnitChannelInfo(unit)
|
||||||
startMs, endMs = s, e
|
startMs, endMs = s, e
|
||||||
else
|
else
|
||||||
local _, _, _, s, e = C_Spell.UnitCastingInfo(query)
|
local _, _, _, s, e = C_Spell.UnitCastingInfo(unit)
|
||||||
startMs, endMs = s, e
|
startMs, endMs = s, e
|
||||||
end
|
end
|
||||||
if startMs and endMs then
|
if startMs and endMs then
|
||||||
@@ -544,9 +542,6 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
pfUI.castbar.focus:SetHeight(C.castbar.focus.height)
|
pfUI.castbar.focus:SetHeight(C.castbar.focus.height)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- bind castbar to the "focus" unit token; the GUID resolves at read time
|
|
||||||
pfUI.castbar.focus.unitstr = "focus"
|
|
||||||
|
|
||||||
UpdateMovable(pfUI.castbar.focus)
|
UpdateMovable(pfUI.castbar.focus)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
+5
-28
@@ -29,38 +29,15 @@ pfUI:RegisterModule("focus", function ()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
-- /focus and /clearfocus live in ClassicAPI's SlashCommandsRegistry now.
|
-- /focus and /clearfocus live in ClassicAPI's SlashCommandsRegistry now.
|
||||||
-- /focusname is pfUI-specific because the engine has no name→GUID
|
-- `/focus Name` takes the nearest prefix match; /focusname tries the exact
|
||||||
-- lookup for off-screen units — we resolve via a short target-swap.
|
-- name first, so "Bob" still wins over a nearer "Bobby".
|
||||||
|
|
||||||
pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg)
|
pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg)
|
||||||
if msg == "" then return end
|
if msg == "" then return end
|
||||||
|
|
||||||
local prevGUID = UnitGUID("target")
|
local unit = UnitTokenFromName(msg, true) or UnitTokenFromName(msg)
|
||||||
local prevPlayer = UnitIsUnit("target", "player")
|
if unit then
|
||||||
|
FocusUnit(unit)
|
||||||
-- Suppress async "Unknown unit" errors fired by TargetByName misses.
|
|
||||||
UIErrorsFrame:UnregisterEvent("UI_ERROR_MESSAGE")
|
|
||||||
|
|
||||||
-- Try exact match first, then prefix match via /target.
|
|
||||||
TargetByName(msg, true)
|
|
||||||
if not UnitExists("target") then
|
|
||||||
SlashCmdList.TARGET(msg)
|
|
||||||
end
|
|
||||||
|
|
||||||
if UnitExists("target") then
|
|
||||||
FocusUnit("target")
|
|
||||||
end
|
|
||||||
|
|
||||||
RunNextFrame(function()
|
|
||||||
UIErrorsFrame:RegisterEvent("UI_ERROR_MESSAGE")
|
|
||||||
end)
|
|
||||||
|
|
||||||
if prevGUID and prevGUID ~= "0x0000000000000000" then
|
|
||||||
TargetUnit(prevGUID)
|
|
||||||
elseif prevPlayer then
|
|
||||||
TargetUnit("player")
|
|
||||||
else
|
|
||||||
ClearTarget()
|
|
||||||
end
|
end
|
||||||
end, true)
|
end, true)
|
||||||
|
|
||||||
|
|||||||
@@ -2459,7 +2459,6 @@ pfUI:RegisterModule("gui", function ()
|
|||||||
CreateConfig(nil, T["Hide Chat When Bags Are Opened"], C.appearance.bags, "hidechat", "checkbox")
|
CreateConfig(nil, T["Hide Chat When Bags Are Opened"], C.appearance.bags, "hidechat", "checkbox")
|
||||||
CreateConfig(nil, T["Bagslots Per Row"], C.appearance.bags, "bagrowlength")
|
CreateConfig(nil, T["Bagslots Per Row"], C.appearance.bags, "bagrowlength")
|
||||||
CreateConfig(nil, T["Bankslots Per Row"], C.appearance.bags, "bankrowlength")
|
CreateConfig(nil, T["Bankslots Per Row"], C.appearance.bags, "bankrowlength")
|
||||||
CreateConfig(nil, T["Enable Full-Text Search"], C.appearance.bags, "fulltext")
|
|
||||||
CreateConfig(nil, T["Item Slot Size"], C.appearance.bags, "icon_size")
|
CreateConfig(nil, T["Item Slot Size"], C.appearance.bags, "icon_size")
|
||||||
CreateConfig(Reload, T["Reverse Cooldown Animation"], C.appearance.bags, "cooldown_reverse", "checkbox")
|
CreateConfig(Reload, T["Reverse Cooldown Animation"], C.appearance.bags, "cooldown_reverse", "checkbox")
|
||||||
CreateConfig(nil, T["Auto Sell Grey Items"], C.global, "autosell", "checkbox")
|
CreateConfig(nil, T["Auto Sell Grey Items"], C.global, "autosell", "checkbox")
|
||||||
|
|||||||
@@ -128,6 +128,51 @@ pfUI:RegisterModule("panel", function()
|
|||||||
GameTooltip:AddLine(" ")
|
GameTooltip:AddLine(" ")
|
||||||
GameTooltip:AddDoubleLine(T["Memory Usage"], "|cffffffff" .. memmb)
|
GameTooltip:AddDoubleLine(T["Memory Usage"], "|cffffffff" .. memmb)
|
||||||
GameTooltip:AddDoubleLine(T["Next Memory Cleanup"], "|cffffffff" .. gcmb)
|
GameTooltip:AddDoubleLine(T["Next Memory Cleanup"], "|cffffffff" .. gcmb)
|
||||||
|
-- AddOn memory usage (see MainMenuBarPerformanceBarFrame_OnEnter in MainMenuBar.lua)
|
||||||
|
|
||||||
|
local ADDON_MEM_KB_ABBR = _G.ADDON_MEM_KB_ABBR or "(%.0f KB) %s";
|
||||||
|
local ADDON_MEM_MB_ABBR = _G.ADDON_MEM_MB_ABBR or "(%.2f MB) %s";
|
||||||
|
local TOTAL_MEM_KB_ABBR = _G.TOTAL_MEM_KB_ABBR or "AddOn Memory: %.0f KB";
|
||||||
|
local TOTAL_MEM_MB_ABBR = _G.TOTAL_MEM_MB_ABBR or "AddOn Memory: %.2f MB";
|
||||||
|
|
||||||
|
|
||||||
|
UpdateAddOnMemoryUsage()
|
||||||
|
local totalMem = 0
|
||||||
|
local topAddOns = {}
|
||||||
|
for i = 1, GetNumAddOns() do
|
||||||
|
local mem = GetAddOnMemoryUsage(i)
|
||||||
|
if mem and mem > 0 then
|
||||||
|
totalMem = totalMem + mem
|
||||||
|
for j = 1, 3 do
|
||||||
|
if not topAddOns[j] or mem > topAddOns[j].value then
|
||||||
|
for k = 3, j + 1, -1 do
|
||||||
|
topAddOns[k] = topAddOns[k - 1]
|
||||||
|
end
|
||||||
|
topAddOns[j] = { value = mem, name = C_AddOns.GetAddOnName(i) }
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if totalMem > 0 then
|
||||||
|
local str
|
||||||
|
if totalMem > 1000 then
|
||||||
|
str = format(TOTAL_MEM_MB_ABBR, totalMem / 1000)
|
||||||
|
else
|
||||||
|
str = format(TOTAL_MEM_KB_ABBR, totalMem)
|
||||||
|
end
|
||||||
|
GameTooltip:AddLine(" ")
|
||||||
|
GameTooltip:AddLine(str, 1, 1, 1)
|
||||||
|
for i = 1, 3 do
|
||||||
|
if not topAddOns[i] then break end
|
||||||
|
if topAddOns[i].value > 1000 then
|
||||||
|
str = format(ADDON_MEM_MB_ABBR, topAddOns[i].value / 1000, topAddOns[i].name)
|
||||||
|
else
|
||||||
|
str = format(ADDON_MEM_KB_ABBR, topAddOns[i].value, topAddOns[i].name)
|
||||||
|
end
|
||||||
|
GameTooltip:AddLine(str, 1, 1, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
GameTooltip:AddLine(" ")
|
GameTooltip:AddLine(" ")
|
||||||
GameTooltip:AddDoubleLine(T["Network Down"], "|cffffffff" .. round(nin,1) .. "KB/s")
|
GameTooltip:AddDoubleLine(T["Network Down"], "|cffffffff" .. round(nin,1) .. "KB/s")
|
||||||
GameTooltip:AddDoubleLine(T["Network Up"], "|cffffffff" .. round(nout,1) .. "KB/s")
|
GameTooltip:AddDoubleLine(T["Network Up"], "|cffffffff" .. round(nout,1) .. "KB/s")
|
||||||
|
|||||||
@@ -1172,21 +1172,9 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
local EnableHealComm = function()
|
local EnableHealComm = function()
|
||||||
-- hook healcomm's addon message to parse single-player events
|
-- HealComm-1.0 already broadcasts this player's casts: keep libpredict
|
||||||
|
-- tracking them, but stop it sending a second copy
|
||||||
if AceLibrary and AceLibrary:HasInstance("HealComm-1.0") and pfUI.api.libpredict then
|
if AceLibrary and AceLibrary:HasInstance("HealComm-1.0") and pfUI.api.libpredict then
|
||||||
local HealComm = AceLibrary("HealComm-1.0")
|
|
||||||
|
|
||||||
-- use pfUI frames to draw healComm predictions
|
|
||||||
local pfHookHealCommSendAddonMessage = HealComm.SendAddonMessage
|
|
||||||
function HealComm.SendAddonMessage(this, msg)
|
|
||||||
if not IsInGroup() then
|
|
||||||
libpredict:ParseChatMessage(UnitName("player"), msg, "HealComm")
|
|
||||||
end
|
|
||||||
pfHookHealCommSendAddonMessage(this, msg)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- disable pfUI predictions
|
|
||||||
pfUI.api.libpredict.sender:UnregisterAllEvents()
|
|
||||||
pfUI.api.libpredict.sender.enabled = nil
|
pfUI.api.libpredict.sender.enabled = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -497,19 +497,4 @@ function pfUI.SetupCVars()
|
|||||||
UIParentLoadAddOn("Blizzard_CombatText")
|
UIParentLoadAddOn("Blizzard_CombatText")
|
||||||
end
|
end
|
||||||
|
|
||||||
if not RunMacroText then
|
|
||||||
local obj = setmetatable({ ["GetText"] = function(self) return self.text end }, {
|
|
||||||
__index = function(tab,key)
|
|
||||||
local value = function() return end
|
|
||||||
rawset(tab,key,value)
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
function RunMacroText(text)
|
|
||||||
obj.text = text
|
|
||||||
ChatEdit_ParseText(obj, 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
_G.PLAYER_BUFF_START_ID = -1
|
_G.PLAYER_BUFF_START_ID = -1
|
||||||
|
|||||||
Reference in New Issue
Block a user