vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Font Colors
TRZ_WHITE = HIGHLIGHT_FONT_COLOR_CODE;
TRZ_RED = RED_FONT_COLOR_CODE;
TRZ_ORANGE = "|cffff8020";
TRZ_YELLOW = "|cffffff20";
TRZ_GREEN = GREEN_FONT_COLOR_CODE;
TRZ_GRAY = GRAY_FONT_COLOR_CODE;
TRZ_NORMAL = NORMAL_FONT_COLOR_CODE;
TRZ_FONT_OFF = FONT_COLOR_CODE_CLOSE;

TRZ_INSTANCE_TEXT = "%s%s%s (%d+ " .. TRZ_TOOLTIP_TO .. " %d+)" .. TRZ_FONT_OFF;  -- Instance (35+ to 45+)
TRZ_INSTANCE_TEXT2 = "%s%s%s (%d+)" .. TRZ_FONT_OFF;  -- Instance (35+)
TRZ_WORLDMAP_TEXT = "(%d-%d)" .. "\n\n" .. TRZ_FONT_OFF;

TRZ_MAX_ROWS = 29;

TRZ_ID =  "TRZ";

trz_tooltip_text = "";
trz_button_text = "";
trz_current_continent = 0;
trz_current_zone = 0;

function TRZ_Init()
        local zonearray = {};
        local i;
        
        if (myAddOnsFrame_Register) then
                myAddOnsFrame_Register( {name="TitanRecZone",version=TRZ_VERSION,category=MYADDONS_CATEGORY_PLUGINS} );
        end
        
        TRZ_ToggleWorldMapText();

        -- Populate zonenames (Hopefully should work for all locales)
        zonearray[1]={GetMapZones(1)};
        zonearray[2]={GetMapZones(2)};
        for i = 0, table.getn(TRZ_ZONES), 1 do
                TRZ_ZONES[i].zone = zonearray[TRZ_ZONES[i].continent][TRZ_ZONES[i].nr];
        end
end

function TRZ_OnLoad()
        this.registry = { 
                id = TRZ_ID,
                menuText = TRZ_MENU_TEXT, 
                buttonTextFunction = "TRZ_GetButtonText", 
                tooltipTitle = TRZ_TOOLTIP_TITEL,
                tooltipTextFunction = "TRZ_GetTooltipText", 
                category="Information",
                version=TRZ_VERSION,
                savedVariables = {
                        ShowCurInstance = 1,
                        ShowInstance = 1,
                        ShowBattleground = 1,
                        ShowRaid = TITAN_NIL,
                        ShowFaction = TITAN_NIL,
                        ShowContinent = TITAN_NIL,
                        ShowLoc = 1,
                        ShowMap = 1,
                        ShowLower = TITAN_NIL,
                        ShowHigher = TITAN_NIL,
                        ShowColoredText = 1,
                        ShowLabelText = 1,  -- Default to 1
                }
        };
        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
end

function TRZ_OnEvent()
        if (event == "VARIABLES_LOADED") then
                TRZ_Init();
        elseif (event == "PLAYER_ENTERING_WORLD") then
                this:UnregisterEvent("PLAYER_ENTERING_WORLD");
                this:RegisterEvent("PLAYER_LEAVING_WORLD");
                this:RegisterEvent("MINIMAP_ZONE_CHANGED");
                this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
                this:RegisterEvent("PLAYER_LEVEL_UP");
                --TRZ_UpdateButtonText();
                TitanPanelButton_UpdateButton(TRZ_ID);
        elseif (event == "PLAYER_LEAVING_WORLD") then
                this:UnregisterEvent("PLAYER_LEAVING_WORLD");
                this:UnregisterEvent("MINIMAP_ZONE_CHANGED");
                this:UnregisterEvent("ZONE_CHANGED_NEW_AREA");
                this:UnregisterEvent("PLAYER_LEVEL_UP");
                this:RegisterEvent("PLAYER_ENTERING_WORLD");
        else
                --TRZ_UpdateButtonText();
                TitanPanelButton_UpdateButton(TRZ_ID);
        end
end

function TRZ_GetButtonText(id)
        TRZ_UpdateButtonText();
        TRZ_ToggleWorldMapText();
        return TRZ_BUTTON_LABEL, trz_button_text;
end

function TRZ_GetTooltipText()
        TRZ_UpdateTooltipText();
        return trz_tooltip_text;        
end

function TitanPanelRightClickMenu_PrepareTRZMenu()
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TRZ_ID].menuText);       
        
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_CUR_INSTANCE, TRZ_ID, "ShowCurInstance");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_FACTION, TRZ_ID, "ShowFaction");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_CONTINENT, TRZ_ID, "ShowContinent");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_INSTANCE, TRZ_ID, "ShowInstance");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_BG, TRZ_ID, "ShowBattleground");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_RAID, TRZ_ID, "ShowRaid");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_LOC, TRZ_ID, "ShowLoc");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_LOWER, TRZ_ID, "ShowLower");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_HIGHER, TRZ_ID, "ShowHigher");
        TitanPanelRightClickMenu_AddToggleVar(TRZ_TOGGLE_MAP_TEXT, TRZ_ID, "ShowMap");
        
        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddToggleColoredText(TRZ_ID)
        TitanPanelRightClickMenu_AddToggleLabelText(TRZ_ID);

        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TRZ_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end

-- end titan panel setup

function TRZ_GetColor(low,high)
        -- PlayerLevel <= low for zone - 4  == RED
        -- PlayerLevel <  low for zone      == ORANGE
        -- PlayerLevel <= high              == YELLOW
        -- PlayerLevel <  high + 5          == GREEN
        -- Otherwise                        == GRAY
  local playerLevel = UnitLevel("player");
        if (playerLevel <= (low-4)) then
                return TRZ_RED;
        elseif (playerLevel < low) then
                return TRZ_ORANGE;
        elseif (playerLevel <= high) then
                return TRZ_YELLOW;
        elseif (playerLevel < (high+5)) then
                return TRZ_GREEN;
        else
                return TRZ_GRAY;
        end
end

function TRZ_GetInstanceText(index,colors)
        local instanceColor = TRZ_WHITE;
        local instanceType = "";
        if ( TRZ_INSTANCES[index] == nil ) then
                return "";
        end
        if (colors) then
                instanceColor = TRZ_GetColor(TRZ_INSTANCES[index].low,TRZ_INSTANCES[index].high);
        end
        if (TRZ_INSTANCES[index].type ~= TRZ_INSTANCE) then
                return instanceColor .. TRZ_INSTANCES[index].zone .. TRZ_INSTANCE_TYPE[TRZ_INSTANCES[index].type];
        end
        if (TRZ_INSTANCES[index].low == TRZ_INSTANCES[index].high) then
                return format(TRZ_INSTANCE_TEXT2, instanceColor, TRZ_INSTANCES[index].zone,
                                                                TRZ_INSTANCE_TYPE[TRZ_INSTANCES[index].type],
                                                                TRZ_INSTANCES[index].low );
        end
        return format(TRZ_INSTANCE_TEXT, instanceColor, TRZ_INSTANCES[index].zone,
                                                                TRZ_INSTANCE_TYPE[TRZ_INSTANCES[index].type],
                                                                TRZ_INSTANCES[index].low, TRZ_INSTANCES[index].high );
end

function TRZ_GetZoneText(index,colors)
        local zoneColor = TRZ_WHITE;
        if ( TRZ_ZONES[index] == nil ) then
                return "";
        end
        -- No level range for city zones
        if ( TRZ_ZONES[index].faction == TRZ_CITY ) then
                return TRZ_WHITE .. TRZ_ZONES[index].zone .. TRZ_FONT_OFF;
        end
        if (colors) then
                zoneColor = TRZ_GetColor(TRZ_ZONES[index].low,TRZ_ZONES[index].high);
        end
        -- Add zone name and level range.
        return  zoneColor .. TRZ_ZONES[index].zone .. 
                                        " (" .. TRZ_ZONES[index].low .. "-" .. TRZ_ZONES[index].high .. ")" .. TRZ_FONT_OFF;
end

function TRZ_GetFactionText(index,colors)
        local factionColor = TRZ_WHITE;
        if ( TRZ_ZONES[index] == nil ) then
                return "";
        end
        if (colors) then
                if ( TRZ_ZONES[index].faction == TRZ_CONTESTED ) then
                        factionColor = TRZ_YELLOW;
                else
                        factionColor = TRZ_GREEN;
                end
        end
        return factionColor .. " [" .. TRZ_FACTION[TRZ_ZONES[index].faction] .. "]" .. TRZ_FONT_OFF;
end

function TRZ_GetContinentText(index,colors)
        local continentColor = TRZ_WHITE;
        if ( TRZ_ZONES[index] == nil ) then
                return "";
        end
        if (colors) then
                if ( TRZ_ZONES[index].continent == trz_current_continent ) then
                        continentColor = TRZ_GREEN;
                else
                        continentColor = TRZ_YELLOW;
                end
        end
        return continentColor .. " (" .. TRZ_CONTINENT[TRZ_ZONES[index].continent] .. ")";
end

function TRZ_GetLevelText(low,high,colors)
        local levelColor = TRZ_WHITE;
        if ( colors ) then
                levelColor = TRZ_GetColor(low,high);
        end
        return levelColor .. format("%d-%d", low, high) .. TRZ_FONT_OFF;
end

function TRZ_UpdateButtonText() 
  local i;
  local zoneColor;
  local playerLevel = UnitLevel("player");
  local zoneName = GetRealZoneText();
        local colorTooltip = TitanGetVar(TRZ_ID, "ShowColoredText");

  trz_button_text = "";
        for i = 0, table.getn(TRZ_ZONES), 1 do
                if (string.find(zoneName, TRZ_ZONES[i].zone)) then
                        trz_current_continent = TRZ_ZONES[i].continent;
                        trz_current_zone = i;
                        if (TRZ_ZONES[i].faction == TRZ_CITY) then
                                trz_button_text = TRZ_WHITE .. TRZ_FACTION[TRZ_ZONES[i].faction] .. TRZ_FONT_OFF;
                        else
                                trz_button_text = TRZ_GetLevelText(TRZ_ZONES[i].low, TRZ_ZONES[i].high, colorTooltip);
                        end
                        return
                end
        end
        -- Check if we are in an instance
        for i = 0, table.getn(TRZ_INSTANCES), 1 do
                if (string.find(zoneName, TRZ_INSTANCES[i].zone)) then
                        trz_current_zone = i+100;
                        trz_button_text = TRZ_GetLevelText(TRZ_INSTANCES[i].low, TRZ_INSTANCES[i].high, colorTooltip);
                        return;
                end
        end
        return 
end

function  TRZ_UpdateTooltipText()       
  local player_level = UnitLevel("player");
  local c,i;
  local tempText;
  local firstShown;
  local showLower = 0;
  local showHigher = 0;
        local colorTooltip = TitanGetVar(TRZ_ID, "ShowColoredText");
        local showInstance = TitanGetVar(TRZ_ID, "ShowInstance");
        local showCurInstance = TitanGetVar(TRZ_ID, "ShowCurInstance");
        local showBattleground = TitanGetVar(TRZ_ID, "ShowBattleground");
        local showRaid = TitanGetVar(TRZ_ID, "ShowRaid");
        local showFaction = TitanGetVar(TRZ_ID, "ShowFaction");
        local showContinent = TitanGetVar(TRZ_ID, "ShowContinent");
        local showLoc = TitanGetVar(TRZ_ID, "ShowLoc");
        local rows = 4;
        
        trz_tooltip_text = "";
        if ( TitanGetVar(TRZ_ID, "ShowLower" ) ) then
                showLower = 5;
        end
        if ( TitanGetVar(TRZ_ID, "ShowHigher" ) ) then
                showHigher = 5;
        end     
        if (trz_current_zone >= 100 ) then
                tempText = TRZ_TOOLTIP_CZONE .. TRZ_GetInstanceText(trz_current_zone-100,colorTooltip);
        else
                tempText = TRZ_TOOLTIP_CZONE .. TRZ_GetZoneText(trz_current_zone,colorTooltip) .. "\t";
          -- Show faction
                if ( showFaction ) then
                        tempText = tempText .. TRZ_GetFactionText(trz_current_zone,colorTooltip);
                end
                -- show continent
                if ( showContinent ) then
                        tempText = tempText .. TRZ_GetContinentText(trz_current_zone,colorTooltip);
                end
        
                -- Show instances for current zone.
          if ( showCurInstance ) then
                        if ( TRZ_ZONES[trz_current_zone].instances[0] ~= nil ) then
                          for c = 0, table.getn(TRZ_ZONES[trz_current_zone].instances), 1 do
                                local f = TRZ_INSTANCES[TRZ_ZONES[trz_current_zone].instances[c]].faction;
                                if ( (f == TRZ_CONTESTED) or (TRZ_FACTION[f] == UnitFactionGroup("player")) ) then
                                                tempText = tempText .. "\n" .. TRZ_TOOLTIP_CINSTANCES ..
                                                                                                TRZ_GetInstanceText(TRZ_ZONES[trz_current_zone].instances[c], colorTooltip);
                                                rows = rows + 1;
                                        end
                                end
                        end
                end                     
        end
        
        -- Show recommended zones.
        tempText = tempText .. "\n\n" .. TRZ_WHITE .. TRZ_TOOLTIP_RECOMMEND .. TRZ_FONT_OFF;
        for i = 0, table.getn(TRZ_ZONES), 1 do
                if ( (TRZ_ZONES[i].low - showHigher) <= player_level and 
                     (TRZ_ZONES[i].high + showLower) >= player_level ) then     
                        if ( (TRZ_ZONES[i].faction == TRZ_CONTESTED) or (UnitFactionGroup("player") == TRZ_FACTION[TRZ_ZONES[i].faction]) ) then

                                if ( rows >= TRZ_MAX_ROWS ) then
                                        tempText = tempText .. "\n" .. TRZ_TOOLTIP_MORE;
                                        trz_tooltip_text = tempText;
                                        return
                                end

                                -- Add zone name and level range.
        tempText = tempText .. "\n" .. TRZ_GetZoneText(i,colorTooltip) .. "\t";
                                rows = rows + 1;
                                
        -- Show faction
                                if ( showFaction ) then
                tempText = tempText .. TRZ_GetFactionText(i,colorTooltip);
                                end

        -- show continent
        if ( showContinent ) then
          tempText = tempText .. TRZ_GetContinentText(i,colorTooltip);
        end
                        end
                end
        end
        
        -- Show recommended instances/battlegrounds/raids
        if( showInstance or showRaid or showBattleground ) then
                firstShown = nil;
                for i = 0, table.getn(TRZ_INSTANCES), 1 do
                        if ( (TRZ_INSTANCES[i].low - showHigher) <= player_level and
                                         (TRZ_INSTANCES[i].high + showLower) >= player_level ) then
                        local f = TRZ_INSTANCES[i].faction;
                        if ( (f == TRZ_CONTESTED) or (TRZ_FACTION[f] == UnitFactionGroup("player")) ) then
                                local t = TRZ_INSTANCES[i].type
                                        if ( (t == TRZ_INSTANCE and showInstance) or 
                                                        ((t == TRZ_RAID20 or t == TRZ_RAID40) and showRaid) or
                                                         (t == TRZ_BATTLEGROUND and showBattleground)) then
                                                if ( rows >= TRZ_MAX_ROWS ) then
                                                        tempText = tempText .. "\n" .. TRZ_TOOLTIP_MORE;
                                                        trz_tooltip_text = tempText;
                                                        return
                                                end
                                                if ( not firstShown )   then
                                                        tempText = tempText .. "\n\n" .. TRZ_WHITE .. TRZ_TOOLTIP_RECOMMEND_INSTANCES .. TRZ_FONT_OFF;
                                                        firstShown = 1;
                                                        rows = rows + 1;
                                                end
                                                if ( rows >= TRZ_MAX_ROWS ) then
                                                        tempText = tempText .. "\n" .. TRZ_TOOLTIP_MORE;
                                                        trz_tooltip_text = tempText;
                                                        return
                                                end
                                                tempText = tempText .. "\n" .. TRZ_GetInstanceText(i,colorTooltip);
                                                rows = rows + 1;
                                                if ( showLoc ) then
                                                        if ( TRZ_INSTANCES[i].iloc ) then
                                                                tempText = tempText .. "\t" .. TRZ_WHITE .. "<" .. TRZ_INSTANCES[TRZ_INSTANCES[i].iloc].zone .. ">" .. TRZ_FONT_OFF
                                                        else
                                                                tempText = tempText .. "\t" .. TRZ_WHITE .. "<" .. TRZ_ZONES[TRZ_INSTANCES[i].loc].zone .. ">" .. TRZ_FONT_OFF
                                                        end
                                                end
                                        end
                                end
                        end
                end
        end
                                          
        trz_tooltip_text = tempText;
        return
end


-- Worldmap function --

function TRZ_ToggleWorldMapText()
        if (TitanGetVar(TRZ_ID, "ShowMap")) then
                TRZ_WorldMap_Frame:Show();
        else
                TRZ_WorldMap_Frame:Hide();
        end
end

function TRZ_WorldMapButton_OnUpdate()
   local player_level = UnitLevel("player");
   local zoneColor;
         if (WorldMapFrame.areaName ~= nil) then        
                 for i = 0, table.getn(TRZ_ZONES), 1 do
                        if (string.find(WorldMapFrame.areaName, TRZ_ZONES[i].zone)) then
                                zoneColor = TRZ_GetColor(TRZ_ZONES[i].low, TRZ_ZONES[i].high);
                                zoneText = zoneColor .. format(TRZ_WORLDMAP_TEXT, TRZ_ZONES[i].low, TRZ_ZONES[i].high);
                                if ( TRZ_ZONES[i].instances[0] ~= nil ) then
                                  zoneText = zoneText .. TRZ_NORMAL .. TRZ_TOOLTIP_CINSTANCES .. "\n" .. TRZ_FONT_OFF;
                                        for c = 0, table.getn(TRZ_ZONES[i].instances), 1 do
                                                zoneText = zoneText .. TRZ_GetInstanceText(TRZ_ZONES[i].instances[c], true) .. "\n";
                                        end
                                end
                                TRZ_WorldMap_Text:SetText(zoneText);
                        end
                end
        else
                TRZ_WorldMap_Text:SetText("");
        end

        if (WorldMapFrame.poiHighlight == 1) then
                for i = 0, table.getn(TRZ_ZONES), 1 do
                        if (string.find(WorldMapFrameAreaLabel:GetText(), TRZ_ZONES[i].zone)) then
                                zoneText = TRZ_WHITE .. TRZ_FACTION[TRZ_ZONES[i].faction] .. "\n\n" .. TRZ_FONT_OFF;
                                if (TRZ_ZONES[i].instances ~= nil) then
                                        zoneText = zoneText .. TRZ_NORMAL .. TRZ_TOOLTIP_RINSTANCES .. "\n" .. TRZ_FONT_OFF;
                                        for c = 0, table.getn(TRZ_ZONES[i].instances), 1 do
                                                zoneText = zoneText .. TRZ_GetInstanceText(TRZ_ZONES[i].instances[c], true) .. "\n";
                                        end
                                end
                                TRZ_WorldMap_Text:SetText(zoneText);
                        end
                end
        end
end