From 7586a24265b921c033c74bb03252d858994d44a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20=C3=81lvarez?= Date: Sun, 20 May 2018 14:55:28 +0200 Subject: [PATCH] raid: dropdown option to set a player as tank --- modules/raid.lua | 69 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/modules/raid.lua b/modules/raid.lua index 2976c68e..ddfef635 100644 --- a/modules/raid.lua +++ b/modules/raid.lua @@ -9,6 +9,13 @@ pfUI:RegisterModule("raid", function () pfUI.uf.raid = CreateFrame("Button","pfRaid",UIParent) + pfUI.uf.raid.tanksfirst = { + ["PF_TANK_TOGGLE"] = { T["Toggle as Tank"], "toggleTank" } + } + + -- no tank order for now, just "all tanks first" + pfUI.uf.raid.tankrole = { } + function pfUI.uf.raid:UpdateConfig() for i=1, 40 do pfUI.uf.raid[i]:UpdateConfig() @@ -32,29 +39,63 @@ pfUI:RegisterModule("raid", function () end end - pfUI.uf.raid:Hide() - pfUI.uf.raid:RegisterEvent("RAID_ROSTER_UPDATE") - pfUI.uf.raid:RegisterEvent("VARIABLES_LOADED") - pfUI.uf.raid:SetScript("OnEvent", function() + -- add units to the beginning of their groups + function pfUI.uf.raid:AddUnitToGroup(index, group) + for subindex = 1, 5 do + ids = subindex + 5*(group-1) + if pfUI.uf.raid[ids].id == 0 and pfUI.uf.raid[ids].config.visible == "1" then + pfUI.uf.raid[ids].id = index + pfUI.uf.raid[ids]:Show() + pfUI.uf:RefreshUnit(pfUI.uf.raid[ids], "all") + break + end + end + end + + function pfUI.uf.raid:RaidSetup() for i=1, 40 do pfUI.uf.raid[i].id = 0 pfUI.uf.raid[i]:Hide() end + -- sort tanks into their groups + for i=1, GetNumRaidMembers() do + local name, _, subgroup = GetRaidRosterInfo(i) + if name and pfUI.uf.raid.tankrole[name] then + pfUI.uf.raid:AddUnitToGroup(i, subgroup) + end + end + -- sort players into roster for i=1, GetNumRaidMembers() do local name, _, subgroup = GetRaidRosterInfo(i) - if name then - for subindex = 1, 5 do - ids = subindex + 5*(subgroup-1) - if pfUI.uf.raid[ids].id == 0 and pfUI.uf.raid[ids].config.visible == "1" then - pfUI.uf.raid[ids].id = i - pfUI.uf.raid[ids]:Show() - pfUI.uf:RefreshUnit(pfUI.uf.raid[ids], "all") - break - end - end + if name and not pfUI.uf.raid.tankrole[name] then + pfUI.uf.raid:AddUnitToGroup(i, subgroup) end end + end + + pfUI.uf.raid:Hide() + pfUI.uf.raid:RegisterEvent("RAID_ROSTER_UPDATE") + pfUI.uf.raid:RegisterEvent("VARIABLES_LOADED") + pfUI.uf.raid:SetScript("OnEvent", function() pfUI.uf.raid:RaidSetup() end) + + -- raid popup option to toggle tank role + local iupm = table.getn(UnitPopupMenus["RAID"]) + for label, data in pairs(pfUI.uf.raid.tanksfirst) do + UnitPopupButtons[label] = { text = TEXT(data[1]), dist = 0 } + table.insert(UnitPopupMenus["RAID"], iupm-1, label) + end + + hooksecurefunc("UnitPopup_OnClick", function() + local dropdownFrame = getglobal(UIDROPDOWNMENU_INIT_MENU) + local button = this.value + local unit = dropdownFrame.unit + local name = dropdownFrame.name + + if button and pfUI.uf.raid.tanksfirst[button] and name then + pfUI.uf.raid.tankrole[name] = not pfUI.uf.raid.tankrole[name] + pfUI.uf.raid:RaidSetup() + end end) end)