vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

if (not Nurfed_Units) then

        local framelib = Nurfed_Frames:New();

        Nurfed_Units = {};

        Nurfed_Units.class = {
                DRUID = { right = 0.75, left = 1, top = 0, bottom = 0.25, color = "|cffff8a00" },
                HUNTER = { right = 0, left = 0.25, top = 0.25, bottom = 0.5, color = "|cff00ff00" },
                MAGE = { right = 0.25, left = 0.5, top = 0, bottom = 0.25, color = "|cff00ffff" },
                PALADIN = { right = 0, left = 0.25, top = 0.5, bottom = 0.75, color = "|cffff71a8" },
                PRIEST = { right = 0.5, left = 0.75, top = 0.25, bottom = 0.5, color = "|cffffffff" },
                ROGUE = { right = 0.5, left = 0.75, top = 0, bottom = 0.25, color = "|cffffff00" },
                SHAMAN = { right = 0.25, left = 0.5, top = 0.25, bottom = 0.5, color = "|cffff71a8" },
                WARLOCK = { right = 0.75, left = 1, top = 0.25, bottom = 0.5, color = "|cff8d54fb" },
                WARRIOR = { right = 0, left = 0.25, top = 0, bottom = 0.25, color = "|cffb39442" },
        };

        Nurfed_Units.classification = {
                ["worldboss"] = BOSS,
                ["rareelite"] = ITEM_QUALITY3_DESC.."-"..ELITE,
                ["rare"] = ITEM_QUALITY3_DESC,
                ["elite"] = ELITE,
        };

        Nurfed_Units.unitlist = {};
        
        function Nurfed_Units:New ()
                local object = {};
                setmetatable(object, self);
                self.__index = self;
                return object;
        end

        function Nurfed_Units:UpdateUnits()
                local i;
                self.unitlist = nil;
                self.unitlist = {};
                if (GetNumPartyMembers() > 0) then
                        for i = 1, GetNumPartyMembers() do
                                self.unitlist[UnitName("party"..i)] = { t = "Party", c = UnitClass("party"..i) };
                        end
                end
                if (GetNumRaidMembers() > 0) then
                        for i = 1, GetNumRaidMembers() do
                                local name, rank, subgroup, _, class, _, _, _, _ = GetRaidRosterInfo(i);
                                if (name and rank and subgroup and class) then
                                        if (self.unitlist[name]) then
                                                self.unitlist[name].g = subgroup;
                                                self.unitlist[name].r = rank;
                                        else
                                                self.unitlist[name] = { t = "Raid", c = class, g = subgroup, r = rank };
                                        end
                                end
                        end
                end
        end

        function Nurfed_Units:GetUnit(name)
                if (self.unitlist[name]) then
                        return self.unitlist[name];
                end
                return nil;
        end

        function Nurfed_Units:GetHealth(unit)
                local currhp, maxhp = UnitHealth(unit), UnitHealthMax(unit);
                if (maxhp == 100 and (IsAddOnLoaded("MobHealth") or IsAddOnLoaded                       ("MobInfo2")) and unit == "target") then
                        local check = MobHealth_GetTargetMaxHP();
                        if (check and check > 0) then
                                maxhp = check;
                                currhp = MobHealth_GetTargetCurHP();
                        else
                                currhp = UnitHealth(unit);
                        end
                else
                        currhp = UnitHealth(unit);
                end
                if (not UnitIsConnected(unit)) then
                        currhp = 0;
                end
                local perc = currhp/maxhp;
                local color = {};
                if(perc > 0.5) then
                        color.r = (1.0 - perc) * 2;
                        color.g = 1.0;
                else
                        color.r = 1.0;
                        color.g = perc * 2;
                end
                color.b = 0.0;
                perc = format("%.0f", floor(perc * 100));
                return currhp, maxhp, perc, color;
        end

        function Nurfed_Units:GetMana(unit)
                local currmp, maxmp = UnitMana(unit), UnitManaMax(unit);
                if (not UnitIsConnected(unit)) then
                        currmp = 0;
                end
                local perc = format("%.0f", (currmp / maxmp) * 100);
                return currmp, maxmp, perc;
        end

        function Nurfed_Units:GetXP(unit)
                if (not UnitExists(unit)) then
                        return 0, 0, 0;
                end
                local name, reaction, min, max, value = GetWatchedFactionInfo();
                local currxp, maxxp, perc;
                if (name) then
                        currxp = value - min;
                        maxxp = max - min;
                else
                        currxp = UnitXP(unit);
                        maxxp = UnitXPMax(unit);
                end
                local perc = format("%.0f", (currxp / maxxp) * 100);
                return currxp, maxxp, perc;
        end

        function Nurfed_Units:GetReaction(unit)
                local info = {};
                if (UnitPlayerControlled(unit)) then
                        if (UnitCanAttack(unit, "player")) then
                                -- Hostile players are red
                                if (not UnitCanAttack("player", unit)) then
                                        info.r = 0.0;
                                        info.g = 0.0;
                                        info.b = 1.0;
                                else
                                        info.r = UnitReactionColor[2].r;
                                        info.g = UnitReactionColor[2].g;
                                        info.b = UnitReactionColor[2].b;
                                end
                        elseif (UnitCanAttack("player", unit)) then
                                -- Players we can attack but which are not hostile are yellow
                                info.r = UnitReactionColor[4].r;
                                info.g = UnitReactionColor[4].g;
                                info.b = UnitReactionColor[4].b;
                        elseif (UnitIsPVP(unit)) then
                                -- Players we can assist but are PvP flagged are green
                                info.r = UnitReactionColor[6].r;
                                info.g = UnitReactionColor[6].g;
                                info.b = UnitReactionColor[6].b;
                        else
                                -- All other players are blue (the usual state on the "blue" server)
                                info.r = 0.0;
                                info.g = 1.0;
                                info.b = 1.0;
                        end
                elseif (UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit)) then
                        info.r = 0.5;
                        info.g = 0.5;
                        info.b = 0.5;
                else
                        local reaction = UnitReaction(unit, "player");
                        if (reaction) then
                                info.r = UnitReactionColor[reaction].r;
                                info.g = UnitReactionColor[reaction].g;
                                info.b = UnitReactionColor[reaction].b;
                        else
                                info.r = 0.0;
                                info.g = 1.0;
                                info.b = 1.0;
                        end
                end
                return info;
        end

        function Nurfed_Units:StatusBarUpdate(arg1)
                if (this.fade < 1) then
                        this.fade = this.fade + arg1;
                        if this.fade > 1 then
                                this.fade = 1;
                        end
                        local delta = this.endvalue - this.startvalue;
                        local diff = delta * (this.fade / 1);
                        this.startvalue = this.startvalue + diff;
                        this:SetValue(this.startvalue);
                end
        end

        function Nurfed_Units:Fade(arg1)
                this.update = this.update + arg1;
                if (this.update > 0.04) then
                        this.update = 0;
                        local now = GetTime();
                        local frame, texture, p;
                        if (now - this.flashtime > 0.3) then
                                this.flashdct = this.flashdct * (-1);
                                this.flashtime = now;
                        end

                        if (this.flashdct == 1) then
                                p = (1 - (now - this.flashtime + 0.001) / 0.3 * 0.7);
                        else
                                p = ( (now - this.flashtime + 0.001) / 0.3 * 0.7 + 0.3);
                        end
                        this:SetAlpha(p);
                end
        end

        local tbl = {
                type = "Frame",
                OnEvent = function() Nurfed_Units:UpdateUnits() end,
                events = {
                        "PLAYER_ENTERING_WORLD",
                        "PARTY_MEMBERS_CHANGED",
                        "RAID_ROSTER_UPDATE",
                },
        };

        framelib:ObjectInit("Nurfed_UnitsFrame", tbl, UIParent);
        tbl = nil;
end

function Nurfed_RaidFrameDropDown_Initialize()
        UnitPopup_ShowMenu(getglobal(UIDROPDOWNMENU_OPEN_MENU), "RAID", this.unit, this.name, this.id);
end

function Nurfed_Unit_OnClick(arg1)
        local name, dropdown;
        if (SpellIsTargeting() and arg1 == "RightButton") then
                SpellStopTargeting();
                return;
        end
        if (arg1 == "LeftButton") then
                if (SpellIsTargeting() and  SpellCanTargetUnit(this.unit)) then
                        SpellTargetUnit(this.unit);
                elseif (CursorHasItem()) then
                        if (this.unit == "player") then
                                AutoEquipCursorItem();
                        else
                                DropItemOnUnit(this.unit);
                        end
                else
                        TargetUnit(this.unit);
                end
        else
                if (string.find(this.unit, "party[1-4]")) then
                        name = "PartyMemberFrame"..this:GetID();
                        dropdown = getglobal(name.."DropDown");
                elseif (string.find(this.unit, "^raid")) then
                        FriendsDropDown.initialize = Nurfed_RaidFrameDropDown_Initialize;
                        FriendsDropDown.displayMode = "MENU";
                        dropdown = FriendsDropDown;
                else
                        name = string.gsub(this.unit, "^%l", string.upper);
                        dropdown = getglobal(name.."FrameDropDown");
                end
                if (dropdown) then
                        ToggleDropDownMenu(1, nil, dropdown, "cursor");
                end
                return;
        end
end

function Nurfed_SetAuraTooltip()
        if (not this:IsVisible()) then return; end
        GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
        local unit = this:GetParent().unit;
        if (this.isdebuff) then
                GameTooltip:SetUnitDebuff(unit, this.id);
        else
                GameTooltip:SetUnitBuff(unit, this.id);
        end
end

Generated by GNU Enscript 1.6.5.90.