You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.8 KiB
170 lines
5.8 KiB
|
3 years ago
|
local _, S = ...
|
||
|
|
local pairs, ipairs, string, type, time = pairs, ipairs, string, type, time
|
||
|
|
|
||
|
|
if S.WoWVersion() >= 2 then
|
||
|
|
|
||
|
|
S.Guild = {}
|
||
|
|
|
||
|
|
-- Side tab
|
||
|
|
local sideTab, f = S.AddSideTab(GUILD)
|
||
|
|
function sideTab:UpdateShown()
|
||
|
|
local guild = S.GetData().guild
|
||
|
|
self:SetShown(guild)
|
||
|
|
if not guild and S.primaryFrame.selectedSideTab == sideTab:GetID() then
|
||
|
|
S.primaryFrame.SelectSideTab(nil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
sideTab:RegisterEvent("PLAYER_GUILD_UPDATE")
|
||
|
|
sideTab:SetScript("OnEvent", sideTab.UpdateShown)
|
||
|
|
S.Utils.RunOnEvent(sideTab, "CharacterSelected", sideTab.UpdateShown)
|
||
|
|
|
||
|
|
function f:GetMinWidth()
|
||
|
|
return self.itemList:GetMinWidth()
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
-- Data updating is done here, so the guild bank is queried when the tab in Sorted is opened.
|
||
|
|
-- Querying itself triggers more GUILDBANKBAGSLOTS_CHANGED events, so that event is useless.
|
||
|
|
-- Instead, just update the guild bank constantly lmfao.
|
||
|
|
-- Updates each tab over a second or so, then triggers a bag update
|
||
|
|
local lastUpdateTime, nextTab = nil, 1
|
||
|
|
local function OnUpdate(self)
|
||
|
|
if S.IsGuildBankAvailable() and (not lastUpdateTime or GetTime() > lastUpdateTime + 0.1) then
|
||
|
|
lastUpdateTime = GetTime()
|
||
|
|
|
||
|
|
S.Data.UpdateGuildBank(nextTab)
|
||
|
|
|
||
|
|
nextTab = nextTab + 1
|
||
|
|
if nextTab > 8 then
|
||
|
|
nextTab = 1
|
||
|
|
S.Utils.TriggerEvent("GuildBankUpdatedFull")
|
||
|
|
else
|
||
|
|
S.Utils.TriggerEvent("GuildBankUpdated")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
f:SetScript("OnUpdate", OnUpdate)
|
||
|
|
|
||
|
|
|
||
|
|
-- Item list
|
||
|
|
f.itemList = S.CreateGuildItemList(f)
|
||
|
|
table.insert(S.itemLists, f.itemList)
|
||
|
|
|
||
|
|
|
||
|
|
-- Guild bank tabs
|
||
|
|
f.tabsFrame = CreateFrame("FRAME", nil, f)
|
||
|
|
f.tabsFrame:SetPoint("BOTTOMLEFT", 70, 0)
|
||
|
|
f.tabsFrame:SetSize(32 * 8, 32)
|
||
|
|
f.tabsFrame.tabs = {}
|
||
|
|
local selectedTab = nil
|
||
|
|
|
||
|
|
function S.Guild.GetSelectedTab()
|
||
|
|
return selectedTab
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Updates tab selection, checking the selected tab and fading the rest
|
||
|
|
local function UpdateTabs()
|
||
|
|
local guild = S.GetData().guild
|
||
|
|
for i = 1, 8 do
|
||
|
|
local tab = f.tabsFrame.tabs[i]
|
||
|
|
tab:SetChecked(i == selectedTab)
|
||
|
|
local canView = false
|
||
|
|
if guild then
|
||
|
|
canView = guild.tabs[i].canView
|
||
|
|
end
|
||
|
|
tab.icon:SetDesaturated(not canView or (selectedTab and not (i == selectedTab) and S.Settings.Get("desaturateCategories") == 1))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
S.Utils.RunOnEvent(f.tabsFrame, "SettingChanged-desaturateCategories", UpdateTabs)
|
||
|
|
|
||
|
|
local function SelectTab(tabID)
|
||
|
|
if selectedTab == tabID then
|
||
|
|
selectedTab = nil
|
||
|
|
else
|
||
|
|
local guild = S.GetData().guild
|
||
|
|
if guild and guild.tabs[tabID].canView then
|
||
|
|
selectedTab = tabID
|
||
|
|
SetCurrentGuildBankTab(selectedTab)
|
||
|
|
else
|
||
|
|
selectedTab = nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
UpdateTabs()
|
||
|
|
S.Utils.TriggerEvent("GuildTabSelected")
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Create the tabs
|
||
|
|
for i = 1, 8 do
|
||
|
|
f.tabsFrame.tabs[i] = S.FrameTools.CreateCircleButton("CheckButton", f.tabsFrame, true, nil, true)
|
||
|
|
f.tabsFrame.tabs[i]:SetPoint("BOTTOMLEFT", (i - 1) * 32, 0)
|
||
|
|
f.tabsFrame.tabs[i].id = i
|
||
|
|
f.tabsFrame.tabs[i]:SetScript("OnEnter", function(self)
|
||
|
|
S.Tooltip.CreateText(self, "ANCHOR_RIGHT", self.name)
|
||
|
|
end)
|
||
|
|
f.tabsFrame.tabs[i]:SetScript("OnLeave", S.Tooltip.Cancel)
|
||
|
|
f.tabsFrame.tabs[i]:SetScript("OnClick", function(self)
|
||
|
|
SelectTab(self.id)
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Updates the icon and name of tabs
|
||
|
|
function f.tabsFrame:Update()
|
||
|
|
local guild = S.GetData().guild
|
||
|
|
if not guild or not guild.tabs then
|
||
|
|
for _, tab in pairs(self.tabs) do
|
||
|
|
tab:Hide()
|
||
|
|
end
|
||
|
|
else
|
||
|
|
for i = 1, 8 do
|
||
|
|
local tab = self.tabs[i]
|
||
|
|
local tabData = guild.tabs[i]
|
||
|
|
if tabData and tabData.name then
|
||
|
|
tab:Show()
|
||
|
|
tab:SetIconTexture(tabData.icon)
|
||
|
|
tab.name = tabData.name
|
||
|
|
else
|
||
|
|
tab:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
UpdateTabs()
|
||
|
|
end
|
||
|
|
f.tabsFrame:SetScript("OnShow", function(self)
|
||
|
|
S.Data.UpdateGuildBankTabs()
|
||
|
|
self:Update()
|
||
|
|
end)
|
||
|
|
S.Utils.RunOnEvent(f.tabsFrame, "GuildBankTabsUpdated", f.tabsFrame.Update)
|
||
|
|
S.Utils.RunOnEvent(f.tabsFrame, "CharacterSelected", f.tabsFrame.Update)
|
||
|
|
|
||
|
|
|
||
|
|
-- Money
|
||
|
|
f.moneyFrame = S.FrameTools.CreateMoneyFrame(f)
|
||
|
|
f.moneyFrame:SetPoint("BOTTOMRIGHT", -24, 0)
|
||
|
|
function f.moneyFrame:Update()
|
||
|
|
local guild = S.GetData().guild
|
||
|
|
if not guild then
|
||
|
|
self.text:SetText("")
|
||
|
|
else
|
||
|
|
local money = guild.money
|
||
|
|
if not money then money = 0 end -- for guilds without money
|
||
|
|
if money >= 10000000000 then -- Hide silvers/coppers when guild has >1mil gold
|
||
|
|
money = math.floor(money / 10000) * 10000
|
||
|
|
elseif money >= 100000000 then -- Hide coppers when guild has >10k gold
|
||
|
|
money = math.floor(money / 100) * 100
|
||
|
|
end
|
||
|
|
self.text:SetText(GetMoneyString(money, true))
|
||
|
|
self:SetWidth(self.text:GetWidth() + 40)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
f.moneyFrame:RegisterEvent("GUILDBANK_UPDATE_MONEY")
|
||
|
|
f.moneyFrame:SetScript("OnEvent", function(self)
|
||
|
|
S.Data.UpdateGuildMoney()
|
||
|
|
self:Update()
|
||
|
|
end)
|
||
|
|
f.moneyFrame:SetScript("OnShow", function(self)
|
||
|
|
S.Data.UpdateGuildMoney()
|
||
|
|
self:Update()
|
||
|
|
end)
|
||
|
|
S.Utils.RunOnEvent(f.moneyFrame, "CharacterSelected", f.moneyFrame.Update)
|
||
|
|
|
||
|
|
end
|