diff --git a/2/3/4/5/6/7/ElvUI/Media/Textures/Icons-Classes.blp b/2/3/4/5/6/7/ElvUI/Media/Textures/Icons-Classes.blp new file mode 100644 index 0000000..c379794 Binary files /dev/null and b/2/3/4/5/6/7/ElvUI/Media/Textures/Icons-Classes.blp differ diff --git a/2/3/4/5/6/7/ElvUI/Modules/Skins/Blizzard/Friends.lua b/2/3/4/5/6/7/ElvUI/Modules/Skins/Blizzard/Friends.lua index b8012c1..4cdd3cd 100644 --- a/2/3/4/5/6/7/ElvUI/Modules/Skins/Blizzard/Friends.lua +++ b/2/3/4/5/6/7/ElvUI/Modules/Skins/Blizzard/Friends.lua @@ -3,15 +3,17 @@ local S = E:GetModule("Skins"); --Cache global variables --Lua functions -local _G = getfenv() +local _G = _G local unpack = unpack +local upper = string.upper --WoW API / Variables -local hooksecurefunc = hooksecurefunc local GetWhoInfo = GetWhoInfo local GetGuildRosterInfo = GetGuildRosterInfo local GUILDMEMBERS_TO_DISPLAY = GUILDMEMBERS_TO_DISPLAY local RAID_CLASS_COLORS = RAID_CLASS_COLORS local CUSTOM_CLASS_COLORS = CUSTOM_CLASS_COLORS +local HookScript = HookScript +local hooksecurefunc = hooksecurefunc function LoadSkin() -- if E.private.skins.blizzard.enable ~= true or E.private.skins.blizzard.friends ~= true then return end @@ -47,7 +49,6 @@ function LoadSkin() local width, height = (f:GetWidth() * (scale or 0.5)), f:GetHeight() local leftGrad = f:CreateTexture(nil, "HIGHLIGHT") - -- leftGrad:Size(width, height) leftGrad:SetWidth(width) leftGrad:SetHeight(height) leftGrad:SetPoint("LEFT", f, "CENTER") @@ -55,7 +56,6 @@ function LoadSkin() leftGrad:SetGradientAlpha("Horizontal", r, g, b, 0.35, r, g, b, 0) local rightGrad = f:CreateTexture(nil, "HIGHLIGHT") - -- rightGrad:Size(width, height) rightGrad:SetWidth(width) rightGrad:SetHeight(height) rightGrad:SetPoint("RIGHT", f, "CENTER") @@ -102,6 +102,20 @@ function LoadSkin() end -- Who Frame + WhoFrameColumnHeader3:ClearAllPoints() + WhoFrameColumnHeader3:SetPoint("TOPLEFT", 20, -70) + + WhoFrameColumnHeader4:ClearAllPoints() + WhoFrameColumnHeader4:SetPoint("LEFT", WhoFrameColumnHeader3, "RIGHT", -2, -0) + WhoFrameColumnHeader4:SetWidth(48) + + WhoFrameColumnHeader1:ClearAllPoints() + WhoFrameColumnHeader1:SetPoint("LEFT", WhoFrameColumnHeader4, "RIGHT", -2, -0) + WhoFrameColumnHeader1:SetWidth(105) + + WhoFrameColumnHeader2:ClearAllPoints() + WhoFrameColumnHeader2:SetPoint("LEFT", WhoFrameColumnHeader1, "RIGHT", -2, -0) + for i = 1, 4 do E:StripTextures(_G["WhoFrameColumnHeader"..i]) E:StyleButton(_G["WhoFrameColumnHeader"..i], nil, true) @@ -109,12 +123,38 @@ function LoadSkin() S:HandleDropDownBox(WhoFrameDropDown) + for i = 1, 17 do + local button = _G["WhoFrameButton" .. i] + local level = _G["WhoFrameButton" .. i .. "Level"] + local name = _G["WhoFrameButton" .. i .. "Name"] + + button.icon = button:CreateTexture("$parentIcon", "ARTWORK") + button.icon:SetPoint("LEFT", 45, 0) + button.icon:SetWidth(15) + button.icon:SetHeight(15) + button.icon:SetTexture("Interface\\AddOns\\ElvUI\\Media\\Textures\\Icons-Classes") + + E:CreateBackdrop(button, "Default", true) + button.backdrop:SetAllPoints(button.icon) + StyleButton(button) + + level:ClearAllPoints() + level:SetPoint("TOPLEFT", 12, -2) + + name:SetWidth(100) + name:SetHeight(14) + name:ClearAllPoints() + name:SetPoint("LEFT", 85, 0) + + _G["WhoFrameButton" .. i .. "Class"]:Hide() + end + E:StripTextures(WhoListScrollFrame) S:HandleScrollBar(WhoListScrollFrameScrollBar) S:HandleEditBox(WhoFrameEditBox) WhoFrameEditBox:SetPoint("BOTTOMLEFT", 17, 108) - WhoFrameEditBox:SetWidth(326) + WhoFrameEditBox:SetWidth(338) WhoFrameEditBox:SetHeight(18) S:HandleButton(WhoFrameWhoButton) @@ -127,11 +167,139 @@ function LoadSkin() S:HandleButton(WhoFrameGroupInviteButton) + hooksecurefunc("WhoList_Update", function() + local whoOffset = FauxScrollFrame_GetOffset(WhoListScrollFrame) + local playerZone = GetRealZoneText() + local playerGuild = GetGuildInfo("player") + local playerRace = UnitRace("player") + + for i = 1, WHOS_TO_DISPLAY, 1 do + local index = whoOffset + i + local button = _G["WhoFrameButton"..i] + local nameText = _G["WhoFrameButton"..i.."Name"] + local levelText = _G["WhoFrameButton"..i.."Level"] + local classText = _G["WhoFrameButton"..i.."Class"] + local variableText = _G["WhoFrameButton"..i.."Variable"] + + _, guild, level, race, class, zone = GetWhoInfo(index) + + if class then + class = strupper(class) + end + + local classTextColor = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class] + local levelTextColor = GetQuestDifficultyColor(level) + + if class then + button.icon:Show() + button.icon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[class])) + + nameText:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b) + levelText:SetTextColor(levelTextColor.r, levelTextColor.g, levelTextColor.b) + + if zone == playerZone then + zone = "|cff00ff00"..zone + end + if guild == playerGuild then + guild = "|cff00ff00"..guild + end + if race == playerRace then + race = "|cff00ff00"..race + end + + local columnTable = {zone, guild, race} + + variableText:SetText(columnTable[UIDropDownMenu_GetSelectedID(WhoFrameDropDown)]) + else + button.icon:Hide() + end + end + end) + -- Guild Frame + GuildFrameColumnHeader3:ClearAllPoints() + GuildFrameColumnHeader3:SetPoint("TOPLEFT", 20, -70) + + GuildFrameColumnHeader4:ClearAllPoints() + GuildFrameColumnHeader4:SetPoint("LEFT", GuildFrameColumnHeader3, "RIGHT", -2, -0) + GuildFrameColumnHeader4:SetWidth(48) + + GuildFrameColumnHeader1:ClearAllPoints() + GuildFrameColumnHeader1:SetPoint("LEFT", GuildFrameColumnHeader4, "RIGHT", -2, -0) + GuildFrameColumnHeader1:SetWidth(105) + + GuildFrameColumnHeader2:ClearAllPoints() + GuildFrameColumnHeader2:SetPoint("LEFT", GuildFrameColumnHeader1, "RIGHT", -2, -0) + GuildFrameColumnHeader2:SetWidth(127) + for i = 1, GUILDMEMBERS_TO_DISPLAY do + local button = _G["GuildFrameButton"..i] + + StyleButton(button) StyleButton(_G["GuildFrameGuildStatusButton"..i]) + + button.icon = button:CreateTexture("$parentIcon", "ARTWORK") + button.icon:SetPoint("LEFT", 48, -3) + button.icon:SetWidth(15) + button.icon:SetHeight(15) + button.icon:SetTexture("Interface\\AddOns\\ElvUI\\Media\\Textures\\Icons-Classes") + + E:CreateBackdrop(button, "Default", true) + button.backdrop:SetAllPoints(button.icon) + + _G["GuildFrameButton" .. i .. "Level"]:ClearAllPoints() + _G["GuildFrameButton" .. i .. "Level"]:SetPoint("TOPLEFT", 10, -3) + + _G["GuildFrameButton" .. i .. "Name"]:SetWidth(100) + _G["GuildFrameButton" .. i .. "Name"]:SetHeight(14) + _G["GuildFrameButton" .. i .. "Name"]:ClearAllPoints() + _G["GuildFrameButton" .. i .. "Name"]:SetPoint("LEFT", 85, -3) + + _G["GuildFrameButton" .. i .. "Class"]:Hide() end + hooksecurefunc("GuildStatus_Update", function() + local _, level, online, classFileName + local button, buttonText, classTextColor, levelTextColor + + if FriendsFrame.playerStatusFrame then + for i = 1, GUILDMEMBERS_TO_DISPLAY, 1 do + button = _G["GuildFrameButton" .. i] + _, _, _, level, class, _, _, _, online = GetGuildRosterInfo(button.guildIndex) + if class then + class = upper(class) + end + if class then + if online then + classTextColor = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class] + levelTextColor = GetQuestDifficultyColor(level) + buttonText = _G["GuildFrameButton" .. i .. "Name"] + buttonText:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b) + buttonText = _G["GuildFrameButton" .. i .. "Level"] + buttonText:SetTextColor(levelTextColor.r, levelTextColor.g, levelTextColor.b) + end + button.icon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[class])) + end + end + else + local classFileName + for i = 1, GUILDMEMBERS_TO_DISPLAY, 1 do + button = _G["GuildFrameGuildStatusButton" .. i] + _, _, _, _, class, _, _, _, online = GetGuildRosterInfo(button.guildIndex) + if class then + class = upper(class) + end + if class then + if online then + classTextColor = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class] + _G["GuildFrameGuildStatusButton" .. i .. "Name"]:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b) + _G["GuildFrameGuildStatusButton" .. i .. "Online"]:SetTextColor(1.0, 1.0, 1.0) + end + end + end + end + end) + E:StripTextures(GuildFrameLFGFrame) E:SetTemplate(GuildFrameLFGFrame, "Transparent") @@ -159,8 +327,10 @@ function LoadSkin() GuildMemberDetailFrame:SetPoint("TOPLEFT", GuildFrame, "TOPRIGHT", -31, -13) S:HandleCloseButton(GuildMemberDetailCloseButton) + GuildMemberDetailCloseButton:SetPoint("TOPRIGHT", 2, 2) S:HandleButton(GuildFrameControlButton) + S:HandleButton(GuildMemberRemoveButton) GuildMemberRemoveButton:SetPoint("BOTTOMLEFT", 8, 7) S:HandleButton(GuildMemberGroupInviteButton) GuildMemberGroupInviteButton:SetPoint("LEFT", GuildMemberRemoveButton, "RIGHT", 3, 0) @@ -184,25 +354,9 @@ function LoadSkin() S:HandleCloseButton(GuildInfoCloseButton) S:HandleButton(GuildInfoSaveButton) - GuildInfoSaveButton:SetPoint("BOTTOMLEFT", 104, 11) + GuildInfoSaveButton:SetPoint("BOTTOMLEFT", 8, 11) S:HandleButton(GuildInfoCancelButton) GuildInfoCancelButton:SetPoint("LEFT", GuildInfoSaveButton, "RIGHT", 3, 0) - -- S:HandleButton(GuildInfoGuildEventButton) - -- GuildInfoGuildEventButton:SetPoint("RIGHT", GuildInfoSaveButton, "LEFT", -28, 0) - - -- GuildEventLog Frame - -- E:StripTextures(GuildEventLogFrame) - -- E:CreateBackdrop(GuildEventLogFrame, "Transparent") - -- GuildEventLogFrame.backdrop:SetPoint("TOPLEFT", 3, -6) - -- GuildEventLogFrame.backdrop:SetPoint("BOTTOMRIGHT", -2, 5) - - -- E:SetTemplate(GuildEventFrame, "Default") - - -- S:HandleScrollBar(GuildEventLogScrollFrameScrollBar) - -- S:HandleCloseButton(GuildEventLogCloseButton) - - -- GuildEventLogCancelButton:SetPoint("BOTTOMRIGHT", -9, 9) - -- S:HandleButton(GuildEventLogCancelButton) -- Control Frame E:StripTextures(GuildControlPopupFrame) @@ -211,7 +365,6 @@ function LoadSkin() GuildControlPopupFrame.backdrop:SetPoint("BOTTOMRIGHT", -27, 27) S:HandleDropDownBox(GuildControlPopupFrameDropDown, 185) - -- GuildControlPopupFrameDropDownButton:Size(16) GuildControlPopupFrameDropDownButton:SetWidth(16) GuildControlPopupFrameDropDownButton:SetHeight(16)