vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
---------------
-- Variables --
---------------
Perl_Target_Target_Config = {};

-- Default Saved Variables (also set in Perl_Target_Target_GetVars)
local locked = 0;               -- unlocked by default
local mobhealthsupport = 1;     -- mobhealth support is on by default
local scale = 1;                -- default scale
local totsupport = 1;           -- target of target support enabled by default
local tototsupport = 1;         -- target of target of target support enabled by default
local transparency = 1;         -- transparency for frames
local alertsound = 0;           -- audible alert disabled by default
local alertmode = 0;            -- DPS, Tank, Healer modes
local alertsize = 0;            -- Variable which controls the size of the text

-- Default Local Variables
local Initialized = nil;                                -- waiting to be initialized
local Perl_Target_Target_Time_Elapsed = 0;              -- set the update timer to 0
local Perl_Target_Target_Time_Update_Rate = 0.2;        -- the update interval
local aggroWarningCount = 0;                            -- the check to see if we have alerted the player of a ToT event
local aggroToToTWarningCount = 0;                       -- the check to see if we have alerted the player of a ToToT event
local startTime = 0;                                    -- used to keep track of fading the big alert text
local mouseovertargettargethealthflag = 0;              -- is the mouse over the health bar for healer mode?
local mouseovertargettargetmanaflag = 0;                -- is the mouse over the mana bar for healer mode?
local mouseovertargettargettargethealthflag = 0;        -- is the mouse over the health bar for healer mode?
local mouseovertargettargettargetmanaflag = 0;          -- is the mouse over the mana bar for healer mode?


----------------------
-- Loading Function --
----------------------
function Perl_Target_Target_OnLoad()
        -- Events
        this:RegisterEvent("ADDON_LOADED");
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
        this:RegisterEvent("PLAYER_REGEN_ENABLED");
        this:RegisterEvent("PLAYER_TARGET_CHANGED");
        this:RegisterEvent("VARIABLES_LOADED");

        -- Button Click Overlays (in order of occurrence in XML)
        Perl_Target_Target_NameFrame_CastClickOverlay:SetFrameLevel(Perl_Target_Target_NameFrame:GetFrameLevel() + 1);
        Perl_Target_Target_StatsFrame_CastClickOverlay:SetFrameLevel(Perl_Target_Target_StatsFrame:GetFrameLevel() + 1);
        Perl_Target_Target_HealthBar_CastClickOverlay:SetFrameLevel(Perl_Target_Target_StatsFrame:GetFrameLevel() + 2);
        Perl_Target_Target_ManaBar_CastClickOverlay:SetFrameLevel(Perl_Target_Target_StatsFrame:GetFrameLevel() + 2);
        Perl_Target_Target_Target_NameFrame_CastClickOverlay:SetFrameLevel(Perl_Target_Target_Target_NameFrame:GetFrameLevel() + 1);
        Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetFrameLevel(Perl_Target_Target_Target_StatsFrame:GetFrameLevel() + 1);
        Perl_Target_Target_Target_HealthBar_CastClickOverlay:SetFrameLevel(Perl_Target_Target_Target_StatsFrame:GetFrameLevel() + 2);
        Perl_Target_Target_Target_ManaBar_CastClickOverlay:SetFrameLevel(Perl_Target_Target_Target_StatsFrame:GetFrameLevel() + 2);

        if (DEFAULT_CHAT_FRAME) then
                DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Perl Classic: Target_Target loaded successfully.");
        end
end


-------------------
-- Event Handler --
-------------------
function Perl_Target_Target_OnEvent(event)
        if (event == "PLAYER_REGEN_ENABLED" or event == "PLAYER_TARGET_CHANGED") then
                aggroWarningCount = 0;
        elseif (event == "VARIABLES_LOADED") or (event=="PLAYER_ENTERING_WORLD") then
                Perl_Target_Target_Initialize();
                return;
        elseif (event == "ADDON_LOADED") then
                if (arg1 == "Perl_Target_Target") then
                        Perl_Target_Target_myAddOns_Support();
                end
                return;
        else
                return;
        end
end


-------------------------------
-- Loading Settings Function --
-------------------------------
function Perl_Target_Target_Initialize()
        if (Initialized) then
                Perl_Target_Target_Set_Scale();         -- Set the scale
                Perl_Target_Target_Set_Transparency();  -- Set the transparency
                return;
        end

        -- Check if a previous exists, if not, enable by default.
        if (type(Perl_Target_Target_Config[UnitName("player")]) == "table") then
                Perl_Target_Target_GetVars();
        else
                Perl_Target_Target_UpdateVars();
        end

        -- Major config options.
        Perl_Target_Target_Initialize_Frame_Color();
        Perl_Target_Target_Frame:Hide();
        Perl_Target_Target_Target_Frame:Hide();

        Initialized = 1;
end

function Perl_Target_Target_Initialize_Frame_Color()
        Perl_Target_Target_StatsFrame:SetBackdropColor(0, 0, 0, 1);
        Perl_Target_Target_StatsFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
        Perl_Target_Target_NameFrame:SetBackdropColor(0, 0, 0, 1);
        Perl_Target_Target_NameFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
        Perl_Target_Target_HealthBarText:SetTextColor(1, 1, 1, 1);
        Perl_Target_Target_ManaBarText:SetTextColor(1, 1, 1, 1);

        Perl_Target_Target_Target_StatsFrame:SetBackdropColor(0, 0, 0, 1);
        Perl_Target_Target_Target_StatsFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
        Perl_Target_Target_Target_NameFrame:SetBackdropColor(0, 0, 0, 1);
        Perl_Target_Target_Target_NameFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
        Perl_Target_Target_Target_HealthBarText:SetTextColor(1, 1, 1, 1);
        Perl_Target_Target_Target_ManaBarText:SetTextColor(1, 1, 1, 1);
end


--------------------------
-- The Update Functions --
--------------------------
function Perl_Target_Target_OnUpdate(arg1)
        Perl_Target_Target_Time_Elapsed = Perl_Target_Target_Time_Elapsed + arg1;
        if (Perl_Target_Target_Time_Elapsed > Perl_Target_Target_Time_Update_Rate) then
                Perl_Target_Target_Time_Elapsed = 0;

                if (UnitExists("targettarget") and totsupport == 1) then
                        Perl_Target_Target_Warn();                              -- Display any warnings if needed
                        Perl_Target_Target_Frame:Show();                        -- Show the frame

                        -- Begin: Set the name
                        local targettargetname = UnitName("targettarget");
                        if (strlen(targettargetname) > 11) then
                                targettargetname = strsub(targettargetname, 1, 10).."...";
                        end
                        Perl_Target_Target_NameBarText:SetText(targettargetname);
                        -- End: Set the name

                        -- Begin: Set the name text color
                        if (UnitIsPlayer("targettarget") or UnitPlayerControlled("targettarget")) then          -- is it a player
                                local r, g, b;
                                if (UnitCanAttack("targettarget", "player")) then                               -- are we in an enemy controlled zone
                                        -- Hostile players are red
                                        if (not UnitCanAttack("player", "targettarget")) then                   -- enemy is not pvp enabled
                                                r = 0.5;
                                                g = 0.5;
                                                b = 1.0;
                                        else                                                                    -- enemy is pvp enabled
                                                r = 1.0;
                                                g = 0.0;
                                                b = 0.0;
                                        end
                                elseif (UnitCanAttack("player", "targettarget")) then                           -- enemy in a zone controlled by friendlies or when we're a ghost
                                        -- Players we can attack but which are not hostile are yellow
                                        r = 1.0;
                                        g = 1.0;
                                        b = 0.0;
                                elseif (UnitIsPVP("targettarget")) then                                         -- friendly pvp enabled character
                                        -- Players we can assist but are PvP flagged are green
                                        r = 0.0;
                                        g = 1.0;
                                        b = 0.0;
                                else                                                                            -- friendly non pvp enabled character
                                        -- All other players are blue (the usual state on the "blue" server)
                                        r = 0.5;
                                        g = 0.5;
                                        b = 1.0;
                                end
                                Perl_Target_Target_NameBarText:SetTextColor(r, g, b);
                        elseif (UnitIsTapped("targettarget") and not UnitIsTappedByPlayer("targettarget")) then
                                Perl_Target_Target_NameBarText:SetTextColor(0.5,0.5,0.5);                       -- not our tap
                        else
                                local reaction = UnitReaction("targettarget", "player");
                                if (reaction) then
                                        local r, g, b;
                                        r = UnitReactionColor[reaction].r;
                                        g = UnitReactionColor[reaction].g;
                                        b = UnitReactionColor[reaction].b;
                                        Perl_Target_Target_NameBarText:SetTextColor(r, g, b);
                                else
                                        Perl_Target_Target_NameBarText:SetTextColor(0.5, 0.5, 1.0);
                                end
                        end
                        -- End: Set the name text color

                        -- Begin: Update the health bar
                        local targettargethealth = UnitHealth("targettarget");
                        local targettargethealthmax = UnitHealthMax("targettarget");
                        local targettargethealthpercent = floor(targettargethealth/targettargethealthmax*100+0.5);

                        if (UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then                             -- This prevents negative health
                                targettargethealth = 0;
                                targettargethealthpercent = 0;
                        end

                        Perl_Target_Target_HealthBar:SetMinMaxValues(0, targettargethealthmax);
                        Perl_Target_Target_HealthBar:SetValue(targettargethealth);

                        if (PCUF_COLORHEALTH == 1) then
                                if ((targettargethealthpercent <= 100) and (targettargethealthpercent > 75)) then
                                        Perl_Target_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
                                        Perl_Target_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
                                elseif ((targettargethealthpercent <= 75) and (targettargethealthpercent > 50)) then
                                        Perl_Target_Target_HealthBar:SetStatusBarColor(1, 1, 0);
                                        Perl_Target_Target_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
                                elseif ((targettargethealthpercent <= 50) and (targettargethealthpercent > 25)) then
                                        Perl_Target_Target_HealthBar:SetStatusBarColor(1, 0.5, 0);
                                        Perl_Target_Target_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
                                else
                                        Perl_Target_Target_HealthBar:SetStatusBarColor(1, 0, 0);
                                        Perl_Target_Target_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
                                end
                        else
                                Perl_Target_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
                                Perl_Target_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
                        end

                        if (mouseovertargettargethealthflag == 1) then
                                Perl_Target_Target_HealthShow();
                        else
                                Perl_Target_Target_HealthBarText:SetText(targettargethealthpercent.."%");
                        end
                        -- End: Update the health bar

                        -- Begin: Update the mana bar
                        local targettargetmana = UnitMana("targettarget");
                        local targettargetmanamax = UnitManaMax("targettarget");

                        if (UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then                             -- This prevents negative mana
                                targettargetmana = 0;
                        end

                        Perl_Target_Target_ManaBar:SetMinMaxValues(0, targettargetmanamax);
                        Perl_Target_Target_ManaBar:SetValue(targettargetmana);

                        if (mouseovertargettargetmanaflag == 1) then
                                if (UnitPowerType("targettarget") == 1 or UnitPowerType("targettarget") == 2) then
                                        Perl_Target_Target_ManaBarText:SetText(targettargetmana);
                                else
                                        Perl_Target_Target_ManaBarText:SetText(targettargetmana.."/"..targettargetmanamax);
                                end
                        else
                                Perl_Target_Target_ManaBarText:Hide();
                        end
                        -- End: Update the mana bar

                        -- Begin: Update the mana bar color
                        local targettargetmanamax = UnitManaMax("targettarget");
                        local targettargetpower = UnitPowerType("targettarget");

                        -- Set mana bar color
                        if (targettargetmanamax == 0) then
                                Perl_Target_Target_ManaBar:Hide();
                                Perl_Target_Target_ManaBarBG:Hide();
                                Perl_Target_Target_ManaBar_CastClickOverlay:Hide();
                                Perl_Target_Target_StatsFrame:SetHeight(30);
                                Perl_Target_Target_StatsFrame_CastClickOverlay:SetHeight(30);
                        elseif (targettargetpower == 1) then
                                Perl_Target_Target_ManaBar:SetStatusBarColor(1, 0, 0, 1);
                                Perl_Target_Target_ManaBarBG:SetStatusBarColor(1, 0, 0, 0.25);
                                Perl_Target_Target_ManaBar:Show();
                                Perl_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        elseif (targettargetpower == 2) then
                                Perl_Target_Target_ManaBar:SetStatusBarColor(1, 0.5, 0, 1);
                                Perl_Target_Target_ManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
                                Perl_Target_Target_ManaBar:Show();
                                Perl_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        elseif (targettargetpower == 3) then
                                Perl_Target_Target_ManaBar:SetStatusBarColor(1, 1, 0, 1);
                                Perl_Target_Target_ManaBarBG:SetStatusBarColor(1, 1, 0, 0.25);
                                Perl_Target_Target_ManaBar:Show();
                                Perl_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        else
                                Perl_Target_Target_ManaBar:SetStatusBarColor(0, 0, 1, 1);
                                Perl_Target_Target_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
                                Perl_Target_Target_ManaBar:Show();
                                Perl_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        end
                        -- End: Update the mana bar color
                else
                        Perl_Target_Target_Frame:Hide();                        -- Hide the frame
                end

                if (UnitExists("targettargettarget") and tototsupport == 1) then
                        Perl_Target_Target_Target_Frame:Show();                 -- Show the frame

                        if (UnitAffectingCombat("targettarget")) then
                                if (UnitIsDead("targettargettarget") or UnitIsCorpse("targettargettarget")) then
                                        -- Im thinking targetting something that is targetting a corpse or dead thing is causing crashes
                                        -- Hence this safety check. If it is, we do nothing.
                                else
                                        if (UnitName("targettargettarget")) then
                                                if (UnitIsEnemy("targettarget", "player")) then
                                                        if (UnitName("targettargettarget") == UnitName("player")) then                  -- play the warning sound if needed
                                                                if (aggroWarningCount == 0 and aggroToToTWarningCount == 0) then
                                                                        -- Its coming right for us!
                                                                        if (aggroToToTWarningCount == 0) then
                                                                                aggroToToTWarningCount = 1;
                                                                                Perl_Target_Target_Play_Sound();
                                                                        end
                                                                end
                                                        else
                                                                -- Whew it isnt fighting us
                                                                aggroToToTWarningCount = 0;
                                                        end
                                                else
                                                        -- Friendly target
                                                        aggroToToTWarningCount = 0;
                                                end
                                        end
                                end
                        end
                        

                        -- Begin: Set the name
                        local targettargettargetname = UnitName("targettargettarget");
                        if (strlen(targettargettargetname) > 11) then
                                targettargettargetname = strsub(targettargettargetname, 1, 10).."...";
                        end
                        Perl_Target_Target_Target_NameBarText:SetText(targettargettargetname);
                        -- End: Set the name

                        -- Begin: Set the name text color
                        if (UnitIsPlayer("targettargettarget") or UnitPlayerControlled("targettargettarget")) then      -- is it a player
                                local r, g, b;
                                if (UnitCanAttack("targettargettarget", "player")) then                                 -- are we in an enemy controlled zone
                                        -- Hostile players are red
                                        if (not UnitCanAttack("player", "targettargettarget")) then                     -- enemy is not pvp enabled
                                                r = 0.5;
                                                g = 0.5;
                                                b = 1.0;
                                        else                                                                            -- enemy is pvp enabled
                                                r = 1.0;
                                                g = 0.0;
                                                b = 0.0;
                                        end
                                elseif (UnitCanAttack("player", "targettargettarget")) then                             -- enemy in a zone controlled by friendlies or when we're a ghost
                                        -- Players we can attack but which are not hostile are yellow
                                        r = 1.0;
                                        g = 1.0;
                                        b = 0.0;
                                elseif (UnitIsPVP("targettargettarget")) then                                           -- friendly pvp enabled character
                                        -- Players we can assist but are PvP flagged are green
                                        r = 0.0;
                                        g = 1.0;
                                        b = 0.0;
                                else                                                                                    -- friendly non pvp enabled character
                                        -- All other players are blue (the usual state on the "blue" server)
                                        r = 0.5;
                                        g = 0.5;
                                        b = 1.0;
                                end
                                Perl_Target_Target_Target_NameBarText:SetTextColor(r, g, b);
                        elseif (UnitIsTapped("targettargettarget") and not UnitIsTappedByPlayer("targettargettarget")) then
                                Perl_Target_Target_Target_NameBarText:SetTextColor(0.5,0.5,0.5);                        -- not our tap
                        else
                                local reaction = UnitReaction("targettargettarget", "player");
                                if (reaction) then
                                        local r, g, b;
                                        r = UnitReactionColor[reaction].r;
                                        g = UnitReactionColor[reaction].g;
                                        b = UnitReactionColor[reaction].b;
                                        Perl_Target_Target_Target_NameBarText:SetTextColor(r, g, b);
                                else
                                        Perl_Target_Target_Target_NameBarText:SetTextColor(0.5, 0.5, 1.0);
                                end
                        end
                        -- End: Set the name text color

                        -- Begin: Update the health bar
                        local targettargettargethealth = UnitHealth("targettargettarget");
                        local targettargettargethealthmax = UnitHealthMax("targettargettarget");
                        local targettargettargethealthpercent = floor(targettargettargethealth/targettargettargethealthmax*100+0.5);

                        if (UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then                         -- This prevents negative health
                                targettargettargethealth = 0;
                                targettargettargethealthpercent = 0;
                        end

                        Perl_Target_Target_Target_HealthBar:SetMinMaxValues(0, targettargettargethealthmax);
                        Perl_Target_Target_Target_HealthBar:SetValue(targettargettargethealth);

                        if (PCUF_COLORHEALTH == 1) then
                                if ((targettargettargethealthpercent <= 100) and (targettargettargethealthpercent > 75)) then
                                        Perl_Target_Target_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
                                        Perl_Target_Target_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
                                elseif ((targettargettargethealthpercent <= 75) and (targettargettargethealthpercent > 50)) then
                                        Perl_Target_Target_Target_HealthBar:SetStatusBarColor(1, 1, 0);
                                        Perl_Target_Target_Target_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
                                elseif ((targettargettargethealthpercent <= 50) and (targettargettargethealthpercent > 25)) then
                                        Perl_Target_Target_Target_HealthBar:SetStatusBarColor(1, 0.5, 0);
                                        Perl_Target_Target_Target_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
                                else
                                        Perl_Target_Target_Target_HealthBar:SetStatusBarColor(1, 0, 0);
                                        Perl_Target_Target_Target_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
                                end
                        else
                                Perl_Target_Target_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
                                Perl_Target_Target_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
                        end

                        if (mouseovertargettargettargethealthflag == 1) then
                                Perl_Target_Target_Target_HealthShow();
                        else
                                Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealthpercent.."%");
                        end
                        -- End: Update the health bar

                        -- Begin: Update the mana bar
                        local targettargettargetmana = UnitMana("targettargettarget");
                        local targettargettargetmanamax = UnitManaMax("targettargettarget");

                        if (UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then                         -- This prevents negative mana
                                targettargettargetmana = 0;
                        end

                        Perl_Target_Target_Target_ManaBar:SetMinMaxValues(0, targettargettargetmanamax);
                        Perl_Target_Target_Target_ManaBar:SetValue(targettargettargetmana);

                        if (mouseovertargettargettargetmanaflag == 1) then
                                if (UnitPowerType("targettargettarget") == 1 or UnitPowerType("targettargettarget") == 2) then
                                        Perl_Target_Target_Target_ManaBarText:SetText(targettargettargetmana);
                                else
                                        Perl_Target_Target_Target_ManaBarText:SetText(targettargettargetmana.."/"..targettargettargetmanamax);
                                end
                        else
                                Perl_Target_Target_Target_ManaBarText:Hide();
                        end
                        -- End: Update the mana bar

                        -- Begin: Update the mana bar color
                        local targettargettargetmanamax = UnitManaMax("targettargettarget");
                        local targettargettargetpower = UnitPowerType("targettargettarget");

                        -- Set mana bar color
                        if (targettargettargetmanamax == 0) then
                                Perl_Target_Target_Target_ManaBar:Hide();
                                Perl_Target_Target_Target_ManaBarBG:Hide();
                                Perl_Target_Target_Target_ManaBar_CastClickOverlay:Hide();
                                Perl_Target_Target_Target_StatsFrame:SetHeight(30);
                                Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetHeight(30);
                        elseif (targettargettargetpower == 1) then
                                Perl_Target_Target_Target_ManaBar:SetStatusBarColor(1, 0, 0, 1);
                                Perl_Target_Target_Target_ManaBarBG:SetStatusBarColor(1, 0, 0, 0.25);
                                Perl_Target_Target_Target_ManaBar:Show();
                                Perl_Target_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        elseif (targettargettargetpower == 2) then
                                Perl_Target_Target_Target_ManaBar:SetStatusBarColor(1, 0.5, 0, 1);
                                Perl_Target_Target_Target_ManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
                                Perl_Target_Target_Target_ManaBar:Show();
                                Perl_Target_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        elseif (targettargettargetpower == 3) then
                                Perl_Target_Target_Target_ManaBar:SetStatusBarColor(1, 1, 0, 1);
                                Perl_Target_Target_Target_ManaBarBG:SetStatusBarColor(1, 1, 0, 0.25);
                                Perl_Target_Target_Target_ManaBar:Show();
                                Perl_Target_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        else
                                Perl_Target_Target_Target_ManaBar:SetStatusBarColor(0, 0, 1, 1);
                                Perl_Target_Target_Target_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
                                Perl_Target_Target_Target_ManaBar:Show();
                                Perl_Target_Target_Target_ManaBarBG:Show();
                                Perl_Target_Target_Target_ManaBar_CastClickOverlay:Show();
                                Perl_Target_Target_Target_StatsFrame:SetHeight(42);
                                Perl_Target_Target_Target_StatsFrame_CastClickOverlay:SetHeight(42);
                        end
                        -- End: Update the mana bar color
                else
                        Perl_Target_Target_Target_Frame:Hide();                 -- Hide the frame
                end

        end
end

function Perl_Target_Target_Warn()
        -- Player has something targetted
        if (UnitAffectingCombat("target")) then                                                         -- Target is in an active combat situation
                if (UnitIsDead("targettarget") or UnitIsCorpse("targettarget")) then                    -- Target is dead, do nothing
                        -- Previous author had this in as a safety check
                else
                        if (not UnitIsFriend("target", "player")) then                                  -- Target isn't dead
                                -- Stupid mobs dont have targets when they are trapped/polyd/sapped/stunned, check for this
                                if (alertmode == 0) then        -- Disabled but still have audible alert enabled
                                        if (UnitName("targettarget") == UnitName("player")) then        -- play the warning sound if needed
                                                -- Its coming right for us!
                                                if (aggroWarningCount == 0) then
                                                        aggroWarningCount = 1;
                                                        Perl_Target_Target_Play_Sound();
                                                end
                                        else
                                                -- Whew it isnt fighting us
                                                aggroWarningCount = 0;
                                        end
                                elseif (alertmode == 1) then    -- DPS Mode
                                        if (UnitName("targettarget") == UnitName("player")) then
                                                -- Its coming right for us!
                                                if (aggroWarningCount == 0) then
                                                        if (alertsize == 0) then
                                                                UIErrorsFrame:AddMessage(UnitName("target").." has changed targets to you!",1,0,0,1,3);
                                                        elseif (alertsize == 1) then
                                                                Perl_Target_Target_BigWarning_Show(UnitName("target").." has changed targets to you!");
                                                        elseif (alertsize == 2) then
                                                                -- Warning disabled
                                                        end
                                                        aggroWarningCount = 1;
                                                        Perl_Target_Target_Play_Sound();
                                                end
                                        else
                                                -- Whew it isnt fighting us
                                                aggroWarningCount = 0;
                                        end
                                elseif (alertmode == 2) then    -- Tank mode
                                        if (UnitName("targettarget") == UnitName("player")) then
                                                -- Its coming right for us! (A good thing, im tanking it)
                                                aggroWarningCount = 0;
                                        else
                                                -- Some dumb hunter pulled aggro
                                                if (aggroWarningCount == 0) then
                                                        if (alertsize == 0) then
                                                                UIErrorsFrame:AddMessage("You have lost aggro to "..UnitName("targettarget").."!",1,0,0,1,3);
                                                        elseif (alertsize == 1) then
                                                                Perl_Target_Target_BigWarning_Show("You have lost aggro to "..UnitName("targettarget").."!");
                                                        elseif (alertsize == 2) then
                                                                -- Warning disabled
                                                        end
                                                        aggroWarningCount = 1;
                                                        Perl_Target_Target_Play_Sound();
                                                end
                                        end
                                elseif (alertmode == 3) then    -- Healer Mode (Do this check down here for sanity reasons)
                                        Perl_Target_Target_Warn_Healer_Mode();
                                else
                                        -- Friendly target
                                        aggroWarningCount = 0;
                                end
                                --end
                        else
                                if (alertmode == 3) then        -- Healer Mode (Do this check down here for sanity reasons)
                                        Perl_Target_Target_Warn_Healer_Mode();
                                else
                                        -- Friendly target
                                        aggroWarningCount = 0;
                                end
                        end
                end
        end
end

function Perl_Target_Target_Warn_Healer_Mode()          -- This chunk of code is called in 2 places so may as well place it as it's own function
        if (UnitIsPlayer("target")) then
                if (UnitIsFriend("player", "target")) then
                        if (UnitIsUnit("target", "targettargettarget")) then    -- The target and the targets target target (whew) are the same
                                if (aggroWarningCount == 0) then
                                        if (alertsize == 0) then
                                                UIErrorsFrame:AddMessage(UnitName("target").." is now tanking "..UnitName("targettarget"),1,0,0,1,3);
                                        elseif (alertsize == 1) then
                                                if ((UnitName("player") == UnitName("target")) or (UnitName("target") == UnitName("targettarget"))) then
                                                        -- Do nothing
                                                else
                                                        Perl_Target_Target_BigWarning_Show(UnitName("target").." is now tanking "..UnitName("targettarget"));
                                                end
                                        elseif (alertsize == 2) then
                                                -- Warning disabled
                                        end
                                        aggroWarningCount = 1;
                                end
                        else
                                -- Lazy warrior isnt tanking anything!
                                aggroWarningCount = 0;
                        end
                else
                        if (UnitName("targettarget") == UnitName("player")) then
                                -- Its coming right for us!
                                if (aggroWarningCount == 0) then
                                        if (alertsize == 0) then
                                                UIErrorsFrame:AddMessage(UnitName("target").." has changed targets to you!",1,0,0,1,3);
                                        elseif (alertsize == 1) then
                                                Perl_Target_Target_BigWarning_Show(UnitName("target").." has changed targets to you!");
                                        elseif (alertsize == 2) then
                                                -- Warning disabled
                                        end
                                        aggroWarningCount = 1;
                                        Perl_Target_Target_Play_Sound();
                                end
                        else
                                -- Whew it isnt fighting us
                                aggroWarningCount = 0;
                        end
                end
        else
                if (UnitName("targettarget") == UnitName("player")) then
                        -- Its coming right for us!
                        if (aggroWarningCount == 0) then
                                if (alertsize == 0) then
                                        UIErrorsFrame:AddMessage(UnitName("target").." has changed targets to you!",1,0,0,1,3);
                                elseif (alertsize == 1) then
                                        Perl_Target_Target_BigWarning_Show(UnitName("target").." has changed targets to you!");
                                elseif (alertsize == 2) then
                                        -- Warning disabled
                                end
                                aggroWarningCount = 1;
                                Perl_Target_Target_Play_Sound();
                        end
                else
                        -- Whew it isnt fighting us
                        aggroWarningCount = 0;
                end
        end
end

function Perl_Target_Target_Play_Sound()
        if (alertsound == 1) then
                PlaySoundFile("Sound\\Spells\\PVPFlagTakenHorde.wav");
        end
end


-------------------------
-- Mouseover Functions --
-------------------------
-- Target of Target Start
function Perl_Target_Target_HealthShow()
        local targettargethealth = UnitHealth("targettarget");
        local targettargethealthmax = UnitHealthMax("targettarget");

        if (UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then                             -- This prevents negative health
                targettargethealth = 0;
                targettargethealthpercent = 0;
        end

        if (targettargethealthmax == 100) then
                -- Begin Mobhealth support
                if (mobhealthsupport == 1) then
                        if (MobHealthFrame) then

                                local index;
                                if UnitIsPlayer("targettarget") then
                                        index = UnitName("targettarget");
                                else
                                        index = UnitName("targettarget")..":"..UnitLevel("targettarget");
                                end

                                if ((MobHealthDB and MobHealthDB[index]) or (MobHealthPlayerDB and MobHealthPlayerDB[index])) then
                                        local s, e;
                                        local pts;
                                        local pct;

                                        if MobHealthDB[index] then
                                                if (type(MobHealthDB[index]) ~= "string") then
                                                        Perl_Target_Target_HealthBarText:SetText(targettargethealth.."%");
                                                end
                                                s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$");
                                        else
                                                if (type(MobHealthPlayerDB[index]) ~= "string") then
                                                        Perl_Target_Target_HealthBarText:SetText(targettargethealth.."%");
                                                end
                                                s, e, pts, pct = string.find(MobHealthPlayerDB[index], "^(%d+)/(%d+)$");
                                        end

                                        if (pts and pct) then
                                                pts = pts + 0;
                                                pct = pct + 0;
                                                if (pct ~= 0) then
                                                        pointsPerPct = pts / pct;
                                                else
                                                        pointsPerPct = 0;
                                                end
                                        end

                                        local currentPct = UnitHealth("targettarget");
                                        if (pointsPerPct > 0) then
                                                Perl_Target_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5)); -- Stored unit info from the DB
                                        end
                                else
                                        Perl_Target_Target_HealthBarText:SetText(targettargethealth.."%");      -- Unit not in MobHealth DB
                                end
                        -- End MobHealth Support
                        else
                                Perl_Target_Target_HealthBarText:SetText(targettargethealth.."%");      -- MobHealth isn't installed
                        end
                else    -- mobhealthsupport == 0
                        Perl_Target_Target_HealthBarText:SetText(targettargethealth.."%");      -- MobHealth support is disabled
                end
        else
                Perl_Target_Target_HealthBarText:SetText(targettargethealth.."/"..targettargethealthmax);       -- Self/Party/Raid member
        end

        mouseovertargettargethealthflag = 1;
end

function Perl_Target_Target_HealthHide()
        local targettargethealthpercent = floor(UnitHealth("targettarget")/UnitHealthMax("targettarget")*100+0.5);

        if (UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then                             -- This prevents negative health
                targettargethealthpercent = 0;
        end

        Perl_Target_Target_HealthBarText:SetText(targettargethealthpercent.."%");
        mouseovertargettargethealthflag = 0;
end

function Perl_Target_Target_ManaShow()
        local targettargetmana = UnitMana("targettarget");
        local targettargetmanamax = UnitManaMax("targettarget");

        if (UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then                             -- This prevents negative mana
                targettargetmana = 0;
        end

        if (UnitPowerType("targettarget") == 1) then
                Perl_Target_Target_ManaBarText:SetText(targettargetmana);
        else
                Perl_Target_Target_ManaBarText:SetText(targettargetmana.."/"..targettargetmanamax);
        end
        Perl_Target_Target_ManaBarText:Show();
        mouseovertargettargetmanaflag = 1;
end

function Perl_Target_Target_ManaHide()
        Perl_Target_Target_ManaBarText:Hide();
        mouseovertargettargetmanaflag = 0;
end
-- Target of Target End

-- Target of Target of Target Start
function Perl_Target_Target_Target_HealthShow()
        local targettargettargethealth = UnitHealth("targettargettarget");
        local targettargettargethealthmax = UnitHealthMax("targettargettarget");

        if (UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then                         -- This prevents negative health
                targettargettargethealth = 0;
                targettargettargethealthpercent = 0;
        end

        if (targettargettargethealthmax == 100) then
                -- Begin Mobhealth support
                if (mobhealthsupport == 1) then
                        if (MobHealthFrame) then

                                local index;
                                if UnitIsPlayer("targettargettarget") then
                                        index = UnitName("targettargettarget");
                                else
                                        index = UnitName("targettargettarget")..":"..UnitLevel("targettargettarget");
                                end

                                if ((MobHealthDB and MobHealthDB[index]) or (MobHealthPlayerDB and MobHealthPlayerDB[index])) then
                                        local s, e;
                                        local pts;
                                        local pct;

                                        if MobHealthDB[index] then
                                                if (type(MobHealthDB[index]) ~= "string") then
                                                        Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."%");
                                                end
                                                s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$");
                                        else
                                                if (type(MobHealthPlayerDB[index]) ~= "string") then
                                                        Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."%");
                                                end
                                                s, e, pts, pct = string.find(MobHealthPlayerDB[index], "^(%d+)/(%d+)$");
                                        end

                                        if (pts and pct) then
                                                pts = pts + 0;
                                                pct = pct + 0;
                                                if (pct ~= 0) then
                                                        pointsPerPct = pts / pct;
                                                else
                                                        pointsPerPct = 0;
                                                end
                                        end

                                        local currentPct = UnitHealth("targettargettarget");
                                        if (pointsPerPct > 0) then
                                                Perl_Target_Target_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5));  -- Stored unit info from the DB
                                        end
                                else
                                        Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."%"); -- Unit not in MobHealth DB
                                end
                        -- End MobHealth Support
                        else
                                Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."%"); -- MobHealth isn't installed
                        end
                else    -- mobhealthsupport == 0
                        Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."%"); -- MobHealth support is disabled
                end
        else
                Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealth.."/"..targettargettargethealthmax);    -- Self/Party/Raid member
        end

        mouseovertargettargettargethealthflag = 1;
end

function Perl_Target_Target_Target_HealthHide()
        local targettargettargethealthpercent = floor(UnitHealth("targettargettarget")/UnitHealthMax("targettargettarget")*100+0.5);

        if (UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then                         -- This prevents negative health
                targettargettargethealthpercent = 0;
        end

        Perl_Target_Target_Target_HealthBarText:SetText(targettargettargethealthpercent.."%");
        mouseovertargettargettargethealthflag = 0;
end

function Perl_Target_Target_Target_ManaShow()
        local targettargettargetmana = UnitMana("targettargettarget");
        local targettargettargetmanamax = UnitManaMax("targettargettarget");

        if (UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then                         -- This prevents negative mana
                targettargettargetmana = 0;
        end

        if (UnitPowerType("targettargettarget") == 1) then
                Perl_Target_Target_Target_ManaBarText:SetText(targettargettargetmana);
        else
                Perl_Target_Target_Target_ManaBarText:SetText(targettargettargetmana.."/"..targettargettargetmanamax);
        end
        Perl_Target_Target_Target_ManaBarText:Show();
        mouseovertargettargettargetmanaflag = 1;
end

function Perl_Target_Target_Target_ManaHide()
        Perl_Target_Target_Target_ManaBarText:Hide();
        mouseovertargettargettargetmanaflag = 0;
end
-- Target of Target of Target End


--------------------------
-- GUI Config Functions --
--------------------------
function Perl_Target_Target_Set_ToT(newvalue)
        totsupport = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_ToToT(newvalue)
        tototsupport = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Mode(newvalue)
        alertmode = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Sound_Alert(newvalue)
        alertsound = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Alert_Size(newvalue)
        alertsize = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_MobHealth(newvalue)
        mobhealthsupport = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Lock(newvalue)
        locked = newvalue;
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Scale(number)
        local unsavedscale;
        if (number ~= nil) then
                scale = (number / 100);                                 -- convert the user input to a wow acceptable value
                --DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Target of Target Display is now scaled to |cffffffff"..floor(scale * 100 + 0.5).."%|cffffff00.");    -- only display if the user gave us a number
        end
        unsavedscale = 1 - UIParent:GetEffectiveScale() + scale;        -- run it through the scaling formula introduced in 1.9
        Perl_Target_Target_Frame:SetScale(unsavedscale);
        Perl_Target_Target_Target_Frame:SetScale(unsavedscale);
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Set_Transparency(number)
        if (number ~= nil) then
                transparency = (number / 100);                          -- convert the user input to a wow acceptable value
        end
        Perl_Target_Target_Frame:SetAlpha(transparency);
        Perl_Target_Target_Target_Frame:SetAlpha(transparency);
        Perl_Target_Target_UpdateVars();
end

function Perl_Target_Target_Allign(button)
        if (Perl_Target_Frame) then
                local vartable = Perl_Target_GetVars();                 -- Get the target frame settings

                Perl_Target_Target_Frame:SetUserPlaced(1);              -- This makes wow remember the changes if the frames have never been moved before
                Perl_Target_Target_Target_Frame:SetUserPlaced(1);

                if (button == 1) then
                        if (vartable["showportrait"] == 1) then
                                if (vartable["showcp"] == 1 or vartable["comboframedebuffs"] == 1) then
                                        Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_PortraitFrame, "TOPRIGHT", 17, 0);
                                        Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", -4, 0);
                                else
                                        Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_PortraitFrame, "TOPRIGHT", -4, 0);
                                        Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", -4, 0);
                                end
                        else
                                if (vartable["showcp"] == 1 or vartable["comboframedebuffs"] == 1) then
                                        Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_LevelFrame, "TOPRIGHT", 17, 0);
                                        Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", -4, 0);
                                else
                                        Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_LevelFrame, "TOPRIGHT", -4, 0);
                                        Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", -4, 0);
                                end
                        end
                elseif (button == 2) then
                        if (vartable["showclassframe"] == 1 or vartable["showrareeliteframe"] == 1) then
                                Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_NameFrame, "TOPLEFT", 0, 77);
                                Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", 1, 0);
                        else
                                Perl_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_NameFrame, "TOPLEFT", 0, 57);
                                Perl_Target_Target_Target_Frame:SetPoint("TOPLEFT", Perl_Target_Target_Frame, "TOPRIGHT", 1, 0);
                        end
                end
        else
                DEFAULT_CHAT_FRAME:AddMessage("This feature is disabled due to Perl_Target not being installed/enabled.");
        end
end


------------------------------
-- Saved Variable Functions --
------------------------------
function Perl_Target_Target_GetVars()
        locked = Perl_Target_Target_Config[UnitName("player")]["Locked"];
        mobhealthsupport = Perl_Target_Target_Config[UnitName("player")]["MobHealthSupport"];
        scale = Perl_Target_Target_Config[UnitName("player")]["Scale"];
        totsupport = Perl_Target_Target_Config[UnitName("player")]["ToTSupport"];
        tototsupport = Perl_Target_Target_Config[UnitName("player")]["ToToTSupport"];
        transparency = Perl_Target_Target_Config[UnitName("player")]["Transparency"];
        alertsound = Perl_Target_Target_Config[UnitName("player")]["AlertSound"];
        alertmode = Perl_Target_Target_Config[UnitName("player")]["AlertMode"];
        alertsize = Perl_Target_Target_Config[UnitName("player")]["AlertSize"];

        if (locked == nil) then
                locked = 0;
        end
        if (mobhealthsupport == nil) then
                mobhealthsupport = 1;
        end
        if (scale == nil) then
                scale = 1;
        end
        if (totsupport == nil) then
                totsupport = 1;
        end
        if (tototsupport == nil) then
                tototsupport = 1;
        end
        if (transparency == nil) then
                transparency = 1;
        end
        if (alertsound == nil) then
                alertsound = 0;
        end
        if (alertmode == nil) then
                alertmode = 0;
        end
        if (alertsize == nil) then
                alertsize = 0;
        end

        local vars = {
                ["locked"] = locked,
                ["mobhealthsupport"] = mobhealthsupport,
                ["scale"] = scale,
                ["totsupport"] = totsupport,
                ["tototsupport"] = tototsupport,
                ["transparency"] = transparency,
                ["alertsound"] = alertsound,
                ["alertmode"] = alertmode,
                ["alertsize"] = alertsize,
        }
        return vars;
end

function Perl_Target_Target_UpdateVars(vartable)
        if (vartable ~= nil) then
                -- Sanity checks in case you use a load from an old version
                if (vartable["Global Settings"] ~= nil) then
                        if (vartable["Global Settings"]["Locked"] ~= nil) then
                                locked = vartable["Global Settings"]["Locked"];
                        else
                                locked = nil;
                        end
                        if (vartable["Global Settings"]["MobHealthSupport"] ~= nil) then
                                mobhealthsupport = vartable["Global Settings"]["MobHealthSupport"];
                        else
                                mobhealthsupport = nil;
                        end
                        if (vartable["Global Settings"]["Scale"] ~= nil) then
                                scale = vartable["Global Settings"]["Scale"];
                        else
                                scale = nil;
                        end
                        if (vartable["Global Settings"]["ToTSupport"] ~= nil) then
                                totsupport = vartable["Global Settings"]["ToTSupport"];
                        else
                                totsupport = nil;
                        end
                        if (vartable["Global Settings"]["ToToTSupport"] ~= nil) then
                                tototsupport = vartable["Global Settings"]["ToToTSupport"];
                        else
                                tototsupport = nil;
                        end
                        if (vartable["Global Settings"]["Transparency"] ~= nil) then
                                transparency = vartable["Global Settings"]["Transparency"];
                        else
                                transparency = nil;
                        end
                        if (vartable["Global Settings"]["AlertSound"] ~= nil) then
                                alertsound = vartable["Global Settings"]["AlertSound"];
                        else
                                alertsound = nil;
                        end
                        if (vartable["Global Settings"]["AlertMode"] ~= nil) then
                                alertmode = vartable["Global Settings"]["AlertMode"];
                        else
                                alertmode = nil;
                        end
                        if (vartable["Global Settings"]["AlertSize"] ~= nil) then
                                alertsize = vartable["Global Settings"]["AlertSize"];
                        else
                                alertsize = nil;
                        end
                end

                -- Set the new values if any new values were found, same defaults as above
                if (locked == nil) then
                        locked = 0;
                end
                if (mobhealthsupport == nil) then
                        mobhealthsupport = 1;
                end
                if (scale == nil) then
                        scale = 1;
                end
                if (totsupport == nil) then
                        totsupport = 1;
                end
                if (tototsupport == nil) then
                        tototsupport = 1;
                end
                if (transparency == nil) then
                        transparency = 1;
                end
                if (alertsound == nil) then
                        alertsound = 0;
                end
                if (alertmode == nil) then
                        alertmode = 0;
                end
                if (alertsize == nil) then
                        alertsize = 0;
                end

                -- Call any code we need to activate them
                Perl_Target_Target_Set_Scale();
                Perl_Target_Target_Set_Transparency();
        end

        Perl_Target_Target_Config[UnitName("player")] = {
                ["Locked"] = locked,
                ["MobHealthSupport"] = mobhealthsupport,
                ["Scale"] = scale,
                ["ToTSupport"] = totsupport,
                ["ToToTSupport"] = tototsupport,
                ["Transparency"] = transparency,
                ["AlertSound"] = alertsound,
                ["AlertMode"] = alertmode,
                ["AlertSize"] = alertsize,
        };
end


--------------------
-- Click Handlers --
--------------------
-- Target of Target Start
function Perl_TargetTargetDropDown_OnLoad()
        UIDropDownMenu_Initialize(this, Perl_TargetTargetDropDown_Initialize, "MENU");
end

function Perl_TargetTargetDropDown_Initialize()
        local menu = nil;
        if (UnitIsEnemy("targettarget", "player")) then
                return;
        end
        if (UnitIsUnit("targettarget", "player")) then
                menu = "SELF";
        elseif (UnitIsUnit("targettarget", "pet")) then
                menu = "PET";
        elseif (UnitIsPlayer("targettarget")) then
                if (UnitInParty("targettarget")) then
                        menu = "PARTY";
                else
                        menu = "PLAYER";
                end
        end
        if (menu) then
                UnitPopup_ShowMenu(Perl_Target_Target_DropDown, menu, "targettarget");
        end
end

function Perl_Target_Target_MouseClick(button)
        if (SpellIsTargeting() and button == "RightButton") then
                SpellStopTargeting();
                return;
        end

        if (button == "LeftButton") then
                if (SpellIsTargeting()) then
                        SpellTargetUnit("targettarget");
                elseif (CursorHasItem()) then
                        DropItemOnUnit("targettarget");
                else
                        TargetUnit("targettarget");
                end
        end
end

function Perl_Target_Target_MouseDown(button)
        if (button == "LeftButton" and locked == 0) then
                Perl_Target_Target_Frame:StartMoving();
        end
end

function Perl_Target_Target_MouseUp(button)
        if (button == "RightButton") then
                if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then                -- if alt, ctrl, or shift ARE NOT held, show the menu
                        ToggleDropDownMenu(1, nil, Perl_Target_Target_DropDown, "Perl_Target_Target_NameFrame", 40, 0);
                end
        end

        Perl_Target_Target_Frame:StopMovingOrSizing();
end
-- Target of Target End

-- Target of Target of Target Start
function Perl_TargetTargetTargetDropDown_OnLoad()
        UIDropDownMenu_Initialize(this, Perl_TargetTargetTargetDropDown_Initialize, "MENU");
end

function Perl_TargetTargetTargetDropDown_Initialize()
        local menu = nil;
        if (UnitIsEnemy("targettargettarget", "player")) then
                return;
        end
        if (UnitIsUnit("targettargettarget", "player")) then
                menu = "SELF";
        elseif (UnitIsUnit("targettargettarget", "pet")) then
                menu = "PET";
        elseif (UnitIsPlayer("targettargettarget")) then
                if (UnitInParty("targettargettarget")) then
                        menu = "PARTY";
                else
                        menu = "PLAYER";
                end
        end
        if (menu) then
                UnitPopup_ShowMenu(Perl_Target_Target_Target_DropDown, menu, "targettargettarget");
        end
end

function Perl_Target_Target_Target_MouseClick(button)
        if (SpellIsTargeting() and button == "RightButton") then
                SpellStopTargeting();
                return;
        end

        if (button == "LeftButton") then
                if (SpellIsTargeting()) then
                        SpellTargetUnit("targettargettarget");
                elseif (CursorHasItem()) then
                        DropItemOnUnit("targettargettarget");
                else
                        TargetUnit("targettargettarget");
                end
        end
end

function Perl_Target_Target_Target_MouseDown(button)
        if (button == "LeftButton" and locked == 0) then
                Perl_Target_Target_Target_Frame:StartMoving();
        end
end

function Perl_Target_Target_Target_MouseUp(button)
        if (button == "RightButton") then
                if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then                -- if alt, ctrl, or shift ARE NOT held, show the menu
                        ToggleDropDownMenu(1, nil, Perl_Target_Target_Target_DropDown, "Perl_Target_Target_Target_NameFrame", 40, 0);
                end
        end

        Perl_Target_Target_Target_Frame:StopMovingOrSizing();
end
-- Target of Target of Target End


----------------------------
-- Big Warning Text Frame --
----------------------------
-- Fade in/out frame stuff
-- Ripped/modified from FadingFrame from Blizzard
-- Ripped from AggroAlert 1.5

function Perl_Target_Target_BigWarning_OnLoad()
        Perl_Target_Target_BigWarning:Hide();
end

function Perl_Target_Target_BigWarning_Show(message)
        startTime = GetTime();
        if (message) then
                Perl_Target_Target_BigWarning_Text:SetText(message);
        end
        Perl_Target_Target_BigWarning:Show();
end


function Perl_Target_Target_BigWarning_OnUpdate()
        local elapsed = GetTime() - startTime;
        local fadeInTime = 0.2;
        if (elapsed < fadeInTime) then
                local alpha = (elapsed / fadeInTime);
                Perl_Target_Target_BigWarning:SetAlpha(alpha);
                return;
        end
        local holdTime = 2.5;
        if (elapsed < (fadeInTime + holdTime)) then
                Perl_Target_Target_BigWarning:SetAlpha(1.0);
                return;
        end
        local fadeOutTime = 2;
        if (elapsed < (fadeInTime + holdTime + fadeOutTime)) then
                local alpha = 1.0 - ((elapsed - holdTime - fadeInTime) / fadeOutTime);
                Perl_Target_Target_BigWarning:SetAlpha(alpha);
                return;
        end
        Perl_Target_Target_BigWarning:Hide();
end


-------------
-- Tooltip --
-------------
function Perl_Target_Target_Tip()
        UnitFrame_Initialize("targettarget")
end

function Perl_Target_Target_Target_Tip()
        UnitFrame_Initialize("targettargettarget")
end

function UnitFrame_Initialize(unit)     -- Hopefully this doesn't break any mods
        this.unit = unit;
end


----------------------
-- myAddOns Support --
----------------------
function Perl_Target_Target_myAddOns_Support()
        -- Register the addon in myAddOns
        if (myAddOnsFrame_Register) then
                local Perl_Target_Target_myAddOns_Details = {
                        name = "Perl_Target_Target",
                        version = "Version 0.58",
                        releaseDate = "April 15, 2006",
                        author = "Global",
                        email = "global@g-ball.com",
                        website = "http://www.curse-gaming.com/mod.php?addid=2257",
                        category = MYADDONS_CATEGORY_OTHERS
                };
                Perl_Target_Target_myAddOns_Help = {};
                Perl_Target_Target_myAddOns_Help[1] = "/perl";
                myAddOnsFrame_Register(Perl_Target_Target_myAddOns_Details, Perl_Target_Target_myAddOns_Help);
        end
end

Generated by GNU Enscript 1.6.5.90.