mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
First time the install didnt throw an error
This commit is contained in:
+10
-10
@@ -665,17 +665,17 @@ local function SetupAuras(style)
|
||||
UF:Configure_AuraBars(frame)
|
||||
end
|
||||
|
||||
frame = UF["focus"]
|
||||
E:CopyTable(E.db.unitframe.units.focus.buffs, P.unitframe.units.focus.buffs)
|
||||
E:CopyTable(E.db.unitframe.units.focus.debuffs, P.unitframe.units.focus.debuffs)
|
||||
E:CopyTable(E.db.unitframe.units.focus.aurabar, P.unitframe.units.focus.aurabar)
|
||||
E.db.unitframe.units.focus.smartAuraDisplay = P.unitframe.units.focus.smartAuraDisplay
|
||||
-- frame = UF["focus"]
|
||||
-- E:CopyTable(E.db.unitframe.units.focus.buffs, P.unitframe.units.focus.buffs)
|
||||
-- E:CopyTable(E.db.unitframe.units.focus.debuffs, P.unitframe.units.focus.debuffs)
|
||||
-- E:CopyTable(E.db.unitframe.units.focus.aurabar, P.unitframe.units.focus.aurabar)
|
||||
-- E.db.unitframe.units.focus.smartAuraDisplay = P.unitframe.units.focus.smartAuraDisplay
|
||||
|
||||
if frame then
|
||||
UF:Configure_Auras(frame, "Buffs")
|
||||
UF:Configure_Auras(frame, "Debuffs")
|
||||
UF:Configure_AuraBars(frame)
|
||||
end
|
||||
-- if frame then
|
||||
-- UF:Configure_Auras(frame, "Buffs")
|
||||
-- UF:Configure_Auras(frame, "Debuffs")
|
||||
-- UF:Configure_AuraBars(frame)
|
||||
-- end
|
||||
|
||||
if not style then
|
||||
E.db.unitframe.units.player.buffs.enable = true
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
<Include file="LibDataBroker\LibDataBroker-1.1.xml"/>
|
||||
<Include file="LibElvUIPlugin-1.0\LibElvUIPlugin-1.0.xml"/>
|
||||
<Include file="oUF\oUF.xml"/>
|
||||
<Include file="oUF_Plugins\oUF_Plugins.xml"/>
|
||||
<Include file="UTF8\UTF8.xml"/>
|
||||
<Include file="LibCompress\LibCompress.xml"/>
|
||||
<Include file="LibBase64-1.0\LibBase64-1.0.xml"/>
|
||||
|
||||
@@ -64,8 +64,8 @@ button.isDebuff - indicates if the button holds a debuff (boolean)
|
||||
local ns = oUF
|
||||
local oUF = ns.oUF
|
||||
|
||||
local tinsert = table.insert
|
||||
local floor, min = math.floor, math.min
|
||||
local tinsert, getn = table.insert, table.getn
|
||||
local floor, min, mod = math.floor, math.min, math.mod
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
local GetTime = GetTime
|
||||
@@ -250,7 +250,7 @@ local function SetPosition(element, from, to)
|
||||
|
||||
-- Bail out if the to range is out of scope.
|
||||
if(not button) then break end
|
||||
local col = (i - 1) % cols
|
||||
local col = mod((i - 1), cols)
|
||||
local row = floor((i - 1) / cols)
|
||||
|
||||
button:ClearAllPoints()
|
||||
@@ -277,7 +277,7 @@ local function filterIcons(element, unit, filter, limit, isDebuff, offset, dontH
|
||||
end
|
||||
|
||||
if not dontHide then
|
||||
for i = visible + offset + 1, #element do
|
||||
for i = visible + offset + 1, getn(element) do
|
||||
element[i]:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Script file="power.lua"/>
|
||||
<!--<Script file="auras.lua"/>-->
|
||||
<Script file="auras.lua"/>
|
||||
<Script file="health.lua"/>
|
||||
<Script file="raidtargetindicator.lua"/>
|
||||
<Script file="leaderindicator.lua"/>
|
||||
|
||||
@@ -0,0 +1,391 @@
|
||||
local ns = oUF
|
||||
local oUF = ns.oUF
|
||||
assert(oUF, "oUF_AuraBars was unable to locate oUF install.")
|
||||
|
||||
local format = string.format
|
||||
local floor, huge, min = math.floor, math.huge, math.min
|
||||
local tsort, getn = table.sort, table.getn
|
||||
local tremove = table.remove
|
||||
local random = math.random
|
||||
|
||||
local CreateFrame = CreateFrame
|
||||
local UnitAura = UnitAura
|
||||
local UnitIsFriend = UnitIsFriend
|
||||
|
||||
local DAY, HOUR, MINUTE = 86400, 3600, 60
|
||||
local function FormatTime(s)
|
||||
if s < MINUTE then
|
||||
return ("%.1fs"):format(s)
|
||||
elseif s < HOUR then
|
||||
return ("%dm %ds"):format(s/60%60, s%60)
|
||||
elseif s < DAY then
|
||||
return ("%dh %dm"):format(s/(60*60), s/60%60)
|
||||
else
|
||||
return ("%dd %dh"):format(s/DAY, (s / HOUR) - (floor(s/DAY) * 24))
|
||||
end
|
||||
end
|
||||
|
||||
local function UpdateTooltip(self)
|
||||
GameTooltip:SetUnitAura(self.__unit, self:GetParent().aura.name, self:GetParent().aura.rank, self:GetParent().aura.filter)
|
||||
end
|
||||
|
||||
local function OnEnter(self)
|
||||
if(not self:IsVisible()) then return end
|
||||
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT")
|
||||
self:UpdateTooltip()
|
||||
end
|
||||
|
||||
local function OnLeave(self)
|
||||
GameTooltip:Hide()
|
||||
end
|
||||
|
||||
local function SetAnchors(self)
|
||||
local bars = self.bars
|
||||
|
||||
for index = 1, getn(bars) do
|
||||
local frame = bars[index]
|
||||
local anchor = frame.anchor
|
||||
frame:Height(self.auraBarHeight or 20)
|
||||
frame.statusBar.iconHolder:Size(frame:GetHeight())
|
||||
frame:Width((self.auraBarWidth or self:GetWidth()) - (frame:GetHeight() + (self.gap or 0)))
|
||||
frame:ClearAllPoints()
|
||||
if self.down == true then
|
||||
if self == anchor then -- Root frame so indent for icon
|
||||
frame:SetPoint("TOPLEFT", anchor, "TOPLEFT", (frame:GetHeight() + (self.gap or 0) ), -1)
|
||||
else
|
||||
frame:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", 0, (-self.spacing or 0))
|
||||
end
|
||||
else
|
||||
if self == anchor then -- Root frame so indent for icon
|
||||
frame:SetPoint("BOTTOMLEFT", anchor, "BOTTOMLEFT", (frame:GetHeight() + (self.gap or 0)), 1)
|
||||
else
|
||||
frame:SetPoint("BOTTOMLEFT", anchor, "TOPLEFT", 0, (self.spacing or 0))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function CreateAuraBar(oUF, anchor)
|
||||
local auraBarParent = oUF.AuraBars
|
||||
|
||||
local frame = CreateFrame("Frame", nil, auraBarParent)
|
||||
frame:Height(auraBarParent.auraBarHeight or 20)
|
||||
frame:Width((auraBarParent.auraBarWidth or auraBarParent:GetWidth()) - (frame:GetHeight() + (auraBarParent.gap or 0)))
|
||||
frame.anchor = anchor
|
||||
|
||||
-- the main bar
|
||||
local statusBar = CreateFrame("StatusBar", nil, frame)
|
||||
statusBar:SetStatusBarTexture(auraBarParent.auraBarTexture or [[Interface\TargetingFrame\UI-StatusBar]])
|
||||
statusBar:SetAlpha(auraBarParent.fgalpha or 1)
|
||||
statusBar:SetAllPoints(frame)
|
||||
|
||||
frame.statusBar = statusBar
|
||||
|
||||
if auraBarParent.down == true then
|
||||
if auraBarParent == anchor then -- Root frame so indent for icon
|
||||
frame:SetPoint("TOPLEFT", anchor, "TOPLEFT", (frame:GetHeight() + (auraBarParent.gap or 0) ), -1)
|
||||
else
|
||||
frame:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", 0, (-auraBarParent.spacing or 0))
|
||||
end
|
||||
else
|
||||
if auraBarParent == anchor then -- Root frame so indent for icon
|
||||
frame:SetPoint("BOTTOMLEFT", anchor, "BOTTOMLEFT", (frame:GetHeight() + (auraBarParent.gap or 0)), 1)
|
||||
else
|
||||
frame:SetPoint("BOTTOMLEFT", anchor, "TOPLEFT", 0, (auraBarParent.spacing or 0))
|
||||
end
|
||||
end
|
||||
|
||||
local spark = statusBar:CreateTexture(nil, "OVERLAY", nil);
|
||||
spark:SetTexture([[Interface\CastingBar\UI-CastingBar-Spark]]);
|
||||
spark:Width(12);
|
||||
spark:SetBlendMode("ADD");
|
||||
spark:SetPoint("CENTER", statusBar:GetStatusBarTexture(), "RIGHT")
|
||||
statusBar.spark = spark
|
||||
|
||||
statusBar.iconHolder = CreateFrame("Button", nil, statusBar)
|
||||
statusBar.iconHolder:SetHeight(frame:GetHeight())
|
||||
statusBar.iconHolder:SetWidth(frame:GetHeight())
|
||||
statusBar.iconHolder:SetPoint("BOTTOMRIGHT", frame, "BOTTOMLEFT", -auraBarParent.gap, 0)
|
||||
statusBar.iconHolder.__unit = oUF.unit
|
||||
statusBar.iconHolder:SetScript("OnEnter", OnEnter)
|
||||
statusBar.iconHolder:SetScript("OnLeave", OnLeave)
|
||||
statusBar.iconHolder.UpdateTooltip = UpdateTooltip
|
||||
|
||||
statusBar.icon = statusBar.iconHolder:CreateTexture(nil, "BACKGROUND")
|
||||
statusBar.icon:SetTexCoord(.07, .93, .07, .93)
|
||||
statusBar.icon:SetAllPoints()
|
||||
|
||||
statusBar.spelltime = statusBar:CreateFontString(nil, "ARTWORK")
|
||||
if auraBarParent.spellTimeObject then
|
||||
statusBar.spelltime:SetFontObject(auraBarParent.spellTimeObject)
|
||||
else
|
||||
statusBar.spelltime:SetFont(auraBarParent.spellTimeFont or [[Fonts\FRIZQT__.TTF]], auraBarParent.spellTimeSize or 10)
|
||||
end
|
||||
statusBar.spelltime:SetTextColor(1 ,1, 1)
|
||||
statusBar.spelltime:SetJustifyH"RIGHT"
|
||||
statusBar.spelltime:SetJustifyV"CENTER"
|
||||
statusBar.spelltime:SetPoint"RIGHT"
|
||||
|
||||
statusBar.spellname = statusBar:CreateFontString(nil, "ARTWORK")
|
||||
if auraBarParent.spellNameObject then
|
||||
statusBar.spellname:SetFontObject(auraBarParent.spellNameObject)
|
||||
else
|
||||
statusBar.spellname:SetFont(auraBarParent.spellNameFont or [[Fonts\FRIZQT__.TTF]], auraBarParent.spellNameSize or 10)
|
||||
end
|
||||
statusBar.spellname:SetTextColor(1, 1, 1)
|
||||
statusBar.spellname:SetJustifyH"LEFT"
|
||||
statusBar.spellname:SetJustifyV"CENTER"
|
||||
statusBar.spellname:SetPoint"LEFT"
|
||||
statusBar.spellname:SetPoint("RIGHT", statusBar.spelltime, "LEFT")
|
||||
|
||||
if auraBarParent.PostCreateBar then
|
||||
auraBarParent.PostCreateBar(frame)
|
||||
end
|
||||
|
||||
return frame
|
||||
end
|
||||
|
||||
local function UpdateBars(auraBars)
|
||||
local bars = auraBars.bars
|
||||
local timenow = GetTime()
|
||||
|
||||
for index = 1, #bars do
|
||||
local frame = bars[index]
|
||||
local bar = frame.statusBar
|
||||
if not frame:IsVisible() then
|
||||
break
|
||||
end
|
||||
if bar.aura.noTime then
|
||||
bar.spelltime:SetText()
|
||||
bar.spark:Hide()
|
||||
else
|
||||
local timeleft = bar.aura.expirationTime - timenow
|
||||
bar:SetValue(timeleft)
|
||||
bar.spelltime:SetText(FormatTime(timeleft))
|
||||
if auraBars.spark == true then
|
||||
if (auraBars.scaleTime and ((auraBars.scaleTime <= 0) or (auraBars.scaleTime > 0 and timeleft < auraBars.scaleTime))) then
|
||||
bar.spark:Show()
|
||||
else
|
||||
bar.spark:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function DefaultFilter(self, unit, name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate)
|
||||
if unitCaster == "player" and not shouldConsolidate then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local sort = function(a, b)
|
||||
local compa, compb = a.noTime and huge or a.expirationTime, b.noTime and huge or b.expirationTime
|
||||
return compa > compb
|
||||
end
|
||||
|
||||
local function Update(self, event, unit)
|
||||
if self.unit ~= unit then return end
|
||||
local auraBars = self.AuraBars
|
||||
local helpOrHarm
|
||||
local isFriend = UnitIsFriend("player", unit) == 1 and true or false
|
||||
local both = false
|
||||
|
||||
if auraBars.friendlyAuraType and auraBars.enemyAuraType then
|
||||
if isFriend then
|
||||
helpOrHarm = auraBars.friendlyAuraType
|
||||
else
|
||||
helpOrHarm = auraBars.enemyAuraType
|
||||
end
|
||||
else
|
||||
helpOrHarm = isFriend and "HELPFUL" or "HARMFUL"
|
||||
end
|
||||
|
||||
if helpOrHarm == "BOTH" then
|
||||
both = true
|
||||
helpOrHarm = "HELPFUL"
|
||||
end
|
||||
|
||||
-- Create a table of auras to display
|
||||
local auras = {}
|
||||
local lastAuraIndex = 0
|
||||
local counter = 0
|
||||
if(auraBars.forceShow) then
|
||||
for index = 1, auraBars.maxBars do
|
||||
local spellID = 47540
|
||||
local name, rank, icon = GetSpellInfo(spellID)
|
||||
local count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate = 5, "Magic", 0, 0, "player", nil, nil
|
||||
lastAuraIndex = lastAuraIndex + 1
|
||||
auras[lastAuraIndex] = {}
|
||||
auras[lastAuraIndex].spellID = spellID
|
||||
auras[lastAuraIndex].name = name
|
||||
auras[lastAuraIndex].rank = rank
|
||||
auras[lastAuraIndex].icon = icon
|
||||
auras[lastAuraIndex].count = count
|
||||
auras[lastAuraIndex].debuffType = debuffType
|
||||
auras[lastAuraIndex].duration = duration
|
||||
auras[lastAuraIndex].expirationTime = expirationTime
|
||||
auras[lastAuraIndex].unitCaster = unitCaster
|
||||
auras[lastAuraIndex].isStealable = isStealable
|
||||
auras[lastAuraIndex].noTime = (duration == 0 and expirationTime == 0)
|
||||
auras[lastAuraIndex].filter = helpOrHarm
|
||||
auras[lastAuraIndex].shouldConsolidate = shouldConsolidate
|
||||
end
|
||||
else
|
||||
for index = 1, 40 do
|
||||
local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellID
|
||||
|
||||
if not both then
|
||||
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellID = UnitAura(unit, index, helpOrHarm)
|
||||
|
||||
if not name then break end
|
||||
else
|
||||
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellID = UnitAura(unit, index, "HELPFUL")
|
||||
|
||||
if not name then
|
||||
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellID = UnitAura(unit, index, "HARMFUL")
|
||||
|
||||
if not name then break end
|
||||
end
|
||||
end
|
||||
|
||||
if (auraBars.filter or DefaultFilter)(self, unit, name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellID) then
|
||||
lastAuraIndex = lastAuraIndex + 1
|
||||
auras[lastAuraIndex] = {}
|
||||
auras[lastAuraIndex].spellID = spellID
|
||||
auras[lastAuraIndex].name = name
|
||||
auras[lastAuraIndex].rank = rank
|
||||
auras[lastAuraIndex].icon = icon
|
||||
auras[lastAuraIndex].count = count
|
||||
auras[lastAuraIndex].debuffType = debuffType
|
||||
auras[lastAuraIndex].duration = duration
|
||||
auras[lastAuraIndex].expirationTime = expirationTime
|
||||
auras[lastAuraIndex].unitCaster = unitCaster
|
||||
auras[lastAuraIndex].isStealable = isStealable
|
||||
auras[lastAuraIndex].noTime = (duration == 0 and expirationTime == 0)
|
||||
auras[lastAuraIndex].filter = helpOrHarm
|
||||
auras[lastAuraIndex].shouldConsolidate = shouldConsolidate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(auraBars.sort and not auraBars.forceShow) then
|
||||
tsort(auras, type(auraBars.sort) == "function" and auraBars.sort or sort)
|
||||
end
|
||||
|
||||
for i=1, #auras do
|
||||
if(i > auraBars.maxBars) then
|
||||
tremove(auras, i)
|
||||
else
|
||||
lastAuraIndex = i
|
||||
end
|
||||
end
|
||||
|
||||
-- Show and configure bars for buffs/debuffs.
|
||||
local bars = auraBars.bars
|
||||
if lastAuraIndex == 0 then
|
||||
self.AuraBars:Height(1)
|
||||
end
|
||||
|
||||
for index = 1 , lastAuraIndex do
|
||||
if (auraBars:GetWidth() == 0) then break; end
|
||||
local aura = auras[index]
|
||||
local frame = bars[index]
|
||||
|
||||
if not frame then
|
||||
frame = CreateAuraBar(self, index == 1 and auraBars or bars[index - 1])
|
||||
bars[index] = frame
|
||||
end
|
||||
|
||||
if index == lastAuraIndex then
|
||||
if self.AuraBars.down then
|
||||
self.AuraBars:Height(self.AuraBars:GetTop() - frame:GetBottom())
|
||||
elseif frame:GetTop() and self.AuraBars:GetBottom() then
|
||||
self.AuraBars:Height(frame:GetTop() - self.AuraBars:GetBottom())
|
||||
else
|
||||
self.AuraBars:Height(20)
|
||||
end
|
||||
end
|
||||
|
||||
local bar = frame.statusBar
|
||||
frame.index = index
|
||||
|
||||
-- Backup the details of the aura onto the bar, so the OnUpdate function can use it
|
||||
bar.aura = aura
|
||||
|
||||
-- Configure
|
||||
if bar.aura.noTime then
|
||||
bar:SetMinMaxValues(0, 1)
|
||||
bar:SetValue(1)
|
||||
else
|
||||
if auraBars.scaleTime and auraBars.scaleTime > 0 then
|
||||
local maxvalue = min(auraBars.scaleTime, bar.aura.duration)
|
||||
bar:SetMinMaxValues(0, auraBars.scaleTime)
|
||||
bar:Width(
|
||||
( maxvalue / auraBars.scaleTime ) *
|
||||
( ( auraBars.auraBarWidth or auraBars:GetWidth() ) -
|
||||
( bar:GetHeight() + (auraBars.gap or 0) ) ) ) -- icon size + gap
|
||||
else
|
||||
bar:SetMinMaxValues(0, bar.aura.duration)
|
||||
end
|
||||
bar:SetValue(bar.aura.expirationTime - GetTime())
|
||||
end
|
||||
|
||||
bar.icon:SetTexture(bar.aura.icon)
|
||||
|
||||
bar.spellname:SetText(bar.aura.count > 1 and format("%s [%d]", bar.aura.name, bar.aura.count) or bar.aura.name)
|
||||
bar.spelltime:SetText(not bar.noTime and FormatTime(bar.aura.expirationTime-GetTime()))
|
||||
|
||||
-- Colour bars
|
||||
local r, g, b = .2, .6, 1 -- Colour for buffs
|
||||
if auraBars.buffColor then
|
||||
r, g, b = unpack(auraBars.buffColor)
|
||||
end
|
||||
|
||||
if helpOrHarm == "HARMFUL" then
|
||||
local debuffType = bar.aura.debuffType and bar.aura.debuffType or "none"
|
||||
|
||||
r, g, b = DebuffTypeColor[debuffType].r, DebuffTypeColor[debuffType].g, DebuffTypeColor[debuffType].b
|
||||
if auraBars.debuffColor then
|
||||
r, g, b = unpack(auraBars.debuffColor)
|
||||
else
|
||||
if debuffType == "none" and auraBars.defaultDebuffColor then
|
||||
r, g, b = unpack(auraBars.defaultDebuffColor)
|
||||
end
|
||||
end
|
||||
end
|
||||
bar:SetStatusBarColor(r, g, b)
|
||||
frame:Show()
|
||||
end
|
||||
|
||||
-- Hide unused bars.
|
||||
for index = lastAuraIndex + 1, getn(bars) do
|
||||
bars[index]:Hide()
|
||||
end
|
||||
|
||||
if auraBars.PostUpdate then
|
||||
auraBars:PostUpdate(event, unit)
|
||||
end
|
||||
end
|
||||
|
||||
local function Enable(self)
|
||||
if self.AuraBars then
|
||||
self:RegisterEvent("UNIT_AURA", Update)
|
||||
self.AuraBars:Height(1)
|
||||
self.AuraBars.bars = self.AuraBars.bars or {}
|
||||
self.AuraBars.SetAnchors = SetAnchors
|
||||
self.AuraBars:SetScript("OnUpdate", UpdateBars)
|
||||
self.AuraBars.maxBars = self.AuraBars.maxBars or 40
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local function Disable(self)
|
||||
local auraFrame = self.AuraBars
|
||||
if auraFrame then
|
||||
self:UnregisterEvent("UNIT_AURA", Update)
|
||||
auraFrame:SetScript("OnUpdate", nil)
|
||||
end
|
||||
end
|
||||
|
||||
oUF:AddElement("AuraBars", Update, Enable, Disable)
|
||||
@@ -0,0 +1,3 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Script file="oUF_AuraBars\oUF_AuraBars.lua"/>
|
||||
</Ui>
|
||||
@@ -0,0 +1,287 @@
|
||||
local E, L, V, P, G = unpack(ElvUI) --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local UF = E:GetModule("UnitFrames")
|
||||
|
||||
--Cache global variables
|
||||
--Lua functions
|
||||
local match = string.match
|
||||
local strsplit = strsplit
|
||||
local tostring = tostring
|
||||
local format = format
|
||||
local select = select
|
||||
local getn = table.getn
|
||||
--WoW API / Variables
|
||||
local CreateFrame = CreateFrame
|
||||
local IsShiftKeyDown = IsShiftKeyDown
|
||||
local IsAltKeyDown = IsAltKeyDown
|
||||
local IsControlKeyDown = IsControlKeyDown
|
||||
local UnitIsFriend = UnitIsFriend
|
||||
local UnitIsUnit = UnitIsUnit
|
||||
local UnitCanAttack = UnitCanAttack
|
||||
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
||||
|
||||
function UF:Construct_AuraBars()
|
||||
local bar = self.statusBar
|
||||
|
||||
E:SetTemplate(self, "Default", nil, nil, UF.thinBorders, true)
|
||||
local inset = UF.thinBorders and E.mult or nil
|
||||
bar:SetInside(self, inset, inset)
|
||||
UF["statusbars"][bar] = true
|
||||
UF:Update_StatusBar(bar)
|
||||
|
||||
UF:Configure_FontString(bar.spelltime)
|
||||
UF:Configure_FontString(bar.spellname)
|
||||
UF:Update_FontString(bar.spelltime)
|
||||
UF:Update_FontString(bar.spellname)
|
||||
|
||||
bar.spellname:ClearAllPoints()
|
||||
bar.spellname:Point("LEFT", bar, "LEFT", 2, 0)
|
||||
bar.spellname:Point("RIGHT", bar.spelltime, "LEFT", -4, 0)
|
||||
bar.spellname:SetWordWrap(false)
|
||||
|
||||
bar.iconHolder:SetTemplate("Default", nil, nil, UF.thinBorders, true)
|
||||
bar.icon:SetInside(bar.iconHolder, inset, inset)
|
||||
bar.icon:SetDrawLayer("OVERLAY")
|
||||
|
||||
bar.bg = bar:CreateTexture(nil, "BORDER")
|
||||
bar.bg:Hide()
|
||||
|
||||
|
||||
bar.iconHolder:RegisterForClicks("RightButtonUp")
|
||||
bar.iconHolder:SetScript("OnClick", function(self)
|
||||
if E.db.unitframe.auraBlacklistModifier == "NONE" or not ((E.db.unitframe.auraBlacklistModifier == "SHIFT" and IsShiftKeyDown()) or (E.db.unitframe.auraBlacklistModifier == "ALT" and IsAltKeyDown()) or (E.db.unitframe.auraBlacklistModifier == "CTRL" and IsControlKeyDown())) then return; end
|
||||
local auraName = self:GetParent().aura.name
|
||||
|
||||
if auraName then
|
||||
E:Print(format(L["The spell '%s' has been added to the Blacklist unitframe aura filter."], auraName))
|
||||
E.global["unitframe"]["aurafilters"]["Blacklist"]["spells"][auraName] = {
|
||||
["enable"] = true,
|
||||
["priority"] = 0,
|
||||
}
|
||||
UF:Update_AllFrames()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function UF:Construct_AuraBarHeader(frame)
|
||||
local auraBar = CreateFrame("Frame", nil, frame)
|
||||
auraBar:SetFrameLevel(frame.RaisedElementParent:GetFrameLevel() + 10) --Make them appear above any text element
|
||||
auraBar.PostCreateBar = UF.Construct_AuraBars
|
||||
auraBar.gap = (-frame.BORDER + frame.SPACING*3)
|
||||
auraBar.spacing = (-frame.BORDER + frame.SPACING*3)
|
||||
auraBar.spark = true
|
||||
auraBar.filter = UF.AuraBarFilter
|
||||
auraBar.PostUpdate = UF.ColorizeAuraBars
|
||||
|
||||
return auraBar
|
||||
end
|
||||
|
||||
function UF:Configure_AuraBars(frame)
|
||||
if not frame.VARIABLES_SET then return end
|
||||
local auraBars = frame.AuraBars
|
||||
local db = frame.db
|
||||
if db.aurabar.enable then
|
||||
if not frame:IsElementEnabled("AuraBars") then
|
||||
frame:EnableElement("AuraBars")
|
||||
end
|
||||
auraBars:Show()
|
||||
auraBars.friendlyAuraType = db.aurabar.friendlyAuraType
|
||||
auraBars.enemyAuraType = db.aurabar.enemyAuraType
|
||||
auraBars.scaleTime = db.aurabar.uniformThreshold
|
||||
|
||||
local buffColor = self.db.colors.auraBarBuff
|
||||
local debuffColor = self.db.colors.auraBarDebuff
|
||||
local attachTo = frame
|
||||
|
||||
if(E:CheckClassColor(buffColor.r, buffColor.g, buffColor.b)) then
|
||||
buffColor = E.myclass == "PRIEST" and E.PriestColors or (CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[E.myclass] or RAID_CLASS_COLORS[E.myclass])
|
||||
end
|
||||
|
||||
if(E:CheckClassColor(debuffColor.r, debuffColor.g, debuffColor.b)) then
|
||||
debuffColor = E.myclass == "PRIEST" and E.PriestColors or (CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[E.myclass] or RAID_CLASS_COLORS[E.myclass])
|
||||
end
|
||||
|
||||
if db.aurabar.attachTo == "BUFFS" then
|
||||
attachTo = frame.Buffs
|
||||
elseif db.aurabar.attachTo == "DEBUFFS" then
|
||||
attachTo = frame.Debuffs
|
||||
elseif db.aurabar.attachTo == "PLAYER_AURABARS" and ElvUF_Player then
|
||||
attachTo = ElvUF_Player.AuraBars
|
||||
end
|
||||
|
||||
local anchorPoint, anchorTo = "BOTTOM", "TOP"
|
||||
if db.aurabar.anchorPoint == "BELOW" then
|
||||
anchorPoint, anchorTo = "TOP", "BOTTOM"
|
||||
end
|
||||
|
||||
local yOffset
|
||||
local spacing = (((db.aurabar.attachTo == "FRAME" and 3) or (db.aurabar.attachTo == "PLAYER_AURABARS" and 4) or 2) * frame.SPACING)
|
||||
local border = (((db.aurabar.attachTo == "FRAME" or db.aurabar.attachTo == "PLAYER_AURABARS") and 2 or 1) * frame.BORDER)
|
||||
|
||||
if db.aurabar.anchorPoint == "BELOW" then
|
||||
yOffset = -spacing + border - (not db.aurabar.yOffset and 0 or db.aurabar.yOffset)
|
||||
else
|
||||
yOffset = spacing - border + (not db.aurabar.yOffset and 0 or db.aurabar.yOffset)
|
||||
end
|
||||
|
||||
local xOffset = (db.aurabar.attachTo == "FRAME" and frame.SPACING or 0)
|
||||
local offsetLeft = xOffset + ((db.aurabar.attachTo == "FRAME" and ((anchorTo == "TOP" and frame.ORIENTATION ~= "LEFT") or (anchorTo == "BOTTOM" and frame.ORIENTATION == "LEFT"))) and frame.POWERBAR_OFFSET or 0)
|
||||
local offsetRight = -xOffset - ((db.aurabar.attachTo == "FRAME" and ((anchorTo == "TOP" and frame.ORIENTATION ~= "RIGHT") or (anchorTo == "BOTTOM" and frame.ORIENTATION == "RIGHT"))) and frame.POWERBAR_OFFSET or 0)
|
||||
|
||||
auraBars.auraBarHeight = db.aurabar.height
|
||||
auraBars:ClearAllPoints()
|
||||
E:Point(auraBars, anchorPoint.."LEFT", attachTo, anchorTo.."LEFT", offsetLeft, yOffset)
|
||||
E:Point(auraBars, anchorPoint.."RIGHT", attachTo, anchorTo.."RIGHT", offsetRight, yOffset)
|
||||
auraBars.buffColor = {buffColor.r, buffColor.g, buffColor.b}
|
||||
if UF.db.colors.auraBarByType then
|
||||
auraBars.debuffColor = nil;
|
||||
auraBars.defaultDebuffColor = {debuffColor.r, debuffColor.g, debuffColor.b}
|
||||
else
|
||||
auraBars.debuffColor = {debuffColor.r, debuffColor.g, debuffColor.b}
|
||||
auraBars.defaultDebuffColor = nil;
|
||||
end
|
||||
auraBars.down = db.aurabar.anchorPoint == "BELOW"
|
||||
|
||||
if db.aurabar.sort == "TIME_REMAINING" then
|
||||
auraBars.sort = true --default function
|
||||
elseif db.aurabar.sort == "TIME_REMAINING_REVERSE" then
|
||||
auraBars.sort = self.SortAuraBarReverse
|
||||
elseif db.aurabar.sort == "TIME_DURATION" then
|
||||
auraBars.sort = self.SortAuraBarDuration
|
||||
elseif db.aurabar.sort == "TIME_DURATION_REVERSE" then
|
||||
auraBars.sort = self.SortAuraBarDurationReverse
|
||||
elseif db.aurabar.sort == "NAME" then
|
||||
auraBars.sort = self.SortAuraBarName
|
||||
else
|
||||
auraBars.sort = nil
|
||||
end
|
||||
|
||||
auraBars.maxBars = db.aurabar.maxBars
|
||||
auraBars.forceShow = frame.forceShowAuras
|
||||
-- auraBars:SetAnchors()
|
||||
else
|
||||
if frame:IsElementEnabled("AuraBars") then
|
||||
frame:DisableElement("AuraBars")
|
||||
auraBars:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local huge = math.huge
|
||||
function UF.SortAuraBarReverse(a, b)
|
||||
local compa, compb = a.noTime and huge or a.expirationTime, b.noTime and huge or b.expirationTime
|
||||
return compa < compb
|
||||
end
|
||||
|
||||
function UF.SortAuraBarDuration(a, b)
|
||||
local compa, compb = a.noTime and huge or a.duration, b.noTime and huge or b.duration
|
||||
return compa > compb
|
||||
end
|
||||
|
||||
function UF.SortAuraBarDurationReverse(a, b)
|
||||
local compa, compb = a.noTime and huge or a.duration, b.noTime and huge or b.duration
|
||||
return compa < compb
|
||||
end
|
||||
|
||||
function UF.SortAuraBarName(a, b)
|
||||
return a.name > b.name
|
||||
end
|
||||
|
||||
function UF:CheckFilter(name, caster, spellID, isFriend, isPlayer, isUnit, allowDuration, noDuration, canDispell, ...)
|
||||
-- local friendCheck, filterName, filter, filterType, spellList, spell
|
||||
-- for i=1, select("#", ...) do
|
||||
-- filterName = select(i, ...)
|
||||
-- friendCheck = (isFriend and match(filterName, "^Friendly:([^,]*)")) or (not isFriend and match(filterName, "^Enemy:([^,]*)")) or nil
|
||||
-- if friendCheck ~= false then
|
||||
-- if friendCheck ~= nil and (G.unitframe.specialFilters[friendCheck] or E.global.unitframe.aurafilters[friendCheck]) then
|
||||
-- filterName = friendCheck -- this is for our filters to handle Friendly and Enemy
|
||||
-- end
|
||||
-- filter = E.global.unitframe.aurafilters[filterName]
|
||||
-- if filter then
|
||||
-- filterType = filter.type
|
||||
-- spellList = filter.spells
|
||||
-- spell = spellList and (spellList[spellID] or spellList[name])
|
||||
|
||||
-- if filterType and (filterType == "Whitelist") and (spell and spell.enable) and allowDuration then
|
||||
-- return true, spell.priority -- this is the only difference from auarbars code
|
||||
-- elseif filterType and (filterType == "Blacklist") and (spell and spell.enable) then
|
||||
-- return false
|
||||
-- end
|
||||
-- elseif filterName == "Personal" and isPlayer and allowDuration then
|
||||
-- return true
|
||||
-- elseif filterName == "nonPersonal" and (not isPlayer) and allowDuration then
|
||||
-- return true
|
||||
-- elseif filterName == "CastByUnit" and (caster and isUnit) and allowDuration then
|
||||
-- return true
|
||||
-- elseif filterName == "notCastByUnit" and (caster and not isUnit) and allowDuration then
|
||||
-- return true
|
||||
-- elseif filterName == "Dispellable" and canDispell and allowDuration then
|
||||
-- return true
|
||||
-- elseif filterName == "blockNoDuration" and noDuration then
|
||||
-- return false
|
||||
-- elseif filterName == "blockNonPersonal" and (not isPlayer) then
|
||||
-- return false
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
|
||||
function UF:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, _, spellID)
|
||||
if not self.db then return; end
|
||||
local db = self.db.aurabar
|
||||
|
||||
if not name then return nil end
|
||||
local filterCheck, isUnit, isFriend, isPlayer, canDispell, allowDuration, noDuration
|
||||
|
||||
if db.priority ~= "" then
|
||||
noDuration = (not duration or duration == 0)
|
||||
isFriend = unit and UnitIsFriend("player", unit) and not UnitCanAttack("player", unit)
|
||||
isPlayer = (unitCaster == "player" or unitCaster == "vehicle")
|
||||
isUnit = unit and unitCaster and UnitIsUnit(unit, unitCaster)
|
||||
canDispell = (self.type == "Buffs" and isStealable) or (self.type == "Debuffs" and debuffType and E:IsDispellableByMe(debuffType))
|
||||
allowDuration = noDuration or (duration and (duration > 0) and (db.maxDuration == 0 or duration <= db.maxDuration) and (db.minDuration == 0 or duration >= db.minDuration))
|
||||
filterCheck = UF:CheckFilter(name, unitCaster, spellID, isFriend, isPlayer, isUnit, allowDuration, noDuration, canDispell, strsplit(",", db.priority))
|
||||
else
|
||||
filterCheck = true -- Allow all auras to be shown when the filter list is empty
|
||||
end
|
||||
|
||||
return filterCheck
|
||||
end
|
||||
|
||||
function UF:ColorizeAuraBars()
|
||||
local bars = self.bars
|
||||
for index = 1, getn(bars) do
|
||||
local frame = bars[index]
|
||||
if not frame:IsVisible() then break end
|
||||
local spellName = frame.statusBar.aura.name
|
||||
local spellID = frame.statusBar.aura.spellID
|
||||
local colors = E.global.unitframe.AuraBarColors[spellID] or E.global.unitframe.AuraBarColors[tostring(spellID)] or E.global.unitframe.AuraBarColors[spellName]
|
||||
|
||||
if E.db.unitframe.colors.auraBarTurtle and (E.global.unitframe.aurafilters.TurtleBuffs.spells[spellID] or E.global.unitframe.aurafilters.TurtleBuffs.spells[spellName]) and not colors then
|
||||
colors = E.db.unitframe.colors.auraBarTurtleColor
|
||||
end
|
||||
|
||||
if colors then
|
||||
frame.statusBar:SetStatusBarColor(colors.r, colors.g, colors.b)
|
||||
frame.statusBar.bg:SetTexture(colors.r * 0.25, colors.g * 0.25, colors.b * 0.25)
|
||||
else
|
||||
local r, g, b = frame.statusBar:GetStatusBarColor()
|
||||
frame.statusBar.bg:SetTexture(r * 0.25, g * 0.25, b * 0.25)
|
||||
end
|
||||
|
||||
if UF.db.colors.transparentAurabars and not frame.statusBar.isTransparent then
|
||||
UF:ToggleTransparentStatusBar(true, frame.statusBar, frame.statusBar.bg, nil, true)
|
||||
elseif(frame.statusBar.isTransparent and not UF.db.colors.transparentAurabars) then
|
||||
UF:ToggleTransparentStatusBar(false, frame.statusBar, frame.statusBar.bg, nil, true)
|
||||
end
|
||||
|
||||
if(UF.db.colors.transparentAurabars) then
|
||||
local _, _, _, alpha = frame:GetBackdropColor()
|
||||
if colors then
|
||||
frame:SetBackdropColor(colors.r * 0.58, colors.g * 0.58, colors.b * 0.58, alpha)
|
||||
else
|
||||
local r, g, b = frame.statusBar:GetStatusBarColor()
|
||||
frame:SetBackdropColor(r * 0.58, g * 0.58, b * 0.58, alpha)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -29,7 +29,7 @@ function UF:Construct_Buffs(frame)
|
||||
buffs:SetFrameLevel(frame.RaisedElementParent:GetFrameLevel() + 10) --Make them appear above any text element
|
||||
buffs.type = "buffs"
|
||||
--Set initial width to prevent division by zero. This value doesn't matter, as it will be updated later
|
||||
buffs:Width(100)
|
||||
E:Width(buffs, 100)
|
||||
|
||||
return buffs
|
||||
end
|
||||
@@ -44,7 +44,7 @@ function UF:Construct_Debuffs(frame)
|
||||
debuffs.type = "debuffs"
|
||||
debuffs:SetFrameLevel(frame.RaisedElementParent:GetFrameLevel() + 10) --Make them appear above any text element
|
||||
--Set initial width to prevent division by zero. This value doesn't matter, as it will be updated later
|
||||
debuffs:Width(100)
|
||||
E:Width(debuffs, 100)
|
||||
|
||||
return debuffs
|
||||
end
|
||||
@@ -77,10 +77,10 @@ function UF:Construct_AuraIcon(button)
|
||||
|
||||
button:RegisterForClicks("RightButtonUp")
|
||||
button:SetScript("OnClick", function(self)
|
||||
if E.db.unitframe.auraBlacklistModifier == "NONE"
|
||||
or not ((E.db.unitframe.auraBlacklistModifier == "SHIFT" and IsShiftKeyDown())
|
||||
or (E.db.unitframe.auraBlacklistModifier == "ALT" and IsAltKeyDown())
|
||||
or (E.db.unitframe.auraBlacklistModifier == "CTRL" and IsControlKeyDown())) then return end
|
||||
if E.db.unitframe.auraBlacklistModifier == "NONE"
|
||||
or not ((E.db.unitframe.auraBlacklistModifier == "SHIFT" and IsShiftKeyDown())
|
||||
or (E.db.unitframe.auraBlacklistModifier == "ALT" and IsAltKeyDown())
|
||||
or (E.db.unitframe.auraBlacklistModifier == "CTRL" and IsControlKeyDown())) then return end
|
||||
|
||||
local auraName = self.name
|
||||
|
||||
@@ -119,7 +119,6 @@ function UF:Configure_Auras(frame, auraType)
|
||||
if not frame.VARIABLES_SET then return end
|
||||
local db = frame.db
|
||||
|
||||
print(format("DEBUG: UF:Configure_Auras(%s, %s)", frame:GetName(), auraType))
|
||||
local auras = frame[auraType]
|
||||
auraType = lower(auraType)
|
||||
local rows = db[auraType].numrows
|
||||
@@ -132,7 +131,7 @@ function UF:Configure_Auras(frame, auraType)
|
||||
totalWidth = totalWidth - powerOffset
|
||||
end
|
||||
end
|
||||
auras:Width(totalWidth)
|
||||
E:Width(auras, totalWidth)
|
||||
|
||||
auras.forceShow = frame.forceShowAuras
|
||||
auras.num = db[auraType].perrow * rows
|
||||
@@ -143,8 +142,8 @@ function UF:Configure_Auras(frame, auraType)
|
||||
end
|
||||
|
||||
local attachTo = self:GetAuraAnchorFrame(frame, db[auraType].attachTo, db.debuffs.attachTo == "BUFFS" and db.buffs.attachTo == "DEBUFFS")
|
||||
--Use frame.SPACING override since it may be different from E.Spacing due to forced thin borders
|
||||
local x, y = E:GetXYOffset(db[auraType].anchorPoint, frame.SPACING)
|
||||
--Use frame.SPACING override since it may be different from E.Spacing due to forced thin borders
|
||||
local x, y = E:GetXYOffset(db[auraType].anchorPoint, frame.SPACING)
|
||||
|
||||
if db[auraType].attachTo == "FRAME" then
|
||||
y = 0
|
||||
@@ -165,8 +164,8 @@ function UF:Configure_Auras(frame, auraType)
|
||||
end
|
||||
|
||||
auras:ClearAllPoints()
|
||||
auras:Point(E.InversePoints[db[auraType].anchorPoint], attachTo, db[auraType].anchorPoint, x + db[auraType].xOffset, y + db[auraType].yOffset)
|
||||
auras:Height(auras.size * rows)
|
||||
E:Point(auras, E.InversePoints[db[auraType].anchorPoint], attachTo, db[auraType].anchorPoint, x + db[auraType].xOffset, y + db[auraType].yOffset)
|
||||
E:Height(auras, auras.size * rows)
|
||||
auras["growth-y"] = find(db[auraType].anchorPoint, "TOP") and "UP" or "DOWN"
|
||||
auras["growth-x"] = db[auraType].anchorPoint == "LEFT" and "LEFT" or db[auraType].anchorPoint == "RIGHT" and "RIGHT" or (find(db[auraType].anchorPoint, "LEFT") and "RIGHT" or "LEFT")
|
||||
auras.initialAnchor = E.InversePoints[db[auraType].anchorPoint]
|
||||
@@ -304,7 +303,7 @@ function UF:SortAuras()
|
||||
--Sorting by Index is Default
|
||||
if self.db.sortMethod == "TIME_REMAINING" then
|
||||
tsort(self, SortAurasByTime)
|
||||
elseif self.db.sortMethod == "NAME" then
|
||||
elseif self.db.sortMethod == "NAME" then
|
||||
tsort(self, SortAurasByName)
|
||||
elseif self.db.sortMethod == "DURATION" then
|
||||
tsort(self, SortAurasByDuration)
|
||||
@@ -378,7 +377,7 @@ function UF:PostUpdateAura(unit, button)
|
||||
button.icon:SetDesaturated((unit and not find(unit, "arena%d")) and true or false)
|
||||
else
|
||||
local color = (button.dtype and DebuffTypeColor[button.dtype]) or DebuffTypeColor.none
|
||||
button:SetBackdropBorderColor(color.r * 0.6, color.g * 0.6, color.b * 0.6)
|
||||
button:SetBackdropBorderColor(color.r * 0.6, color.g * 0.6, color.b * 0.6)
|
||||
button.icon:SetDesaturated(false)
|
||||
end
|
||||
else
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Script file="AuraBars.lua"/>
|
||||
<Script file="Auras.lua"/>
|
||||
<Script file="CombatIndicator.lua"/>
|
||||
<Script file="Health.lua"/>
|
||||
|
||||
@@ -2,9 +2,4 @@
|
||||
<Script file="Player.lua"/>
|
||||
<Script file="Target.lua"/>
|
||||
<Script file="TargetTarget.lua"/>
|
||||
<Script file="focus.lua"/>
|
||||
<Script file="focustarget.lua"/>
|
||||
<Script file="pet.lua"/>
|
||||
<Script file="pettarget.lua"/>
|
||||
<Script file="targettargettarget.lua"/>
|
||||
</Ui>
|
||||
@@ -22,9 +22,13 @@ function UF:Construct_PlayerFrame(frame)
|
||||
|
||||
frame.Portrait3D = self:Construct_Portrait(frame, "model")
|
||||
frame.Portrait2D = self:Construct_Portrait(frame, "texture")
|
||||
frame.Buffs = self:Construct_Buffs(frame)
|
||||
frame.Debuffs = self:Construct_Debuffs(frame)
|
||||
-- frame.Castbar = self:Construct_Castbar(frame, L["Player Castbar"])
|
||||
frame.RaidTargetIndicator = UF:Construct_RaidIcon(frame)
|
||||
frame.RestingIndicator = self:Construct_RestingIndicator(frame)
|
||||
frame.CombatIndicator = self:Construct_CombatIndicator(frame)
|
||||
frame.AuraBars = self:Construct_AuraBarHeader(frame)
|
||||
frame.InfoPanel = self:Construct_InfoPanel(frame)
|
||||
|
||||
frame:SetPoint("BOTTOMLEFT", E.UIParent, "BOTTOM", -413, 68)
|
||||
|
||||
@@ -20,8 +20,11 @@ function UF:Construct_TargetFrame(frame)
|
||||
|
||||
frame.Portrait3D = self:Construct_Portrait(frame, "model")
|
||||
frame.Portrait2D = self:Construct_Portrait(frame, "texture")
|
||||
frame.Buffs = self:Construct_Buffs(frame)
|
||||
frame.Debuffs = self:Construct_Debuffs(frame)
|
||||
frame.RaidTargetIndicator = UF:Construct_RaidIcon(frame)
|
||||
frame.InfoPanel = self:Construct_InfoPanel(frame)
|
||||
frame.AuraBars = self:Construct_AuraBarHeader(frame)
|
||||
|
||||
frame:SetPoint("BOTTOMRIGHT", E.UIParent, "BOTTOM", 413, 68)
|
||||
E:CreateMover(frame, frame:GetName().."Mover", L["Target Frame"], nil, nil, nil, "ALL,SOLO")
|
||||
|
||||
Reference in New Issue
Block a user