-------------------------------------------------------------------------------- -- TODO List: -------------------------------------------------------------------------------- -- Module Declaration -- local mod, CL = BigWigs:NewBoss("Ursoc", 1520, 1667) if not mod then return end mod:RegisterEnableMob(100497) mod.engageId = 1841 mod.respawnTime = 40 -------------------------------------------------------------------------------- -- Locals -- local cacophonyCount = 1 local focusedGazeCount = 1 -------------------------------------------------------------------------------- -- Localization -- local L = mod:GetLocale() if L then L.custom_on_gaze_assist = "Focused Gaze Assist" L.custom_on_gaze_assist_desc = "Show raid icons in bars and messages for Focused Gaze. Using {rt4} for odd, {rt6} for even soaks. Requires promoted or leader." L.custom_on_gaze_assist_icon = 4 end -------------------------------------------------------------------------------- -- Initialization -- function mod:GetOptions() return { {197943, "TANK"}, -- Overwhelm {204859, "TANK_HEALER"}, -- Rend Flesh {198006, "ICON", "FLASH", "PULSE", "SAY"}, -- Focused Gaze "custom_on_gaze_assist", 198108, -- Momentum 197969, -- Roaring Cacophony 205611, -- Miasma 198388, -- Blood Frenzy "berserk", } end function mod:OnBossEnable() self:Log("SPELL_CAST_START", "RoaringCacophony", 197969) self:Log("SPELL_CAST_SUCCESS", "RoaringCacophonySuccess", 197969) self:Log("SPELL_AURA_APPLIED", "Overwhelm", 197943) self:Log("SPELL_AURA_APPLIED_DOSE", "Overwhelm", 197943) self:Log("SPELL_CAST_START", "RendFleshCast", 197942) self:Log("SPELL_AURA_APPLIED", "RendFlesh", 204859) self:Log("SPELL_AURA_APPLIED", "FocusedGaze", 198006) self:Log("SPELL_AURA_REMOVED", "FocusedGazeRemoved", 198006) self:Log("SPELL_AURA_APPLIED", "Momentum", 198108) self:Log("SPELL_AURA_APPLIED_DOSE", "Momentum", 198108) self:Log("SPELL_AURA_APPLIED", "BloodFrenzy", 198388) self:Log("SPELL_AURA_APPLIED", "MiasmaDamage", 205611) self:Log("SPELL_DAMAGE", "MiasmaDamage", 212238) self:Log("SPELL_MISSED", "MiasmaDamage", 212238) end function mod:OnEngage() cacophonyCount = 1 focusedGazeCount = 1 self:Bar(197943, 10) -- Overwhelm self:Bar(204859, 15) -- Rend Flesh, time to _applied if not self:LFR() and self:GetOption("custom_on_gaze_assist") then self:Bar(198006, 19, CL.count_icon:format(self:SpellName(198006), focusedGazeCount, 4)) -- Focused Gaze, green else self:Bar(198006, 19, CL.count:format(self:SpellName(198006), focusedGazeCount)) -- Focused Gaze end self:Bar(197969, self:Mythic() and 20 or 40, CL.count:format(self:SpellName(197969), cacophonyCount)) -- Roaring Cacophony self:Berserk(300) self:RegisterUnitEvent("UNIT_HEALTH", nil, "boss1") end -------------------------------------------------------------------------------- -- Event Handlers -- function mod:RoaringCacophony(args) self:MessageOld(args.spellId, "orange", nil, CL.casting:format(CL.count:format(args.spellName, cacophonyCount))) end function mod:RoaringCacophonySuccess(args) local text = CL.count:format(args.spellName, cacophonyCount) if self:Mythic() and cacophonyCount > 2 and cacophonyCount % 2 == 1 then text = text.." - ".. CL.spawning:format(CL.add) end self:MessageOld(args.spellId, "orange", "alarm", text) cacophonyCount = cacophonyCount + 1 local next = cacophonyCount % 2 == 0 and 10 or 30 if self:Mythic() then next = cacophonyCount == 2 and 20 or cacophonyCount % 2 == 0 and 30 or 10 end self:Bar(args.spellId, next, CL.count:format(args.spellName, cacophonyCount)) end function mod:Overwhelm(args) local amount = args.amount or 1 self:StackMessage(args.spellId, args.destName, amount, "red") if amount > 1 then self:PlaySound(args.spellId, self:Me(args.destGUID) and "alarm" or "warning") -- Warning = taunt end self:Bar(args.spellId, self:LFR() and 20 or 10) end function mod:RendFleshCast(args) self:MessageOld(204859, "yellow", nil, CL.casting:format(args.spellName)) if self:Tank() and not self:Tanking("boss1") then local _, _, _, expiration = self:UnitDebuff("player", self:SpellName(197943)) -- Overwhelm if not expiration or expiration-GetTime() < 2.5 then self:PlaySound(204859, "warning") -- Warning = taunt end end end function mod:RendFlesh(args) self:TargetMessageOld(args.spellId, args.destName, "yellow", "info") self:Bar(args.spellId, 20) end function mod:FocusedGaze(args) local icon = focusedGazeCount % 2 == 0 and 6 or 4 -- blue (even), green (odd) local countSay = CL.count:format(args.spellName, focusedGazeCount) local countMessage = countSay local showingIcons = false if not self:LFR() and self:GetOption("custom_on_gaze_assist") then showingIcons = true countSay = CL.count_rticon:format(args.spellName, focusedGazeCount, icon) countMessage = CL.count_icon:format(args.spellName, focusedGazeCount, icon) end if self:Me(args.destGUID) then self:Flash(args.spellId, showingIcons and icon) self:Say(args.spellId, countSay) end self:PrimaryIcon(args.spellId, args.destName) self:TargetMessageOld(args.spellId, args.destName, "red", "warning", countMessage, args.spellId, true) self:TargetBar(args.spellId, 6, args.destName, countMessage) focusedGazeCount = focusedGazeCount + 1 if showingIcons then self:Bar(args.spellId, 40, CL.count_icon:format(args.spellName, focusedGazeCount, focusedGazeCount % 2 == 0 and 6 or 4)) else self:Bar(args.spellId, 40, CL.count:format(args.spellName, focusedGazeCount)) end end function mod:FocusedGazeRemoved(args) self:StopBar(args.spellId, args.destName) self:PrimaryIcon(args.spellId, nil) end function mod:Momentum(args) if self:Me(args.destGUID) then self:TargetBar(args.spellId, 50, args.destName) end end do local prev = 0 function mod:MiasmaDamage(args) local t = GetTime() if self:Me(args.destGUID) and t-prev > 1.5 then prev = t self:MessageOld(205611, "blue", "alert", CL.underyou:format(args.spellName)) end end end function mod:UNIT_HEALTH(event, unit) local hp = UnitHealth(unit) / UnitHealthMax(unit) if hp < 0.35 then -- Blood Frenzy at 30% self:UnregisterUnitEvent(event, unit) self:MessageOld(198388, "cyan", "info", CL.soon:format(self:SpellName(198388))) -- Blood Frenzy end end function mod:BloodFrenzy(args) self:MessageOld(args.spellId, "orange", "long", "30% - ".. args.spellName) end