This Space For Rent
Join Date: Sep 2008
Posts: 1,173
|
aBags help
Hello.
In FreeUI I still use aBags because I think it's awesome, but there's one big problem: you need to /reload every time you add or upgrade a bag, because aBags only runs its script to set up the frame once.
I've tried again and again to make it automatically change when there's a new slot, but I just haven't been able to.
I'd greatly appreciate it if someone could help me out here, really.
Below is the script.
Every time you open bags, ReanchorButtons is ran, but as you can see after the first time all it does is show the frame itself. The first time, ReanchorButtons triggers MoveButtons, which moves every button into place and sets the frame size.
Code:
-- aBags by Alza, modified.
local F, C, L = unpack(select(2, ...))
--[[ Get the number of bag and bank container slots used ]]
local function CheckSlots()
if GetContainerNumSlots(4) == 0 then
if GetContainerNumSlots(3) == 0 then
if GetContainerNumSlots(2) == 0 then
if GetContainerNumSlots(1) == 0 then
return 1
else
return 2
end
else
return 3
end
else
return 4
end
else
return 5
end
end
local function CheckBankSlots()
return GetNumBankSlots() + 1
end
local function GetColumns()
return CheckSlots() + 4
end
-- [[ Local stuff ]]
local Spacing = 4
-- local Columns = 9
local BankColumns = 13
local _G = getfenv(0)
local bu, con, col, row
local buttons, bankbuttons = {}, {}
local firstopened, firstbankopened = 1, 1
--[[ Function to move buttons ]]
local MoveButtons = function(table, frame, columns)
col, row = 0, 0
for i = 1, #table do
bu = table[i]
bu:ClearAllPoints()
bu:SetNormalTexture("")
bu:SetPoint("TOPLEFT", frame, "TOPLEFT", col * (37 + Spacing) + 3, -1 * row * (37 + Spacing) - 3)
bu.SetPoint = F.dummy
if(col > (columns - 2)) then
col = 0
row = row + 1
else
col = col + 1
end
end
frame:SetHeight((row + (col==0 and 0 or 1)) * (37 + Spacing) + 19)
frame:SetWidth(columns * 37 + Spacing * (columns - 1) + 6)
col, row = 0, 0
end
--[[ Bags ]]
local holder = CreateFrame("Button", "aBagsHolder", UIParent)
holder:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -49, 49)
holder:SetFrameStrata("HIGH")
holder:Hide()
F.CreateBD(holder, .6)
local ReanchorButtons = function()
if(firstopened==1) then
for f = 1, CheckSlots() do
con = "ContainerFrame"..f
_G[con]:EnableMouse(false)
_G[con.."CloseButton"]:Hide()
_G[con.."PortraitButton"]:EnableMouse(false)
for i = 1, 7 do
select(i, _G[con]:GetRegions()):SetAlpha(0)
end
for i = GetContainerNumSlots(f-1), 1, -1 do
bu = _G[con.."Item"..i]
bu:SetFrameStrata("HIGH")
tinsert(buttons, bu)
_G[con.."Item"..i.."Count"]:SetFont(C.media.font, 8, "OUTLINEMONOCHROME")
_G[con.."Item"..i.."Count"]:ClearAllPoints()
_G[con.."Item"..i.."Count"]:SetPoint("TOP", bu, 0, -2)
_G[con.."Item"..i.."IconTexture"]:SetTexCoord(.1,.9,.1,.9)
_G[con.."Item"..i.."IconQuestTexture"]:SetTexture(C.media.questborder)
_G[con.."Item"..i.."IconQuestTexture"]:SetVertexColor(1, 0, 0)
_G[con.."Item"..i.."IconQuestTexture"]:SetTexCoord(0.05, .955, 0.05, .965)
_G[con.."Item"..i.."IconQuestTexture"].SetTexture = F.dummy
end
end
MoveButtons(buttons, holder, GetColumns())
firstopened = 0
end
holder:Show()
end
local money = _G["ContainerFrame1MoneyFrame"]
money:SetFrameStrata("DIALOG")
money:SetParent(holder)
money:ClearAllPoints()
money:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", 12, 2)
--[[ Bank ]]
local bankholder = CreateFrame("Button", "aBagsBankHolder", UIParent)
bankholder:SetFrameStrata("HIGH")
bankholder:Hide()
F.CreateBD(bankholder, .6)
local ReanchorBankButtons = function()
if(firstbankopened==1) then
for f = 1, 28 do
bu = _G["BankFrameItem"..f]
bu:SetFrameStrata("HIGH")
tinsert(bankbuttons, bu)
end
_G["BankFrame"]:EnableMouse(false)
_G["BankCloseButton"]:Hide()
for f = 1, 5 do
select(f, _G["BankFrame"]:GetRegions()):SetAlpha(0)
end
for f = CheckSlots() + 1, CheckSlots() + CheckBankSlots(), 1 do
con = "ContainerFrame"..f
ban = "BankFrame"
_G[con]:EnableMouse(false)
_G[con.."CloseButton"]:Hide()
_G[con.."PortraitButton"]:EnableMouse(false)
for i = 1, 7 do
select(i, _G[con]:GetRegions()):SetAlpha(0)
end
for i = GetContainerNumSlots(f-1), 1, -1 do
bu = _G[con.."Item"..i]
bu:SetFrameStrata("HIGH")
tinsert(bankbuttons, bu)
_G[con.."Item"..i.."Count"]:SetFont(C.media.font, 8, "OUTLINEMONOCHROME")
_G[con.."Item"..i.."Count"]:ClearAllPoints()
_G[con.."Item"..i.."Count"]:SetPoint("TOP", bu, 0, -2)
_G[con.."Item"..i.."IconTexture"]:SetTexCoord(.1,.9,.1,.9)
_G[con.."Item"..i.."IconQuestTexture"]:SetTexture(C.media.questborder)
_G[con.."Item"..i.."IconQuestTexture"]:SetVertexColor(1, 0, 0)
_G[con.."Item"..i.."IconQuestTexture"]:SetTexCoord(0.05, .955, 0.05, .965)
_G[con.."Item"..i.."IconQuestTexture"].SetTexture = F.dummy
end
for i = 1, 28 do
bbu = _G[ban.."Item"..i]
bbu:SetFrameStrata("HIGH")
_G[ban.."Item"..i.."IconTexture"]:SetTexCoord(.1,.9,.1,.9)
_G[ban.."Item"..i.."Count"]:SetFont(C.media.font, 8, "OUTLINEMONOCHROME")
_G[ban.."Item"..i.."Count"]:ClearAllPoints()
_G[ban.."Item"..i.."Count"]:SetPoint("TOP", bbu, 0, -2)
_G[ban.."Item"..i.."IconQuestTexture"]:SetTexture(C.media.questborder)
_G[ban.."Item"..i.."IconQuestTexture"]:SetVertexColor(1, 0, 0)
_G[ban.."Item"..i.."IconQuestTexture"]:SetTexCoord(0.05, .955, 0.05, .965)
_G[ban.."Item"..i.."IconQuestTexture"].SetTexture = F.dummy
end
end
MoveButtons(bankbuttons, bankholder, GetColumns() + 4)
bankholder:SetPoint("BOTTOMRIGHT", "aBagsHolder", "BOTTOMLEFT", -10 , 0)
firstbankopened = 0
end
bankholder:Show()
end
local money = _G["BankFrameMoneyFrame"]
money:SetFrameStrata("DIALOG")
money:ClearAllPoints()
money:SetPoint("BOTTOMRIGHT", bankholder, "BOTTOMRIGHT", 12, 2)
--[[ Hiding misc. frames ]]
_G["BankFramePurchaseInfo"]:Hide()
_G["BankFramePurchaseInfo"].Show = F.dummy
local BankBagButtons = {
BankFrameBag1,
BankFrameBag2,
BankFrameBag3,
BankFrameBag4,
BankFrameBag5,
BankFrameBag6,
BankFrameBag7,
}
local BagButtons = {
CharacterBag0Slot,
CharacterBag1Slot,
CharacterBag2Slot,
CharacterBag3Slot,
}
for f = 1, 7 do
_G["BankFrameBag"..f]:SetParent(bankholder)
_G["BankFrameBag"..f]:ClearAllPoints()
if f==1 then
_G["BankFrameBag"..f]:SetPoint("BOTTOM", bankholder, "TOP", -120, 4)
else
_G["BankFrameBag"..f]:SetPoint("CENTER", _G["BankFrameBag"..f-1], 38, 0)
end
_G["BankFrameBag"..f]:SetAlpha(0)
_G["BankFrameBag"..f]:HookScript("OnEnter", function(self)
for _, g in pairs(BankBagButtons) do
g:SetAlpha(1)
end
end)
_G["BankFrameBag"..f]:HookScript("OnLeave", function(self)
for _, g in pairs(BankBagButtons) do
g:SetAlpha(0)
end
end)
end
for i = 0, 3 do
_G["CharacterBag"..i.."Slot"]:SetParent(holder)
_G["CharacterBag"..i.."Slot"]:ClearAllPoints()
if i==0 then
_G["CharacterBag"..i.."Slot"]:SetPoint("BOTTOMRIGHT", holder, "TOPRIGHT", 0, 4)
else
_G["CharacterBag"..i.."Slot"]:SetPoint("CENTER", _G["CharacterBag"..(i-1).."Slot"], -30, 0)
end
_G["CharacterBag"..i.."Slot"]:SetAlpha(0)
_G["CharacterBag"..i.."Slot"]:HookScript("OnEnter", function(self)
for _, g in pairs(BagButtons) do
g:SetAlpha(1)
end
end)
_G["CharacterBag"..i.."Slot"]:HookScript("OnLeave", function(self)
for _, g in pairs(BagButtons) do
g:SetAlpha(0)
end
end)
end
local MoneyText = {
_G["ContainerFrame1MoneyFrameGoldButtonText"],
_G["ContainerFrame1MoneyFrameSilverButtonText"],
_G["ContainerFrame1MoneyFrameCopperButtonText"],
_G["BankFrameMoneyFrameGoldButtonText"],
_G["BankFrameMoneyFrameSilverButtonText"],
_G["BankFrameMoneyFrameCopperButtonText"],
}
for _, f in pairs(MoneyText) do
f:SetFont(C.media.font, 8, "OUTLINEMONOCHROME")
end
--[[ Show & Hide functions etc ]]
tinsert(UISpecialFrames, bankholder)
tinsert(UISpecialFrames, holder)
local CloseBags = function()
bankholder:Hide()
holder:Hide()
for i = 0, 11 do
CloseBag(i)
end
end
local CloseBags2 = function()
bankholder:Hide()
holder:Hide()
end
local OpenBags = function()
for i = 0, 11 do
OpenBag(i)
end
end
local ToggleBags = function()
if(IsBagOpen(0)) then
CloseBankFrame()
CloseBags()
else
OpenBags()
end
end
for i = 1, 5 do
hooksecurefunc(_G["ContainerFrame"..i], "Show", ReanchorButtons)
hooksecurefunc(_G["ContainerFrame"..i], "Hide", CloseBags2)
end
hooksecurefunc(BankFrame, "Show", function()
OpenBags()
ReanchorBankButtons()
end)
hooksecurefunc(BankFrame, "Hide", CloseBags)
ToggleBackpack = ToggleBags
OpenAllBags = OpenBags
--OpenAllBags = ToggleBags
--OpenAllBags = F.dummy
OpenBackpack = OpenBags
CloseAllBags = CloseBags
if Aero then Aero:RegisterFrames("aBagsHolder", "aBagsBankHolder") end
|