Standings list (for members) and other lists (for admins) can now be dismissed with Esc. Add log window for admins. Better permission checking, confirmation dialog for some important actions. Fix Bid detection regex false positives eg.[Elixir of Mongoose]. Remove a bunch of menus and windows for members that they never use.
224 lines
7.3 KiB
Lua
224 lines
7.3 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(name,note)
|
|
local gp = sepgp:get_gp(name,officernote)
|
|
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(name)
|
|
local gp = sepgp:get_gp(name)
|
|
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
|
|
|