vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local IMBA_TANKFINDER_SLASH_COMMAND = "/targettf"

local TankList={};
function IMBA_TankFinder_RegenActivator()
        IMBA_TankFinder:Show();
end

function IMBA_TankFinder_Sort(v1,v2)
        if v1[2]==v2[2] then
                return v1[1]<v2[1];
        else
                return v1[2]<v2[2];
        end
end

function IMBA_TankFinder_OnUpdate()
        if IMBA_TankFinder_UpdateTime>GetTime() then
                return;
        end
        
        
        if IMBA_TankFinder_DistCheck<GetTime() then     
                TankList={};
                for i=1,GetNumRaidMembers() do
                        if UnitExists("raid"..i) and (UnitHealth("raid"..i)>0) then
                                
                                local playerClass, englishClass = UnitClass("raid"..i);
                                if (englishClass=="WARRIOR") and CheckInteractDistance("raid"..i,4) then
                                        tinsert(TankList,{i,UnitHealth("raid"..i)-UnitHealthMax("raid"..i)});
                                end
                        end
                end
                IMBA_TankFinder_DistCheck=GetTime()+1;
        else
                for k, v in TankList do
                        TankList[k][2]=UnitHealth("raid"..TankList[k][1])/UnitHealthMax("raid"..TankList[k][1]);
                end
        end

        table.sort(TankList, IMBA_TankFinder_Sort);

        local numEntries = getn(TankList);

        for i=1,3 do
                if i<=numEntries then
                        getglobal("IMBA_TankFinder_Tank"..i).unit="raid"..TankList[i][1];
                else
                        getglobal("IMBA_TankFinder_Tank"..i).unit=nil;
                end
        end

        IMBA_TankFinder_UpdateTime=GetTime()+0.1;
end

function IMBA_TankFinder_Target(msg)
        local number=tonumber(msg)

        if number then
                if number>=1 and number<=3 then
                        if TargetUnit(getglobal("IMBA_TankFinder_Tank"..number).unit) then
                                TargetUnit(getglobal("IMBA_TankFinder_Tank"..number).unit)
                        end
                end
        end
end


function IMBA_TankFinder_OnLoad()
        this:SetBackdropBorderColor(1, 1, 1, 1);
        this:SetBackdropColor(0.0,0.0,0.0,0.6);

        
        IMBA_TankFinder_Title:SetText("Tank Finder");
        IMBA_TankFinder_Tank1.unit=nil;
        IMBA_TankFinder_Tank2.unit=nil;
        IMBA_TankFinder_Tank3.unit=nil;

        IMBA_AddAddon("Tank Finder", "Finds the 3 warriors within 30 yds with the lowest health", IMBA_LOCATIONS_OTHER, nil, nil,nil,"IMBA_TankFinder");
        IMBA_TankFinder_UpdateTime=0;
        IMBA_TankFinder_DistCheck=0;

        --Register the slash commands
        SLASH_IMBA_TANKFINDER1= IMBA_TANKFINDER_SLASH_COMMAND;
        SlashCmdList["IMBA_TANKFINDER"] = function(msg)
                IMBA_TankFinder_Target(msg);
        end
end