WoWInterface SVN Buffed

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /trunk
    from Rev 1 to Rev 3
    Reverse comparison

Rev 1 → Rev 3

Buffed!.lua New file
0,0 → 1,1222
--[[
remember to rotate the texture when rotating the orientation
--]]
local floor, select, UnitAura, UnitName, GetTime, next, pairs = floor, select, UnitAura, UnitName, GetTime, next, pairs
 
local FontColour = {r = 1, g = 1, b = 1, a = 1}
local scale = UIParent:GetScale()
local BuffedSorter = {}
local ConfigShown
local ActiveButton -- the button that has been clicked to bring up the menu, needs replacing with self.value in the dropdown intilialisation
BuffedProfiles = {FilterFrames = { BuffedBuffButton = {}, BuffedDebuffButton = {}, TargetBuffedButton = {}, TargetDebuffedButton = {}, },}
 
local function BGetPoint(frame)
local x = (floor((frame:GetLeft()+ frame:GetRight())/2*100))/100
local y = (floor((frame:GetTop()+ frame:GetBottom())/2*100))/100
return x, y
end
 
local function BSetPoint(frame, x, y, relativeTo, relativePoint)
if not relativeTo then
relativeTo = UIParent
end
if not relativePoint then
relativePoint = "BOTTOMLEFT"
end
frame:ClearAllPoints()
frame:SetPoint("CENTER", relativeTo, relativePoint, x, y)
end
 
local FrameColours = {TargetBuff = {r = 0, g = 0.4, b = 0},
Buff = {r = 0, g = 1, b = 0},
Debuff = {r = 1, g = 0, b = 0},
Wep = {r = 1, g = 0, b = 1},
TargetDebuff = {r = 0.4, g = 0, b = 0},
Master = {r = 1, g = 1, b = 1},
Filter = {r = 0, g = 0, b = 1}, }
 
local LoadOrder = { "Buff", "Debuff","TargetBuff", "TargetDebuff", "Wep", "Master", "Filter", }
 
local function BuffedOnDragStart(self, index, button) -- start dragging config frames
local BuffButton = _G[self..index]
if (button == "LeftButton") then
BuffButton:StartMoving()
if (BuffButton.padding == 10) then
BuffButton.pa:Show()
BuffButton.pb:Show()
end
elseif (button == "RightButton") then
ActiveButton = BuffButton
ToggleDropDownMenu(1, nil, _G["BuffedBuffConfig"], BuffButton, 30, 20)
end
end
 
local function ForAllFrames(func1, func2)
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local f = _G["Buffed"..FrameName..i]
if f then
func1(f, FrameName, FrameNum, i)
end
end
end
end
 
local function ToggleLock(msg) -- show/hide config frames and hide the extra frames if the number has changed
if not ConfigShown then
ForAllFrames(function(f) if f.enabled then f:Show() end end)
ConfigShown = 1
else
ForAllFrames(function(f, FrameName, FrameNum, i) f:Hide()
if (i > FrameNum) then
f = _G["Buffed"..FrameName.."Button"..i]
if f then
f:Hide()
end
end
end)
if _G["SwishAlphaSlider"] then
_G["SwishAlphaSlider"]:Hide()
end
ConfigShown = nil
end
end
 
local function BuffedOnDragStop(self, index, button) -- stop dragging config frames and set positions
if (button == "LeftButton") then
local BuffButton = _G[self..index]
BuffButton:StopMovingOrSizing()
local left, right, top, bottom = BuffButton:GetLeft(), BuffButton:GetRight(), BuffButton:GetTop(), BuffButton:GetBottom()
local width, height = BuffButton:GetWidth(), BuffButton:GetHeight()
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local frame = _G["Buffed"..FrameName..i]
if not (frame:GetName() == BuffButton:GetName()) then
local BLeft, BRight, BTop, BBottom = frame:GetLeft(), frame:GetRight(), frame:GetTop(), frame:GetBottom()
local BWidth, BHeight = frame:GetWidth(), frame:GetHeight()
local BBCenterX = (right+left)/2
local BBCenterY = (top+bottom)/2
local FCenterX = (BRight+BLeft)/2
local FCenterY = (BTop+BBottom)/2
if (BBCenterX < (FCenterX + 100)) and (BBCenterX > (FCenterX - 100)) and (BBCenterY < (FCenterY + 100)) and (BBCenterY > (FCenterY - 100)) then
if BuffButton.StickySize then
BuffButton:SetWidth(BWidth)
BuffButton:SetHeight(BHeight)
end
if BuffButton.StickyPos then
if (BBCenterX < (FCenterX + 20)) and (BBCenterX > (FCenterX - 20)) then
BuffButton:ClearAllPoints()
BuffButton:SetPoint("CENTER", UIParent, "BOTTOMLEFT", FCenterX, BBCenterY )
end
if (BBCenterY < (FCenterY + 20)) and (BBCenterY > (FCenterY - 20)) then
BuffButton:ClearAllPoints()
BuffButton:SetPoint("CENTER", UIParent, "BOTTOMLEFT", BBCenterX, FCenterY )
end
end
end
if (BuffButton.padding ~= 0) then
if ((left > (BLeft - BuffButton.padding) and left < (BRight + BuffButton.padding)) or (right > (BLeft - BuffButton.padding) and right < (BRight + BuffButton.padding) )) and ((top > (BBottom - BuffButton.padding) and top < (BTop + BuffButton.padding)) or (bottom > (BBottom - BuffButton.padding) and bottom < (BTop + BuffButton.padding)) ) then
local Xdir = (BBCenterX - FCenterX)/abs(BBCenterX - FCenterX)
local Ydir = (BBCenterY - FCenterY)/abs(BBCenterY - FCenterY)
local x = FCenterX + Xdir*((BRight-BLeft)/2 + (right-left)/2 + BuffButton.padding)
local y = FCenterY + Ydir*((BTop-BBottom)/2 + (top-bottom)/2 + BuffButton.padding)
if abs(BBCenterX - FCenterX) < 10 then
x = FCenterX
elseif abs(BBCenterY - FCenterY) < 10 then
y = FCenterY
end
BuffButton:ClearAllPoints()
BuffButton:SetPoint("CENTER", UIParent, "BOTTOMLEFT", x, y )
end
end
end
end
end
end
end
 
 
local function CreateConfigFrames() -- first creation of config frames
local count = 40
for j = 1, #LoadOrder do
local FrameName = LoadOrder[j]
local FrameNum = BuffedSettings.FrameCreation[LoadOrder[j]]
--print(LoadOrder[j])
for i = 1, FrameNum do
count = count + 1
if not _G["Buffed"..FrameName..i] then
local f = CreateFrame("Button", "Buffed"..FrameName..i, UIParent)
f:SetWidth(30)
f:SetHeight(30)
f:SetMovable(true)
f.corner = CreateFrame("Button", "Buffed"..FrameName.."Corner"..i, f)
f.corner:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT")
f.corner:SetPoint("TOPLEFT", f, "CENTER", 5, -5)
f.corner:SetMovable(true)
f.cornerT = f.corner:CreateTexture()
f.cornerT:SetTexture("Interface\\AddOns\\Buffed!\\ResizerButton.tga")
f.cornerT:SetAllPoints(f.corner)
f.corner:Hide()
f.StickyPos = 1
f.StickySize = 1
f.padding = 10
f.resizing = nil
f.verbose = true
f.alpha = false
f.enabled = true
f:SetResizable(true)
f:SetFrameStrata("HIGH")
f:SetMaxResize(80,80)
f:SetMinResize(15,15)
f.corner:SetResizable(true)
f.duration = f:CreateFontString(f:GetName().."Duration", "OVERLAY", "GameFontNormal")
f.duration:SetText("0:00")
f.duration:SetVertexColor(FontColour.r, FontColour.g, FontColour.b, FontColour.a)
f.durationb = CreateFrame("Frame", f)
f.durationb:SetParent(f)
f.durationb:SetWidth(30)
f.durationb:SetHeight(10)
f.durationb:SetPoint("TOP", f, "BOTTOM")
f.durationb:EnableMouse(true)
f.durationb:SetMovable(true)
f.duration:ClearAllPoints()
f.duration:SetAllPoints(f.durationb)
f.durationb:SetScript("OnMouseDown", function(self) self:StartMoving() end)
f.durationb:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() local x, y = BGetPoint(self) local Bx, By = BGetPoint(f) BSetPoint(self, x-Bx, y-By, f, "CENTER") end)
f:EnableMouseWheel(true)
f:SetScript("OnMouseWheel", function(self, value) local x, y = BGetPoint(f) if IsShiftKeyDown() then BSetPoint(f, x + value, y) else BSetPoint(f, x, y + value) end end)
f.corner:EnableMouse(true)
f.pa = f:CreateTexture()
f.pa:SetTexture("Interface\\AddOns\\Buffed!\\ConfTexture.tga")
f.pa:SetPoint("TOPLEFT", f, "TOPLEFT", -f.padding, f.padding)
f.pa:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", f.padding, -f.padding)
f.pa:SetVertexColor(1,1,1)
f.pa:SetTexCoord(1,0,0,1);
f.pa:SetAlpha(0.3)
f.pa:Hide()
f.pb = f:CreateTexture()
f.pb:SetTexture("Interface\\AddOns\\Buffed!\\ConfTexture.tga")
f.pb:SetPoint("TOPLEFT", f, "TOPLEFT", -f.padding, f.padding)
f.pb:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", f.padding, -f.padding)
f.pb:SetVertexColor(1,1,1)
f.pb:SetAlpha(0.3)
f.pb:Hide()
f:SetScript("OnMouseDown", function(self, button) BuffedOnDragStart("Buffed"..FrameName, i, button); end)
f:SetScript("OnMouseUp", function(self, button) f.pa:Hide(); f.pb:Hide(); BuffedOnDragStop("Buffed"..FrameName, i, button) end)
f.corner:SetScript("OnMouseDown", function() f:StartSizing(); f.resizing = true; end)
f.corner:SetScript("OnUpdate", function() if f.resizing then f:SetWidth(math.max(f:GetWidth(), f:GetHeight())); f:SetHeight(math.max(f:GetWidth(), f:GetHeight())) end end)
f.corner:SetScript("OnMouseUp", function() --if its the master frame, set all other frames the same size
f.resizing = nil
f:StopMovingOrSizing()
BuffedUpdate("force")
if (FrameName == "Master" ) then
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local fr = _G["Buffed"..FrameName..i]
fr:SetWidth(f:GetWidth())
fr:SetHeight(f:GetHeight())
end
end
end
end)
f.fs = f:CreateFontString( FrameName.."FS"..i, "OVERLAY", "GameFontNormal")
f.bar = CreateFrame("Frame", nil, f)
f.bar:SetWidth(70)
f.bar:SetHeight(20)
f.bar:SetPoint("LEFT", f, "RIGHT", 3, 0)
f.bar.tex = f.bar:CreateTexture(nil, "OVERLAY")
f.bar.tex:SetAllPoints(f.bar)
f.bar.tex:SetTexture("Interface\\AddOns\\Buffed!\\Flat.tga")
f.bar.tex:SetVertexColor(FrameColours[FrameName].r,FrameColours[FrameName].g,FrameColours[FrameName].b, 0.6)
f.bar:EnableMouse(true)
f.bar:SetMovable(true)
f.bar:SetResizable(true)
f.bar:SetScript("OnMouseDown", function(self, button) if (button == "LeftButton") then self:StartMoving() elseif IsShiftKeyDown() then self:StartSizing("RIGHT") else self:StartSizing("BOTTOM") end end)
f.bar:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() local x, y = BGetPoint(self) local Bx, By = BGetPoint(f) BSetPoint(self, x-Bx, y-By, f, "CENTER") end)
f.bar.horiz = true
f.fs:SetText(i)
if (FrameName == "Master" )then -- make the master frame larger, change its label
f.fs:SetWidth(20)
f.fs:SetText("M")
f.durationb:SetScript("OnMouseUp", function(self)
self:StopMovingOrSizing()
local x, y = BGetPoint(self)
local Bx, By = BGetPoint(f)
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local frame = _G["Buffed"..FrameName..i]
BSetPoint(frame.durationb, x-Bx, y-By, frame, "CENTER")
end
end
end)
f.bar:SetScript("OnMouseUp", function(self, button)
self:StopMovingOrSizing()
local x, y = BGetPoint(self)
local Bx, By = BGetPoint(f)
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local frame = _G["Buffed"..FrameName..i]
BSetPoint(frame.bar, x-Bx, y-By, frame, "CENTER")
frame.bar:SetHeight(self:GetHeight())
frame.bar:SetWidth(self:GetWidth())
end
end
end)
end
f.fs:SetPoint("CENTER")
local x = cos((360/25)*count)*4*count
local y = sin((360/25)*count)*4*count
f:SetPoint("CENTER", UIParent, "CENTER", x , y)
f.t = f:CreateTexture()
f.t:SetTexture("Interface\\AddOns\\Buffed!\\ConfTexture.tga")
f.t:SetAllPoints(f)
f.t:SetVertexColor(FrameColours[FrameName].r,FrameColours[FrameName].g,FrameColours[FrameName].b)
f.ti = f:CreateTexture()
f.ti:SetTexture("Interface\\AddOns\\Buffed!\\ConfTexture.tga")
f.ti:SetAllPoints(f)
f.ti:SetVertexColor(0,0,0)
f.ti:SetTexCoord(1,0,0,1);
if (FrameName == "Filter" )then
f.enabled = false
f.fs:SetPoint("BOTTOM", f, "TOP", 10, 0)
f.fs:SetWidth(80)
end
f:Hide()
end
end
end
end
 
local function CreateSettingsMenu()
local ConFrame = CreateFrame("Frame")
local ConfigLayout = {
BuffSlider = { Ftype = "Slider", Inherits = "OptionsSliderTemplate",
FName = "BuffedBuffSlider", Location = "CENTER", Xoff = 0,Yoff = 150, Parent = ConFrame,
Min = 0, Max = 32, Step = 1, StartVal = BuffedSettings.FrameCreation.Buff,LowText = 0, HighText = 32,
Script1 = {event = "OnValueChanged", func = function(self) BuffedSettings.FrameCreation.Buff = self:GetValue(); _G["BuffString"]:SetText(self:GetValue()) end,},
Script2 = {event = "OnMouseUp", func = function() CreateConfigFrames(); ToggleLock("config"); ToggleLock("config"); end,}
},
DebuffSlider = { Ftype = "Slider", Inherits = "OptionsSliderTemplate",
FName = "BuffedDebuffSlider", Location = "CENTER", Xoff = 0, Yoff = 100, Parent = ConFrame,
Min = 0, Max = 16, Step = 1, StartVal = BuffedSettings.FrameCreation.Debuff, LowText = 1, HighText = 16,
Script1 = {event = "OnValueChanged", func = function(self) BuffedSettings.FrameCreation.Debuff = self:GetValue(); _G["DebuffString"]:SetText(self:GetValue()) end,},
Script2 = {event = "OnMouseUp", func = function() CreateConfigFrames(); ToggleLock("config"); ToggleLock("config"); end,}
},
TargetBuffSlider = { Ftype = "Slider", Inherits = "OptionsSliderTemplate",
FName = "BuffedTargetBuffSlider", Location = "CENTER", Xoff = 0, Yoff = 50, Parent = ConFrame,
Min = 0, Max = 16, Step = 1, StartVal = BuffedSettings.FrameCreation.TargetBuff, LowText = 1, HighText = 16,
Script1 = {event = "OnValueChanged", func = function(self) BuffedSettings.FrameCreation.TargetBuff = self:GetValue(); _G["TargBuffString"]:SetText(self:GetValue())end,},
Script2 = {event = "OnMouseUp", func = function() CreateConfigFrames(); ToggleLock("config"); ToggleLock("config"); end,}
},
TargetDebuffSlider = { Ftype = "Slider", Inherits = "OptionsSliderTemplate",
FName = "BuffedTargetDebuffSlider", Location = "CENTER", Xoff = 0, Yoff = 0, Parent = ConFrame,
Min = 0, Max = 16, Step = 1, StartVal = BuffedSettings.FrameCreation.TargetDebuff, LowText = 1, HighText = 16,
Script1 = {event = "OnValueChanged", func = function(self) BuffedSettings.FrameCreation.TargetDebuff = self:GetValue(); _G["TargDebuffString"]:SetText(self:GetValue())end,},
Script2 = {event = "OnMouseUp", func = function() CreateConfigFrames(); ToggleLock("config"); ToggleLock("config"); end,}
},
BuffString = { Ftype = "FontString", Location = "CENTER", Xoff = 110, Yoff = 150, Parent = ConFrame["BuffSlider"],
R = 1, G = 1, B = 1, Width = 60, Height = 15,
},
DebuffString = { Ftype = "FontString", Location = "CENTER", Xoff = 110, Yoff = 100, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 60, Height = 15,
},
TargBuffString = { Ftype = "FontString", Location = "CENTER", Xoff = 110, Yoff = 50, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 60, Height = 15,
},
TargDebuffString = { Ftype = "FontString", Location = "CENTER", Xoff = 110, Yoff = 0, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 60, Height = 15,
},
TitleString = { Ftype = "FontString", Location = "CENTER", Xoff = 0, Yoff = 200, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 150, Height = 15, StringVal = "Buffed! Options",
},
BuffLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = 150, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 150, Height = 15, StringVal = "Buff Count:",
},
DebuffLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = 100, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 150, Height = 15, StringVal = "Debuff Count:",
},
TargetBuffLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = 50, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 150, Height = 15, StringVal = "Target buff:",
},
TargetDebuffLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = 0, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 150, Height = 15, StringVal = "Target debuff:",
},
WepEnchLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = -50, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 200, Height = 15, StringVal = "Show Weapon Enchants:",
},
DurationLabel = { Ftype = "FontString", Location = "CENTER", Xoff = -120, Yoff = -100, Parent = ConFrame,
R = 1, G = 1, B = 1, Width = 200, Height = 15, StringVal = "Sort By Duration",
},
WepEnchToggle = { Ftype = "CheckButton", Inherits = "InterfaceOptionsCheckButtonTemplate",
FName = "BuffedTargetDebuffSlider", Location = "CENTER", Xoff = 0, Yoff = -50, Parent = ConFrame,
Script1 = {event = "OnMouseUp", func = function(self) if TemporaryEnchantFrame:IsShown() then BuffedSettings.FrameCreation.Wep = 0; TemporaryEnchantFrame:Hide() else BuffedSettings.FrameCreation.Wep = 2; TemporaryEnchantFrame:Show() BuffedUpdate("force") end;
ToggleLock("config"); ToggleLock("config");
end, variable = TemporaryEnchantFrame:IsShown()},
},
}
 
local Text = {}
for Name, values in pairs(ConfigLayout) do
 
if ( values.Ftype == "Frame" ) or ( values.Ftype == "Slider" ) or ( values.Ftype == "CheckButton" ) then
ConFrame[Name] = CreateFrame(values.Ftype, values.FName, values.Parent, values.Inherits)
if ( values.Ftype == "Slider" ) then
ConFrame[Name]:SetMinMaxValues(values.Min,values.Max)
ConFrame[Name]:SetValueStep(values.Step)
ConFrame[Name]:SetValue(values.StartVal)
_G[values.FName.."Low"]:SetText(values.LowText)
_G[values.FName.."High"]:SetText(values.HighText)
end
if (values.Ftype == "CheckButton") then
if values.variable then
ConFrame[Name]:SetChecked(true)
else
ConFrame[Name]:SetChecked(false)
end
end
if values["Script1"] then
ConFrame[Name]:SetScript(values["Script1"].event, values["Script1"].func)
end
ConFrame[Name]:SetScript(values["Script1"].event, values["Script1"].func)
if values["Script2"] then
ConFrame[Name]:SetScript(values["Script2"].event, values["Script2"].func)
end
 
end
if ( values.Ftype == "FontString" ) then
ConFrame[Name] = ConFrame:CreateFontString(Name, "OVERLAY", "GameFontNormal")
ConFrame[Name]:SetWidth(values.Width)
ConFrame[Name]:SetHeight(values.Height)
ConFrame[Name]:SetTextColor(values.R,values.G,values.B)
if values.StringVal then
ConFrame[Name]:SetText(values.StringVal)
end
end
ConFrame[Name]:SetPoint(values.Location,values.Xoff,values.Yoff)
 
end
 
ConFrame.name = "Buffed!"
InterfaceOptions_AddCategory(ConFrame)
 
end
 
 
local function BuffedOnLoad(self, event, ...)
if event == "ADDON_LOADED" then
if select(1, ...) == "Buffed!" then
if not BuffedSettings then
BuffedSettings = {}
BuffedSettings.FrameCreation = {TargetBuff = 7, Buff = 7, Debuff = 7, Wep = 2, TargetDebuff = 7, Master = 1, Filter = 20,}
BuffedSettings.duration = false
BuffedSettings.animation = false
end
CreateConfigFrames()
CreateSettingsMenu()
end
 
elseif event == "PLAYER_ENTERING_WORLD" then
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, 32 do
local f = _G["Buffed"..FrameName..i]
if f then
if BuffedProfiles[UnitName("player")] and BuffedProfiles[UnitName("player")].nocombat and BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i] then
local pos = BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i]
BSetPoint(f, pos.x, pos.y)
f:SetWidth(pos.width)
f:SetHeight(pos.height)
f.alpha = pos.alpha
 
if pos.bar and pos.bar.shown then f.bar:Show() else f.bar:Hide() end
f.bar.horiz = pos.bar.horiz
f.bar:SetWidth(pos.bar.width)
f.bar:SetHeight(pos.bar.height)
BSetPoint(f.bar, pos.bar.x-pos.x, pos.bar.y-pos.y, f, "CENTER")
BSetPoint(f.durationb, pos.durationb.x-pos.x, pos.durationb.y-pos.y, f, "CENTER")
end
end
end
end
BuffedUpdate("force")
if (BuffedSettings.FrameCreation.Wep == 0) then
TemporaryEnchantFrame:Hide()
end
for i = 1, BuffedSettings.FrameCreation.Filter do
if _G["BuffedFilter"..i] then
for Name, Filter in pairs(BuffedProfiles.FilterFrames) do
if Filter and Filter["BuffedFilter"..i] then
local frame = _G["BuffedFilter"..i]
local g = Filter["BuffedFilter"..i]
frame.enabled = g.enabled
frame.name = g.name
frame.Ftype = g.Ftype
frame.fs:SetText(g.text)
end
end
end
end
end
end
 
local moop = CreateFrame("Frame")
moop:RegisterEvent("ADDON_LOADED")
moop:RegisterEvent("PLAYER_ENTERING_WORLD")
moop:SetScript("OnEvent", BuffedOnLoad)
 
local DropDownTest = CreateFrame("Frame", "BuffedBuffConfig", UIParent, "UIDropDownMenuTemplate")
DropDownTest:SetPoint("CENTER")
UIDropDownMenu_SetWidth(DropDownTest, 65)
UIDropDownMenu_SetButtonWidth(DropDownTest, 20)
DropDownTest:Hide()
local function DropDownTest_ItemClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
end
 
 
local function AlphaSlider()
local Slider
if not _G["SwishAlphaSlider"] then
Slider = CreateFrame("Slider", "SwishAlphaSlider", UIParent, "OptionsSliderTemplate")
if ActiveButton.alpha then
Slider:SetValue(ActiveButton.alpha)
else
Slider:SetValue(0.5)
end
Slider:SetMinMaxValues(0,1)
Slider:SetValueStep(0.05)
_G["SwishAlphaSliderLow"]:SetText(0)
_G["SwishAlphaSliderHigh"]:SetText(1)
Slider:SetScript("OnValueChanged", function(self)
ActiveButton.ti:SetAlpha(self:GetValue());
ActiveButton.alpha = self:GetValue();
if (ActiveButton:GetName() == "BuffedMaster1") then
ForAllFrames(function(f) f.ti:SetAlpha(self:GetValue()) f.alpha = self:GetValue() end)
end
end)
Slider:SetScript("OnMouseUp", function(self) self:Hide(); BuffedUpdate("force") end)
Slider:SetWidth(ActiveButton:GetWidth() + 30)
else
Slider = _G["SwishAlphaSlider"]
if ActiveButton.alpha then
Slider:SetValue(ActiveButton.alpha)
else
Slider:SetValue(0.5)
end
Slider:SetScript("OnValueChanged", function(self)
ActiveButton.ti:SetAlpha(self:GetValue());
ActiveButton.alpha = self:GetValue();
if (ActiveButton:GetName() == "BuffedMaster1") then
ForAllFrames(function(f) f.ti:SetAlpha(self:GetValue()) f.alpha = self:GetValue() end)
end
end)
end
Slider:ClearAllPoints()
Slider:SetPoint("CENTER", ActiveButton, "TOP", 0, 10)
Slider:Show()
end
 
local function MasterOptions(var, val1, val2)
if ActiveButton[var] then
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local f = _G["Buffed"..FrameName..i];
f[var] = val1
end
end
else
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local f = _G["Buffed"..FrameName..i];
f[var] = val2
end
end
end
end
 
local function DropDownTest_Initialize(self, level) -- the menu items, needs a cleanup
level = level or 1
local info = UIDropDownMenu_CreateInfo()
local value = UIDROPDOWNMENU_MENU_VALUE
if ActiveButton then
if (level == 1) then
info.text = "Sticky Positioning"
info.value = 1
info.checked = ActiveButton.StickyPos
info.tooltipTitle = "Sticky Positioning"
info.tooltipText = "Aligns the buffs with other nearby buffs"
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function() MasterOptions("StickyPos", nil, 1) end
else
info.func = function() if ActiveButton.StickyPos then ActiveButton.StickyPos = nil else ActiveButton.StickyPos = 1 end end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Sticky Sizing"
info.value = 2
info.checked = ActiveButton.StickySize
info.tooltipTitle = "Sticky Sizing"
info.tooltipText = "Sets the size of the buff to other nearby buffs"
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function() MasterOptions("StickySize", nil, 1) end
else
info.func = function() if ActiveButton.StickySize then ActiveButton.StickySize = nil else ActiveButton.StickySize = 1 end end
end
 
UIDropDownMenu_AddButton(info, level)
 
info.text = "Sticky Padding"
info.value = 3
info.checked = function() if (ActiveButton.padding == 10) then return true else return false end end
info.tooltipTitle = "Sticky Padding"
info.tooltipText = "Attempts to even out the padding between nearby buffs"
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function()
if (ActiveButton.padding == 10) then
ForAllFrames(function(f)
f.padding = 0 end)
else
for FrameName, FrameNum in pairs(BuffedSettings.FrameCreation) do
for i = 1, FrameNum do
local f = _G["Buffed"..FrameName..i]
if f then
f.padding = 10
end
end
end
end
end
else
info.func = function() if (ActiveButton.padding == 10) then ActiveButton.padding = 0 else ActiveButton.padding = 10 end end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Alpha"
info.value = "Alpha"
info.checked = nil
info.tooltipTitle = "Alpha"
info.tooltipText = "Set the Alpha for this frame"
info.func = function() AlphaSlider() end
UIDropDownMenu_AddButton(info, level)
 
local duration = _G[ActiveButton:GetName().."Duration"]
info.text = "Show Dummy Timers"
info.value = 3
info.checked = duration:IsShown()
info.tooltipTitle = "Show Dummy Timer"
info.tooltipText = "Show a fake timer to help with positioning."
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function()
if duration:IsShown() then
ForAllFrames(function(f) f:Hide() end)
else
ForAllFrames(function(f) f:Show() end)
end
end
else
info.func = function() if duration:IsShown() then duration:Hide() else duration:Show() end end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Resizable"
info.value = 4
info.checked = ActiveButton.corner:IsShown()
info.tooltipTitle = "Resizable"
info.tooltipText = "Shows a draggable icon to allow buff resizing"
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function()
if ActiveButton.corner:IsShown() then
ForAllFrames(function(f) f.corner:Hide() end)
else
ForAllFrames(function(f) f.corner:Show() end)
end
end
else
info.func = function() if ActiveButton.corner:IsShown() then ActiveButton.corner:Hide() else ActiveButton.corner:Show() end end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Reset Size"
info.value = 5
info.checked = nil
info.tooltipTitle = "Reset Size"
info.tooltipText = "Resets the size of the buff to default values"
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = ForAllFrames(function(f) f:SetWidth(30) f:SetHeight(30) end)
else
info.func = function() ActiveButton:SetWidth(30) ActiveButton:SetHeight(30) end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Buff Bars"
info.value = "Bars"
info.checked = ActiveButton.bar:IsShown()
info.tooltipTitle = "Buff Bars"
info.tooltipText = "Show timer bars alongside the buff icon."
info.func = function() if ActiveButton.bar:IsShown() then ActiveButton.bar:Hide() else ActiveButton.bar:Show() end end
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = function()
if ActiveButton.bar:IsShown() then
ForAllFrames(function(f) f.bar:Hide() end)
else
ForAllFrames(function(f) f.bar:Show() end)
end
end
else
info.func = function() if ActiveButton.bar:IsShown() then ActiveButton.bar:Hide() else ActiveButton.bar:Show() end end
end
info.hasArrow = true
UIDropDownMenu_AddButton(info, level)
 
for i = 1, 16 do
if (ActiveButton:GetName() == "BuffedFilter"..i) then
info.text = "Delete Filter"
info.value = 3
info.checked = nil
info.tooltipTitle = "Delete Filter"
info.tooltipText = "Deletes the filter, sending the buff back to the default stack"
info.func = function()
info.hasArrow = false
ActiveButton.enabled = nil
BuffedProfiles.FilterFrames[ActiveButton.Ftype]["BuffedFilter"..i] = nil
print(ActiveButton.name.." filter deleted")
ActiveButton.name = nil
ToggleLock()
ToggleLock()
BuffedUpdate("force")
end
UIDropDownMenu_AddButton(info, level)
end
end
if (ActiveButton:GetName() == "BuffedMaster1") then
 
info.text = "Sort By Duration"
info.value = 3
info.checked = BuffedSettings.duration
info.tooltipTitle = "Sort By Duration"
info.tooltipText = "Sort the buffs by time remaining"
info.hasArrow = false
info.func = function() if BuffedSettings.duration then BuffedSettings.duration = false; BuffedUpdate("force"); else BuffedSettings.duration = true BuffedUpdate("force") end end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Filter Target Buffs"
info.value = 3
info.checked = BuffedSettings.BuffIsMine
info.tooltipTitle = "Filter Target Buffs"
info.tooltipText = "Only show the target buffs that are yours."
info.hasArrow = false
info.func = function()
if BuffedSettings.BuffIsMine then
BuffedSettings.BuffIsMine = false
else
BuffedSettings.BuffIsMine = true
end
BuffedUpdate("force")
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Filter Target Debuffs"
info.value = 3
info.checked = BuffedSettings.DebuffIsMine
info.tooltipTitle = "Filter Target Debuffs"
info.tooltipText = "Only show the target debuffs that are yours."
info.func = function()
if BuffedSettings.DebuffIsMine then
BuffedSettings.DebuffIsMine = false
else
BuffedSettings.DebuffIsMine = true
end
BuffedUpdate("force")
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Save Combat Positions"
info.value = 3
info.checked = nil
info.tooltipTitle = "Save Combat Positions"
info.tooltipText = "Save the current buff position as the location for buffs in combat"
info.func = function()
ForAllFrames(function(f, FrameName, FrameNum, i)
local f = _G["Buffed"..FrameName..i]
if not BuffedProfiles[UnitName("player")] then
BuffedProfiles[UnitName("player")] = {combat = {}, nocombat = {}}
end
local x, y = BGetPoint(f)
local width, height = floor(f:GetWidth() + 0.5), floor(f:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].combat["Buffed"..FrameName..i] = {width = width, height = height, x = x, y = y, alpha = f.alpha,}
x, y = BGetPoint(f.bar)
width, height = floor(f.bar:GetWidth() + 0.5), floor(f.bar:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].combat["Buffed"..FrameName..i].bar = {shown = f.bar:IsShown(), horiz = f.bar.horiz, width = width, height = height, x = x, y = y}
x, y = BGetPoint(f.durationb)
width, height = floor(f.durationb:GetWidth() + 0.5), floor(f.durationb:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].combat["Buffed"..FrameName..i].bar = {shown = f.durationb:IsShown(), width = width, height = height, x = x, y = y}
end)
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Save Settings"
info.value = 3
info.checked = nil
info.tooltipTitle = "Save the current position of all buffs"
info.tooltipText = "Save the current buff position as the location for buffs out of combat"
info.func = ForAllFrames(function(f, FrameName, FrameNum, i)
if not BuffedProfiles[UnitName("player")] then
BuffedProfiles[UnitName("player")] = {combat = {}, nocombat = {}}
end
local x, y = BGetPoint(f)
local width, height = floor(f:GetWidth() + 0.5), floor(f:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i] = {width = width, height = height, x = x, y = y, alpha = f.alpha,}
x, y = BGetPoint(f.bar)
width, height = floor(f.bar:GetWidth() + 0.5), floor(f.bar:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i].bar = {shown = f.bar:IsShown(), horiz = f.bar.horiz, width = width, height = height, x = x, y = y}
x, y = BGetPoint(f.durationb)
width, height = floor(f.durationb:GetWidth() + 0.5), floor(f.durationb:GetHeight() + 0.5)
BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i].durationb = {shown = f.durationb:IsShown(), width = width, height = height, x = x, y = y}
end)
UIDropDownMenu_AddButton(info, level)
end
elseif level == 2 then
if value == "Bars" then
info.text = "Orientation"
info.value = "Orientation"
info.tooltipTitle = ""
info.tooltipText = ""
info.hasArrow = true
UIDropDownMenu_AddButton(info, level)
 
info.text = "Texture"
info.value = "Texture"
info.tooltipTitle = ""
info.tooltipText = ""
UIDropDownMenu_AddButton(info, level)
 
info.text = "Direction"
info.value = "Direction"
info.tooltipTitle = ""
info.tooltipText = ""
UIDropDownMenu_AddButton(info, level)
--[[
info.text = "Colour"
info.value = "Colour"
info.tooltipTitle = "Colour"
info.tooltipText = "Choose a Colour for the duration bar."
info.hasArrow = false
info.hasColorSwatch = 1
info.hasOpacity = 1
local r, g, b, a = ActiveButton.bar.tex:GetVertexColor()
info.r = r
info.g = g
info.b = b
info.opacity = 1-a
info.swatchFunc = function() local R,G,B = ColorPickerFrame:GetColorRGB() ActiveButton.bar.tex:SetVertexColor(R,G,B) end
info.opacityFunc = function() local A = OpacitySliderFrame:GetValue() local R,G,B = ColorPickerFrame:GetColorRGB() ActiveButton.bar.tex:SetVertexColor(R,G,B, 1-A) end
UIDropDownMenu_AddButton(info, level)]]
 
end
elseif level == 3 then
if value == "Orientation" then
info.text = "Horizontal"
info.value = "Horizontal"
info.tooltipTitle = ""
info.tooltipText = ""
info.checked = ActiveButton.bar.horiz
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = ForAllFrames(function(f) f.bar.horiz = true end)
else
info.func = function() ActiveButton.bar.horiz = true end
end
UIDropDownMenu_AddButton(info, level)
 
info.text = "Vertical"
info.value = "Vertical"
info.tooltipTitle = ""
info.tooltipText = ""
info.checked = not ActiveButton.bar.horiz
if (ActiveButton:GetName() == "BuffedMaster1") then
info.func = ForAllFrames(function(f) f.bar.horiz = false end)
else
info.func = function() ActiveButton.bar.horiz = false end
end
UIDropDownMenu_AddButton(info, level)
end
end
end
end
 
UIDropDownMenu_Initialize(DropDownTest, DropDownTest_Initialize, "MENU")
 
--------------------------------- anchor all buff frames ---------------------------------
 
local function BuffedBuffButtonAnchors(buttonName, index, IsMine, buffname, tag)
local buff = _G[buttonName..index]
local confbuff = _G[tag..index-HiddenCount]
if BuffedSettings.BuffIsMine and not (IsMine == "player") then
buff:Hide()
HiddenCount = HiddenCount + 1
return
end
if next(BuffedSorter) then
for i = 1, #BuffedSorter do
if (BuffedSorter[i].number == index) then
confbuff = _G[tag..i-HiddenCount]
end
end
end
for i = 1, 20 do
local f = _G["BuffedFilter"..i]
if f and (f.name == buffname) then
if BuffedProfiles.FilterFrames[buttonName]["BuffedFilter"..i] then
if (BuffedProfiles.FilterFrames[buttonName]["BuffedFilter"..i].name == buffname) then
confbuff = f
HiddenCount = HiddenCount + 1
end
end
end
end
local duration = _G[confbuff:GetName().."Duration"]
local bduration = _G[buttonName..index.."Duration"]
bduration:SetAllPoints(duration)
buff:ClearAllPoints()
if confbuff.alpha then
buff:SetAlpha(confbuff.alpha)
end
buff:SetAllPoints(confbuff)
buff.parent = confbuff
end
 
local function OpenConfig()
InterfaceOptionsFrame_OpenToCategory(ConFrame)
end
 
SLASH_Buffed1 = "/buffed";
SlashCmdList["Buffed"] = ToggleLock;
 
local function BuffedTimeFormat(self, timer) -- format the time
local hours = floor(timer/3600)
local minutes = floor((timer-hours*3600)/60)
local seconds = floor((timer-hours*3600 -minutes*60))
if self.verbose then
 
else
if hours > 0 and minutes > 0 then
if minutes >= 10 then
return hours..":"..minutes
else
return hours..":0"..minutes
end
elseif minutes > 0 then
if minutes > 10 then
return minutes.."m"
else
if seconds >= 10 then
return minutes..":"..seconds
else
return minutes..":0"..seconds
end
end
else
return seconds
end
end
end
 
local function BuffedButtonUpdateDuration(self, timeLeft)
if timeLeft then
self.duration:SetFormattedText(BuffedTimeFormat(self, timeLeft));
self.duration:Show();
if ( timeLeft < BUFF_DURATION_WARNING_TIME ) then
self.duration:SetVertexColor(1, 1, 1)
end
else
self.duration:Hide();
end
end
 
local function BuffedButtonOnUpdate(self, elapsed, unit, index)
if not self.divider then
self.divider = 0
end
self.divider = self.divider + elapsed
self.timeLeft = max(self.timeLeft - elapsed, 0);
if self.divider > 0.1 then
self.dbar:SetValue(self.timeLeft)
if self.parent and self.parent.bar then
if not self.parent.bar:IsShown() then
self.dbar:Hide()
end
end
BuffedButtonUpdateDuration(self, self.timeLeft);
--self.timeLeft = max(self.timeLeft - elapsed, 0);
if self.parent then
if not self.alpha then -- just in case it isnt parented to the config frames
self:SetAlpha(math.max(0.3,(1 - (self.timeLeft-60)/777)))
elseif self.alpha then
self:SetAlpha(self.alpha)
end
end
if ( GameTooltip:IsOwned(self) ) then
GameTooltip:SetUnitAura(unit, index, self.filter);
end
self.divider = 0
end
end
 
local function BuffedRightClick(self, button, Bname, buttonName)
if ( button == "RightButton" ) then
CancelUnitBuff(self.unit, self:GetID(), self.filter)
elseif ( button == "LeftButton" ) then
if IsShiftKeyDown() then
if not BuffedProfiles.FilterFrames[buttonName][Bname] then
for i = 1, 16 do
frame = _G["BuffedFilter"..i]
if frame and not frame.name then
print("Added "..Bname.." to filter frames")
BuffedProfiles.FilterFrames[buttonName]["BuffedFilter"..i] = {name = Bname, enabled = true, Ftype = buttonName, text = Bname}
frame.enabled = true
frame.name = Bname
frame.Ftype = buttonName
frame.fs:SetText(Bname)
BuffedUpdate("force")
return
end
end
end
end
end
end
 
 
local function BuffedButtonUpdate(buttonName, index, filter, unit, tag)
local name, rank, texture, count, debuffType, duration, expirationTime, IsMine = UnitAura(unit, index, filter);
local buffName = buttonName..index;
local buff = _G[buffName]
local parent
if not name then
if buff then
buff:Hide();
buff.duration:Hide();
end
return nil;
else
local helpful = (filter == "HELPFUL");
if not buff then -- If button doesn't exist make it
buff = CreateFrame("Button", buffName, UIParent)
buff.duration = buff:CreateFontString(buff:GetName().."Duration", "OVERLAY", "GameFontNormal")
buff.duration:SetWidth(30)
buff.duration:SetHeight(15)
buff.duration:SetPoint("TOP", buff, "BOTTOM")
buff.duration:SetVertexColor(FontColour.r, FontColour.g, FontColour.b, FontColour.a)
buff.count = buff:CreateFontString(buff:GetName().."Count", "OVERLAY", "GameFontNormal")
buff.count:SetWidth(15)
buff.count:SetHeight(15)
buff.count:SetPoint("BOTTOMRIGHT", buff, "BOTTOMRIGHT")
buff.count:SetVertexColor(FontColour.r, FontColour.g, FontColour.b, FontColour.a)
buff.dbar = CreateFrame("StatusBar", nil, buff)
buff.dbar:SetWidth(70)
buff.dbar:SetHeight(20)
buff.dbar:SetPoint("LEFT", buff, "RIGHT", 3, 0)
buff.dbar:SetOrientation("HORIZONTAL")
buff.dbar:SetStatusBarTexture("Interface\\AddOns\\Buffed!\\Flat.tga")
buff.dbar:SetStatusBarColor(0.2, 1, 0.2)
buff.dbar:Hide()
buff.icon = buff:CreateTexture(buff:GetName().."Icon", "HIGH")
buff.icon:SetAllPoints(buff)
buff:SetScript("OnMouseUp", function(self, button) BuffedRightClick(self, button, name) end)
buff:SetScript("OnEnter", function(self)
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMLEFT");
GameTooltip:SetUnitAura(unit, self:GetID(), self.filter); end)
buff:SetScript("OnLeave", function() GameTooltip:Hide() end)
if not helpful then
buff.border = buff:CreateTexture(buff:GetName().."Border", "OVERLAY")
buff.border:SetTexture("Interface\\Buttons\\UI-Debuff-Overlays")
buff.border:SetTexCoord(0.3,0.5703125,0,0.515625)
buff.border:SetAllPoints(buff)
end
end
-- Setup Buff
buff.namePrefix = buttonName;
buff:SetID(index);
buff.unit = unit;
buff.filter = filter;
buff:Show();
 
 
-- Set filter-specific attributes
BuffedBuffButtonAnchors(buttonName, index, IsMine, name, tag)
if not helpful then
if ( buff.border ) then
local color;
if ( debuffType ) then
color = DebuffTypeColor[debuffType];
else
color = DebuffTypeColor["none"];
end
buff.border:SetVertexColor(color.r, color.g, color.b);
end
end
local parent = buff.parent
if parent then
if parent.alpha then
buff.alpha = parent.alpha
end
end
if ( duration > 0 and expirationTime ) then
buff.duration:Show();
 
if parent and parent.bar and parent.bar:IsShown() then
buff.dbar:SetWidth(parent.bar:GetWidth()) --this whole chunk needs moving
buff.dbar:SetHeight(parent.bar:GetHeight())
if parent.bar.horiz then
buff.dbar:SetOrientation("HORIZONTAL")
else
buff.dbar:SetOrientation("VERTICAL")
end
buff.dbar:SetStatusBarColor(parent.bar.tex:GetVertexColor())
buff.dbar:SetAllPoints(parent.bar)
buff.dbar:Show()
end
buff.dbar:SetMinMaxValues(0, duration)
if not buff.timeLeft then
buff.timeLeft = expirationTime - GetTime();
buff:SetScript("OnUpdate", function(self, elapsed)
BuffedButtonOnUpdate(self, elapsed, unit, index) end);
else
buff.timeLeft = expirationTime - GetTime();
end
buff.duration:SetFormattedText(BuffedTimeFormat(buff, buff.timeLeft))
else
if not buff.alpha then -- just in case it isnt parented to the config frames
buff:SetAlpha(0.5)
elseif buff.alpha then
buff:SetAlpha(buff.alpha)
end
buff.duration:Hide();
buff.dbar:Hide()
if ( buff.timeLeft ) then
buff:SetScript("OnUpdate", nil);
end
buff.timeLeft = nil;
end
 
buff.icon:SetTexture(texture);
 
if ( count > 1 ) then
buff.count:SetText(count);
buff.count:Show();
else
buff.count:Hide();
end
 
if ( GameTooltip:IsOwned(buff) ) then -- Refresh tooltip
GameTooltip:SetUnitAura(unit, index, filter);
end
end
return 1;
end
 
local function BuffedSort(num, unit, filter)
BuffedSorter = wipe(BuffedSorter)
if BuffedSettings.duration then
for i = 1,num do
local name, rank, texture, count, debuffType, duration, expirationTime, IsMine = UnitAura(unit, i, filter);
if (expirationTime == 0 ) or (expirationTime == nil ) then
expirationTime = GetTime() + 100000 + i
end
BuffedSorter[i] = {expTime = expirationTime, number = i }
 
end
if next(BuffedSorter) then
table.sort(BuffedSorter, function (a,b) return a.expTime < b.expTime end)
end
end
end
 
function BuffedUpdate(self, event, unit, ...)
if (event == "UNIT_AURA") and (unit == "player") or (self == "force") then
HiddenCount = 0 -- reset each time
BuffedSort(BuffedSettings.FrameCreation.Buff, "player", "HELPFUL")
for i=1, BuffedSettings.FrameCreation.Buff do
BuffedButtonUpdate("BuffedBuffButton", i, "HELPFUL", "player", "BuffedBuff")
end
BuffedSort(BuffedSettings.FrameCreation.Debuff, "player", "HARMFUL")
HiddenCount = 0
for i=1, BuffedSettings.FrameCreation.Debuff do
BuffedButtonUpdate("BuffedDebuffButton", i, "HARMFUL", "player", "BuffedDebuff")
end
end
if (event == "UNIT_AURA") and (unit == "target") or (event == "PLAYER_TARGET_CHANGED") then
HiddenCount = 0
BuffedSort(BuffedSettings.FrameCreation.TargetBuff, "target", "HELPFUL")
for i=1, BuffedSettings.FrameCreation.TargetBuff do
BuffedButtonUpdate("TargetBuffedButton", i, "HELPFUL", "target", "BuffedTargetBuff")
end
BuffedSort(BuffedSettings.FrameCreation.TargetDebuff, "target", "HARMFUL")
HiddenCount = 0
for i=1, BuffedSettings.FrameCreation.TargetDebuff do
BuffedButtonUpdate("TargetDebuffedButton", i, "HARMFUL", "target", "BuffedTargetDebuff")
end
end
for i = 1,2 do -- weapon enchant placement
local buff = _G["TempEnchant"..i]
local mooop = _G["BuffedWep"..i]
if buff and mooop then
local point, relativeTo, relativePoint, xOfs, yOfs = mooop:GetPoint()
buff:ClearAllPoints()
buff:SetPoint(point, relativeTo, relativePoint, xOfs, yOfs)
end
end
end
 
local h = CreateFrame("Frame")
h:RegisterEvent("UNIT_AURA")
h:RegisterEvent("PLAYER_TARGET_CHANGED")
h:SetScript("OnEvent", BuffedUpdate)
 
 
local function BuffedPositioning(self, event, ...)
if (event == "PLAYER_REGEN_ENABLED") then
ForAllFrames(function(f, FrameName, FrameNum, i)
if BuffedProfiles[UnitName("player")] and BuffedProfiles[UnitName("player")].nocombat and BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i] then
local pos = BuffedProfiles[UnitName("player")].nocombat["Buffed"..FrameName..i]
BSetPoint(f, pos.x, pos.y)
f:SetWidth(pos.width)
f:SetHeight(pos.height)
f.alpha = pos.alpha
if pos.bar.shown then f.bar:Show() else f.bar:Hide() end
f.bar.horiz = pos.bar.horiz
f.bar:SetWidth(pos.bar.width)
f.bar:SetHeight(pos.bar.height)
BSetPoint(f.bar, pos.bar.x, pos.bar.y)
BSetPoint(f.durationb, pos.durationb.x, pos.durationb.y)
end
end)
BuffedUpdate("force")
elseif (event == "PLAYER_REGEN_DISABLED") then
ForAllFrames(function(f, FrameName, FrameNum, i)
if BuffedProfiles[UnitName("player")] and BuffedProfiles[UnitName("player")].combat and BuffedProfiles[UnitName("player")].combat["Buffed"..FrameName..i] then
local pos = BuffedProfiles[UnitName("player")].combat["Buffed"..FrameName..i]
BSetPoint(f, pos.x, pos.y)
f:SetWidth(pos.width)
f:SetHeight(pos.height)
f.alpha = pos.alpha
if pos.bar.shown then f.bar:Show() else f.bar:Hide() end
f.bar.horiz = pos.bar.horiz
f.bar:SetWidth(pos.bar.width)
f.bar:SetHeight(pos.bar.height)
BSetPoint(f.bar, pos.bar.x, pos.bar.y)
BSetPoint(f.durationb, pos.durationb.x, pos.durationb.y)
end
end)
BuffedUpdate("force")
end
end
 
local g = CreateFrame("Frame")
g:RegisterEvent("PLAYER_REGEN_ENABLED")
g:RegisterEvent("PLAYER_REGEN_DISABLED")
g:SetScript("OnEvent", BuffedPositioning)
 
function BuffFrame_Update()
end
function TargetFrame_UpdateAuras (self)
end
 
Buffed!.toc New file
0,0 → 1,8
## Interface: 30100
## Title: Buffed!
## Notes: Buff frame mod?
## Version 1.84 Beta
## Author: Kraftman
## SavedVariables: BuffedSettings, BuffedProfiles
 
Buffed!.lua
\ No newline at end of file
ConfTexture.tga Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes : Added: svn:mime-type + application/octet-stream
Flat.tga Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes : Added: svn:mime-type + application/octet-stream
ResizerButton.tga Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes : Added: svn:mime-type + application/octet-stream