vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

NURFED_GENERAL_VERS = "07.01.2006";

NURFED_GENERAL_DEFAULT = {
        repair = 1;
        repairinv = 1;
        repairlimit = 20;
        ping = 1;
        traineravailable = 1;
        timestamps = 1;
        timeoffset = 0;
        ampm = 1;
        raidgroup = 1;
        raidclass = 1;
        hidechat = 1;
        chatfade = 1;
        chatfadetime = 120;
        autoinvite = 1;
        chatprefix = 1;
        keyword = "invite";
};

ChatTypeInfo["CHANNEL"].sticky = 1;
ChatTypeInfo["OFFICER"].sticky = 1;
UnitPopupButtons["INSPECT"] = { text = TEXT(INSPECT), dist = 0 };
ManaBarColor[0] = { r = 0.00, g = 1.00, b = 1.00, prefix = TEXT(MANA) };

local utility = Nurfed_Utility:New();
local unitlib = Nurfed_Units:New();
local framelib = Nurfed_Frames:New();
local lib = Nurfed_General:New();
local options = Nurfed_Options:New();
local currtime = 0;
local pingflood = {};
local raidtarget = {
        [RAID_TARGET_1] = 1,
        [RAID_TARGET_2] = 2,
        [RAID_TARGET_3] = 3,
        [RAID_TARGET_4] = 4,
        [RAID_TARGET_5] = 5,
        [RAID_TARGET_6] = 6,
        [RAID_TARGET_7] = 7,
        [RAID_TARGET_8] = 8,
};

--------------------------------------------------------------------------------------------------
--                              Slash Commands
--------------------------------------------------------------------------------------------------

SLASH_NURFEDEQUIP1 = "/nequip";
SlashCmdList["NURFEDEQUIP"] = function(msg)
        lib:itemswitch(msg);
end

SLASH_NURFEDWHISPER1 = "/wtar";
SlashCmdList["NURFEDWHISPER"] = function(msg)
        if (UnitExists("target")) then
                SendChatMessage(msg, "WHISPER", this.language, UnitName("target"));
        end
end

SLASH_NURFEDRAIDTARGET1 = "/rtar";
SlashCmdList["NURFEDRAIDTARGET"] = function(msg)
        Nurfed_RaidTarget(msg);
end

--------------------------------------------------------------------------------------------------
--      Put a -- in front of DAMAGE_TEXT_FONT to change back the damage font (cannot be in game).
--------------------------------------------------------------------------------------------------

DAMAGE_TEXT_FONT = "Fonts\\skurri.ttf";

--------------------------------------------------------------------------------------------------
--                              Chat Frame Functions
--------------------------------------------------------------------------------------------------


local function Nurfed_AddMessage(this, msg, r, g, b, id)
        if (msg) then
                local prefix = options:GetOption("general", "chatprefix");
                local text = {};
                if(options:GetOption("general", "timestamps") == 1) then
                        local hour, minute = GetGameTime();
                        local second = GetTime() - currtime;
                        if (second > 59) then
                                second = 0;
                        end
                        hour = hour + options:GetOption("general", "timeoffset");
                        if( hour > 23 ) then
                                hour = hour - 24;
                        elseif( hour < 0 ) then
                                hour = 24 + hour;
                        end
                        if (options:GetOption("general", "ampm") == 1) then
                                if (hour >= 12) then
                                        hour = hour - 12;
                                end
                                if (hour == 0) then
                                        hour = 12;
                                end
                        end
                        local timestamp = format("[%d:%02d:%02d]", hour, minute, second);
                        table.insert(text, timestamp);
                end

                if (string.find(msg, "["..RAID.."]", 1, true)) then
                        local info = unitlib:GetUnit(arg2);
                        if (info) then
                                msg = string.gsub(msg, "%["..RAID.."%] ", "");
                                if (prefix == 1) then
                                        table.insert(text, "["..RAID.."]");
                                end
                                if (options:GetOption("general", "raidgroup") == 1) then
                                        table.insert(text, "["..info.g.."]");
                                end
                                if (options:GetOption("general", "raidclass") == 1) then
                                        table.insert(text, "["..info.c.."]");
                                end
                        end
                end
                if (prefix ~= 1) then
                        msg = string.gsub(msg, "%["..CHAT_MSG_OFFICER.."%] ", "");
                        msg = string.gsub(msg, "%["..CHAT_MSG_GUILD.."%] ", "");
                        msg = string.gsub(msg, "%["..CHAT_MSG_PARTY.."%] ", "");
                        msg = string.gsub(msg, "%["..CHAT_MSG_RAID.."%] ", "");
                        msg = string.gsub(msg, "%["..CHAT_MSG_RAID_LEADER.."%] ", "");
                        msg = string.gsub(msg, "%["..CHAT_MSG_RAID_WARNING.."%] ", "");
                end
                table.insert(text, msg);
                this:Original_AddMessage(table.concat(text, " "), r, g, b, id);
        end
end

local Original_ChatFrame_OnEvent = ChatFrame_OnEvent;

local function Nurfed_ChatFrame_OnEvent(event)
        if (event == "CHAT_MSG_SYSTEM" and arg1 ~= nil) then
                local _, _, name, id, days, hours, minutes, seconds = string.find(arg1, "(.+) %(ID=(%x+)%): (%d+)d (%d+)h (%d+)m (%d+)s")
                if (name ~= nil) then
                        local timeTable = date("*t");
                        timeTable["sec"] = timeTable["sec"] + (days * 86400) + (hours * 3600) + (minutes * 60) + seconds;
                        arg1 = name.." (ID="..id.."): "..date("%A %B %d at %I:%M %p", time(timeTable)).."";
                end
                if (options:GetOption("general", "autoinvite") == 1) then
                        if (string.find(arg1, ERR_GROUP_FULL, 1, true)) then
                                local lastTell = ChatEdit_GetLastTellTarget(DEFAULT_CHAT_FRAME.editBox);
                                SendChatMessage("Party Full", "WHISPER", this.language, lastTell);
                        else
                                local ingroup = utility:FormatGS(ERR_ALREADY_IN_GROUP_S, true);
                                local result = { string.find(arg1, ingroup) };
                                if (result[1]) then
                                        SendChatMessage("Drop group and resend '"..options:GetOption("general", "keyword").."'", "WHISPER", this.language, result[3]);
                                end
                        end
                end
        elseif (event == "CHAT_MSG_WHISPER" and arg1 ~= nil) then
                if (options:GetOption("general", "autoinvite") == 1) then
                        if (IsPartyLeader() or IsRaidLeader() or IsRaidOfficer()) then
                                local text = string.lower(arg1);
                                local keyword = string.lower(options:GetOption("general", "keyword"));
                                if (string.find(text, "^"..keyword)) then
                                        InviteByName(arg2);
                                end
                        end
                end
        elseif (event == "CHAT_MSG_WHISPER_INFORM") then
                if (string.find(arg1, "^%!ndkp")) then
                        return;
                end
        end
        Original_ChatFrame_OnEvent(event);
        if(not this.Original_AddMessage) then
                this.Original_AddMessage = this.AddMessage;
                this.AddMessage = Nurfed_AddMessage;
        end
end

utility:Hook("replace", "ChatFrame_OnEvent", Nurfed_ChatFrame_OnEvent);

--------------------------------------------------------------------------------------------------
--                              Buff Duration Add Seconds
--------------------------------------------------------------------------------------------------

local function Nurfed_SecondsToTimeAbbrev(seconds)
        local time = "";
        local tempTime;
        local tempTime2;
        if ( seconds > 86400  ) then
                tempTime = ceil(seconds / 86400);
                time = tempTime.." "..DAY_ONELETTER_ABBR;
                return time;
        end
        if ( seconds > 3600  ) then
                tempTime = ceil(seconds / 3600);
                time = tempTime.." "..HOUR_ONELETTER_ABBR;
                return time;
        end
        if ( seconds > 60  ) then
                tempTime = floor(seconds / 60);
                tempTime2 = floor(seconds-(tempTime)*60);
                time = format("%02d:%02d", tempTime, tempTime2);
                return time;
        end
        time = format("00:%02d", seconds);
        return time;
end

SecondsToTimeAbbrev = Nurfed_SecondsToTimeAbbrev;

--------------------------------------------------------------------------------------------------
--                              Create Frame
--------------------------------------------------------------------------------------------------

-- adds guild info to a line in the inspect frame
local function Nurfed_InspectOnShow()
        InspectPaperDollFrame_OnShow();
        local guildname, guildtitle = GetGuildInfo("target");
        if(guildname and guildtitle) then
                InspectTitleText:SetText(format(TEXT(GUILD_TITLE_TEMPLATE), guildtitle, guildname));
                InspectTitleText:Show();
        else
                InspectTitleText:Hide();
        end
end

local orig_chatframeOnShow = ChatFrame1:GetScript("OnShow");

local function togglechat()
        local hidden = options:GetOption("general", "hidechat");
        local fade = options:GetOption("general", "chatfade");
        local fadetime = options:GetOption("general", "chatfadetime");
        for i = 1, 7 do
                local chatframe = getglobal("ChatFrame"..i);
                local up = getglobal("ChatFrame"..i.."UpButton");
                local down = getglobal("ChatFrame"..i.."DownButton");
                local bottom = getglobal("ChatFrame"..i.."BottomButton");
                if (hidden == 1) then
                        chatframe:SetScript("OnShow", function() SetChatWindowShown(this:GetID(), 1) end);
                                up:Hide();
                                down:Hide();
                                bottom:Hide();
                        if (i == 1) then
                                ChatFrameMenuButton:Hide();
                        end
                else
                        chatframe:SetScript("OnShow", orig_chatframeOnShow);
                                up:Show();
                                down:Show();
                                bottom:Show();
                        if (i == 1) then
                                ChatFrameMenuButton:Show();
                        end
                end
                chatframe:SetFading(fade);
                chatframe:SetTimeVisible(fadetime);
        end
end

local function Nurfed_General_OnEvent()
        if (event == "PLAYER_ENTERING_WORLD") then
                this:UnregisterEvent(event);
                togglechat();
        elseif (event == "TRAINER_SHOW") then
                if(options:GetOption("general", "traineravailable") == 1) then
                        SetTrainerServiceTypeFilter("unavailable",0);
                end
        elseif (event == "MERCHANT_SHOW") then
                if (options:GetOption("general", "repair") == 1) then
                        lib:repair(options:GetOption("general", "repairlimit"), options:GetOption("general", "repairinv"));
                end
        elseif (event == "MINIMAP_PING") then
                if(options:GetOption("general", "ping") == 1) then
                        local name = UnitName(arg1);
                        if (name ~= UnitName("player") and not pingflood[name]) then
                                utility:Print(name.." Ping.", 1, 1, 1, 0);
                                pingflood[name] = GetTime();
                        end
                end
        elseif (event == "ADDON_LOADED" and arg1 == "Blizzard_InspectUI") then
                InspectPaperDollFrame:SetScript("OnShow", Nurfed_InspectOnShow);
        end
end

function Nurfed_General_OnUpdate(arg1)
        this.update = this.update + arg1;
        if (this.update > 0.5) then
                local hour, minute = GetGameTime();
                if (minute ~= this.lastmin) then
                        currtime = GetTime();
                        this.lastmin = minute;
                end

                local svol = GetCVar("MasterVolume")+0;
                if (svol > 0.5) then
                        SetCVar("MasterVolume", svol-0.05);
                else
                        SetCVar("MasterVolume", svol+0.05);
                end
                SetCVar("MasterVolume", svol);

                for n, t in pingflood do
                        if (GetTime() - t > 1) then
                                pingflood[n] = nil;
                        end
                end
        end
end

local tbl = {
        type = "Frame",
        events = {
                "PLAYER_ENTERING_WORLD",
                "MINIMAP_PING",
                "ADDON_LOADED",
                "TRAINER_SHOW",
                "MERCHANT_SHOW"
        },
        OnEvent = function() Nurfed_General_OnEvent() end,
        OnUpdate = function() Nurfed_General_OnUpdate(arg1) end,
        vars = { update = 0, lastmin = 0 },
};

local config = {
        type = "Frame",
        Anchor = { "TOP", "$parenttitlebg", "BOTTOM", 0, -1 },
        children = {
                check1 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 0, 0 },
                                vars = {
                                        text = NRF_AUTOREPAIR,
                                        option = "repair",
                                },
                        },
                },
                check2 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck1", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_INVREPAIR,
                                        option = "repairinv",
                                },
                        },
                },
                check3 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck2", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_PINGWARNING,
                                        option = "ping",
                                },
                        },
                },
                check4 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck3", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_UNTRAINABLE,
                                        option = "traineravailable",
                                },
                        },
                },
                check5 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck4", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_CHATTIMESTAMPS,
                                        option = "timestamps",
                                },
                        },
                },
                check6 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck5", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_TWELVEHOUR,
                                        option = "ampm",
                                },
                        },
                },
                check7 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck6", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_RAIDGROUP,
                                        option = "raidgroup",
                                },
                        },
                },
                check8 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck7", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_RAIDCLASS,
                                        option = "raidclass",
                                },
                        },
                },
                check9 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck8", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_CHATBUTTONS,
                                        option = "hidechat",
                                        func = function() togglechat() end,
                                },
                        },
                },
                check10 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPLEFT", "$parentcheck9", "BOTTOMLEFT", 0, -3 },
                                vars = {
                                        text = NRF_CHATPREFIX,
                                        option = "chatprefix",
                                },
                        },
                },

                slider1 = {
                        template = "Nurfed_OptionSlider",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parent", "TOPRIGHT", -2, -12 },
                                vars = {
                                        text = NRF_REPAIRLIMIT,
                                        option = "repairlimit",
                                        max = 100,
                                        min = 0,
                                        step = 1,
                                        format = "%.0f",
                                },
                        },
                },
                slider2 = {
                        template = "Nurfed_OptionSlider",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parentslider1", "BOTTOMRIGHT", 0, -15 },
                                vars = {
                                        text = NRF_TIMEOFFSET,
                                        option = "timeoffset",
                                        max = 12,
                                        min = -12,
                                        step = 0.5,
                                        format = "%.1f",
                                },
                        },
                },
                check11 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parentslider2", "BOTTOMRIGHT", 0, -14 },
                                vars = {
                                        right = true,
                                        text = NRF_AUTOINVITE,
                                        option = "autoinvite",
                                },
                        },
                },
                input1 = {
                        template = "Nurfed_OptionInput",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parentcheck11", "BOTTOMRIGHT", 0, 3 },
                                vars = {
                                        text = NRF_KEYWORD,
                                        option = "keyword",
                                },
                        },
                },
                check12 = {
                        template = "Nurfed_OptionCheck",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parentinput1", "BOTTOMRIGHT", 0, -10 },
                                vars = {
                                        right = true,
                                        text = NRF_CHATFADE,
                                        option = "chatfade",
                                        func = function() togglechat() end,
                                },
                        },
                },
                slider3 = {
                        template = "Nurfed_OptionSlider",
                        properties = {
                                Anchor = { "TOPRIGHT", "$parentcheck12", "BOTTOMRIGHT", 0, -15 },
                                vars = {
                                        text = NRF_CHATFADETIME,
                                        option = "chatfadetime",
                                        max = 250,
                                        min = 0,
                                        step = 1,
                                        format = "%.0f",
                                        func = function() togglechat() end,
                                },
                        },
                },
        },
        vars = { width = 350, height = 240 },
};

local function chatOnMouseWheel()
        if (IsShiftKeyDown()) then
                if (arg1 > 0) then
                        this:PageUp()
                elseif (arg1 < 0) then
                        this:PageDown();
                end
        elseif (IsControlKeyDown()) then
                if (arg1 > 0) then
                        this:ScrollToTop()
                elseif (arg1 < 0) then
                        this:ScrollToBottom();
                end
        else
                if (arg1 > 0) then
                        this:ScrollUp();
                elseif (arg1 < 0) then
                        this:ScrollDown();
                end
        end
end

function Nurfed_General_Init()
        framelib:ObjectInit("Nurfed_GeneralFrame", tbl, UIParent);
        framelib:ObjectInit("Nurfed_General_Menu", config, Nurfed_OptionsFrame);
        tbl = nil;
        config = nil;
        lib:updatemount();
        lib:updateaqmount();

        for i = 1, 7 do
                local chatframe = getglobal("ChatFrame"..i);
                chatframe:EnableMouseWheel(1);
                chatframe:SetScript("OnMouseWheel", function() chatOnMouseWheel(); end);
        end
end

--------------------------------------------------------------------------------------------------
--                              Misc Functions
--------------------------------------------------------------------------------------------------

function Nurfed_Mount()
        local bag, slot = lib:getmount();
        if (bag and slot) then
                UseContainerItem(bag, slot);
        end
end

function Nurfed_RaidTarget(tar)
        if (not string.find(tar, "[1-9]")) then
                tar = string.lower(tar);
                tar = string.gsub(tar, "^%l", string.upper);
                if (raidtarget[tar]) then
                        tar = raidtarget[tar];
                end
        end
        tar = tonumber(tar);
        for i = 1, GetNumRaidMembers() do
                local unit = "raid"..i;
                local target = "raid"..i.."target";
                if (UnitExists(unit) and UnitExists(target)) then
                        if (GetRaidTargetIndex(target) == tar) then
                                TargetUnit(target);
                                return;
                        end
                end
        end
end

Generated by GNU Enscript 1.6.5.90.