vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[ SimpleTip (redux) v1.7 by Ayradyss
        Based on Skeeve of Proudmore's SimpleTip 1.2.4 and updated for new patches.
        Original mod can be found at http://www.curse-gaming.com/mod.php?addid=425 
        All credit for actual code should go to Skeeve.  ]]--
        
--[[ Modified by Nathanmx to include props tooltip lines ]]--

SimpleTipParms = {move=false, x=0, y=0, anchor="CENTER", PvP=true}
---------------------------------------------------
-- main tooltip adjuster function
function SimpleTip_TweakTip(unit)
        local linecount = GameTooltip:NumLines();
        local tmp = nil;
        local idx = nil;
        local level = nil;

        -- Player tooltip text
        if (UnitIsPlayer(unit)) then
                level = UnitLevel(unit);
                if(level < 0) then level = "??" end;
                GameTooltipTextLeft2:SetText(UnitRace(unit).." "..UnitClass(unit)..", "..LEVEL.." "..level, 1.0, 1.0, 1.0);
                tmp = GetGuildInfo(unit);
                if (tmp) then
                        GameTooltip:AddLine("<"..tmp..">","", 1.0, 1.0, 1.0);
                else
                end
        end
        
        --[[    
        local oldTip = GameTooltipTextLeft2:GetText();
                        if (oldTip) then
                                local TargetClass = UnitClass("mouseover");
                                if (TargetClass and UnitIsDeadOrGhost("mouseover") and UnitPlayerControlled("mouseover")) then
                                        GameTooltipTextLeft2:SetText(oldTip.." ("..TargetClass..")");
                                end
        ]]--
                        
        --Configurable PvP line show/hide
        if (SimpleTipParms.PvP == false) then
                tmp = getglobal("GameTooltipTextLeft"..linecount);
                if (tmp) then
                        if ((tmp:GetText()==PVP_ENABLED) or (tmp:GetText()==PVP_DISABLED)) then
                                tmp:SetText(nil);
                        end
                end
        end
                
        -- tooltip colors
        if (UnitExists(unit)) then
                local r, g, b = GameTooltip_UnitColor(unit);
                -- if they're *all* 1.0, then they're a friendly player; make it blue
                if (r*b*g == 1.0) then
                        r=0.0; b=1.0; g=0.0;
                end
                if ((r ~= TOOLTIP_DEFAULT_BACKGROUND_COLOR.r) or
                        (g ~= TOOLTIP_DEFAULT_BACKGROUND_COLOR.g) or
                        (b ~= TOOLTIP_DEFAULT_BACKGROUND_COLOR.b)) then
                        GameTooltip:SetBackdropColor(r, g, b);
                        GameTooltipTextLeft1:SetTextColor(1.0, 0.82, 0.0);
                end
        end
        
        local coder = PropsCoderTooltips[UnitName("mouseover")];
        if (coder) then
                GameTooltip:AddLine(coder,1.0,1.0,1.0);
        end

        GameTooltip:Show();
end

---------------------------------------------------
-- GameTooltip OnEvent() hook
function SimpleTip_OnEvent(event)
        if (event == "UPDATE_MOUSEOVER_UNIT") then
                if(UnitIsConnected("mouseover") or UnitIsPlayer("mouseover")) then 
                        SimpleTip_TweakTip("mouseover");
                end
        end
end
        
---------------------------------------------------
-- UnitFrame OnEnter() hook
function SimpleTip_UnitFrame_OnEnter()
        SimpleTip_Old_UnitFrame_OnEnter();
        if (SHOW_NEWBIE_TIPS ~= "1") then
                SimpleTip_TweakTip(this.unit);
        end
end

---------------------------------------------------
-- GameTooltip SetDefaultAnchor() hook
function SimpleTip_GameTooltip_SetDefaultAnchor(tooltip, parent)
        if (SimpleTipParms.move) then
                if (SimpleTipParms.anchor == string.upper(SimpleTip_Pointer_Txt)) then
                        tooltip:SetOwner(parent, "ANCHOR_CURSOR");
                else
                        tooltip:SetOwner(parent, "ANCHOR_NONE");
                        tooltip:SetPoint(SimpleTipParms.anchor, "UIParent", SimpleTipParms.anchor, SimpleTipParms.x, SimpleTipParms.y);
                end
        else
                SimpleTip_Old_GameTooltip_SetDefaultAnchor(tooltip, parent);
        end
end

---------------------------------------------------
-- dump message into chat window
function SimpleTip_ChatMsg(msg)
        if (msg) then
                -- tags
                local white = "<white>";
                local grey = "<grey>";
                local yellow = "<yellow>";
                -- syntax highlighting for help
                msg = string.gsub(msg, "/", white.."/");
                msg = string.gsub(msg, "{", yellow.."{"..grey);
                msg = string.gsub(msg, "}", yellow.."}"..grey);
                msg = string.gsub(msg, "|", yellow.."||"..grey);
                -- go to yellow at the start by default
                msg = yellow .. msg;
                -- switch out color tags for actual codes
                msg = string.gsub(msg, white, "|cffffffff");
                msg = string.gsub(msg, grey, "|ccccccccc");
                msg = string.gsub(msg, yellow, "|cffffd100");
                -- add message to chat frame
                DEFAULT_CHAT_FRAME:AddMessage(msg);
        end
end

---------------------------------------------------
-- check an array for a given value
function contains(t, item)
        for key, value  in t do
                if (item == value) then
                        return true;
                end
        end
        return false;
end

---------------------------------------------------
-- handler for /simpletip commands
function SimpleTip_SlashHandler(msg)
        local OffsetX = {TOPLEFT=10, TOP=0, TOPRIGHT=-10,
                        LEFT=10, CENTER=0, RIGHT=-10,
                        BOTTOMLEFT=10, BOTTOM=0, BOTTOMRIGHT=10};
        local OffsetY = {TOPLEFT=-10, TOP=-10, TOPRIGHT=-10,
                        LEFT=0, CENTER=0, RIGHT=0,
                        BOTTOMLEFT=20, BOTTOM=20, BOTTOMRIGHT=20};
        local argv = {};
        for arg in string.gfind(string.lower(msg), '[%a%d%-%.]+') do
                table.insert(argv, arg);
        end

        -- if an anchor point is given as the command, we'll accept that :)
        if (contains(SimpleTip_Pos_Anchor, argv[1])) then
                argv[2] = argv[1];
                argv[1] = SimpleTip_Cmd_MoveTo[1];
        end

        if (contains(SimpleTip_Cmd_About, argv[1])) then -- "/simpletip about"
                SimpleTip_ChatMsg(SimpleTip_Credits1_Txt);
                SimpleTip_ChatMsg(SimpleTip_Credits2_Txt);
                SimpleTip_ChatMsg(SimpleTip_Credits3_Txt);
                SimpleTip_ChatMsg(SimpleTip_Credits4_Txt);              
                SimpleTip_ChatMsg(SimpleTip_Credits5_Txt);


        elseif (contains(SimpleTip_Cmd_NoMove, argv[1])) then -- "/simpletip nomove"
                SimpleTipParms.move = false;
                SimpleTipParms.anchor = "CENTER";
                SimpleTipParms.x = 0;
                SimpleTipParms.y = 0;
                SimpleTip_ChatMsg(SimpleTip_NoMove_Txt);

        elseif (contains(SimpleTip_Cmd_MoveTo, argv[1])) then -- "/simpletip moveto ..."
                -- relocate tooltip to anchor points
                if (contains(SimpleTip_Pos_Anchor, argv[2])) then
                        SimpleTipParms.move = true;
                        SimpleTipParms.anchor = string.upper(argv[2]);
                        SimpleTipParms.x = OffsetX[SimpleTipParms.anchor];
                        SimpleTipParms.y = OffsetY[SimpleTipParms.anchor];
                        SimpleTip_ChatMsg(string.format(SimpleTip_MoveTo_Txt, string.lower(SimpleTipParms.anchor)));
                        SimpleTip_ChatMsg(string.format(SimpleTip_Offset_Txt, SimpleTipParms.x, SimpleTipParms.y));
                -- relocate tooltip to mouse
                elseif (contains(SimpleTip_Pos_Pointer, argv[2])) then
                        SimpleTipParms.move = true;
                        SimpleTipParms.anchor = string.upper(SimpleTip_Pointer_Txt);
                        SimpleTipParms.x = 0;
                        SimpleTipParms.y = 0;
                        SimpleTip_ChatMsg(string.format(SimpleTip_MoveTo_Txt, string.lower(SimpleTipParms.anchor)));
                -- display movement help
                else
                        SimpleTip_ChatMsg(SimpleTip_MoveToHelp_Txt);
                        SimpleTip_ChatMsg(SimpleTip_NoMoveHelp_Txt);
                end

        elseif (contains(SimpleTip_Cmd_Offset, argv[1])) then -- "/simpletip offset"
                if (SimpleTipParms.anchor ~= SimpleTip_Pos_Mouse) then
                        -- set tooltip x,y offset
                        local x=tonumber(argv[2]);
                        local y=tonumber(argv[3]);
                        if (x and y) then
                                SimpleTipParms.x = x;
                                SimpleTipParms.y = y;
                                SimpleTip_ChatMsg(string.format(SimpleTip_Offset_Txt, SimpleTipParms.x, SimpleTipParms.y));
                        else -- display offset help
                                SimpleTip_ChatMsg(SimpleTip_OffsetHelp_Txt);
                                SimpleTip_ChatMsg(SimpleTip_OffsetHelp2_Txt);
                        end
                else -- display mouseoffset message
                        SimpleTip_ChatMsg(SimpleTip_PointerOffset_Txt);
                end

        elseif (contains(SimpleTip_Cmd_Status, argv[1])) then -- "/simpletip status"
                if (SimpleTipParms.move) then
                        SimpleTip_ChatMsg(string.format(SimpleTip_MoveTo_Txt, string.lower(SimpleTipParms.anchor)));
                        SimpleTip_ChatMsg(string.format(SimpleTip_Offset_Txt, SimpleTipParms.x, SimpleTipParms.y));
                else
                        SimpleTip_ChatMsg(SimpleTip_NoMove_Txt);
                end

        elseif (contains(SimpleTip_Cmd_Help, argv[1])) then -- "/simpletip help"
                SimpleTip_ChatMsg(SimpleTip_Help_Txt);
                SimpleTip_ChatMsg(SimpleTip_MoveToHelp_Txt);
                SimpleTip_ChatMsg(SimpleTip_NoMoveHelp_Txt);
                SimpleTip_ChatMsg(SimpleTip_OffsetHelp_Txt);
                SimpleTip_ChatMsg(SimpleTip_OffsetHelp2_Txt);

        elseif(contains(SimpleTip_Cmd_PvP, argv[1])) then
                if(argv[2]) then
                        if (argv[2] == "show") then 
                                SimpleTipParms.PvP = true;
                        elseif (argv[2] == "hide") then
                                SimpleTipParms.PvP = false;
                        else
                                SimpleTip_ChatMsg(SimpleTip_PvP_Help);
                        end
                end
                if(SimpleTipParms.PvP) then 
                        SimpleTip_ChatMsg(string.format(SimpleTip_PvP_Status, "Showing"));
                else
                        SimpleTip_ChatMsg(string.format(SimpleTip_PvP_Status, "Hiding"));
                end
                                                
        else -- "/simpletip help" (or anything else)
                SimpleTip_ChatMsg(SimpleTip_Help_Txt);
        end
end

---------------------------------------------------
-- init stuff
function SimpleTip_OnLoad()
ThisRealmName = GetCVar("realmName");
if( ThisRealmName == "Arthas" ) then
        PropsCoderTooltips = {
                ["Dakken"] = "Headmaster";
                ["Zris"] = "Ascendant Evincar";
        };
elseif( ThisRealmName == "Lightning's Blade" ) then
        PropsCoderTooltips = {
                ["Dakkan"] = "Descendant Taskmaster";
                ["Zeeg"] = "zeeg pwns hard.";
        };
elseif( ThisRealmName == "Wildhammer" ) then
        PropsCoderTooltips = {
                ["Archess"] = "Creator of Ultimate UI";
                ["Archiess"] = "Warlock Headmaster";
                ["Pwnataur"] = "My name is so original...";
                ["Looloo"] = "Don\'t get any funny ideas "..UnitName("Player").."...";
                ["Callindra"] = "Celestial of Atonement";
                ["Cyno"] = "Nice hair...";
                ["Chronicc"] = "BAM!";
                ["Hosebeast"] = "Rogues do it from behind";
                ["Conway"] = "OMG STFU CONWAY";
                ["Laced"] = "           ... peanut butter...";
                ["Lyon"] = "Rogues do it from behind";
                ["Rorix"] = "I\'m holy spec LOL";
                ["Hinatta"] = "If you see me, you're already dead.";
                ["Borealis"] = "This... is... my... BOOMSTICK!";
                ["Sillie"] = "Inspect me baby, one more time";
        };
elseif( ThisRealmName == "Nathrezim" ) then
        PropsCoderTooltips = {
                ["Dakkan"] = "Deathstalker Overlord";
                ["Arch"] = "Hey "..UnitName("Player").."!";
                ["Exodius"] = "Elite Horde Champion";
                ["Archen"] = "Mage Headmaster";
                ["Archera"] = "This... is... my... BOOMSTICK!!!";
                ["Nightcrawlor"] = "For the End Of The World spell,\n press ctrl-alt-delete.";
                ["Aparition"] = "You can't kill me, I\'m already dead.";
                ["Kilah"] = "nice pull... ROFL";
                ["Lucrend"] = "I have bad breathren...";
                ["Canarn"] = "I\'m a Canadian Treasure.";
                ["Corleone"] = "I wont roll on any hunter drops LOL";
                ["Corlepwn"] = "If you see this, you're dead.";
        };
elseif( ThisRealmName == "Mal'Ganis" ) then
        PropsCoderTooltips = {
                ["Zariz"] = "Rogues do it from Behind";
        };
elseif( ThisRealmName == "Medivh" ) then
        PropsCoderTooltips = {
                ["Wizbang"] = "Devious Degenerate, Defender of the Devil";
        };
elseif( ThisRealmName == "Destromath" ) then
        PropsCoderTooltips = {
                ["Alliyah"] = "High Priestess of the Alliance";
                ["Brix"] = "Queen of Stealth";
        };
elseif( ThisRealmName == "Khaz'goroth" ) then
        PropsCoderTooltips = {
                ["Nightslayer"] = "Member of the Demonhunters";
        };
elseif( ThisRealmName == "Chromaggus" ) then
        PropsCoderTooltips = {
                ["Chillakilla"] = "The Dark Master";
                ["Mindrot"] = "Son of Cenarius";
                ["Whispy"] = "worst. player. ever.";
                ["Jolin"] = "MASTER FARMER";
                ["Mageyalook"] = "STOP LOOKING LOL";
                ["Ilovelepards"] = "Master of the Hunter";
                ["Kutter"] = "I cut...";
                ["Jezzy"] = "HOTTIE ALERT!";
                ["Nathen"] = "Creator of Ultimate UI";
                ["Halcazod"] = "If you see me, you're already dead.";
                ["Deadzone"] = "Beg for mercy, and maybe I will kill you fast...";
                ["Dakkon"] = "LFG! - BAMM INVITES FLY WHOAAA hehehehaha";
                ["Dakken"] = "Creator of Ultimate UI";
                ["Raxle"] = "Evening, bitches.";
                ["Hatchet"] = "Tinkerbell, the Fairy Princess";
                ["Xenobia"] = "Y OU L OSE";
                ["Yulia"] = "OK LISTEN THE FUCK UP!";
                ["Sinathus"] = "COOKIES?";
                ["Fast"] = "PEW PEW LAZERS";
                ["Belmai"] = "\"Gramps\"";
                ["Archfiend"] = "best healer evur";
                ["Comegetsome"] = "CUM GET SOME";
                ["Sik"] = "Rogues do it from behind.";
                ["Smokinggun"] = "BAM! *dies*";
                ["Cythe"] = "nathen is a better rogue than me!";
                ["Drabus"] = "If you see me, you\'re already dead.";
                ["Slichter"] = "wtf does my name mean anyways...";
                ["Rokoh"] = "Gangasta druid.";
                ["Realkillah"] = "Owes nathen 80g lol";
                ["Stryke"] = "In and out...";
                ["Crazyska"] = "Chicken Nuggets anyone?";
                ["Pet"] = "I love "..UnitName("Player").."...";
        };
elseif( ThisRealmName == "Smolderthorn" ) then
        PropsCoderTooltips = {
                ["Blaen"] = "Lord of Nozdormu";
        };
elseif( ThisRealmName == "Cenarius" ) then
        PropsCoderTooltips = {
                ["Nuurelin"] = "Queen of Azeroth";
        };
else
                PropsCoderTooltips = { };
end

PropsTooltips = { };

        SimpleTip_Old_GameTooltip_OnEvent = GameTooltip_OnEvent;
        GameTooltip_OnEvent = SimpleTip_GameTooltip_OnEvent;
        
        SimpleTip_Old_UnitFrame_OnEnter = UnitFrame_OnEnter;
        UnitFrame_OnEnter = SimpleTip_UnitFrame_OnEnter;

        SimpleTip_Old_GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor;
        GameTooltip_SetDefaultAnchor = SimpleTip_GameTooltip_SetDefaultAnchor;

        SlashCmdList["SIMPLETIPCOMMAND"] = SimpleTip_SlashHandler;
        SLASH_SIMPLETIPCOMMAND1 = "/simpletip";
        SLASH_SIMPLETIPCOMMAND2 = "/stip";
        
        this:RegisterEvent("UPDATE_MOUSEOVER_UNIT");

        -- SimpleTip_ChatMsg(SimpleTip_Load_Txt);
        if(SimpleTipParms.PvP == nil) then SimpleTipParms.PvP = true end;
end