------------------------------ -- Are you local? -- ------------------------------ local boss = AceLibrary("Babble-Boss-2.2")["Ragnaros"] local L = AceLibrary("AceLocale-2.2"):new("BigWigs"..boss) local started = nil ---------------------------- -- Localization -- ---------------------------- L:RegisterTranslations("enUS", function() return { knockback_trigger = "^TASTE", submerge_trigger = "^COME FORTH,", engage_trigger = "^NOW FOR YOU,", knockback_message = "Knockback!", knockback_soon_message = "5 sec to knockback!", submerge_message = "Ragnaros down for 90 sec. Incoming Sons of Flame!", emerge_soon_message = "15 sec until Ragnaros emerges!", emerge_message = "Ragnaros emerged, 3 minutes until submerge!", submerge_60sec_message = "60 sec to submerge!", submerge_20sec_message = "20 sec to submerge!", knockback_bar = "AoE knockback", emerge_bar = "Ragnaros emerge", submerge_bar = "Ragnaros submerge", sonofflame = "Son of Flame", sonsdeadwarn = "%d/8 Sons of Flame dead!", cmd = "Ragnaros", emerge_cmd = "emerge", emerge_name = "Emerge alert", emerge_desc = "Warn for Ragnaros Emerge", sondeath_cmd = "sondeath", sondeath_name = "Son of Flame dies", sondeath_desc = "Warn when a son dies", submerge_cmd = "submerge", submerge_name = "Submerge alert", submerge_desc = "Warn for Ragnaros Submerge & Sons of Flame", aoeknock_cmd = "aoeknock", aoeknock_name = "Knockback alert", aoeknock_desc = "Warn for Wrath of Ragnaros knockback", } end) L:RegisterTranslations("zhCN", function() return { knockback_trigger = "^尝尝萨弗隆的火焰吧", submerge_trigger = "^出现吧,我的奴仆", engage_trigger = "^现在轮到你们了", knockback_message = "群体击退!", knockback_soon_message = "5秒后发动群体击退!", submerge_message = "拉格纳罗斯消失90秒。烈焰之子出现!", emerge_soon_message = "15秒后拉格纳罗斯重新出现!", emerge_message = "拉格纳罗斯已经激活,将在3分钟后暂时消失并召唤烈焰之子!", submerge_60sec_message = "60秒后拉格纳罗斯将暂时消失并召唤烈焰之子!", submerge_20sec_message = "20秒后拉格纳罗斯将暂时消失并召唤烈焰之子!", knockback_bar = "群体击退", emerge_bar = "拉格纳罗斯出现", submerge_bar = "拉格纳罗斯消失", sonofflame = "烈焰之子", sonsdeadwarn = "%d/8个烈焰之子死亡了!", emerge_name = "出现警报", emerge_desc = "出现警报", sondeath_name = "烈焰之子死亡", sondeath_desc = "当一个烈焰之子死亡时发出警报", submerge_name = "消失警报", submerge_desc = "消失警报", aoeknock_name = "群体击退警报", aoeknock_desc = "群体击退警报", } end) L:RegisterTranslations("zhTW", function() return { -- Ragnaros 拉格納羅斯 knockback_trigger = "^感受薩弗隆的烈焰吧!", submerge_trigger = "^出現吧,我的奴僕", engage_trigger = "^現在輪到你們了", knockback_message = "群體擊退!", knockback_soon_message = "5 秒後群體擊退,近戰後退!", submerge_message = "消失 90 秒! 烈焰之子出現!", emerge_soon_message = "15 秒後重新出現!", emerge_message = "拉格納羅斯已經進入戰鬥,3 分鐘後暫時消失並召喚烈焰之子", submerge_60sec_message = "60 秒後暫時消失並召喚烈焰之子!", submerge_20sec_message = "20 秒後暫時消失並召喚烈焰之子!", knockback_bar = "群體擊退", emerge_bar = "拉格納羅斯出現", submerge_bar = "拉格納羅斯消失", sonofflame = "烈焰之子", sonsdeadwarn = "%d/8 個烈焰之子死亡了!", emerge_name = "出現警報", emerge_desc = "當拉格納羅斯出現消失時發出警報", sondeath_name = "烈焰之子死亡", sondeath_desc = "當一個烈焰之子死亡時發出警報", submerge_name = "消失警報", submerge_desc = "當拉格納羅斯消失時發出警報", aoeknock_name = "群體擊退警報", aoeknock_desc = "當拉格納羅斯發動擊退技能時發出警報", } end) L:RegisterTranslations("koKR", function() return { knockback_trigger = "설퍼론의 유황", submerge_trigger = "나의 종들아", engage_trigger = "이제 너희", knockback_message = "광역 튕겨냄!", knockback_soon_message = "5초후 튕겨냄!", submerge_message = "90초간 라그나로스 사라짐. 피조물 등장!", emerge_soon_message = "15초후 라그나로스 재등장!", emerge_message = "라그나로스가 등장했습니다. 3분후 피조물 소환!", submerge_60sec_message = "60초후 피조물 등장!", submerge_20sec_message = "20초후 피조물 등장!", knockback_bar = "광역 튕겨냄", emerge_bar = "라그나로스 등장", submerge_bar = "피조물 등장", sonofflame = "화염의 수호물", sonsdeadwarn = "%d/8 화염의 수호물 사망!", emerge_name = "등장 경고", emerge_desc = "라그나로스 등장에 대한 경고", sondeath_name = "화염의 수호물 죽음", sondeath_desc = "화염의 수호물 죽음 알림", submerge_name = "사라짐 경고", submerge_desc = "라그나로스 사라짐 & 피조물에 대한 경고", aoeknock_name = "튕겨냄 경고", aoeknock_desc = "라그나로스의 튕겨냄 경고", } end) L:RegisterTranslations("deDE", function() return { knockback_trigger = "^SP\195\156RT DIE FLAMMEN", submerge_trigger = "^KOMMT HERBEI, MEINE DIENER", -- ? engage_trigger = "^NUN ZU EUCH, INSEKTEN", -- ? knockback_message = "AoE Rundumschlag!", knockback_soon_message = "AoE Rundumschlag in 5 Sekunden!", submerge_message = "Ragnaros untergetaucht f\195\188r 90 Sekunden! S\195\182hne der Flamme kommen!", emerge_soon_message = "Ragnaros taucht auf in 15 Sekunden!", emerge_message = "Ragnaros aufgetaucht! Untertauchen in 3 Minuten!", submerge_60sec_message = "Ragnaros taucht unter in 60 Sekunden!", submerge_20sec_message = "Ragnaros taucht unter in 20 Sekunden!", knockback_bar = "AoE Rundumschlag", emerge_bar = "Auftauchen Ragnaros", submerge_bar = "Untertauchen Ragnaros", sonofflame = "Sohn der Flamme", sonsdeadwarn = "%d/8 S\195\182hne der Flamme tot!", emerge_name = "Auftauchen", emerge_desc = "Warnung, wenn Ragnaros auftaucht.", sondeath_name = "S\195\182hne der Flamme", sondeath_desc = "Counter f\195\188r die get\195\182teten S\195\182ohne der Flamme.", submerge_name = "Untertauchen", submerge_desc = "Warnung, wenn Ragnaros untertaucht und die S\195\182hne der Flamme erscheinen.", aoeknock_name = "AoE Rundumschlag", aoeknock_desc = "Warnung, wenn Ragnaros AoE Rundumschlag wirkt.", } end) L:RegisterTranslations("frFR", function() return { knockback_trigger = "^GO\195\155TEZ ", submerge_trigger = "^VENEZ, MES SERVITEURS", engage_trigger = "^ET MAINTENANT", knockback_message = "Projection de zone !", knockback_soon_message = "5 secondes avant Projection de zone !", submerge_message = "Ragnaros dispara\195\174t pour 90 secondes. Arriv\195\169e des Fils des flammes !", emerge_soon_message = "15 secondes avant que Ragnaros n'\195\169merge !", emerge_message = "Ragnaros a \195\169merg\195\169. 3 minutes avant l'arriv\195\169e des Fils des flammes !", submerge_60sec_message = "60 secondes avant l'arriv\195\169e des Fils des flammes !", submerge_20sec_message = "20 secondes avant l'arriv\195\169e des Fils des flammes !", knockback_bar = "Projection de zone", emerge_bar = "Ragnaros \195\169merge", submerge_bar = "Fils des flammes", sonofflame = "Fils des flammes", sonsdeadwarn = "%d/8 Fils des flammes mort !", emerge_name = "Alerte Emerge", emerge_desc = "Pr\195\169viens quand Ragnaros \195\169merge.", sondeath_name = "Alerte mort des Fils", sondeath_desc = "Pr\195\169viens de la mort d'un Fils des flammes.", submerge_name = "Alerte Immersion", submerge_desc = "Pr\195\169viens de l'immersion de Ragnaros et l'arriv\195\169e des Fils des flammes.", aoeknock_name = "Alerte Projection de zone", aoeknock_desc = "Pr\195\169viens des projections de zone.", } end) ---------------------------------- -- Module Declaration -- ---------------------------------- BigWigsRagnaros = BigWigs:NewModule(boss) BigWigsRagnaros.zonename = AceLibrary("Babble-Zone-2.2")["Molten Core"] BigWigsRagnaros.enabletrigger = boss BigWigsRagnaros.wipemobs = { L["sonofflame"] } BigWigsRagnaros.toggleoptions = { "sondeath", "submerge", "emerge", "aoeknock", "bosskill" } BigWigsRagnaros.revision = tonumber(string.sub("$Revision: 16639 $", 12, -3)) ------------------------------ -- Initialization -- ------------------------------ function BigWigsRagnaros:OnEnable() started = nil self.sonsdead = 0 self:RegisterEvent("PLAYER_REGEN_ENABLED", "CheckForWipe") self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckForEngage") self:RegisterEvent("CHAT_MSG_MONSTER_YELL") self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH") self:RegisterEvent("BigWigs_RecvSync") self:TriggerEvent("BigWigs_ThrottleSync", "RagnarosSonDead", .1) end ------------------------------ -- Event Handlers -- ------------------------------ function BigWigsRagnaros:CHAT_MSG_COMBAT_HOSTILE_DEATH(msg) if msg == string.format(UNITDIESOTHER, L["sonofflame"]) then self:TriggerEvent("BigWigs_SendSync", "RagnarosSonDead "..tostring(self.sonsdead + 1) ) else self:GenericBossDeath(msg) end end function BigWigsRagnaros:BigWigs_RecvSync(sync, rest) if sync == self:GetEngageSync() and rest and rest == boss and not started then started = true if self:IsEventRegistered("PLAYER_REGEN_ENABLED") then self:UnregisterEvent("PLAYER_REGEN_ENABLED") end self:Emerge() elseif sync == "RagnarosSonDead" and rest then rest = tonumber(rest) if not rest then return end if rest == (self.sonsdead + 1) then self.sonsdead = self.sonsdead + 1 if self.db.profile.sondeath then self:TriggerEvent("BigWigs_Message", string.format(L["sonsdeadwarn"], self.sonsdead), "Urgent") end if self.sonsdead == 8 then self:CancelScheduledEvent("bwragnarosemerge") self:TriggerEvent("BigWigs_StopBar", L["emerge_bar"]) self.sonsdead = 0 -- reset counter self:Emerge() end end end end function BigWigsRagnaros:CHAT_MSG_MONSTER_YELL(msg) if string.find(msg, L["knockback_trigger"]) and self.db.profile.aoeknock then self:TriggerEvent("BigWigs_Message", L["knockback_message"], "Important") self:ScheduleEvent("bwragnarosaekbwarn", "BigWigs_Message", 23, L["knockback_soon_message"], "Urgent") self:TriggerEvent("BigWigs_StartBar", self, L["knockback_bar"], 28, "Interface\\Icons\\Spell_Fire_SoulBurn") elseif string.find(msg, L["submerge_trigger"]) then self:Submerge() end end function BigWigsRagnaros:Submerge() self:CancelScheduledEvent("bwragnarosaekbwarn") self:TriggerEvent("BigWigs_StopBar", self, L["knockback_bar"]) if self.db.profile.submerge then self:TriggerEvent("BigWigs_Message", L["submerge_message"], "Important") end if self.db.profile.emerge then self:ScheduleEvent("bwragnarosemergewarn", "BigWigs_Message", 75, L["emerge_soon_message"], "Urgent") self:TriggerEvent("BigWigs_StartBar", self, L["emerge_bar"], 90, "Interface\\Icons\\Spell_Fire_Volcano") end self:ScheduleRepeatingEvent("bwragnarosemergecheck", self.EmergeCheck, 2, self) self:ScheduleEvent("bwragnarosemerge", self.Emerge, 90, self) end function BigWigsRagnaros:EmergeCheck() if UnitExists("target") and UnitName("target") == boss and UnitExists("targettarget") then self:Emerge() return end local num = GetNumRaidMembers() for i = 1, num do local raidUnit = string.format("raid%starget", i) if UnitExists(raidUnit) and UnitName(raidUnit) == boss and UnitExists(raidUnit.."target") then self:Emerge() return end end end function BigWigsRagnaros:Emerge() self:CancelScheduledEvent("bwragnarosemergecheck") self:CancelScheduledEvent("bwragnarosemergewarn") self:TriggerEvent("BigWigs_StopBar", self, L["emerge_bar"]) if self.db.profile.emerge then self:TriggerEvent("BigWigs_Message", L["emerge_message"], "Attention") end if self.db.profile.submerge then self:ScheduleEvent("BigWigs_Message", 120, L["submerge_60sec_message"], "Urgent") self:ScheduleEvent("BigWigs_Message", 160, L["submerge_20sec_message"], "Important") self:TriggerEvent("BigWigs_StartBar", self, L["submerge_bar"], 180, "Interface\\Icons\\Spell_Fire_SelfDestruct") end end