Quantcast
--[[
##############################################################################
S V U I By: Munglunch
##############################################################################

##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;

local select = _G.select;
local table = _G.table;
local twipe = table.wipe;
local tsort = table.sort;
local GetCurrencyInfo = _G.GetCurrencyInfo;
local GetNumWatchedTokens = _G.GetNumWatchedTokens;
local GetBackpackCurrencyInfo = _G.GetBackpackCurrencyInfo;
local GetProfessions = _G.GetProfessions;
local IsLoggedIn = _G.IsLoggedIn;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SV = select(2, ...)
local L = SV.L;
local Reports = SV.Reports;
--[[
##########################################################
GOLD STATS
##########################################################
]]--
local REPORT_NAME = "Tokens";
local HEX_COLOR = "22FFFF";
local TEXT_PATTERN = "\124T%s:12\124t %s";
local playerName = UnitName("player");
local playerRealm = GetRealmName();

local sort_menu_fn = function(a,b) return a.text < b.text end;

local Tokens_OnEvent = function(self, event, ...)
if(not IsLoggedIn() or (not self)) then return end
local id = self.TokenKey or 738;
local _, current, tex = GetCurrencyInfo(id)
local currentText = TEXT_PATTERN:format(tex, current);
self.text:SetText(currentText)
end

local function AddToTokenMenu(self, id, key)
local itemName, _, tex, _, _, _, _ = GetCurrencyInfo(id)
local fn = function()
Reports.Accountant["tokens"][playerName][key] = id;
self.TokenKey = id
Tokens_OnEvent(self)
end
local nextIndex = #self.InnerData+1;
self.InnerData[nextIndex] = {text = itemName, icon = "\124T"..tex..":12\124t ", func = fn};
end

local function CacheTokenData(self)
twipe(self.InnerData);
local prof1, prof2, archaeology, _, cooking = GetProfessions();
local key = self:GetName();
if archaeology then
AddToTokenMenu(self, 398, key)
AddToTokenMenu(self, 384, key)
AddToTokenMenu(self, 393, key)
AddToTokenMenu(self, 677, key)
AddToTokenMenu(self, 400, key)
AddToTokenMenu(self, 394, key)
AddToTokenMenu(self, 397, key)
AddToTokenMenu(self, 676, key)
AddToTokenMenu(self, 401, key)
AddToTokenMenu(self, 385, key)
AddToTokenMenu(self, 399, key)
AddToTokenMenu(self, 821, key)
AddToTokenMenu(self, 829, key)
AddToTokenMenu(self, 944, key)
end
if cooking then
AddToTokenMenu(self, 81, key)
AddToTokenMenu(self, 402, key)
end
if(prof1 == 9 or prof2 == 9) then
AddToTokenMenu(self, 61, key)
AddToTokenMenu(self, 361, key)
AddToTokenMenu(self, 698, key)

AddToTokenMenu(self, 910, key)
AddToTokenMenu(self, 999, key)
AddToTokenMenu(self, 1020, key)
AddToTokenMenu(self, 1008, key)
AddToTokenMenu(self, 1017, key)
end
AddToTokenMenu(self, 1166, key)
AddToTokenMenu(self, 1129, key)
AddToTokenMenu(self, 994, key)
AddToTokenMenu(self, 697, key)
AddToTokenMenu(self, 738, key)
AddToTokenMenu(self, 615, key)
AddToTokenMenu(self, 614, key)
AddToTokenMenu(self, 395, key)
AddToTokenMenu(self, 396, key)
AddToTokenMenu(self, 390, key)
AddToTokenMenu(self, 392, key)
AddToTokenMenu(self, 391, key)
AddToTokenMenu(self, 241, key)
AddToTokenMenu(self, 416, key)
AddToTokenMenu(self, 515, key)
AddToTokenMenu(self, 776, key)
AddToTokenMenu(self, 777, key)
AddToTokenMenu(self, 789, key)
AddToTokenMenu(self, 823, key)
AddToTokenMenu(self, 824, key)
AddToTokenMenu(self, 1101, key)

tsort(self.InnerData, sort_menu_fn)
end

local function TokenInquiry(id, weekly, capped)
--name, amount, texturePath, earnedThisWeek, weeklyMax, totalMax, isDiscovered = GetCurrencyInfo(id)
local name, amount, tex, week, weekmax, maxed, discovered = GetCurrencyInfo(id)
local r, g, b = 1, 1, 1
for i = 1, GetNumWatchedTokens() do
local _, _, _, itemID = GetBackpackCurrencyInfo(i)
if id == itemID then r, g, b = 0.23, 0.88, 0.27 end
end
local texStr = ("\124T%s:12\124t %s"):format(tex, name)
local altStr = ""
if weekly then
if discovered then
if id == 390 then
local pointsThisWeek, maxPointsThisWeek = GetPVPRewards();
altStr = ("Current: %d | Weekly: %d / %d"):format(amount, pointsThisWeek, maxPointsThisWeek)
else
altStr = ("Current: %d / %d | Weekly: %d / %d"):format(amount, maxed, week, weekmax)
end
Reports.ToolTip:AddDoubleLine(texStr, altStr, r, g, b, r, g, b)
end
elseif capped then
if id == 392 or id == 395 then maxed = 4000 end
if id == 396 then maxed = 3000 end
if id == 1129 then maxed = 10 end
if discovered then
altStr = ("%d / %d"):format(amount, maxed)
Reports.ToolTip:AddDoubleLine(texStr, altStr, r, g, b, r, g, b)
end
else
if discovered then
Reports.ToolTip:AddDoubleLine(texStr, amount, r, g, b, r, g, b)
end
end
end
--[[
##########################################################
REPORT TEMPLATE
##########################################################
]]--
local Report = Reports:NewReport(REPORT_NAME, {
type = "data source",
text = REPORT_NAME .. " Info",
icon = [[Interface\Addons\SVUI_!Core\assets\icons\SVUI]]
});

Report.events = {"PLAYER_ENTERING_WORLD", "PLAYER_MONEY", "CURRENCY_DISPLAY_UPDATE"};

Report.OnEvent = Tokens_OnEvent;

Report.OnClick = function(self, button)
CacheTokenData(self);
SV.Dropdown:Open(self, self.InnerData, "Select Currency", 200)
end

Report.OnEnter = function(self)
Reports:SetDataTip(self)
Reports.ToolTip:AddLine(playerName .. "\'s Tokens")

Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddLine("Common")
TokenInquiry(241)
TokenInquiry(416)
TokenInquiry(515)
TokenInquiry(776)
TokenInquiry(777)
TokenInquiry(789)

Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddLine("Garrison")
TokenInquiry(823)
TokenInquiry(824)
TokenInquiry(1101)
TokenInquiry(910)
TokenInquiry(999)
TokenInquiry(1020)
TokenInquiry(1008)
TokenInquiry(1017)

Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddLine("Raiding and Dungeons")
TokenInquiry(1166)
TokenInquiry(1129, false, true)
TokenInquiry(994, false, true)
TokenInquiry(697, false, true)
TokenInquiry(738)
TokenInquiry(615)
TokenInquiry(614)
TokenInquiry(395, false, true)
TokenInquiry(396, false, true)

Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddLine("PvP")
TokenInquiry(390, true)
TokenInquiry(392, false, true)
TokenInquiry(391)

local prof1, prof2, archaeology, _, cooking = GetProfessions()
if(archaeology or cooking or prof1 == 9 or prof2 == 9) then
Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddLine("Professions")
end
if cooking then
TokenInquiry(81)
TokenInquiry(402)
end
if(prof1 == 9 or prof2 == 9) then
TokenInquiry(61)
TokenInquiry(361)
TokenInquiry(698)
end
if archaeology then
TokenInquiry(821)
TokenInquiry(829)
TokenInquiry(944)
TokenInquiry(398)
TokenInquiry(384)
TokenInquiry(393)
TokenInquiry(677)
TokenInquiry(400)
TokenInquiry(394)
TokenInquiry(397)
TokenInquiry(676)
TokenInquiry(401)
TokenInquiry(385)
TokenInquiry(399)
end
Reports.ToolTip:AddLine(" ")
Reports.ToolTip:AddDoubleLine("[Shift + Click]", "Change Watched Token", 0,1,0, 0.5,1,0.5)
Reports:ShowDataTip(true)
end

Report.OnInit = function(self)
if not IsAddOnLoaded("Blizzard_PVPUI") then
LoadAddOn("Blizzard_PVPUI")
end
if(not self.InnerData) then
self.InnerData = {}
end
Reports:SetAccountantData('tokens', 'table', {})
local key = self:GetName()
Reports.Accountant["tokens"][playerName][key] = Reports.Accountant["tokens"][playerName][key] or 738;
self.TokenKey = Reports.Accountant["tokens"][playerName][key]
CacheTokenData(self);
end