vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
assert(BigWigs, "BigWigs not found!")

----------------------------
--      Localization      --
----------------------------

local L = AceLibrary("AceLocale-2.2"):new("BigWigsCustomBar")

local times = nil

L:RegisterTranslations("enUS", function() return {
        ["bwcb"] = true,
        ["bwlcb"] = true,
        ["custombar"] = true,
        ["Custom Bars"] = true,
        ["Start a custom bar, either local or global."] = true,
        ["Local"] = true,
        ["Global"] = true,
        ["<seconds> <bar text>"] = true,
        ["Starts a custom bar with the given parameters."] = true,
        ["%s: %s"] = true,
        ["%s: Timer [%s] finished."] = true,
} end)

L:RegisterTranslations("koKR", function() return {
        ["Custom Bars"] = "사용자 바",
        ["Start a custom bar, either local or global."] = "사용자 바 시작, 전체 혹은 지역",
        ["Local"] = "지역",
        ["Global"] = "전체",
        ["<seconds> <bar text>"] = "<초> <바 텍스트>",
        ["Starts a custom bar with the given parameters."] = "입력한 매개변수로 사용자 바 시작",
        ["%s: %s"] = "%s: %s",
        ["%s: Timer [%s] finished."] = "%s: 타이머 [%s] 종료되었습니다.",
} end)

L:RegisterTranslations("zhCN", function() return {
        ["bwcb"] = "bwcb",
        ["bwlcb"] = "bwlcb",
        ["custombar"] = "自制时间条",
        ["Custom Bars"] = "自制时间条",
        ["Start a custom bar, either local or global."] = "激活一条自制时间条,本地或者全局",
        ["Local"] = "本地",
        ["Global"] = "全局",
        ["<seconds> <bar text>"] = "<seconds> <bar text>",
        ["Starts a custom bar with the given parameters."] = "激活一条带参数的自制时间条",
        ["%s: %s"] = "%s: %s",
        ["%s: Timer [%s] finished."] = "%s: 计时器 [%s] 到时间",
} end)

L:RegisterTranslations("zhTW", function() return {
        ["bwcb"] = "bwcb",
        ["bwlcb"] = "bwlcb",
        ["custombar"] = "自定時間條",
        ["Custom Bars"] = "自定時間條",
        ["Start a custom bar, either local or global."] = "開始一個自定時間條,區域或者全域",
        ["Local"] = "區域",
        ["Global"] = "全域",
        ["<seconds> <bar text>"] = "<秒> <列文字>",
        ["Starts a custom bar with the given parameters."] = "開始一個包含參數的自定時間條",
        ["%s: %s"] = "%s: %s",
        ["%s: Timer [%s] finished."] = "%s: 計時器 [%s] 終了。",
} end)

L:RegisterTranslations("deDE", function() return {
        -- ["bwcb"] = true,
        -- ["bwlcb"] = true,
        -- ["custombar"] = true,
        ["Custom Bars"] = "Individuelle Anzeigebalken",
        ["Start a custom bar, either local or global."] = "Einen individuellen Anzeigebalken starten (entweder lokal oder global).",
        ["Local"] = "Lokal",
        ["Global"] = "Global",
        ["<seconds> <bar text>"] = "<Sekunden> <Balkentext>",
        ["Starts a custom bar with the given parameters."] = "Einen individuellen Anzeigebalken mit den gegebenen Parametern starten. \n<Sekunden> <Balkentext>",
        -- ["%s: %s"] = true,
        ["%s: Timer [%s] finished."] = "%s: Timer [%s] beendet.",
} end)

L:RegisterTranslations("frFR", function() return {
        ["Custom Bars"] = "Barres personnalis\195\169es",
        ["Start a custom bar, either local or global."] = "D\195\169marre une barre personnalis\195\169e, soit personnelle, soit globale.",
        ["Local"] = "Personnelle",
        ["Global"] = "Globale",
        ["<seconds> <bar text>"] = "<secondes> <texte de la barre>",
        ["Starts a custom bar with the given parameters."] = "D\195\169marre une barre personnalis\195\169e avec les param\195\168tres indiqu\195\169s",
        ["%s: Timer [%s] finished."] = "%s: Compteur [%s] termin\195\169.",
} end)

----------------------------------
--      Module Declaration      --
----------------------------------

BigWigsCustomBar = BigWigs:NewModule(L["Custom Bars"])
BigWigsCustomBar.revision = tonumber(string.sub("$Revision: 15072 $", 12, -3))
BigWigsCustomBar.external = true
BigWigsCustomBar.consoleCmd = L["custombar"]
BigWigsCustomBar.consoleOptions = {
        type = "group",
        name = L["Custom Bars"],
        desc = L["Start a custom bar, either local or global."],
        args = {
                [L["Global"]] = {
                        type = "text",
                        name = L["Global"],
                        desc = L["Starts a custom bar with the given parameters."],
                        get = false,
                        set = function(v) BigWigsCustomBar:TriggerEvent("BigWigs_SendSync", "BWCustomBar "..v) end,
                        usage = L["<seconds> <bar text>"],
                        disabled = function() return (not IsRaidLeader() and not IsRaidOfficer()) and UnitInRaid("player") end,
                },
                [L["Local"]] = {
                        type = "text",
                        name = L["Local"],
                        desc = L["Starts a custom bar with the given parameters."],
                        get = false,
                        set = function(v) BigWigsCustomBar:StartBar(v, nil, true) end,
                        usage = L["<seconds> <bar text>"],
                },
        },
}

------------------------------
--      Initialization      --
------------------------------

function BigWigsCustomBar:OnEnable()
        self.enabled = true
        times = {}

        self:RegisterShortHand()

        self:RegisterEvent("BigWigs_RecvSync")
        self:TriggerEvent("BigWigs_ThrottleSync", "BWCustomBar", 0)
end

------------------------------
--      Event Handlers      --
------------------------------

function BigWigsCustomBar:BigWigs_RecvSync(sync, rest, nick)
        if sync ~= "BWCustomBar" or not rest or not nick or not self.enabled then return end

        if UnitInRaid("player") then
                for i = 1, GetNumRaidMembers() do
                        local name, rank = GetRaidRosterInfo(i)
                        if name == nick then
                                if rank == 0 then
                                        return
                                else
                                        break
                                end
                        end
                end
        end

        self:StartBar(rest, nick, false)
end

------------------------------
--      Utility             --
------------------------------

function BigWigsCustomBar:StartBar(bar, nick, localOnly)
        local _, _, seconds, barText = string.find(bar, "(%d+) (.*)")
        if not seconds or not barText then return end
        seconds = tonumber(seconds)
        if seconds == nil then return end

        if not nick then nick = L["Local"] end
        self:ScheduleEvent("bwcb"..nick..barText, "BigWigs_Message", seconds, string.format(L["%s: Timer [%s] finished."], nick, barText), "Attention", localOnly)
        self:TriggerEvent("BigWigs_StartBar", self, string.format(L["%s: %s"], nick, barText), seconds, "Interface\\Icons\\INV_Misc_PocketWatch_01")
end

-- For easy use in macros.
function BWCB(seconds, message)
        if message then seconds = tostring(seconds) .. " " .. message end
        local t = GetTime()
        if ( not times[seconds] ) or ( times[seconds] and ( times[seconds] + 2 ) < t) then
                times[seconds] = t
                BigWigsCustomBar:TriggerEvent("BigWigs_SendSync", "BWCustomBar "..seconds)
        end
end

function BWLCB(seconds, message)
        if message then seconds = tostring(seconds) .. " " .. message end
        BigWigsCustomBar:StartBar(seconds, nil, true)
end

-- Shorthand slashcommand
function BigWigsCustomBar:RegisterShortHand()
        if SlashCmdList then
                SlashCmdList["BWCB_SHORTHAND"] = BWCB
                setglobal("SLASH_BWCB_SHORTHAND1", "/"..L["bwcb"])
                SlashCmdList["BWLCB_SHORTHAND"] = BWLCB
                setglobal("SLASH_BWLCB_SHORTHAND1", "/"..L["bwlcb"])
        end
end