vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- **************************************************************************
-- * TitanSoulShardCounter.lua
-- **************************************************************************
-- * by Candar @ Darkspear <candar-at-fornander,com>
-- *
-- * Credits: based on code from evil.oz, Pieter Walsweer, Kefka D'Arden
-- **************************************************************************


-- ************************************* Const / defines *************************************
TITAN_SOULSHARDSCOUNTER_ID = "SoulShardCounter";
TITAN_SOULSHARDSCOUNTER_COUNT_FORMAT = "%d";
TITAN_SOULSHARDSCOUNTER_TOOLTIP = "SoulShardCounter Tooltip";
TITAN_SOULSHARDSCOUNTER_ICON = "Interface\\Icons\\INV_Misc_Gem_Amethyst_02.blp"

-- ************************************* Variables *******************************************
numSoulShard = 0;
timer = 0;


-- ************************************* Functions *******************************************
-- *******************************************************************************************
-- Name: TitanPanelSoulShardCounterButton_OnLoad
-- Desc: This function registers SoulShardCounter Addon.
-- *******************************************************************************************
function TitanPanelSoulShardCounterButton_OnLoad()
        this.registry = {
                id = TITAN_SOULSHARDSCOUNTER_ID,
                menuText = TITAN_SOULSHARDSCOUNTER_MENU_TEXT,
                buttonTextFunction = "TitanPanelSoulShardCounterButton_GetButtonText",
                tooltipTitle = TITAN_SOULSHARDSCOUTER_TOOLTIP,
                category = "Information",
                tooltipTextFunction = "TitanPanelSoulShardCounterButton_GetTooltipText",
                icon = TITAN_SOULSHARDSCOUNTER_ICON,
                iconWidth = 16,
                frequency = 1,
                savedVariables = {
                        ShowLabelText = 1,
                        ShowIcon = 1,
                        WarnWhenLow = 1,
                        WarnThreshold = 1,
                        WarnTimer = 60
                }
        };
        this:RegisterEvent("BAG_UPDATE");
        this:RegisterEvent("UNIT_INVENTORY_CHANGED");
        this:RegisterEvent("VARIABLES_LOADED");
end


-- *******************************************************************************************
-- Name: TitanPanelSoulShardCounterButton_GetButtonText
-- Desc: Gets our button text, the text that appears on the actual bar, all the time.
-- *******************************************************************************************
function TitanPanelSoulShardCounterButton_GetButtonText(id)
        -- Update timer
        timer = timer + 1;

        -- If id not nil, return corresponding plugin button
        -- Otherwise return this button and derive the real id
        local button, id = TitanUtils_GetButton(id, true);

        -- Business logic goes here
        numSoulShard = SoulShardCounter_CountSoulShard();

        -- Warn if low on shards
        if (    TitanGetVar(TITAN_SOULSHARDSCOUNTER_ID, "WarnThreshold") >= numSoulShard and 
                        TitanGetVar(TITAN_SOULSHARDSCOUNTER_ID, "WarnTimer") <= timer and
                        TitanGetVar(TITAN_SOULSHARDSCOUNTER_ID, "WarnWhenLow") )
        then
                TitanPanelSoulShardCounter_WarningFrame:AddMessage(TITAN_SOULSHARDSCOUNTER_ITEMNAME, 1.0, 0, 0, 1.0, 1);                
                PlaySoundFile("Sound\\interface\\mapping.wav")
                timer = 0;
        end

        local countText = format(TITAN_SOULSHARDSCOUNTER_COUNT_FORMAT, numSoulShard);
        local richText;

        if (    TitanGetVar(TITAN_SOULSHARDSCOUNTER_ID, "WarnThreshold") >= numSoulShard ) then
                richText = TitanUtils_GetColoredText(countText, RED_FONT_COLOR);
        else
                richText = countText;
        end

        return TITAN_SOULSHARDSCOUNTER_BUTTON_LABEL, richText;
end


-- *******************************************************************************************
-- Name: TitanPanelSoulShardCounterButton_GetTooltipText
-- Desc: Gets our tool-tip text, what appears when we hover over our item on the Titan bar.
-- *******************************************************************************************
function TitanPanelSoulShardCounterButton_GetTooltipText()
        return TITAN_SOULSHARDSCOUNTER_TOOLTIPTEXT;
end


-- *******************************************************************************************
-- Name: SoulShardCounter_CountSoulShard
-- Desc: Counts number of Sacred SoulShard currently in player's bag.
-- *******************************************************************************************
function SoulShardCounter_CountSoulShard()
        local shards = 0;
        local bag, slot = 0;
        for bag = 0, NUM_BAG_FRAMES do
                for slot = 1, GetContainerNumSlots(bag) do
                local itemName = GetContainerItemLink(bag, slot);
                        if itemName then
                                if string.find(itemName, "%["..TITAN_SOULSHARDSCOUNTER_ITEMNAME.."%]") then
                                        local texture, count = GetContainerItemInfo(bag, slot);
                                        shards = shards + count;
                                end
                        end
                end
        end
        return shards;
end


-- *******************************************************************************************
-- Name: TitanPanelRightClickMenu_PrepareSoulShardCounterMenu
-- Desc: Builds the config menu
-- *******************************************************************************************
function TitanPanelRightClickMenu_PrepareSoulShardCounterMenu()
        -- Menu title
        TitanPanelRightClickMenu_AddTitle(TITAN_SOULSHARDSCOUNTER_ITEMNAME);    
        
        -- A blank line in the menu
        TitanPanelRightClickMenu_AddSpacer();   
        
        -- Low warning on or off
        TitanPanelRightClickMenu_AddToggleVar(TITAN_SOULSHARDSCOUNTER_WARN_LOW, TITAN_SOULSHARDSCOUNTER_ID, "WarnWhenLow");     

        -- A blank line in the menu
        TitanPanelRightClickMenu_AddSpacer();   

        -- Generic function to toggle and hide
        TitanPanelRightClickMenu_AddToggleIcon(TITAN_SOULSHARDSCOUNTER_ID);
        TitanPanelRightClickMenu_AddToggleLabelText(TITAN_SOULSHARDSCOUNTER_ID);
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_SOULSHARDSCOUNTER_ID, TITAN_PANEL_MENU_FUNC_HIDE);


end