Files
shootyepgp/standings.lua
T
2017-09-08 17:23:01 +03:00

224 lines
7.4 KiB
Lua

local T = AceLibrary("Tablet-2.0")
local D = AceLibrary("Dewdrop-2.0")
local C = AceLibrary("Crayon-2.0")
local BC = AceLibrary("Babble-Class-2.2")
sepgp_standings = sepgp:NewModule("sepgp_standings", "AceDB-2.0")
local shooty_export = CreateFrame("Frame", "shooty_exportframe", UIParent)
shooty_export:SetWidth(250)
shooty_export:SetHeight(150)
shooty_export:SetPoint('TOP', UIParent, 'TOP', 0,-80)
shooty_export:SetFrameStrata('DIALOG')
shooty_export:Hide()
shooty_export:SetBackdrop({
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
tile = true,
tileSize = 16,
edgeSize = 16,
insets = {left = 5, right = 5, top = 5, bottom = 5}
})
shooty_export:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b)
shooty_export:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b)
shooty_export.title = shooty_export:CreateFontString(nil,"OVERLAY")
shooty_export.title:SetPoint("TOP",0,-5)
shooty_export.title:SetFont("Fonts\\FRIZQT__.TTF", 12)
shooty_export.title:SetWidth(200)
shooty_export.title:SetJustifyH("LEFT")
shooty_export.title:SetJustifyV("CENTER")
shooty_export.title:SetText(C:Gold("Ctrl-C to copy. Esc to close."))
shooty_export.title:SetShadowOffset(1, -1)
shooty_export.edit = CreateFrame("EditBox", "shooty_exportedit", shooty_export)
shooty_export.edit:SetMultiLine(true)
shooty_export.edit:SetAutoFocus(true)
shooty_export.edit:EnableMouse(true)
shooty_export.edit:SetMaxLetters(0)
shooty_export.edit:SetHistoryLines(1)
shooty_export.edit:SetFont('Fonts\\ARIALN.ttf', 12, 'THINOUTLINE')
shooty_export.edit:SetWidth(290)
shooty_export.edit:SetHeight(190)
shooty_export.edit:SetScript("OnEscapePressed", function()
shooty_export.edit:SetText("")
shooty_export:Hide()
end)
shooty_export.AddSelectText = function(txt)
shooty_export.edit:SetText(txt)
shooty_export.edit:HighlightText()
end
shooty_export.scroll = CreateFrame("ScrollFrame", "shooty_exportscroll", shooty_export, 'UIPanelScrollFrameTemplate')
shooty_export.scroll:SetPoint('TOPLEFT', shooty_export, 'TOPLEFT', 8, -30)
shooty_export.scroll:SetPoint('BOTTOMRIGHT', shooty_export, 'BOTTOMRIGHT', -30, 8)
shooty_export.scroll:SetScrollChild(shooty_export.edit)
table.insert(UISpecialFrames,"shooty_exportframe")
function sepgp_standings:OnEnable()
if not T:IsRegistered("sepgp_standings") then
T:Register("sepgp_standings",
"children", function()
T:SetTitle("shootyepgp standings")
self:OnTooltipUpdate()
end,
"showTitleWhenDetached", true,
"showHintWhenDetached", true,
"cantAttach", true,
"menu", function()
D:AddLine(
"text", "Raid Only",
"tooltipText", "Only show members in raid.",
"checked", sepgp_raidonly,
"func", function() sepgp_standings:ToggleRaidOnly() end
)
D:AddLine(
"text", "Group by class",
"tooltipText", "Group members by class.",
"checked", sepgp_groupbyclass,
"func", function() sepgp_standings:ToggleGroupByClass() end
)
D:AddLine(
"text", "Refresh",
"tooltipText", "Refresh window",
"func", function() sepgp_standings:Refresh() end
)
D:AddLine(
"text", "Export",
"tooltipText", "Export standings to csv.",
"func", function() sepgp_standings:Export() end
)
end
)
end
if not T:IsAttached("sepgp_standings") then
T:Open("sepgp_standings")
end
end
function sepgp_standings:OnDisable()
T:Close("sepgp_standings")
end
function sepgp_standings:Refresh()
T:Refresh("sepgp_standings")
end
function sepgp_standings:Export()
local t = {}
for i = 1, GetNumGuildMembers(1) do
local name, _, _, _, class, _, note, officernote, _, _ = GetGuildRosterInfo(i)
local ep = (sepgp:get_ep_v3(name,officernote) or 0) --TODO: update v3
local gp = (sepgp:get_gp_v3(name,officernote) or sepgp.VARS.basegp) --TODO: update v3
if ep > 0 then
table.insert(t,{name,ep,gp,ep/gp})
end
end
table.sort(t, function(a,b)
return tonumber(a[4]) > tonumber(b[4])
end)
shooty_export:Show()
local txt = "Name;EP;GP;PR\n"
for i,val in ipairs(t) do
txt = string.format("%s%s;%d;%d;%.4f\n",txt,val[1],val[2],val[3],val[4])
end
shooty_export.AddSelectText(txt)
end
function sepgp_standings:setHideScript()
local detachedFrame, tablet
for i=1,4 do
tablet = getglobal(string.format("Tablet20DetachedFrame%d",1))
if tablet and tablet.owner ~= nil and tablet.owner == "sepgp_standings" then
if not (tablet:GetScript("OnHide")) then
tablet:SetScript("OnHide",function()
if not T:IsAttached("sepgp_standings") then
T:Attach("sepgp_standings")
this:SetScript("OnHide",nil)
end
end)
end
end
end
end
function sepgp_standings:Toggle()
if T:IsAttached("sepgp_standings") then
T:Detach("sepgp_standings")
if (T:IsLocked("sepgp_standings")) then
T:ToggleLocked("sepgp_standings")
end
self:setHideScript()
else
T:Attach("sepgp_standings")
end
end
function sepgp_standings:ToggleGroupByClass()
sepgp_groupbyclass = not sepgp_groupbyclass
self:Refresh()
end
function sepgp_standings:ToggleRaidOnly()
sepgp_raidonly = not sepgp_raidonly
self:Refresh()
sepgp:SetRefresh(true)
end
-- Builds a standings table with record:
-- name, class, EP, GP, PR
-- and sorted by PR
function sepgp_standings:BuildStandingsTable()
local t = { }
local r = { }
if (sepgp_raidonly) and GetNumRaidMembers() > 0 then
for i = 1, GetNumRaidMembers(true) do
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(i)
r[name] = true
end
end
for i = 1, GetNumGuildMembers(1) do
local name, _, _, _, class, _, note, officernote, _, _ = GetGuildRosterInfo(i)
local ep = (sepgp:get_ep_v3(name) or 0) --TODO: update v3
local gp = (sepgp:get_gp_v3(name) or sepgp.VARS.basegp) --TODO: update v3
if ep > 0 then
if (sepgp_raidonly) and next(r) then
if r[name] then
table.insert(t,{name,class,ep,gp,ep/gp})
end
else
table.insert(t,{name,class,ep,gp,ep/gp})
end
end
end
if (sepgp_groupbyclass) then
table.sort(t, function(a,b)
if (a[2] ~= b[2]) then return a[2] > b[2]
else return a[5] > b[5] end
end)
else
table.sort(t, function(a,b)
return a[5] > b[5]
end)
end
return t
end
function sepgp_standings:OnTooltipUpdate()
local cat = T:AddCategory(
"columns", 4,
"text", C:Orange("Name"), "child_textR", 1, "child_textG", 1, "child_textB", 1, "child_justify", "LEFT",
"text2", C:Orange("ep"), "child_text2R", 1, "child_text2G", 1, "child_text2B", 1, "child_justify2", "RIGHT",
"text3", C:Orange("gp"), "child_text3R", 1, "child_text3G", 1, "child_text3B", 1, "child_justify3", "RIGHT",
"text4", C:Orange("pr"), "child_text4R", 1, "child_text4G", 1, "child_text4B", 0, "child_justify4", "RIGHT"
)
local t = self:BuildStandingsTable()
for i = 1, table.getn(t) do
local name, class, ep, gp, pr = unpack(t[i])
cat:AddLine(
"text", C:Colorize(BC:GetHexColor(class), name),
"text2", string.format("%.4g", ep),
"text3", string.format("%.4g", gp),
"text4", string.format("%.4g", pr)
)
end
end