From 35e52c4058d4756d37c43ea9953d4b307129f178 Mon Sep 17 00:00:00 2001 From: Crum Date: Thu, 12 Jul 2018 20:56:40 -0500 Subject: [PATCH] update Guild datatext --- ElvUI/Modules/DataTexts/Guild.lua | 143 ++++++++++++++---------------- 1 file changed, 65 insertions(+), 78 deletions(-) diff --git a/ElvUI/Modules/DataTexts/Guild.lua b/ElvUI/Modules/DataTexts/Guild.lua index 3f54b11..00f618f 100644 --- a/ElvUI/Modules/DataTexts/Guild.lua +++ b/ElvUI/Modules/DataTexts/Guild.lua @@ -1,13 +1,13 @@ -local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB -local DT = E:GetModule("DataTexts"); +local E, L, V, P, G = unpack(ElvUI) +local DT = E:GetModule("DataTexts") --Cache global variables --Lua functions -local unpack = unpack -local format, join = string.format, string.join -local sort, wipe = table.sort, wipe +local select, unpack = select, unpack +local format, find, join, upper = string.format, string.find, string.join, string.upper +local getn, sort, wipe = table.getn, table.sort, table.wipe --WoW API / Variables -local EasyMenu = EasyMenu +local CreateFrame = CreateFrame local GetGuildInfo = GetGuildInfo local GetGuildRosterInfo = GetGuildRosterInfo local GetGuildRosterMOTD = GetGuildRosterMOTD @@ -16,94 +16,90 @@ local GetNumGuildMembers = GetNumGuildMembers local GetQuestDifficultyColor = GetQuestDifficultyColor local GetRealZoneText = GetRealZoneText local GuildRoster = GuildRoster -local InviteUnit = InviteUnit +local InviteByName = InviteByName local IsInGuild = IsInGuild local IsShiftKeyDown = IsShiftKeyDown -local LoadAddOn = LoadAddOn +local L_EasyMenu = L_EasyMenu local SetItemRef = SetItemRef local ToggleFriendsFrame = ToggleFriendsFrame -local UnitInParty = UnitInParty -local UnitInRaid = UnitInRaid -local CUSTOM_CLASS_COLORS = CUSTOM_CLASS_COLORS -local RAID_CLASS_COLORS = RAID_CLASS_COLORS -local MOTD_COLON = MOTD_COLON -local FRIENDS_LIST_ONLINE = "FRIENDS_LIST_ONLINE" +local CHAT_MSG_WHISPER_INFORM, GUILD, GUILD_MOTD, GUILD_ONLINE_LABEL, GUILD_RANK1_DESC, LABEL_NOTE, OPTIONS_MENU, PARTY_INVITE = CHAT_MSG_WHISPER_INFORM, GUILD, GUILD_MOTD, GUILD_ONLINE_LABEL, GUILD_RANK1_DESC, LABEL_NOTE, OPTIONS_MENU, PARTY_INVITE +local RAID_CLASS_COLORS = RAID_CLASS_COLORS local tthead, ttsubh, ttoff = {r=0.4, g=0.78, b=1}, {r=0.75, g=0.9, b=1}, {r=.3,g=1,b=.3} local activezone, inactivezone = {r=0.3, g=1.0, b=0.3}, {r=0.65, g=0.65, b=0.65} +local groupedTable = { "|cffaaaaaa*|r", "" } local displayString = "" local noGuildString = "" local guildInfoString = "%s" local guildInfoString2 = join("", GUILD, ": %d/%d") -local guildMotDString = "%s |cffaaaaaa |cffffffff%s" +local guildMotDString = "%s |cffaaaaaa- |cffffffff%s" local levelNameString = "|cff%02x%02x%02x%d|r |cff%02x%02x%02x%s|r %s" -local levelNameStatusString = "|cff%02x%02x%02x%d|r %s " +local levelNameStatusString = "|cff%02x%02x%02x%d|r %s" local nameRankString = "%s |cff999999-|cffffffff %s" -local moreMembersOnlineString = join("", "+ %d ", FRIENDS_LIST_ONLINE, "...") +local moreMembersOnlineString = join("", "+ %d ", GUILD_ONLINE_LABEL, "...") local noteString = join("", "|cff999999 ", LABEL_NOTE, ":|r %s") local officerNoteString = join("", "|cff999999 ", GUILD_RANK1_DESC, ":|r %s") local guildTable, guildMotD = {}, "" local lastPanel +local function sortByRank(a, b) + if a and b then + return a[9] < b[9] + end +end + +local function sortByName(a, b) + if a and b then + return a[1] < b[1] + end +end + local function SortGuildTable(shift) - sort(guildTable, function(a, b) - if a and b then - if shift then - return a[9] < b[9] - else - return a[1] < b[1] - end - end - end) + if shift then + sort(guildTable, sortByRank) + else + sort(guildTable, sortByName) + end end local function BuildGuildTable() wipe(guildTable) - local _, name, rank, level, zone, note, officernote, connected, status, class + local name, rank, rankIndex, level, class, zone, note, officernote, online local totalMembers = GetNumGuildMembers() for i = 1, totalMembers do - name, rank, _, level, class, zone, note, officernote, connected, status = GetGuildRosterInfo(i) + name, rank, rankIndex, level, class, zone, note, officernote, online = GetGuildRosterInfo(i) + if not name then break end - if connected then - guildTable[getn(guildTable) + 1] = {name, rank, level, zone, note, officernote, connected, status, string.upper(class)} + if online then + guildTable[getn(guildTable) + 1] = {name, rank, level, zone, note, officernote, online, upper(class), rankIndex} end end end -local function UpdateGuildMessage() - guildMotD = GetGuildRosterMOTD() -end - local eventHandlers = { - ["CHAT_MSG_SYSTEM"] = function() - GuildRoster() - end, -- when we enter the world and guildframe is not available then - -- load guild frame, update guild message and guild xp + -- load guild frame, update guild message ["PLAYER_ENTERING_WORLD"] = function() - if IsInGuild() then - GuildRoster() - end + guildMotD = GetGuildRosterMOTD() end, -- Guild Roster updated, so rebuild the guild table ["GUILD_ROSTER_UPDATE"] = function(self) GuildRoster() BuildGuildTable() - UpdateGuildMessage() + guildMotD = GetGuildRosterMOTD() + if GetMouseFocus() == self then self:GetScript("OnEnter")(self, nil, true) end end, - ["PLAYER_GUILD_UPDATE"] = function() - GuildRoster() - end, + ["PLAYER_GUILD_UPDATE"] = GuildRoster, -- our guild message of the day changed - ["GUILD_MOTD"] = function(_, arg1) + ["GUILD_MOTD"] = function() guildMotD = arg1 end, - ["ELVUI_FORCE_RUN"] = E.noop, + ["ELVUI_FORCE_RUN"] = GuildRoster, ["ELVUI_COLOR_UPDATE"] = E.noop, } @@ -112,6 +108,7 @@ local function OnEvent(self, event, ...) if IsInGuild() then eventHandlers[event](self, unpack(arg)) + self.text:SetText(format(displayString, getn(guildTable))) else self.text:SetText(noGuildString) @@ -120,26 +117,26 @@ end local menuFrame = CreateFrame("Frame", "GuildDatatTextRightClickMenu", E.UIParent, "L_UIDropDownMenuTemplate") local menuList = { - { text = OPTIONS_MENU, isTitle = true, notCheckable = true}, - { text = INVITE, hasArrow = true, notCheckable = true,}, - { text = CHAT_MSG_WHISPER_INFORM, hasArrow = true, notCheckable=true,} + {text = OPTIONS_MENU, isTitle = true, notCheckable = true}, + {text = PARTY_INVITE, hasArrow = true, notCheckable = true}, + {text = CHAT_MSG_WHISPER_INFORM, hasArrow = true, notCheckable = true} } -local function inviteClick(_, playerName) +local function inviteClick(playerName) menuFrame:Hide() - InviteUnit(playerName) + InviteByName(playerName) end -local function whisperClick(_, playerName) +local function whisperClick(playerName) menuFrame:Hide() - SetItemRef("player:"..playerName, ("|Hplayer:%1$s|h[%1$s]|h"):format(playerName), "LeftButton") + SetItemRef("player:"..playerName, format("|Hplayer:%1$s|h[%1$s]|h", playerName), "LeftButton") end -local function OnClick(_, btn) - if btn == "RightButton" and IsInGuild() then +local function OnClick() + if arg1 == "RightButton" and IsInGuild() then DT.tooltip:Hide() - local classc, levelc, grouped, info + local classc, levelc, info local menuCountWhispers = 0 local menuCountInvites = 0 @@ -149,17 +146,13 @@ local function OnClick(_, btn) for i = 1, getn(guildTable) do info = guildTable[i] if info[7] and info[1] ~= E.myname then - classc, levelc = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[info[9]], GetQuestDifficultyColor(info[3]) - --if UnitInParty(info[1]) or UnitInRaid(info[1]) then - -- grouped = "|cffaaaaaa*|r" - --elseif not info[11] then - menuCountInvites = menuCountInvites + 1 - grouped = "" - menuList[2].menuList[menuCountInvites] = {text = format(levelNameString, levelc.r*255,levelc.g*255,levelc.b*255, info[3], classc.r*255,classc.g*255,classc.b*255, info[1], ""), arg1 = info[1],notCheckable=true, func = inviteClick} - --end + classc, levelc = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[info[8]], GetQuestDifficultyColor(info[3]) + + menuCountInvites = menuCountInvites + 1 + menuList[2].menuList[menuCountInvites] = {text = format(levelNameString, levelc.r*255,levelc.g*255,levelc.b*255, info[3], classc.r*255,classc.g*255,classc.b*255, info[1], ""), arg1 = info[1],notCheckable=true, func = inviteClick} + menuCountWhispers = menuCountWhispers + 1 - if not grouped then grouped = "" end - menuList[3].menuList[menuCountWhispers] = {text = format(levelNameString, levelc.r*255,levelc.g*255,levelc.b*255, info[3], classc.r*255,classc.g*255,classc.b*255, info[1], grouped), arg1 = info[1],notCheckable=true, func = whisperClick} + menuList[3].menuList[menuCountWhispers] = {text = format(levelNameString, levelc.r*255,levelc.g*255,levelc.b*255, info[3], classc.r*255,classc.g*255,classc.b*255, info[1], ""), arg1 = info[1],notCheckable=true, func = whisperClick} end end @@ -175,12 +168,7 @@ local function OnEnter(self, _, noUpdate) DT:SetupTooltip(self) local online, total = 0, GetNumGuildMembers(true) - for i = 0, total do - local _, _, _, _, _, _, _, _, _, status = GetGuildRosterInfo(i) - if status then - online = online + 1 - end - end + for i = 0, total do if select(9, GetGuildRosterInfo(i)) then online = online + 1 end end if getn(guildTable) == 0 then BuildGuildTable() end SortGuildTable(IsShiftKeyDown()) @@ -194,7 +182,7 @@ local function OnEnter(self, _, noUpdate) if guildMotD ~= "" then DT.tooltip:AddLine(" ") - DT.tooltip:AddLine(format(guildMotDString, GUILD_MOTD_LABEL, guildMotD), ttsubh.r, ttsubh.g, ttsubh.b, 1) + DT.tooltip:AddLine(format(guildMotDString, GUILD_MOTD, guildMotD), ttsubh.r, ttsubh.g, ttsubh.b, 1) end local zonec, classc, levelc, info @@ -210,15 +198,14 @@ local function OnEnter(self, _, noUpdate) info = guildTable[i] if GetRealZoneText() == info[4] then zonec = activezone else zonec = inactivezone end - - classc, levelc = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[info[9]], GetQuestDifficultyColor(info[3]) + classc, levelc = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[info[8]], GetQuestDifficultyColor(info[3]) if IsShiftKeyDown() then DT.tooltip:AddDoubleLine(format(nameRankString, info[1], info[2]), info[4], classc.r, classc.g, classc.b, zonec.r, zonec.g, zonec.b) if info[5] ~= "" then DT.tooltip:AddLine(format(noteString, info[5]), ttsubh.r, ttsubh.g, ttsubh.b, 1) end if info[6] ~= "" then DT.tooltip:AddLine(format(officerNoteString, info[6]), ttoff.r, ttoff.g, ttoff.b, 1) end else - DT.tooltip:AddDoubleLine(format(levelNameStatusString, levelc.r*255, levelc.g*255, levelc.b*255, info[3], info[1], info[4]), info[4], classc.r,classc.g,classc.b, zonec.r,zonec.g,zonec.b) + DT.tooltip:AddDoubleLine(format(levelNameStatusString, levelc.r*255, levelc.g*255, levelc.b*255, info[3], info[1], info[2], info[8]), info[4], classc.r,classc.g,classc.b, zonec.r,zonec.g,zonec.b) end shown = shown + 1 end @@ -240,4 +227,4 @@ local function ValueColorUpdate(hex) end E["valueColorUpdateFuncs"][ValueColorUpdate] = true -DT:RegisterDatatext("Guild", {"PLAYER_ENTERING_WORLD", "CHAT_MSG_SYSTEM", "GUILD_ROSTER_UPDATE", "PLAYER_GUILD_UPDATE", "GUILD_MOTD"}, OnEvent, nil, OnClick, OnEnter, nil, GUILD) \ No newline at end of file +DT:RegisterDatatext("Guild", {"PLAYER_ENTERING_WORLD", "GUILD_ROSTER_UPDATE", "PLAYER_GUILD_UPDATE", "GUILD_MOTD"}, OnEvent, nil, OnClick, OnEnter, nil, GUILD) \ No newline at end of file