vanilla-wow-addons – Rev 1
?pathlinks?
BagFu = AceLibrary("AceAddon-2.0"):new("FuBarPlugin-2.0", "AceDB-2.0", "AceEvent-2.0", "AceConsole-2.0")
BagFu:RegisterDB("BagFuDB")
BagFu:RegisterDefaults('profile', {
showDepletion = false,
includeProfession = true,
includeAmmo = false,
})
BagFu.hasIcon = true
BagFu.cannotDetachTooltip = true
BagFu.defaultPosition = "RIGHT"
local L = AceLibrary("AceLocale-2.0"):new("BagFu")
function BagFu:OnInitialize()
--self.dewdrop = AceLibrary("Dewdrop-2.0")
self.crayon = AceLibrary("Crayon-2.0")
self.tablet = AceLibrary("Tablet-2.0")
self.options = {
type = "group",
args = {
ammobags = {
type = "toggle",
name = L["AMMO_BAGS"],
desc = L["MENU_INCLUDE_AMMO_BAGS"],
get = function() return self.db.profile.includeAmmo end,
set = function()
self.db.profile.includeAmmo = not self.db.profile.includeAmmo
self:Update()
end,
order = 110
},
professionbags = {
type = "toggle",
name = L["PROFESSION_BAGS"],
desc = L["MENU_INCLUDE_PROFESSION_BAGS"],
get = function() return self.db.profile.includeProfession end,
set = function()
self.db.profile.includeProfession = not self.db.profile.includeProfession
self:Update()
end,
order = 120
},
depletion = {
type = "toggle",
name = L["BAG_DEPLETION"],
desc = L["MENU_SHOW_DEPLETION_OF_BAGS"],
get = function() return self.db.profile.showDepletion end,
set = function()
self.db.profile.showDepletion = not self.db.profile.showDepletion
self:Update()
end,
order = 130
}
}
}
self.OnMenuRequest = self.options
self:RegisterChatCommand({ "/bagfu" }, self.options)
end
function BagFu:OnEnable()
self:RegisterEvent("PLAYER_ENTERING_WORLD", "OnPlayerEnteringWorld")
self:RegisterEvent("PLAYER_LEAVING_WORLD", "OnPlayerLeavingWorld")
self:RegisterEvent("BAG_UPDATE", "Update")
end
function BagFu:OnPlayerEnteringWorld()
self:RegisterEvent("BAG_UPDATE", "Update")
end
function BagFu:OnPlayerLeavingWorld()
self:UnregisterEvent("BAG_UPDATE")
end
function BagFu:UpdateText()
local totalSlots = 0
local takenSlots = 0
for i = 0, 4 do
local usable = TRUE
if i >= 1 then
local link = GetInventoryItemLink("player", ContainerIDToInventoryID(i))
if link ~= nil then
local itemId = tonumber(string.gsub(link, "|cff%x%x%x%x%x%x|Hitem:(%d+):%d+:%d+:%d+|h.*", "%1") or 0)
local _,_,_,_,_,subtype = GetItemInfo(itemId)
if not self.db.profile.includeAmmo and (subtype == L["TEXT_SOUL_BAG"] or subtype == L["TEXT_AMMO_POUCH"] or subtype == L["TEXT_QUIVER"]) then
usable = FALSE
elseif not self.db.profile.includeProfession and (subtype == L["TEXT_ENCHANTING_BAG"] or subtype == L["TEXT_HERB_BAG"] or subtype == L["TEXT_ENGINEERING_BAG"]) then
usable = FALSE
end
end
end
if usable then
local size = GetContainerNumSlots(i)
if size ~= nil and size > 0 then
totalSlots = totalSlots + size
for slot = 1, size do
if GetContainerItemInfo(i, slot) then
takenSlots = takenSlots + 1
end
end
end
end
end
local color = self.crayon:GetThresholdHexColor((totalSlots - takenSlots) / totalSlots)
if self.db.profile.showDepletion then
takenSlots = totalSlots - takenSlots
end
self:SetText(format("|cff%s%d/%d|r", color, takenSlots, totalSlots))
end
function BagFu:OnTooltipUpdate()
self.tablet:SetHint(L["TEXT_HINT"])
end
function BagFu:OnClick()
if not ContainerFrame1:IsShown() then
for i = 1, 4 do
if getglobal("ContainerFrame" .. (i + 1)):IsShown() then
getglobal("ContainerFrame" .. (i + 1)):Hide()
end
end
ToggleBackpack()
if ContainerFrame1:IsShown() then
for i = 1, 4 do
local link = GetInventoryItemLink("player", ContainerIDToInventoryID(i))
if link ~= nil then
local itemId = tonumber(string.gsub(link, "|cff%x%x%x%x%x%x|Hitem:(%d+):%d+:%d+:%d+|h.*", "%1") or 0)
local _,_,_,_,_,subtype = GetItemInfo(itemId)
local usable = TRUE
if not self.db.profile.includeAmmo and (subtype == L["TEXT_SOUL_BAG"] or subtype == L["TEXT_AMMO_POUCH"] or subtype == L["TEXT_QUIVER"]) then
usable = FALSE
elseif not self.db.profile.includeProfession and (subtype == L["TEXT_ENCHANTING_BAG"] or subtype == L["TEXT_HERB_BAG"] or subtype == L["TEXT_ENGINEERING_BAG"]) then
usable = FALSE
end
if usable then
ToggleBag(i)
end
end
end
end
else
for i = 0, 4 do
if getglobal("ContainerFrame" .. (i + 1)):IsShown() then
getglobal("ContainerFrame" .. (i + 1)):Hide()
end
end
end
end