vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[

        MonkeyQuest:
        Displays your quests for quick viewing.
        
        Website:        http://wow.visualization.ca/
        Author:         Trentin (monkeymods@gmail.com)
        
        
        Contributors:
        Celdor
                - Help with the Quest Log Freeze bug
                
        Diungo
                - Toggle grow direction
                
        Pkp
                - Color Quest Titles the same as the quest level
        
        wowpendium.de
                - German translation
                
        MarsMod
                - Valid player name before the VARIABLES_LOADED event bug
                - Settings resetting bug

        Dunewarrior
                - Tooltip update for WoW 1.7.0

--]]

-- this function catches the aftooltip extreme function for setting the mouse over unit's name
function MonkeyQuest_NEW_aftt_setName(unit)

        -- call the original aftt setName function
        MonkeyQuest_OLD_aftt_setName(unit);

        -- Overwrite the aftt text with the quest objective completeness, if needed
        MonkeyQuest_SearchTooltip();
end

-- this function catches the bag mouse over tooltip event
function MonkeyQuest_NEW_ContainerFrameItemButton_OnEnter()
        -- call the old (probably blizzard's) GameTooltip_OnEvent()
        MonkeyQuest_OLD_ContainerFrameItemButton_OnEnter();
        
        MonkeyQuest_SearchTooltip();
        
        MonkeyQuest_SearchTooltipForRelevantQuest();
end

function MonkeyQuest_SearchTooltip()
    local ii, jj;
    
    
    -- does the user not want this feature?
    if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowTooltipObjectives == false) then
        return false;
    end
    
    if (GameTooltip == nil) then
        return false;
    end
    
    if (not getglobal('GameTooltipTextLeft1'):IsVisible()) then
        -- no more tooltip text, get out
        return false;
    end

    -- check the string isn't nil
    if (getglobal('GameTooltipTextLeft1'):GetText() ~= nil) then
        if (MonkeyQuest_SearchQuestListItem(getglobal('GameTooltipTextLeft1'):GetText()) == true) then
            return true;
        end
    end

    -- didn't find an item needing the MonkeyQuest tooltip
    return false;
end

function MonkeyQuest_SearchQuestListItem(strSearch)
        local i, j, length, iStrKeySize, iStrSearchSize;

        
        -- super double check for nil string
        if (strSearch == nil) then
                return false;
        end

        --DEFAULT_CHAT_FRAME:AddMessage("Searching: " .. strSearch);
        
        for key, value in MonkeyQuest.m_aQuestItemList do
                i, j = string.find(strSearch, key);

                iStrKeySize = string.len(key);
                iStrSearchSize = string.len(strSearch);

                if (string.find(strSearch, "|c")) then
                        -- chop off the colour coding
                        iStrSearchSize = iStrSearchSize - 10;
                end

                --DEFAULT_CHAT_FRAME:AddMessage(key .. " == " .. strSearch);

                if (i ~= nil and i ~= j and iStrSearchSize == iStrKeySize) then
                        -- found it!
                        --DEFAULT_CHAT_FRAME:AddMessage(key .. " == " .. strSearch .. " i= " .. i .. " j= " .. j);

                        if (aftt_textline1 ~= nil) then
                                -- aftootip is loaded, set the text for it
                                aftt_textline1:SetText(strSearch .. " " .. MONKEYQUEST_TOOLTIP_QUESTITEM .. " " .. value.m_iNumItems .. "/" .. value.m_iNumNeeded);
                                --DEFAULT_CHAT_FRAME:AddMessage("aftt hack");
                        end

                        -- TODO: calculate the completeness colour
                        local colourTip = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
                        
                        colourTip.a, colourTip.r, colourTip.g, colourTip.b = MonkeyQuest_GetCompletenessColorStr(value.m_iNumItems, value.m_iNumNeeded);


                        GameTooltip:AddLine(MONKEYQUEST_TOOLTIP_QUESTITEM .. " " .. value.m_iNumItems .. "/" .. value.m_iNumNeeded,
                                        colourTip.r, colourTip.g, colourTip.b, 1);
                        
                                
                        -- resize the tootip (thanks Turan's AuctionIt)
                        length = getglobal(GameTooltip:GetName() .. "TextLeft" .. GameTooltip:NumLines()):GetStringWidth();
                        -- Give the text some border space on the right side of the tooltip.
                        length = length + 22;
                
                        GameTooltip:SetHeight(GameTooltip:GetHeight() + 14);
                        if ( length > GameTooltip:GetWidth() ) then
                                GameTooltip:SetWidth(length);
                        end

                        return true;
                end
        end

        return false;
end

function MonkeyQuest_SearchTooltipForRelevantQuest()
    local ii, jj;
    
    
    -- does the user not want this feature?
    if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowTooltipObjectives == false) then
        return false;
    end

    if (GameTooltip == nil) then
        return false;
    end
    
        if (not getglobal('GameTooltipTextLeft1'):IsVisible()) then
                -- no more tooltip text, get out
                return false;
    end

    -- check the string isn't nil
    if (getglobal('GameTooltipTextLeft1'):GetText() ~= nil) then

        strRelevantQuest = MonkeyQuest_SearchQuestDetails(getglobal('GameTooltipTextLeft1'):GetText());

        if (strRelevantQuest ~= nil) then

                GameTooltip:AddLine(MONKEYQUEST_TOOLTIP_QUEST .. ": " .. strRelevantQuest, MONKEYQUEST_DEFAULT_CRASHCOLOUR.r,
                                        MONKEYQUEST_DEFAULT_CRASHCOLOUR.g,
                                        MONKEYQUEST_DEFAULT_CRASHCOLOUR.b, 1);


                        -- resize the tootip (thanks Turan's AuctionIt)
                        length = getglobal(GameTooltip:GetName() .. "TextLeft" .. GameTooltip:NumLines()):GetStringWidth();
                        -- Give the text some border space on the right side of the tooltip.
                        length = length + 22;

                        GameTooltip:SetHeight(GameTooltip:GetHeight() + 14);
                        if ( length > GameTooltip:GetWidth() ) then
                                GameTooltip:SetWidth(length);
                        end

            return true;
        end
    end

    -- didn't find an item needing the MonkeyQuest tooltip
    return false;
end

-- search for the string anywhere in any quest
function MonkeyQuest_SearchQuestDetails(strSearch)

        -- super double check for nil string
        if (strSearch == nil) then
                return false;
        end
        
        local strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete;
        local i, j, k;
        local iNumEntries, iNumQuests = GetNumQuestLogEntries();
        local strQuestDescription, strQuestObjectives;


        for i = 1, iNumEntries, 1 do
                -- strQuestLogTitleText         the title text of the quest, may be a header (ex. Wetlands)
                -- strQuestLevel                        the level of the quest
                -- strQuestTag                          the tag on the quest (ex. COMPLETED)
                strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(i);

                if (not isHeader) then
                        -- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
                        SelectQuestLogEntry(i);

                        strQuestDescription, strQuestObjectives = GetQuestLogQuestText();

                        --DEFAULT_CHAT_FRAME:AddMessage(strSearch .. " == " .. strQuestDescription);
                        if (string.find(strQuestDescription, strSearch) or string.find(strQuestObjectives, strSearch)) then
                                return strQuestLogTitleText;
                        end
                end
        end

        return nil;
end

Generated by GNU Enscript 1.6.5.90.