vanilla-wow-addons – Rev 1
?pathlinks?
local MYBANK_DEFAULT_OPTIONS = {
Columns = 6,
Replace = TRUE,
Bag = "bar",
Graphics = "default",
Count = "free",
HlItems = TRUE,
HlBags = TRUE,
Freeze = FALSE,
Lock = FALSE,
NoEsc = FALSE,
Title = TRUE,
Cash = TRUE,
Buttons = TRUE,
AIOI = FALSE,
Border = TRUE,
Cache = nil,
Player = FALSE,
Scale = FALSE,
Anchor = "bottomleft",
BackColor = {0.7,0,0,0},
SlotColor = nil,
AmmoColor = nil,
EnchantColor = nil,
EngColor = nil,
HerbColor = nil,
}
MyBankClass = MyBagsCoreClass:new({
name = MYBANK_NAME,
description = MYBANK_DESCRIPTION,
db = AceDbClass:new("MyBankDB"),
defaults = MYBANK_DEFAULT_OPTIONS,
frameName = "MyBankFrame",
cmd = AceChatCmdClass:new(MYBANK_COMMANDS, MYBANK_CMD_OPTIONS),
totalBags = 6,
firstBag = 5,
isBank = TRUE,
atBank = FALSE,
saveBankFrame = BankFrame,
anchorPoint = "BOTTOMLEFT",
anchorParent = "UIParent",
anchorOffsetX = 5,
anchorOffsetY = 100,
})
function MyBankClass:Enable()
MyBagsCoreClass.Enable(self)
MyBankFrameBank.maxIndex = 24
MyBankFrameBank:SetID(BANK_CONTAINER)
MyBankFrameBag0:SetID(5)
MyBankFrameBag1:SetID(6)
MyBankFrameBag2:SetID(7)
MyBankFrameBag3:SetID(8)
MyBankFrameBag4:SetID(9)
MyBankFrameBag5:SetID(10)
if self.GetOpt("Replace") then
BankFrame:UnregisterEvent("BANKFRAME_OPENED")
BankFrame:UnregisterEvent("BANKFRAME_CLOSED")
setglobal("BankFrame", self.frame)
end
MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortait");
StaticPopupDialogs["PURCHASE_BANKBAG"] = {
text = TEXT(CONFIRM_BUY_BANK_SLOT),
button1 = TEXT(YES),
button2 = TEXT(NO),
OnAccept = function()
if CT_oldPurchaseSlot then
CT_oldPurchaseSlot()
else
PurchaseSlot()
end;
end,
OnShow = function()
MoneyFrame_Update(this:GetName().."MoneyFrame", GetBankSlotCost());
end,
showAlert = 1,
hasMoneyFrame = 1,
timeout = 0,
hideOnEscape = 1,
}
end
function MyBankClass:Disable()
BankFrame = self.saveBankFrame
BankFrame:RegisterEvent("BANKFRAME_OPENED")
BankFrame:RegisterEvent("BANKFRAME_CLOSED")
end
function MyBankClass:RegisterEvents()
MyBagsCoreClass.RegisterEvents(self)
self:RegisterEvent("BANKFRAME_OPENED")
self:RegisterEvent("BANKFRAME_CLOSED")
self:RegisterEvent("PLAYERBANKSLOTS_CHANGED", "LayoutFrameOnEvent")
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED","LayoutFrameOnEvent")
end
function MyBankClass:HookFunctions()
MyBagsCoreClass.HookFunctions(self)
self:Hook("OpenAllBags")
self:Hook("CloseAllBags")
end
function MyBankClass:OpenAllBags(forceopen)
self:debug("OpenAllBagsHook")
if forceopen then OpenBackpack() else ToggleBackpack() end
local action
if (IsBagOpen(0) or MyInventory.frame:IsVisible()) then
action = "OpenBag"
else
action = "CloseBag"
end
for i=1, 4, 1 do
if not (MyInventory.GetOpt("Replace") and MyInventory:IncludeBag(i)) then
self.Hooks[action].orig(i)
end
end
for i=5, 10, 1 do
if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
self.Hooks[action].orig(i)
end
end
end
function MyBankClass:CloseAllBags()
self:debug("CloseAllBagsHook")
MyInventory:Close()
CloseBackpack() -- just in case backpack is not contolled by MyInventory
for i=1, 4, 1 do
if not MyInventory.GetOpt("Replace") or not MyInventory:IncludeBag(i) then
self.Hooks["CloseBag"].orig(i)
end
end
for i=5, 10, 1 do
if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
self.Hooks["CloseBag"].orig(i)
end
end
end
function MyBankClass:BAG_UPDATE()
-- local time = GetTime()
local bag = arg1
if self.isLive and (bag == -1 or (bag >= 5 and bag <= 10)) then
self:LayoutFrame()
end
-- self:debug(event.." bag" .. (bag or "nil").." ".. GetTime()-time)
end
function MyBankClass:BANKFRAME_OPENED()
self:debug("BANKFRAME_OPENED")
MyBank.atBank = TRUE
SetPortraitTexture(MyBankFramePortrait, "npc")
if self.Freeze == "always" or (self.Freeze == "sticky" and self.frame:IsVisible()) then
self.holdOpen = TRUE
else
self.holdOpen = nil
end
if self.GetOpt("Replace") then
self:Open()
else
self:LayoutFrame()
end
end
function MyBankClass:BANKFRAME_CLOSED()
self:debug("BANKFRAME_CLOSED")
MyBank.atBank = FALSE
MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortait") -- [sic]
if self.GetOpt("Replace") and not self.holdOpen then
if self.frame:IsVisible() then
self.frame:Hide()
end -- calling self:close() would trigger the bank closing twice
else
self.holdOpen = nil
if self.isLive then self:LayoutFrame() end
end
end
function MyBankClass:GetInfoFunc()
if self.isLive then
return self.GetInfoLive
end
if IsAddOnLoaded("KC_Items") and KC_Items.bank then
return self.GetInfoKC
end
if IsAddOnLoaded("MyBagsCache") then
return self.GetInfoMyBagsCache
end
return self.GetInfoNone
end
function MyBankClass:GetInfoKC(bag, slot, charID)
if not MYBAGS_KC_CHARS then return self.GetInfoNone end
local texture, count, ID, locked, quality, readable = nil
if not charID then charID = self:GetCurrentPlayer() end
local faction = MYBAGS_KC_CHARS[charID]["faction"]
if slot then
ID,count = KC_Items.bank:SlotInfo(bag, slot, faction, charID)
else
ID,count = KC_Items.bank:BagInfo(bag, faction, charID)
end
if ID == "" or ID == "nil" then ID = nil end
if ID then
local itype,isubtype
_,_,quality,_,itype,isubtype,_,_,texture = GetItemInfo("item:"..ID)
_,_,_,quality = GetItemQualityColor(quality or 0)
if not slot then readable = ace.IsSpecialtyBag(itype,isubtype) end
quality = (strsub(quality,5)) -- here instead of return to keep nil if empty slot
end
count = ace.tonum(count)
return texture, count, ID, locked, quality, readable, nil
end
function MyBankClass:SetReplace()
MyBagsCoreClass.SetReplace(self)
if self.GetOpt("Replace") then
BankFrame:UnregisterEvent("BANKFRAME_OPENED")
BankFrame:UnregisterEvent("BANKFRAME_CLOSED")
setglobal("BankFrame", self.frame)
else
setglobal("BankFrame", self.saveBankFrame)
BankFrame:RegisterEvent("BANKFRAME_OPENED")
BankFrame:RegisterEvent("BANKFRAME_CLOSED")
end
end
MyBank = MyBankClass:new()
MyBank:RegisterForLoad()