-------------------------------------------------------------------------------- -- Module Declaration -- local mod, CL = BigWigs:NewBoss("Varimathras", 1712, 1983) if not mod then return end mod:RegisterEnableMob(122366) mod.engageId = 2069 mod.respawnTime = 30 -------------------------------------------------------------------------------- -- Locals -- local tormentActive = 0 -- 1: Flames, 2: Frost, 3: Fel, 4: Shadows local mobCollector = {} -------------------------------------------------------------------------------- -- Localization -- local L = mod:GetLocale() if L then L.shadowOfVarimathras_icon = "spell_warlock_demonsoul" end -------------------------------------------------------------------------------- -- Initialization -- local necroticEmbraceMarker = mod:AddMarkerOption(false, "player", 3, 244094, 3, 4) -- Necrotic Embrace function mod:GetOptions() return { "stages", -- Torment of Flames, Frost, Fel, Shadows "berserk", 243961, -- Misery {243960, "TANK"}, -- Shadow Strike 243999, -- Dark Fissure {244042, "SAY", "SAY_COUNTDOWN", "FLASH", "ICON"}, -- Marked Prey {244094, "SAY", "SAY_COUNTDOWN", "FLASH", "PULSE", "PROXIMITY"}, -- Necrotic Embrace necroticEmbraceMarker, -16350, -- Shadow of Varimathras },{ ["stages"] = "general", [-16350] = "mythic", } end function mod:OnBossEnable() --[[ Stages ]]-- self:Log("SPELL_AURA_APPLIED", "TormentofFlames", 243968) self:Log("SPELL_AURA_APPLIED", "TormentofFrost", 243977) self:Log("SPELL_AURA_APPLIED", "TormentofFel", 243980) self:Log("SPELL_AURA_APPLIED", "TormentofShadows", 243973) --[[ General ]]-- self:Log("SPELL_AURA_APPLIED", "Misery", 243961) self:Log("SPELL_CAST_SUCCESS", "ShadowStrike", 243960, 257644) -- Heroic, Normal self:Log("SPELL_CAST_START", "DarkFissureStart", 243999) self:Log("SPELL_CAST_SUCCESS", "DarkFissure", 243999) self:Log("SPELL_AURA_APPLIED", "MarkedPrey", 244042) self:Log("SPELL_AURA_REMOVED", "MarkedPreyRemoved", 244042) self:Log("SPELL_CAST_SUCCESS", "NecroticEmbraceSuccess", 244093) self:Log("SPELL_AURA_APPLIED", "NecroticEmbrace", 244094) self:Log("SPELL_AURA_REMOVED", "NecroticEmbraceRemoved", 244094) self:Log("SPELL_AURA_APPLIED", "GroundEffectDamage", 244005) -- Dark Fissure self:Log("SPELL_PERIODIC_DAMAGE", "GroundEffectDamage", 244005) -- Dark Fissure self:Log("SPELL_PERIODIC_MISSED", "GroundEffectDamage", 244005) -- Dark Fissure --[[ Mythic ]]-- self:Log("SPELL_CAST_SUCCESS", "EchoesofDoom", 248732) end function mod:OnEngage() tormentActive = 0 mobCollector = {} self:CDBar("stages", 5, self:SpellName(243968), 243968) -- Torment of Flames self:CDBar(243960, 9.7) -- Shadow Strike self:CDBar(243999, 17.8) -- Dark Fissure self:CDBar(244042, 25.5) -- Marked Prey if not self:Easy() then self:CDBar(244094, 35.3) -- Necrotic Embrace end self:Berserk(310) end -------------------------------------------------------------------------------- -- Event Handlers -- function mod:TormentofFlames(args) if tormentActive ~= 1 then tormentActive = 1 self:MessageOld("stages", "green", "long", args.spellName, args.spellId) if self:Easy() then self:CDBar("stages", 355, self:SpellName(243973), 243973) -- Torment of Shadows else self:CDBar("stages", self:Mythic() and 100 or 120, self:SpellName(243977), 243977) -- Torment of Frost end end end function mod:TormentofFrost(args) if tormentActive ~= 2 then tormentActive = 2 self:MessageOld("stages", "green", "long", args.spellName, args.spellId) self:CDBar("stages", self:Mythic() and 100 or 114, self:SpellName(243980), 243980) -- Torment of Fel end end function mod:TormentofFel(args) if tormentActive ~= 3 then tormentActive = 3 self:MessageOld("stages", "green", "long", args.spellName, args.spellId) self:CDBar("stages", self:Mythic() and 90 or 121, self:SpellName(243973), 243973) -- Torment of Shadows end end function mod:TormentofShadows(args) if tormentActive ~= 4 then tormentActive = 4 self:MessageOld("stages", "green", "long", args.spellName, args.spellId) end end function mod:Misery(args) if self:Me(args.destGUID) then self:MessageOld(args.spellId, "blue", "alarm", CL.you:format(args.spellName)) end end function mod:ShadowStrike() self:MessageOld(243960, "purple", "warning") self:CDBar(243960, 9.8) end function mod:DarkFissureStart(args) self:CDBar(243960, 5.3) -- Shadow Strike end function mod:DarkFissure(args) self:MessageOld(args.spellId, "yellow", "alert") self:CDBar(args.spellId, 32.9) end function mod:MarkedPrey(args) if self:Me(args.destGUID) then self:Flash(args.spellId) self:Say(args.spellId) self:SayCountdown(args.spellId, 5) self:PlaySound(args.spellId, "alarm") end self:PrimaryIcon(args.spellId, args.destName) self:TargetMessage(args.spellId, "red", args.destName) self:TargetBar(args.spellId, 5, args.destName) self:CDBar(args.spellId, 32.8) end function mod:MarkedPreyRemoved(args) self:PrimaryIcon(args.spellId) self:StopBar(args.spellId, args.destName) if self:Me(args.destGUID) then self:CancelSayCountdown(args.spellId) end end do local playerList, isOnMe, proxList = mod:NewTargetList(), false, {} function mod:NecroticEmbraceSuccess() proxList = {} self:CDBar(244094, 30.5) end local function warn() if not isOnMe then mod:TargetsMessage(244094, "orange", playerList, #playerList) -- Necrotic Embrace mod:OpenProximity(244094, 10, proxList) else playerList = mod:NewTargetList() end end function mod:NecroticEmbrace(args) if #playerList >= 2 then return end -- Avoid spam if something goes wrong if tContains(proxList, args.destName) then return end -- Don't annouce someone twice playerList[#playerList+1] = args.destName local count = #playerList local icon = count + 2 if self:Me(args.destGUID) then isOnMe = true self:PlaySound(args.spellId, "warning") self:TargetMessage(args.spellId, "orange", args.destName, CL.count_icon:format(args.spellName, count, icon)) self:Say(args.spellId, CL.count_rticon:format(args.spellName, count, icon)) self:Flash(args.spellId, icon) self:SayCountdown(args.spellId, 6, icon) self:OpenProximity(args.spellId, 10) end proxList[#proxList+1] = args.destName if count == 1 then self:SimpleTimer(warn, 0.3) end if self:GetOption(necroticEmbraceMarker) then self:CustomIcon(false, args.destName, icon) -- Icons 3 and 4 end end function mod:NecroticEmbraceRemoved(args) if self:Me(args.destGUID) then self:MessageOld(args.spellId, "green", "info", CL.removed:format(args.spellName)) isOnMe = false self:CancelSayCountdown(args.spellId) self:CloseProximity(args.spellId) end if self:GetOption(necroticEmbraceMarker) then self:CustomIcon(false, args.destName) end tDeleteItem(proxList, args.destName) if not isOnMe then -- Don't change proximity if it's on you and expired on someone else if #proxList == 0 then self:CloseProximity(args.spellId) else -- Update proximity self:OpenProximity(args.spellId, 10, proxList) end end end end do local prev = 0 function mod:GroundEffectDamage(args) local t = GetTime() if self:Me(args.destGUID) and t-prev > 1.5 then prev = t self:MessageOld(243999, "blue", "alert", CL.underyou:format(args.spellName)) -- Dark Fissure end end end --[[ Mythic ]]-- do local prev = 0 function mod:EchoesofDoom(args) if not mobCollector[args.sourceGUID] then mobCollector[args.sourceGUID] = true -- Only warn once per Shadow local t = GetTime() if t-prev > 1.5 then -- Also don't spam too much if it's a wipe and several are spawning at the same time prev = t self:MessageOld(-16350, "orange", "alarm", nil, L.shadowOfVarimathras_icon) end end end end