You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
7.8 KiB
262 lines
7.8 KiB
--------------------------------------------------------------------------------
|
|
-- 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
|
|
|