330 lines
11 KiB
Lua
330 lines
11 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")
|
|
local L = AceLibrary("AceLocale-2.2"):new("shootyepgp")
|
|
|
|
sepgp_bids = sepgp:NewModule("sepgp_bids", "AceDB-2.0", "AceEvent-2.0")
|
|
|
|
-- Helper to get guild rank
|
|
function sepgp_bids:getGuildRank(name)
|
|
for i = 1, GetNumGuildMembers(true) do
|
|
local n, rankName = GetGuildRosterInfo(i)
|
|
if n == name then
|
|
return rankName
|
|
end
|
|
end
|
|
return ""
|
|
end
|
|
|
|
function sepgp_bids:OnEnable()
|
|
if not T:IsRegistered("sepgp_bids") then
|
|
T:Register("sepgp_bids",
|
|
"children", function()
|
|
T:SetTitle(L["shootyepgp bids"])
|
|
self:OnTooltipUpdate()
|
|
end,
|
|
"showTitleWhenDetached", true,
|
|
"showHintWhenDetached", true,
|
|
"cantAttach", true,
|
|
"menu", function()
|
|
D:AddLine(
|
|
"text", L["Refresh"],
|
|
"tooltipText", L["Refresh window"],
|
|
"func", function() sepgp_bids:Refresh() end
|
|
)
|
|
end
|
|
)
|
|
end
|
|
if not T:IsAttached("sepgp_bids") then
|
|
T:Open("sepgp_bids")
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:OnDisable()
|
|
T:Close("sepgp_bids")
|
|
end
|
|
|
|
function sepgp_bids:Refresh()
|
|
T:Refresh("sepgp_bids")
|
|
end
|
|
|
|
function sepgp_bids:setHideScript()
|
|
local i = 1
|
|
local tablet = getglobal(string.format("Tablet20DetachedFrame%d",i))
|
|
while (tablet) and i<100 do
|
|
if tablet.owner ~= nil and tablet.owner == "sepgp_bids" then
|
|
sepgp:make_escable(string.format("Tablet20DetachedFrame%d",i),"add")
|
|
tablet:SetScript("OnHide",nil)
|
|
tablet:SetScript("OnHide",function()
|
|
if not T:IsAttached("sepgp_bids") then
|
|
T:Attach("sepgp_bids")
|
|
this:SetScript("OnHide",nil)
|
|
end
|
|
end)
|
|
break
|
|
end
|
|
i = i+1
|
|
tablet = getglobal(string.format("Tablet20DetachedFrame%d",i))
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:Top()
|
|
if T:IsRegistered("sepgp_bids") and (T.registry.sepgp_bids.tooltip) then
|
|
T.registry.sepgp_bids.tooltip.scroll=0
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:Toggle(forceShow)
|
|
self:Top()
|
|
if T:IsAttached("sepgp_bids") then
|
|
T:Detach("sepgp_bids")
|
|
if (T:IsLocked("sepgp_bids")) then
|
|
T:ToggleLocked("sepgp_bids")
|
|
end
|
|
self:setHideScript()
|
|
else
|
|
if (forceShow) then
|
|
sepgp_bids:Refresh()
|
|
else
|
|
T:Attach("sepgp_bids")
|
|
end
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:announceWinnerMS(name, pr)
|
|
sepgp:widestAudience(string.format(L["Winning Mainspec Bid: %s (%.03f PR)"],name,pr))
|
|
end
|
|
|
|
function sepgp_bids:announceWinnerOS(name, pr)
|
|
sepgp:widestAudience(string.format(L["Winning Offspec Bid: %s (%.03f PR)"],name,pr))
|
|
end
|
|
|
|
function sepgp_bids:countdownCounter()
|
|
self._counter = (self._counter or 6) - 1
|
|
if GetNumRaidMembers()>0 and self._counter > 0 then
|
|
self._counterText = C:Yellow(tostring(self._counter))
|
|
sepgp:widestAudience(tostring(self._counter))
|
|
self:Refresh()
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:countdownFinish(reset)
|
|
if self:IsEventScheduled("shootyepgpBidCountdown") then
|
|
self:CancelScheduledEvent("shootyepgpBidCountdown")
|
|
end
|
|
self._counter = 6
|
|
if (reset) then
|
|
self._counterText = C:Green("Starting")
|
|
else
|
|
self._counterText = C:Red("Finished")
|
|
end
|
|
self:Refresh()
|
|
end
|
|
|
|
function sepgp_bids:bidCountdown()
|
|
self:countdownFinish(true)
|
|
self:ScheduleRepeatingEvent("shootyepgpBidCountdown",self.countdownCounter,1,self)
|
|
self:ScheduleEvent("shootyepgpBidCountdownFinish",self.countdownFinish,6,self)
|
|
end
|
|
|
|
-- Send attention signal to officers (ML only)
|
|
function sepgp_bids:sendAttention()
|
|
if sepgp:lootMaster() then
|
|
sepgp:broadcastBidAttention()
|
|
sepgp:defaultPrint(L["Attention signal sent to officers."])
|
|
end
|
|
end
|
|
|
|
local pr_sorter_bids = function(a,b)
|
|
if sepgp_minep > 0 then
|
|
local a_over = a[3]-sepgp_minep >= 0
|
|
local b_over = b[3]-sepgp_minep >= 0
|
|
if a_over and b_over or (not a_over and not b_over) then
|
|
if a[5] ~= b[5] then
|
|
return tonumber(a[5]) > tonumber(b[5])
|
|
else
|
|
return tonumber(a[3]) > tonumber(b[3])
|
|
end
|
|
elseif a_over and (not b_over) then
|
|
return true
|
|
elseif b_over and (not a_over) then
|
|
return false
|
|
end
|
|
else
|
|
if a[5] ~= b[5] then
|
|
return tonumber(a[5]) > tonumber(b[5])
|
|
else
|
|
return tonumber(a[3]) > tonumber(b[3])
|
|
end
|
|
end
|
|
end
|
|
|
|
function sepgp_bids:BuildBidsTable()
|
|
table.sort(sepgp.bids_main, pr_sorter_bids)
|
|
table.sort(sepgp.bids_off, pr_sorter_bids)
|
|
return sepgp.bids_main, sepgp.bids_off
|
|
end
|
|
|
|
function sepgp_bids:OnTooltipUpdate()
|
|
if not (sepgp.bid_item and sepgp.bid_item.link) then return end
|
|
local link = sepgp.bid_item.link
|
|
local itemName = sepgp.bid_item.name
|
|
local price = sepgp_prices:GetPrice(link,sepgp_progress)
|
|
local offspec
|
|
if not price then
|
|
price = "<n/a>"
|
|
offspec = "<n/a>"
|
|
else
|
|
offspec = math.floor(price*sepgp_discount)
|
|
end
|
|
local bidcat = T:AddCategory(
|
|
"columns", 3,
|
|
"text", C:Orange("Bid Item"), "child_textR", 1, "child_textG", 1, "child_textB", 1, "child_justify", "LEFT",
|
|
"text2", C:Orange("GP Cost"), "child_text2R", 50/255, "child_text2G", 205/255, "child_text2B", 50/255, "child_justify2", "RIGHT",
|
|
"text3", C:Orange("OffSpec"), "child_text3R", 32/255, "child_text3G", 178/255, "child_text3B", 170/255, "child_justify3", "RIGHT",
|
|
"hideBlankLine", true
|
|
)
|
|
bidcat:AddLine(
|
|
"text", itemName,
|
|
"text2", price,
|
|
"text3", offspec
|
|
)
|
|
-- Countdown button (only for Master Looter)
|
|
if sepgp:lootMaster() then
|
|
local countdownHeader = T:AddCategory(
|
|
"columns", 2,
|
|
"text","","child_textR", 1, "child_textG", 1, "child_textB", 1,"child_justify", "LEFT",
|
|
"text2","","child_text2R", 1, "child_text2G", 1, "child_text2B", 1,"child_justify2", "CENTER",
|
|
"hideBlankLine", true
|
|
)
|
|
countdownHeader:AddLine(
|
|
"text", C:Green("Countdown"),
|
|
"text2", self._counterText,
|
|
"func", "bidCountdown", "arg1", self
|
|
)
|
|
end
|
|
-- Attention button (only for Master Looter)
|
|
if sepgp:lootMaster() then
|
|
local attentionCat = T:AddCategory(
|
|
"columns", 1,
|
|
"text", "",
|
|
"hideBlankLine", true
|
|
)
|
|
attentionCat:AddLine(
|
|
"text", C:Yellow("[" .. L["Attention"] .. "]"),
|
|
"func", "sendAttention", "arg1", self
|
|
)
|
|
end
|
|
local maincatHeader = T:AddCategory(
|
|
"columns", 1,
|
|
"text", C:Gold("MainSpec Bids")
|
|
):AddLine("text","")
|
|
local maincat = T:AddCategory(
|
|
"columns", 5,
|
|
"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",
|
|
"text5", C:Orange("Main"), "child_text5R", 1, "child_text5G", 1, "child_text5B", 0, "child_justify5", "RIGHT",
|
|
"hideBlankLine", true
|
|
)
|
|
local tm = self:BuildBidsTable()
|
|
for i = 1, table.getn(tm) do
|
|
local name, class, ep, gp, pr, main = unpack(tm[i])
|
|
local rankName = self:getGuildRank(name)
|
|
local coloredRank = (rankName == "Core Raider" or rankName == "Officer" or rankName == "Supreme leader") and C:Green("(" .. rankName .. ")") or C:Colorize("aaaaaa", "(" .. rankName .. ")")
|
|
|
|
local namedesc
|
|
if main ~= "" then
|
|
namedesc = string.format("%s(%s)", C:Colorize(BC:GetHexColor(class), name), L["Alt"])
|
|
else
|
|
namedesc = C:Colorize(BC:GetHexColor(class), name)
|
|
end
|
|
if rankName ~= "" then
|
|
namedesc = namedesc.." "..coloredRank
|
|
end
|
|
local text2, text4
|
|
if sepgp_minep > 0 and ep < sepgp_minep then
|
|
text2 = C:Red(string.format("%.4g", ep))
|
|
text4 = C:Red(string.format("%.4g", pr))
|
|
else
|
|
text2 = string.format("%.4g", ep)
|
|
text4 = string.format("%.4g", pr)
|
|
end
|
|
maincat:AddLine(
|
|
"text", namedesc,
|
|
"text2", text2,
|
|
"text3", string.format("%.4g", gp),
|
|
"text4", text4,
|
|
"text5", (main or ""),
|
|
"func", "announceWinnerMS", "arg1", self, "arg2", name, "arg3", pr
|
|
)
|
|
end
|
|
local offcatHeader = T:AddCategory(
|
|
"columns", 1,
|
|
"text", C:Silver("OffSpec Bids")
|
|
):AddLine("text","")
|
|
local offcat = T:AddCategory(
|
|
"columns", 5,
|
|
"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",
|
|
"text5", C:Orange("Main"), "child_text5R", 1, "child_text5G", 1, "child_text5B", 0, "child_justify5", "RIGHT",
|
|
"hideBlankLine", true
|
|
)
|
|
local _,to = self:BuildBidsTable()
|
|
-- Offspec list
|
|
for i = 1, table.getn(to) do
|
|
local name, class, ep, gp, pr, main, prio_flag = unpack(to[i])
|
|
local rankName = self:getGuildRank(name)
|
|
local coloredRank = (rankName == "Core Raider" or rankName == "Officer" or rankName == "Supreme leader") and C:Green("(" .. rankName .. ")") or C:Colorize("aaaaaa", "(" .. rankName .. ")")
|
|
|
|
|
|
local namedesc
|
|
if main ~= "" then
|
|
namedesc = string.format("%s(%s)", C:Colorize(BC:GetHexColor(class), name), L["Alt"])
|
|
else
|
|
namedesc = C:Colorize(BC:GetHexColor(class), name)
|
|
end
|
|
|
|
if rankName ~= "" then
|
|
namedesc = namedesc .. " " .. coloredRank
|
|
end
|
|
|
|
if prio_flag == "OSPRIO" then
|
|
namedesc = C:Red("[PRIO] ") .. namedesc
|
|
prio_tag = "[PRIO] "
|
|
else
|
|
prio_tag = ""
|
|
end
|
|
|
|
-- Then you build ep/gp text, etc.
|
|
local text2, text4
|
|
if sepgp_minep > 0 and ep < sepgp_minep then
|
|
text2 = C:Red(string.format("%.4g", ep))
|
|
text4 = C:Red(string.format("%.4g", pr))
|
|
else
|
|
text2 = string.format("%.4g", ep)
|
|
text4 = string.format("%.4g", pr)
|
|
end
|
|
|
|
name = prio_tag .. name
|
|
|
|
offcat:AddLine(
|
|
"text", namedesc,
|
|
"text2", text2,
|
|
"text3", string.format("%.4g", gp),
|
|
"text4", text4,
|
|
"text5", main or "",
|
|
"func", "announceWinnerOS", "arg1", self, "arg2", name, "arg3", pr
|
|
)
|
|
end
|
|
|
|
end
|
|
|
|
-- GLOBALS: sepgp_saychannel,sepgp_groupbyclass,sepgp_groupbyarmor,sepgp_groupbyrole,sepgp_raidonly,sepgp_decay,sepgp_minep,sepgp_reservechannel,sepgp_main,sepgp_progress,sepgp_discount,sepgp_log,sepgp_dbver,sepgp_looted
|
|
-- GLOBALS: sepgp,sepgp_prices,sepgp_standings,sepgp_bids,sepgp_loot,sepgp_reserves,sepgp_alts,sepgp_logs
|