local name = "ToolTip"; local version = "5.8"; --Author's Notes------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------- --[[ Description: Drastically improves the game's tooltip. Author: AquaFlare7 (AquaFlare7@comcast.net) --]] --onEvent Routines---------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- function aftt_toggleFrames() if (aftt_optionFrame:IsVisible()) then aftt_optionFrame:Hide(); else aftt_optionFrame:Show(); end end function aftt_buttonToggle(option) if (option == "guild") then --0, hide -> toggles to show --1, show -> toggles to showbottom --2, showbottom -> toggles to hide if (AF_ToolTip[aftt_localUser]["Guild"] == 0 or AF_ToolTip[aftt_localUser]["Guild"] == nil) then AF_ToolTip[aftt_localUser]["Guild"] = 1; elseif (AF_ToolTip[aftt_localUser]["Guild"] == 1) then AF_ToolTip[aftt_localUser]["Guild"] = 2; elseif (AF_ToolTip[aftt_localUser]["Guild"] == 2) then AF_ToolTip[aftt_localUser]["Guild"] = 0; end elseif (option == "reaction") then if (AF_ToolTip[aftt_localUser]["ReactionText"] == 1) then AF_ToolTip[aftt_localUser]["ReactionText"] = 0; else AF_ToolTip[aftt_localUser]["ReactionText"] = 1; end elseif (option == "tapped") then if (AF_ToolTip[aftt_localUser]["Tapped"] == 1) then AF_ToolTip[aftt_localUser]["Tapped"] = 0; else AF_ToolTip[aftt_localUser]["Tapped"] = 1; end elseif (option == "pvp") then if (AF_ToolTip[aftt_localUser]["PvP"] == 1) then AF_ToolTip[aftt_localUser]["PvP"] = 0; else AF_ToolTip[aftt_localUser]["PvP"] = 1; end elseif (option == "fade") then if (AF_ToolTip[aftt_localUser]["Fade"] == 1) then AF_ToolTip[aftt_localUser]["Fade"] = 0; else AF_ToolTip[aftt_localUser]["Fade"] = 1; end elseif (option == "rank") then if (AF_ToolTip[aftt_localUser]["Rank"] == 1) then AF_ToolTip[aftt_localUser]["Rank"] = 2; elseif (AF_ToolTip[aftt_localUser]["Rank"] == 2) then AF_ToolTip[aftt_localUser]["Rank"] = 0; else AF_ToolTip[aftt_localUser]["Rank"] = 1; end elseif (option == "anchor") then --mouse -> topleft --topleft -> top --top -> topright --topright -> left --left -> center --center -> right --right -> bottomleft --bottomleft -> bottom --bottom -> bottomright --bottomright -> mouse if (AF_ToolTip[aftt_localUser]["Anchor"] == "mouse") then AF_ToolTip[aftt_localUser]["Anchor"] = "topleft"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "topleft") then AF_ToolTip[aftt_localUser]["Anchor"] = "top"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "top") then AF_ToolTip[aftt_localUser]["Anchor"] = "topright"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "topright") then AF_ToolTip[aftt_localUser]["Anchor"] = "left"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "left") then AF_ToolTip[aftt_localUser]["Anchor"] = "center"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "center") then AF_ToolTip[aftt_localUser]["Anchor"] = "right"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "right") then AF_ToolTip[aftt_localUser]["Anchor"] = "bottomleft"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "bottomleft") then AF_ToolTip[aftt_localUser]["Anchor"] = "bottom"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "bottom") then AF_ToolTip[aftt_localUser]["Anchor"] = "bottomright"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "bottomright") then AF_ToolTip[aftt_localUser]["Anchor"] = "none"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; elseif (AF_ToolTip[aftt_localUser]["Anchor"] == "none") then AF_ToolTip[aftt_localUser]["Anchor"] = "mouse"; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; end elseif (option == "x+") then AF_ToolTip[aftt_localUser]["PositionX"] = AF_ToolTip[aftt_localUser]["PositionX"] + 5; elseif (option == "y+") then AF_ToolTip[aftt_localUser]["PositionY"] = AF_ToolTip[aftt_localUser]["PositionY"] + 5; elseif (option == "x-") then if (AF_ToolTip[aftt_localUser]["PositionX"] <= 5) then AF_ToolTip[aftt_localUser]["PositionX"] = 0; else AF_ToolTip[aftt_localUser]["PositionX"] = AF_ToolTip[aftt_localUser]["PositionX"] - 5; end elseif (option == "y-") then if (AF_ToolTip[aftt_localUser]["PositionY"] <= 5) then AF_ToolTip[aftt_localUser]["PositionY"] = 0; else AF_ToolTip[aftt_localUser]["PositionY"] = AF_ToolTip[aftt_localUser]["PositionY"] - 5; end end end function aftt_onEvent() if (event == "UPDATE_MOUSEOVER_UNIT") then if (UnitName("mouseover")) then AF_ToolTipRefresh:Show(); end end end function aftt_GameTooltip_OnEvent() aftt_Old_GameTooltip_OnEvent(); if (event ~= "CLEAR_TOOLTIP" and UnitExists("mouseover")) then aftt_format("mouseover"); end end function aftt_onRefresh() --Set our options frame refresh if (aftt_optionFrame:IsVisible()) then aftt_TextLeft1:SetText("Anchor:"); aftt_TextRight1:SetText(AF_ToolTip[aftt_localUser]["Anchor"]); aftt_TextLeft2:SetText("Offset X:"); aftt_TextRight2:SetText(AF_ToolTip[aftt_localUser]["PositionX"]); aftt_TextLeft3:SetText("Offset Y:"); aftt_TextRight3:SetText(AF_ToolTip[aftt_localUser]["PositionY"]); if (AF_ToolTip[aftt_localUser]["Anchor"] ~= "mouse" and AF_ToolTip[aftt_localUser]["Anchor"] ~= "none") then aftt_previous2:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up"); aftt_previous3:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up"); aftt_next2:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"); aftt_next3:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"); aftt_TextLeft2:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight2:SetVertexColor(1.0, 0.8, 0.0); aftt_TextLeft3:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight3:SetVertexColor(1.0, 0.8, 0.0); else aftt_previous2:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Disabled"); aftt_previous3:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Disabled"); aftt_next2:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Disabled"); aftt_next3:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Disabled"); aftt_TextLeft2:SetVertexColor(0.3, 0.3, 0.3); aftt_TextRight2:SetVertexColor(0.3, 0.3, 0.3); aftt_TextLeft3:SetVertexColor(0.3, 0.3, 0.3); aftt_TextRight3:SetVertexColor(0.3, 0.3, 0.3); end aftt_TextLeft4:SetText("Fade:"); if (AF_ToolTip[aftt_localUser]["Fade"] == 1) then aftt_TextLeft4:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight4:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight4:SetText("Enabled"); else aftt_TextLeft4:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight4:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight4:SetText("Disabled"); end aftt_TextLeft5:SetText("PvP:"); if (AF_ToolTip[aftt_localUser]["PvP"] == 1) then aftt_TextLeft5:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight5:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight5:SetText("Shown"); else aftt_TextLeft5:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight5:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight5:SetText("Hidden"); end aftt_TextLeft6:SetText("Tapped:"); if (AF_ToolTip[aftt_localUser]["Tapped"] == 1) then aftt_TextLeft6:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight6:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight6:SetText("Shown"); else aftt_TextLeft6:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight6:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight6:SetText("Hidden"); end aftt_TextLeft7:SetText("Reaction:"); if (AF_ToolTip[aftt_localUser]["ReactionText"] == 1) then aftt_TextLeft7:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight7:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight7:SetText("Shown"); else aftt_TextLeft7:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight7:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight7:SetText("Hidden"); end aftt_TextLeft8:SetText("Guild:"); if (AF_ToolTip[aftt_localUser]["Guild"] == 1) then aftt_TextLeft8:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight8:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight8:SetText("Top"); elseif (AF_ToolTip[aftt_localUser]["Guild"] == 2) then aftt_TextLeft8:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight8:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight8:SetText("Bottom"); else aftt_TextLeft8:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight8:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight8:SetText("Hidden"); end aftt_TextLeft9:SetText("Rank:"); if (AF_ToolTip[aftt_localUser]["Rank"] == 1) then aftt_TextLeft9:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight9:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight9:SetText("Text"); elseif (AF_ToolTip[aftt_localUser]["Rank"] == 2) then aftt_TextLeft9:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight9:SetVertexColor(1.0, 0.8, 0.0); aftt_TextRight9:SetText("Numeric"); else aftt_TextLeft9:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight9:SetVertexColor(0.4, 0.4, 0.0); aftt_TextRight9:SetText("Hidden"); end aftt_TextLeft10:SetText(aftt_color_chart_name); aftt_TextLeft11:SetText(aftt_color_chart_author); end if (UnitExists("mouseover") == nil) then aftt_updateFlag = { ["Previous"] = "none"; ["Current"] = "none"; ["Reaction"] = 0; ["EasterEgg"] = 0; ["Guild"] = 0; ["PvP"] = 0; ["RankFlag"] = 0; } if (AF_ToolTip[aftt_localUser]["Fade"] == 0 or AF_ToolTip[aftt_localUser]["Fade"] == nil) then GameTooltip:Hide(); end AF_ToolTipRefresh:Hide(); else aftt_format("mouseover"); end end function aftt_UnitFrame_OnEnter() aftt_Old_UnitFrame_OnEnter(); aftt_updateFlag["Previous"] = "none"; if (SHOW_NEWBIE_TIPS ~= "1") then aftt_format(this.unit); end aftt_updateFlag["Previous"] = "none"; end function aftt_UnitFrame_OnLeave() if ( SpellIsTargeting() ) then SetCursor("CAST_ERROR_CURSOR"); end this.updateTooltip = nil; if (SHOW_NEWBIE_TIPS == "1" or AF_ToolTip[aftt_localUser]["Fade"] == 0) then GameTooltip:Hide(); else GameTooltip:FadeOut(); end end function aftt_TargetFrame_OnEnter() aftt_Old_TargetFrame_OnEnter(); aftt_updateFlag["Previous"] = "none"; aftt_format("mouseover"); aftt_updateFlag["Previous"] = "none"; end --preLoad Timer Setup------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- function aftt_unitInit() local playerName = UnitName("player"); local realmName = GetCVar("realmName"); if (playerName == nil or playerName == UNKNOWNBEING or playerName == UKNOWNBEING or playerName == UNKNOWNOBJECT) then return; end aftt_playerName = playerName; aftt_realmName = realmName; aftt_timerDone = 1; AF_ToolTipFrame:Hide(); end aftt_Timer = 0; aftt_timerDone = nil; function aftt_onUpdate(arg1) aftt_Timer = aftt_Timer + arg1 if not aftt_timerDone and aftt_Timer>0.2 then aftt_unitInit(); aftt_Timer = 0; end if (aftt_timerDone == 1) then aftt_onLoad(); end end --onLoad Routine------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------- function aftt_onLoad() --Set our frame with the name and version aftt_TextHeader:SetText("AF_" .. name .. " v" .. version); aftt_TextHeader2:SetText("Color Chart Details"); aftt_TextHeader:SetVertexColor(1.0, 1.0, 1.0); aftt_TextHeader2:SetVertexColor(1.0, 1.0, 1.0); aftt_TextLeft9:SetVertexColor(1.0, 0.8, 0.0); aftt_TextLeft10:SetVertexColor(0.0, 0.6, 1.0); --Create update table aftt_updateFlag = { ["Previous"] = "none"; ["Current"] = "none"; ["Reaction"] = 0; ["EasterEgg"] = 0; ["Guild"] = 0; ["PvP"] = 0; ["RankFlag"] = 0; } --Create user table if it doesnt exist aftt_localUser = (aftt_playerName .. "|" .. aftt_realmName); if (AF_ToolTip == nil) then AF_ToolTip = {}; end if (AF_ToolTip[aftt_localUser] == nil) then AF_ToolTip[aftt_localUser] = { ["Anchor"] = "none"; ["PositionX"] = 0; ["PositionY"] = 15; ["Fade"] = 1; ["PvP"] = 0; ["ReactionText"] = 0; ["Guild"] = 1; ["Rank"] = 1; ["Tapped"] = 1; } DEFAULT_CHAT_FRAME:AddMessage("|cffffff00|rToolTip: User Table for " .. aftt_playerName .. " created successfully!"); end --Register our slash commands for use aftt_slashCommands(); --Swap Blizzard's unit frame mouseover function out for our own (making sure to backup the old function) aftt_Old_UnitFrame_OnEnter = UnitFrame_OnEnter; UnitFrame_OnEnter = aftt_UnitFrame_OnEnter; aftt_Old_UnitFrame_OnLeave = UnitFrame_OnLeave; UnitFrame_OnLeave = aftt_UnitFrame_OnLeave; --Swap Blizzard's target frame mouseover function out for our own (making sure to backup the old function) aftt_Old_TargetFrame_OnEnter = TargetFrame_OnEnter; TargetFrame_OnEnter = aftt_TargetFrame_OnEnter; --Swap Blizzard's tooltip anchor function out for our own (making sure to backup the old function) aftt_OriginalGameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor; GameTooltip_SetDefaultAnchor = aftt_GameTooltip_SetDefaultAnchor; --Swap Blizzard's tooltip event function out for our own (making sure to backup the old function) aftt_Old_GameTooltip_OnEvent = GameTooltip_OnEvent; GameTooltip_OnEvent = aftt_GameTooltip_OnEvent; --Set colors --loaded from colorChart.lua --Output message to let player know AF_ToolTip has loaded, and if there were any missing colors DEFAULT_CHAT_FRAME:AddMessage("|cffffff00|rToolTip: v" .. version .. " " .. aftt_translate_loaded .. " for " .. aftt_playerName .. " of " .. aftt_realmName); DEFAULT_CHAT_FRAME:AddMessage("|cffffff00|rToolTip: Theme: |cff0099FF" .. aftt_color_chart_name .. "|r by |cff0099FF" .. aftt_color_chart_author .. "|r applied"); if (aftt_variableChecker_Flag == 1) then DEFAULT_CHAT_FRAME:AddMessage("|cffffff00|rToolTip: |cffFF0000[WARNING]|r: some colors are missing from current color chart, defaulting them to white"); end end --Unit MouseOver Routine---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- function aftt_format(unit) --Data Collection------------------------------------------ ----------------------------------------------------------- --detect if on same unit from previous refresh aftt_updateFlag["Current"] = UnitName(unit); if (aftt_updateFlag["Current"] == aftt_updateFlag["Previous"] and aftt_updateFlag["Previous"] ~= "none") then --do not reset flags, we're on the same unit else aftt_updateFlag = { ["EasterEgg"] = 0; ["Guild"] = 0; ["PvP"] = 0; ["RankFlag"] = 0; } end --[[ --detect Blizzard's tooltip bug that shows bogus data instead of a unit --currently disabled due to issues with non enUS client local firstLine = GameTooltipTextLeft1:GetText(); local nameLine, matched; if (firstLine) then nameLine, matched = string.gsub(GameTooltipTextLeft1:GetText(), (UnitName(unit) .. ".*"), ""); if (matched == 1) then --not bugged else --bugged, lets hide it GameTooltip:Hide(); --DEFAULT_CHAT_FRAME:AddMessage("Found item bug: " .. firstLine); end end --]] --unit race if (UnitRace(unit) and UnitIsPlayer(unit)) then --race, it is a player aftt_text_race = UnitRace(unit); elseif (UnitPlayerControlled(unit)) then --creature family, its is a pet aftt_text_race = UnitCreatureFamily(unit); aftt_color_race = aftt_color_race_mob; else --creature type, it is a mob if (UnitCreatureType(unit) == aftt_translate_notspecified) then aftt_text_race = "" aftt_color_race = aftt_color_race_mob; else aftt_text_race = UnitCreatureType(unit); aftt_color_race = aftt_color_race_mob; end end if (aftt_text_race == nil) then aftt_text_race = (""); else aftt_text_race = (aftt_text_race .. " "); end aftt_color_race = "FFFFFF"; --unit class if (UnitClass(unit) and UnitIsPlayer(unit)) then aftt_text_class = (UnitClass(unit) .. " "); if (UnitClass(unit) == aftt_translate_mage) then aftt_color_class = aftt_color_class_mage; elseif (UnitClass(unit) == aftt_translate_warlock) then aftt_color_class = aftt_color_class_warlock; elseif (UnitClass(unit) == aftt_translate_priest) then aftt_color_class = aftt_color_class_priest; elseif (UnitClass(unit) == aftt_translate_druid) then aftt_color_class = aftt_color_class_druid; elseif (UnitClass(unit) == aftt_translate_shaman) then aftt_color_class = aftt_color_class_shaman; elseif (UnitClass(unit) == aftt_translate_paladin) then aftt_color_class = aftt_color_class_paladin; elseif (UnitClass(unit) == aftt_translate_rogue) then aftt_color_class = aftt_color_class_rogue; elseif (UnitClass(unit) == aftt_translate_hunter) then aftt_color_class = aftt_color_class_hunter; elseif (UnitClass(unit) == aftt_translate_warrior) then aftt_color_class = aftt_color_class_warrior; else aftt_color_class = aftt_color_unknown; end else aftt_text_class = ""; aftt_color_class = aftt_color_unknown; end --unit elite if (UnitClassification(unit) and UnitClassification(unit) ~= "normal" and UnitHealth(unit) > 0) then if (UnitClassification(unit) == "elite") then aftt_text_elite = ("(" .. aftt_translate_elite .. ")"); aftt_color_elite = aftt_color_elite_elite; elseif (UnitClassification(unit) == "worldboss") then aftt_text_elite = ("(" .. aftt_translate_worldboss .. ")"); aftt_color_elite = aftt_color_elite_worldboss; elseif (UnitClassification(unit) == "rare") then aftt_text_elite = ("(" .. aftt_translate_rare .. ")"); aftt_color_elite = aftt_color_elite_rare; elseif (UnitClassification(unit) == "rareelite") then aftt_text_elite = ("(" .. aftt_translate_rareelite .. ")"); aftt_color_elite = aftt_color_elite_rareelite; else aftt_text_elite = ("(" .. UnitClassification(unit) .. ")"); aftt_color_elite = aftt_color_unknown; end else aftt_text_elite = ""; aftt_color_elite = aftt_color_unknown; end --unit name, description and bg color if (UnitPlayerControlled(unit)) then if (UnitCanAttack(unit, "player") and UnitCanAttack ("player",unit)) then --red, hostile, both can attack GameTooltip:SetBackdropColor(aftt_background_color["Player_Hostile"]["red"], aftt_background_color["Player_Hostile"]["green"], aftt_background_color["Player_Hostile"]["blue"]); aftt_color_name = aftt_color_name_hostile; aftt_color_description = aftt_color_description_hostile; aftt_text_reaction = aftt_translate_hostile; elseif (not UnitCanAttack(unit, "player") and UnitCanAttack("player",unit)) then --yellow, neutral, only I can attack GameTooltip:SetBackdropColor(aftt_background_color["Player_Neutral"]["red"], aftt_background_color["Player_Neutral"]["green"], aftt_background_color["Player_Neutral"]["blue"]); aftt_color_name = aftt_color_name_neutral; aftt_color_description = aftt_color_description_neutral; aftt_text_reaction = aftt_translate_neutral; elseif (UnitCanAttack(unit, "player") and not UnitCanAttack("player",unit)) then --purple, caution, only they can attack GameTooltip:SetBackdropColor(aftt_background_color["Player_Caution"]["red"], aftt_background_color["Player_Caution"]["green"], aftt_background_color["Player_Caution"]["blue"]); aftt_color_name = aftt_color_name_caution; aftt_color_description = aftt_color_description_caution; aftt_text_reaction = aftt_translate_caution; elseif (not UnitCanAttack(unit, "player") and not UnitCanAttack("player",unit)) then if (UnitIsPVP(unit)) then --green, friendly pvp, neither can attack GameTooltip:SetBackdropColor(aftt_background_color["Player_Friendly_PvP"]["red"], aftt_background_color["Player_Friendly_PvP"]["green"], aftt_background_color["Player_Friendly_PvP"]["blue"]); aftt_color_name = aftt_color_name_pvp; aftt_color_description = aftt_color_description_pvp; aftt_text_reaction = aftt_translate_friendly; else --blue, friendly, neither can attack GameTooltip:SetBackdropColor(aftt_background_color["Player_Friendly"]["red"], aftt_background_color["Player_Friendly"]["green"], aftt_background_color["Player_Friendly"]["blue"]); aftt_color_name = aftt_color_name_friendly; aftt_color_description = aftt_color_description_friendly; aftt_text_reaction = aftt_translate_friendly; end end elseif (UnitReaction(unit,"player") and UnitReaction(unit,"player") <= 3) then --red, they are hostile GameTooltip:SetBackdropColor(aftt_background_color["Mob_Hostile"]["red"], aftt_background_color["Mob_Hostile"]["green"], aftt_background_color["Mob_Hostile"]["blue"]); aftt_color_name = aftt_color_name_hostile; aftt_text_reaction = aftt_translate_hostile; aftt_color_description = aftt_color_description_hostile elseif (UnitReaction(unit,"player") and UnitReaction(unit,"player") == 4) then --yellow, they are neutral GameTooltip:SetBackdropColor(aftt_background_color["Mob_Neutral"]["red"], aftt_background_color["Mob_Neutral"]["green"], aftt_background_color["Mob_Neutral"]["blue"]); aftt_color_name = aftt_color_name_neutral; aftt_text_reaction = aftt_translate_neutral; aftt_color_description = aftt_color_description_neutral else if (UnitIsPVP(unit)) then --green, pvp enabled friend GameTooltip:SetBackdropColor(aftt_background_color["Mob_Friendly_PvP"]["red"], aftt_background_color["Mob_Friendly_PvP"]["green"], aftt_background_color["Mob_Friendly_PvP"]["blue"]); aftt_color_name = aftt_color_name_pvp; aftt_color_description = aftt_color_description_pvp else --blue, they are friendly GameTooltip:SetBackdropColor(aftt_background_color["Mob_Friendly"]["red"], aftt_background_color["Mob_Friendly"]["green"], aftt_background_color["Mob_Friendly"]["blue"]); aftt_color_name = aftt_color_name_friendly; aftt_color_description = aftt_color_description_friendly; end aftt_text_reaction = aftt_translate_friendly; end --unit tapped? if (AF_ToolTip[aftt_localUser]["Tapped"] == 1) then if (UnitIsTapped(unit)and (not UnitIsTappedByPlayer(unit))) then aftt_color_name = aftt_color_name_tapped_by_other; aftt_color_description = aftt_color_description_tapped_by_other; aftt_text_reaction = aftt_translate_tapped; elseif (UnitIsTappedByPlayer(unit)) then GameTooltip:SetBackdropColor(aftt_background_color["Mob_Hostile"]["red"], aftt_background_color["Mob_Hostile"]["green"], aftt_background_color["Mob_Hostile"]["blue"]); aftt_color_name = aftt_color_name_tapped_by_me; aftt_color_description = aftt_color_description_tapped_by_me; aftt_text_reaction = aftt_translate_hostile; end end --unit level and level difference color if (UnitLevel(unit) and UnitLevel(unit) >= 1) then aftt_text_level = UnitLevel(unit); else aftt_text_level = "??"; end aftt_text_level = (aftt_translate_level .. " " .. aftt_text_level .. " "); local levelDiff = UnitLevel(unit) - UnitLevel("player"); if (UnitFactionGroup(unit) ~= UnitFactionGroup("player")) then if ( levelDiff >= 5 or UnitLevel(unit) == -1) then aftt_color_level = aftt_color_level_impossible elseif ( levelDiff >= 3 ) then aftt_color_level = aftt_color_level_hard; elseif ( levelDiff >= -2 ) then aftt_color_level = aftt_color_level_normal; elseif ( -levelDiff <= GetQuestGreenRange() ) then aftt_color_level = aftt_color_level_easy; else aftt_color_level = aftt_color_level_trivial; end else aftt_color_level = aftt_color_level_same_faction; end --pvp honor rank if (aftt_updateFlag["RankFlag"] == 0) then if (UnitPVPRank(unit)) then aftt_rankName, aftt_rankNumber = GetPVPRankInfo(UnitPVPRank("mouseover"), "mouseover"); end if (aftt_rankName == nil) then aftt_rankName = ""; else aftt_rankName = ("[" .. aftt_rankName .. "] "); end if (aftt_rankNumber == nil or aftt_rankNumber < 1) then aftt_rankNumber = ""; else aftt_rankNumber = ("[" .. aftt_rankNumber .. "] "); end if (AF_ToolTip[aftt_localUser]["Rank"] == 1) then aftt_rank = aftt_rankName; elseif (AF_ToolTip[aftt_localUser]["Rank"] == 2) then aftt_rank = aftt_rankNumber; else aftt_rank = ""; end aftt_updateFlag["RankFlag"] = 1; else if (aftt_rank == nil) then aftt_rank = ""; end end --unit is corpse if (UnitHealth(unit) == 0) then aftt_text_corpse = aftt_translate_corpse; aftt_color_class = aftt_color_corpse; aftt_color_race = aftt_color_corpse; aftt_color_elite = aftt_color_corpse; aftt_color_name = aftt_color_corpse; aftt_color_description = aftt_color_corpse; aftt_color_level = aftt_color_corpse; else aftt_text_corpse = ""; end --Output Name Data----------------------------------------- ----------------------------------------------------------- if (AF_ToolTip[aftt_localUser]["ReactionText"] == 1) then GameTooltipTextLeft1:SetText("|cff" .. aftt_color_name .. aftt_rank .. UnitName(unit) .. " (" .. aftt_text_reaction .. ")|r") else GameTooltipTextLeft1:SetText("|cff" .. aftt_color_name .. aftt_rank .. UnitName(unit) .. "|r"); end --Output Level Line Data----------------------------------- ----------------------------------------------------------- local levelLine, matched; if (GameTooltipTextLeft2:GetText() == nil) then GameTooltip:Hide(); else levelLine, matched = string.gsub(GameTooltipTextLeft2:GetText(), (aftt_translate_level .. ".*"), ""); if (matched == 1) then levelLine = 2; else if (GameTooltipTextLeft3:GetText()) then levelLine, matched = string.gsub(GameTooltipTextLeft3:GetText(), (aftt_translate_level .. ".*"), ""); if (matched == 1) then levelLine = 3; else levelLine = nil; end else levelLine = nil; end end end if (levelLine) then getglobal("GameTooltipTextLeft" .. levelLine):SetText("|cff" .. aftt_color_level .. aftt_text_level .. "|r" .. "|cff" .. aftt_color_race .. aftt_text_race .. "|r" .. "|cff" .. aftt_color_class .. aftt_text_class .. "|r" .. "|cff" .. aftt_color_elite .. aftt_text_elite .. "|r" .. "|cff" .. aftt_color_corpse .. aftt_text_corpse .. "|r"); if (levelLine == 3) then GameTooltipTextLeft2:SetText("|cff" .. aftt_color_description .. GameTooltipTextLeft2:GetText() .. "|r") end end --Append Easter Eggs--------------------------------------- ----------------------------------------------------------- if (aftt_updateFlag["EasterEgg"] == 0 and UnitName(unit) == "Iniko" and (GetCVar("realmName") == "Chromaggus")) then GameTooltip:AddLine("|cff" .. aftt_color_name .. "The Author of AF_ToolTip|r"); aftt_updateFlag["EasterEgg"] = 1; end --Show/Hide Guild------------------------------------------ ----------------------------------------------------------- if (aftt_updateFlag["Guild"] == 0 and GetGuildInfo(unit)) then --Are they guildmates? if (GetGuildInfo(unit) == GetGuildInfo("player")) then aftt_color_guild = aftt_color_guildmate; else aftt_color_guild = aftt_color_description; end if (AF_ToolTip[aftt_localUser]["Guild"] == 0 or AF_ToolTip[aftt_localUser]["Guild"] == nil) then --do nothing elseif (AF_ToolTip[aftt_localUser]["Guild"] == 1) then --Show aftt_old_line2 = GameTooltipTextLeft2:GetText(); aftt_old_line3 = GameTooltipTextLeft3:GetText(); if (GameTooltipTextLeft3:GetText() ~= nil) then GameTooltipTextLeft3:SetText(aftt_old_line2); else GameTooltip:AddLine(aftt_old_line2); end if (GameTooltipTextLeft4:GetText() ~= nil) then GameTooltipTextLeft3:SetText(aftt_old_line3); else GameTooltip:AddLine(aftt_old_line3); end GameTooltipTextLeft2:SetText("|cff" .. aftt_color_guild .. GetGuildInfo(unit) .. "|r"); elseif (AF_ToolTip[aftt_localUser]["Guild"] == 2) then --Show at Bottom GameTooltip:AddLine("|cff" .. aftt_color_guild .. GetGuildInfo(unit) .. "|r"); end aftt_updateFlag["Guild"] = 1; end --Show/Hide PvP-------------------------------------------- ----------------------------------------------------------- aftt_lineCount = 1; for i = 1, 10 do aftt_getLine = getglobal("GameTooltipTextLeft" .. aftt_lineCount); if (aftt_getLine:GetText()) then local pvpLine, matchPVP; pvpLine, matchPVP = string.gsub(aftt_getLine:GetText(), (aftt_translate_pvp .. ".*"), ""); if (matchPVP == 1) then aftt_getLine:SetText(""); break; else aftt_lineCount = aftt_lineCount + 1; end end end if (AF_ToolTip[aftt_localUser]["PvP"] ~= 1) then else if (UnitIsPVP(unit)) then if (aftt_updateFlag["PvP"] == 0) then GameTooltip:AddLine("|cffFFFFFFPvP|r"); aftt_updateFlag["PvP"] = 1; end end end --Show Tooltip--------------------------------------------- ----------------------------------------------------------- GameTooltip:Show(); aftt_updateFlag["Previous"] = UnitName(unit); end --Frame Mouseover Routines-------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------