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