diff --git a/battlefield.lua b/battlefield.lua new file mode 100644 index 0000000..e69de29 diff --git a/core.lua b/core.lua new file mode 100644 index 0000000..34ac934 --- /dev/null +++ b/core.lua @@ -0,0 +1,313 @@ +--[[ + Copyright (c) 2008-2010 yleaf (yaroot@gmail.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +]] + +--{{{ +local GUILD_INDEX_MAX = 12 +local SMOOTH = { + 1, 0, 0, + 1, 1, 0, + 0, 1, 0, +} +local myName = UnitName'player' + +local BC = {} +for k, v in pairs(LOCALIZED_CLASS_NAMES_MALE) do + BC[v] = k +end +for k, v in pairs(LOCALIZED_CLASS_NAMES_FEMALE) do + BC[v] = k +end + +local RAID_CLASS_COLORS = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS + +local function Hex(r, g, b) + if(type(r) == 'table') then + if(r.r) then r, g, b = r.r, r.g, r.b else r, g, b = unpack(r) end + end + + if(not r or not g or not b) then + r, g, b = 1, 1, 1 + end + + return format('|cff%02x%02x%02x', r*255, g*255, b*255) +end + +-- http://www.wowwiki.com/ColorGradient +local function ColorGradient(perc, ...) + if perc >= 1 then + local r, g, b = select(select('#', ...) - 2, ...) + return r, g, b + elseif perc <= 0 then + local r, g, b = ... + return r, g, b + end + + local num = select('#', ...) / 3 + + local segment, relperc = math.modf(perc*(num-1)) + local r1, g1, b1, r2, g2, b2 = select((segment*3)+1, ...) + + return r1 + (r2-r1)*relperc, g1 + (g2-g1)*relperc, b1 + (b2-b1)*relperc +end + +--GuildControlGetNumRanks() +--GuildControlGetRankName(index) +local guildRankColor = setmetatable({}, { + __index = function(t, i) + if i then + t[i] = {ColorGradient(i/GUILD_INDEX_MAX, unpack(SMOOTH))} + end + return i and t[i] or {1,1,1} + end +}) + +local diffColor = setmetatable({}, { + __index = function(t,i) + local c = i and GetQuestDifficultyColor(i) + if not c then return '|cffffffff' end + t[i] = Hex(c) + return t[i] + end +}) + +local classColorHex = setmetatable({}, { + __index = function(t,i) + local c = i and RAID_CLASS_COLORS[BC[i] or i] + if not c then return '|cffffffff' end + t[i] = Hex(c) + return t[i] + end +}) + +local classColors = setmetatable({}, { + __index = function(t,i) + local c = i and RAID_CLASS_COLORS[BC[i] or i] + if not c then return {1,1,1} end + t[i] = {c.r, c.g, c.b} + return t[i] + end +}) + +if CUSTOM_CLASS_COLORS then + local function callBack() + wipe(classColorHex) + wipe(classColors) + end + CUSTOM_CLASS_COLORS:RegisterCallback(callBack) +end +--}}} + +--{{{ +local WHITE = {r = 1, g = 1, b = 1} +local FRIENDS_LEVEL_TEMPLATE = FRIENDS_LEVEL_TEMPLATE:gsub('%%d', '%%s') +FRIENDS_LEVEL_TEMPLATE = FRIENDS_LEVEL_TEMPLATE:gsub('%$d', '%$s') -- '%2$s %1$d-го уровня' +local function friendsFrame() + print(123) + local scrollFrame = FriendsFrameFriendsScrollFrame + local offset = HybridScrollFrame_GetOffset(scrollFrame) + local buttons = scrollFrame.buttons + + local playerArea = GetRealZoneText() + + for i = 1, #buttons do + local nameText, nameColor, infoText + button = buttons[i] + index = offset + i + if(button:IsShown()) then + if ( button.buttonType == FRIENDS_BUTTON_TYPE_WOW ) then + local name, level, class, area, connected, status, note = GetFriendInfo(button.id) + if(connected) then + nameText = classColorHex[class] .. name.."|r, "..format(FRIENDS_LEVEL_TEMPLATE, diffColor[level] .. level .. '|r', class) + if(areaName == playerArea) then + infoText = format('|cff00ff00%s|r', area) + end + end + elseif (button.buttonType == FRIENDS_BUTTON_TYPE_BNET) then + local presenceID, givenName, surname, toonName, toonID, client, isOnline, lastOnline, isAFK, isDND, messageText, noteText = BNGetFriendInfo(button.id) + if(isOnline and client==BNET_CLIENT_WOW) then + local hasFocus, toonName, client, realmName, faction, race, class, guild, zoneName, level, gameText, broadcastText, broadcastTime = BNGetToonInfo(toonID) + if(givenName and surname and toonName) then + if(enable_friendslist_wowcrossrealmfriend or CanCooperateWithToon(toonID)) then + nameText = format(BATTLENET_NAME_FORMAT, givenName, surname) ..' '.. FRIENDS_WOW_NAME_COLOR_CODE .. '(' .. classColorHex[class] .. toonName .. FRIENDS_WOW_NAME_COLOR_CODE .. ')' + if(zoneName == playerArea) then + infoText = format('|cff00ff00%s|r', zoneName) + end + end + end + end + end + end + + if(nameText) then + button.name:SetText(nameText) + end + if(nameColor) then + button.name:SetTextColor(nameColor.r, nameColor.g, nameColor.b) + end + if(infoText) then + button.info:SetText(infoText) + end + end +end +hooksecurefunc(FriendsFrameFriendsScrollFrame, 'update', friendsFrame) +hooksecurefunc( +--}}} + +if(1) then return end + +if(enable_guildlist and not is_cata) then + hooksecurefunc('GuildStatus_Update', function() + local playerArea = GetRealZoneText() + + if ( FriendsFrame.playerStatusFrame ) then + local guildOffset = FauxScrollFrame_GetOffset(GuildListScrollFrame) + local guildIndex + + for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do + guildIndex = guildOffset + i + local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(guildIndex) + if not name then return end + if online then + local nameText = getglobal('GuildFrameButton'..i..'Name') + local zoneText = getglobal('GuildFrameButton'..i..'Zone') + local levelText = getglobal('GuildFrameButton'..i..'Level') + local classText = getglobal('GuildFrameButton'..i..'Class') + + nameText:SetVertexColor(unpack(classColors[class])) + if playerArea == zone then + zoneText:SetFormattedText('|cff00ff00%s|r', zone) + end + levelText:SetText(diffColor[level] .. level) + end + end + else + local guildOffset = FauxScrollFrame_GetOffset(GuildListScrollFrame) + local guildIndex + + for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do + guildIndex = guildOffset + i + local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(guildIndex) + if not name then return end + if online then + local nameText = getglobal('GuildFrameGuildStatusButton'..i..'Name') + nameText:SetVertexColor(unpack(classColors[class])) + + local rankText = getglobal('GuildFrameGuildStatusButton'..i..'Rank') + rankText:SetVertexColor(unpack(guildRankColor[rankIndex])) + end + end + end + end) +end + +if(enable_wholist) then + hooksecurefunc('WhoList_Update', function() + local whoIndex + local whoOffset = FauxScrollFrame_GetOffset(WhoListScrollFrame) + + local playerZone = GetRealZoneText() + local playerGuild = GetGuildInfo'player' + local playerRace = UnitRace'player' + + for i=1, WHOS_TO_DISPLAY, 1 do + whoIndex = whoOffset + i + local nameText = getglobal('WhoFrameButton'..i..'Name') + local levelText = getglobal('WhoFrameButton'..i..'Level') + local classText = getglobal('WhoFrameButton'..i..'Class') + local variableText = getglobal('WhoFrameButton'..i..'Variable') + + local name, guild, level, race, class, zone, classFileName = GetWhoInfo(whoIndex) + if not name then return end + 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 } + + nameText:SetVertexColor(unpack(classColors[class])) + levelText:SetText(diffColor[level] .. level) + variableText:SetText(columnTable[UIDropDownMenu_GetSelectedID(WhoFrameDropDown)]) + end + end) +end + +if(enable_lfrlist) then + hooksecurefunc('LFRBrowseFrameListButton_SetData', function(button, index) + local name, level, areaName, className, comment, partyMembers, status, class, encountersTotal, encountersComplete, isLeader, isTank, isHealer, isDamage = SearchLFGGetResults(index) + + local c = class and classColors[class] + if c then + button.name:SetTextColor(unpack(c)) + button.class:SetTextColor(unpack(c)) + end + if level then + button.level:SetText(diffColor[level] .. level) + end + end) +end + +if(enable_bgscoreboard) then + hooksecurefunc('WorldStateScoreFrame_Update', function() + local inArena = IsActiveBattlefieldArena() + for i = 1, MAX_WORLDSTATE_SCORE_BUTTONS do + local index = FauxScrollFrame_GetOffset(WorldStateScoreScrollFrame) + i + local name, killingBlows, honorableKills, deaths, honorGained, faction, rank, race, class, classToken, damageDone, healingDone = GetBattlefieldScore(index) + -- faction: Battlegrounds: Horde = 0, Alliance = 1 / Arenas: Green Team = 0, Yellow Team = 1 + if name then + local n, r = strsplit('-', name, 2) + n = classColorHex[classToken] .. n .. '|r' + if n == myName then + n = '> ' .. n .. ' <' + end + + if r then + local color + if inArena then + if faction == 1 then + color = '|cffffd100' + else + color = '|cff19ff19' + end + else + if faction == 1 then + color = '|cff00adf0' + else + color = '|cffff1919' + end + end + r = color .. r .. '|r' + n = n .. '|cffffffff-|r' .. r + end + + local buttonNameText = getglobal('WorldStateScoreButton' .. i .. 'NameText') + buttonNameText:SetText(n) + end + end + end) +end + + diff --git a/friends.lua b/friends.lua new file mode 100644 index 0000000..e69de29 diff --git a/guild.lua b/guild.lua new file mode 100644 index 0000000..e69de29 diff --git a/lfr.lua b/lfr.lua new file mode 100644 index 0000000..e69de29 diff --git a/who.lua b/who.lua new file mode 100644 index 0000000..e69de29 diff --git a/yClassColors.toc b/yClassColors.toc index d5e2cb7..011f80e 100644 --- a/yClassColors.toc +++ b/yClassColors.toc @@ -1,11 +1,17 @@ -## Interface: 30300 -## X-Compatible-With: 40000 +## Interface: 40000 ## Title: |cffff8800y|rClassColors ## Note: Colorize name by class! ## Author: yleaf -## Version: 2.1 +## Version: 2.2 ## OptionalDeps: !ClassColors -yClassColors.lua +core.lua + + +battlefield.lua +friends.lua +guild.lua +lfr.lua +who.lua