vanilla-wow-addons – Rev 1

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

------------------------------
--      Are you local?      --
------------------------------

local L = AceLibrary("AceLocale-2.2"):new("oRAPCoolDown")
local BS = AceLibrary("Babble-Spell-2.2")

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

L:RegisterTranslations("enUS", function() return {
        ["cd"] = true,
        ["cooldown"] = true,
        ["cooldownparticipant"] = true,
        ["Options for cooldowns."] = true,
        ["gain Soulstone Resurrection"] = true,
        ["gains Soulstone Resurrection"] = true,
        ["Participant/CoolDown"] = true,
} end )

L:RegisterTranslations("deDE", function() return {
        ["gain Soulstone Resurrection"] = "Ihr bekommt 'Seelenstein%-Auferstehung'",
        ["gains Soulstone Resurrection"] = "bekommt 'Seelenstein%-Auferstehung'",
} end )

L:RegisterTranslations("frFR", function() return {
        --["cd"] = true,
        --["cooldown"] = true,
        --["cooldownparticipant"] = true,
        ["Options for cooldowns."] = "Options concernant les temps de recharge.",
        ["gain Soulstone Resurrection"] = "gagnez R\195\169surrection de Pierre d'\195\162me",
        ["gains Soulstone Resurrection"] = "gagne R\195\169surrection de Pierre d'\195\162me",
        ["Participant/CoolDown"] = "Participant/Temps de recharge",
} end )

L:RegisterTranslations("koKR", function() return {

        ["Options for cooldowns."] = "재사용대기시간 설정",
        ["gain Soulstone Resurrection"] = "영혼석 보관 효과를 얻었습니다",
        ["gains Soulstone Resurrection"] = "님이 영혼석 보관 효과를 얻었습니다",
        ["Participant/CoolDown"] = "부분/재사용대기시간",
} end )

L:RegisterTranslations("zhCN", function() return {
        ["cd"] = "冷却",
        ["cooldown"] = "冷却",
        ["cooldownparticipant"] = "cooldownparticipant",
        ["Options for cooldowns."] = "冷却监视器选项",
        ["gain Soulstone Resurrection"] = "获得灵魂石",
        ["gains Soulstone Resurrection"] = "获得灵魂石",
        ["Participant/CoolDown"] = "Participant/CoolDown",
} end )

L:RegisterTranslations("zhTW", function() return {
        ["cd"] = "冷卻",
        ["cooldown"] = "冷卻",
        ["cooldownparticipant"] = "cooldownparticipant",
        ["Options for cooldowns."] = "冷卻監視器選項",
        ["gain Soulstone Resurrection"] = "獲得靈魂石",
        ["gains Soulstone Resurrection"] = "獲得靈魂石效果",
        ["Participant/CoolDown"] = "隊員/冷卻",
} end )
----------------------------------
--      Module Declaration      --
----------------------------------

oRAPCoolDown = oRA:NewModule(L["cooldownparticipant"], "AceHook-2.1")
oRAPCoolDown.defaults = {
}
oRAPCoolDown.participant = true
oRAPCoolDown.name = L["Participant/CoolDown"]
-- oRAPCoolDown.consoleCmd = L["cd"]
-- oRAPCoolDown.consoleOptions = {
--      type = "group",
--      desc = L["Options for cooldowns."],
--      args = {
--      }
-- }


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

function oRAPCoolDown:OnEnable()

        self.spell = nil
        self.sscasting = nil
        self.rescasting = nil

        local _, c = UnitClass("player")
        if c == "DRUID" or c == "WARLOCK" or c == "PALADIN" then
                self:RegisterEvent("SPELLCAST_START")
                self:RegisterEvent("SPELLCAST_FAILED", "SpellFailed")
                self:RegisterEvent("SPELLCAST_INTERRUPTED", "SpellFailed")
                self:RegisterEvent("SPELLCAST_STOP")
                if c == "WARLOCK" then
                        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS", "CheckSoulstone")
                        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS", "CheckSoulstone")
                        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS", "CheckSoulstone")
                end
        elseif c == "SHAMAN" then
                self:Hook("UseSoulstone", true)
        end
end

function oRAPCoolDown:OnDisable()
        self:UnregisterAllEvents()
        self:UnhookAll()
end


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

function oRAPCoolDown:SPELLCAST_START( arg1 )
        self.spell = arg1
        if self.spell == BS["Soulstone Resurrection"] then
                self.sscasting = true
        elseif self.spell == BS["Rebirth"] then
                self.rescasting = true
        elseif self.spell == BS["Divine Intervention"] then
                self.rescasting = true
        end
end

function oRAPCoolDown:SPELLCAST_STOP( arg1 )
        if self.spell == BS["Rebirth"] then
                self.rescasting = nil
                self.spell = nil
                self:SendMessage("CD 1 30")
        elseif self.spell == BS["Divine Intervention"] then
                self.rescasting = nil
                self.spell = nil
                self:SendMessage("CD 4 60", true) -- only oRA2 clients will receive this cooldown I just numbered on.
        end
end

function oRAPCoolDown:SpellFailed()
        if self.spell == BS["Rebirth"] then self.rescasting = nil end
        if self.spell == BS["Soulstone Resurrection"] then self.sscasting = nil end
        if self.spell == BS["Divine Intervention"] then self.rescasting = nil end
end

function oRAPCoolDown:CheckSoulstone( arg1 )
        if self.sscasting then
                if string.find(arg1, L["gains Soulstone Resurrection"]) or string.find( arg1, L["gain Soulstone Resurrection"]) then
                        self.spell = nil
                        self.sscasting = nil
                        self:SendMessage("CD 3 30")
                end
        end
end

---------------
--   Hooks   --
---------------

function oRAPCoolDown:UseSoulstone()
        local text = HasSoulstone()
        if text and text == BS["Reincarnation"] then
                local cooldown = 60
                for tab = 1, GetNumTalentTabs(), 1 do
                        for talent = 1, GetNumTalents(tab), 1 do
                                local name, _, _, _, rank = GetTalentInfo(tab, talent)
                                if name == BS["Improved Reincarnation"] then
                                        cooldown = cooldown - (rank*10)
                                        break
                                end
                        end
                        if cooldown then break end
                        self:SendMessage("CD 2 " .. cooldown )
                end
        end
        self.hooks["UseSoulstone"]()
end