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.

351 lines
10 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("The Eye of the Jailer", 2450, 2442)
if not mod then return end
mod:RegisterEnableMob(175725)
mod:SetEncounterID(2433)
mod:SetRespawnTime(35)
mod:SetStage(1)
--------------------------------------------------------------------------------
-- Locals
--
local nextStageWarning = 69
local stage = 1
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.chains = "Chains" -- Short for Dragging Chains
L.pool = "Pool" -- Spreading Misery
L.pools = "Pools" -- Spreading Misery (multiple)
L.death_gaze = "Death Gaze" -- Short for Titanic Death Gaze
L.corruption = mod:SpellName(172) -- Corruption // Short for Slothful Corruption
L.slow = mod:SpellName(31589) -- Slow
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
"stages",
-- Stage One: His Gaze Upon You
350828, -- Deathlink
349979, -- Dragging Chains
348074, -- Assailing Lance
-- Stage Two: Double Vision
349028, -- Titanic Death Gaze
{350847, "SAY", "SAY_COUNTDOWN", "ME_ONLY_EMPHASIZE"}, -- Desolation Beam
{350022, "ME_ONLY_EMPHASIZE"}, -- Soul Shatter
{351825, "TANK"}, -- Shared Suffering
350713, -- Slothful Corruption
{351827, "SAY", "SAY_COUNTDOWN", "ME_ONLY_EMPHASIZE"}, -- Spreading Misery
-- Stage Three: Immediate Extermination
348974, -- Immediate Extermination
351413, -- Annihilating Glare
{350604, "SAY", "ME_ONLY_EMPHASIZE"}, -- Hopeless Lethargy
355232, -- Scorn and Ire
},{
["stages"] = "general",
[350803] = mod:SpellName(-22896), -- Stage One: His Gaze Upon You
[349028] = mod:SpellName(-22897), -- Stage Two: Double Vision
[348974] = mod:SpellName(-23375), -- Stage Three: Immediate Extermination
[350604] = "mythic", -- Mythic
},{
[349979] = L.chains, -- Dragging Chains (Chains)
[349028] = L.death_gaze, -- Titanic Death Gaze (Death Gaze)
[350847] = CL.beam, -- Desolation Beam (Beam)
[350713] = L.corruption, -- Slothful Corruption (Corruption)
[351827] = L.pools, -- Spreading Misery (Pools)
[351413] = CL.laser, -- Annihilating Glare (Laser)
[350604] = L.slow, -- Hopeless Lethargy (Slow)
}
end
function mod:OnBossEnable()
-- Stage One: His Gaze Upon You
self:Log("SPELL_CAST_START", "Deathlink", 350828)
self:Log("SPELL_AURA_APPLIED", "DraggingChains", 358609)
self:Log("SPELL_AURA_APPLIED", "DraggingChainsApplied", 349979)
self:Log("SPELL_CAST_START", "AssailingLance", 348074)
-- Stage Two: Double Vision
self:Log("SPELL_AURA_APPLIED", "StygianDarkshieldApplied", 348805)
self:Log("SPELL_CAST_START", "TitanicDeathGaze", 349030)
self:Log("SPELL_CAST_START", "DesolationBeam", 350847)
self:Log("SPELL_CAST_SUCCESS", "SoulShatter", 350022)
self:Log("SPELL_AURA_APPLIED", "ShatteredSoulApplied", 350034)
self:Log("SPELL_AURA_APPLIED", "SharedSufferingApplied", 351825)
self:Log("SPELL_CAST_START", "SlothfulCorruption", 351835)
self:Log("SPELL_AURA_APPLIED", "SlothfulCorruptionApplied", 350713)
self:Log("SPELL_CAST_START", "SpreadingMisery", 350816)
self:Log("SPELL_AURA_APPLIED", "SpreadingMiseryApplied", 351827)
self:Log("SPELL_AURA_REMOVED", "SpreadingMiseryRemoved", 351827)
self:Log("SPELL_AURA_REMOVED", "StygianDarkshieldRemoved", 348805)
-- Stage Three: Immediate Extermination
self:Log("SPELL_CAST_START", "ImmediateExtermination", 348974)
self:Log("SPELL_CAST_START", "AnnihilatingGlare", 351413)
-- Mythic
self:Log("SPELL_AURA_APPLIED", "HopelessLethargyApplied", 350604)
self:Log("SPELL_AURA_APPLIED", "ScornAndIreApplied", 355240, 355245) -- Scorn, Ire
self:Log("SPELL_AURA_APPLIED_DOSE", "ScornAndIreApplied", 355240, 355245)
end
function mod:OnEngage()
self:SetStage(1)
stage = 1
self:Bar(350828, 4.5) -- Death Link
self:Bar(349979, 11, L.chains) -- Dragging Chains
self:Bar(351413, 25, CL.laser) -- Annihilating Glare
if self:Mythic() then
self:Bar(350604, 9.7, L.slow) -- Hopeless Lethargy
end
self:RegisterUnitEvent("UNIT_HEALTH", nil, "boss1")
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:UNIT_HEALTH(event, unit)
local currentHealth = self:GetHealth(unit)
if currentHealth < nextStageWarning then -- Intermission at 66% and 33%
local nextStage = currentHealth > 30 and CL.stage:format(2) or CL.stage:format(3) -- Sub 33% is Stage 3
self:Message("stages", "green", CL.soon:format(nextStage), false)
nextStageWarning = nextStageWarning - 33
if nextStageWarning < 25 then
self:UnregisterUnitEvent(event, unit)
end
end
end
-- Stage One: His Gaze Upon You
function mod:Deathlink(args)
self:Message(args.spellId, "yellow")
self:PlaySound(args.spellId, "alert")
self:CDBar(args.spellId, 11)
end
function mod:DraggingChains(args)
self:TargetMessage(349979, "orange", args.destName, L.chains)
self:PlaySound(349979, "alarm")
self:Bar(349979, 4.5, 352684) -- 352684 = Dragged
self:Bar(349979, 47, L.chains)
end
function mod:DraggingChainsApplied(args)
if self:Me(args.destGUID) then
self:PersonalMessage(args.spellId)
self:PlaySound(args.spellId, "info")
end
end
do
local function printTarget(self, name, guid)
if self:Me(guid) then
self:PersonalMessage(348074)
self:PlaySound(348074, "alarm")
end
end
function mod:AssailingLance(args)
self:GetUnitTarget(printTarget, 0.1, args.sourceGUID)
end
end
-- Stage Two: Double Vision
function mod:StygianDarkshieldApplied(args)
self:SetStage(2)
stage = 2
self:Message("stages", "green", CL.stage:format(2), false)
self:PlaySound("stages", "long")
self:StopBar(350828) -- Death Link
self:StopBar(CL.laser) -- Annihilating Glare
self:StopBar(L.chains)
self:StopBar(L.slow)
self:Bar(350847, self:Mythic() and 21.1 or 8.5, CL.beam) -- Desolation Beam
self:Bar(351827, 15, L.pools) -- Spreading Misery
self:Bar(349028, self:Mythic() and 28.1 or 17, L.death_gaze) -- Titanic Death Gaze
self:Bar(350713, 21, L.corruption) -- Slothful Corruption
if self:Mythic() then
self:Bar(355232, 12) -- Scorn and Ire
end
end
function mod:TitanicDeathGaze(args)
self:Message(349028, "orange", CL.casting:format(L.death_gaze))
self:PlaySound(349028, "alarm")
self:CastBar(349028, 8, L.death_gaze)
self:Bar(349028, 33, L.death_gaze)
end
do
local function printTarget(self, name, guid)
if self:Me(guid) then
self:Say(350847, CL.beam)
self:SayCountdown(350847, 6)
self:PlaySound(350847, "warning")
end
self:TargetMessage(350847, "red", name, CL.beam)
end
function mod:DesolationBeam(args)
self:GetUnitTarget(printTarget, 0.3, args.sourceGUID)
self:Bar(args.spellId, 17, CL.beam)
end
end
function mod:SoulShatter(args)
self:Message(args.spellId, "yellow")
self:PlaySound(args.spellId, "alert")
--self:Bar(args.spellId, 20) -- XXX quite random atm
end
function mod:ShatteredSoulApplied(args)
if self:Me(args.destGUID) then
self:PersonalMessage(350022)
self:PlaySound(350022, "warning")
end
end
function mod:SharedSufferingApplied(args)
self:Message(args.spellId, "red", CL.onboss:format(args.spellName))
self:PlaySound(args.spellId, "warning")
end
do
local prev = 0
function mod:SlothfulCorruption(args)
local t = args.time
if t-prev > 5 then -- Both adds cast it seperately
prev = t
self:Message(350713, "orange", CL.incoming:format(L.corruption))
if self:Healer() then
self:PlaySound(350713, "alert")
end
self:Bar(350713, 25, L.corruption)
end
end
end
function mod:SlothfulCorruptionApplied(args)
if self:Me(args.destGUID) then
self:PersonalMessage(args.spellId)
self:PlaySound(args.spellId, "alarm")
end
end
do
local prev = 0
function mod:SpreadingMisery(args)
local t = args.time
if t-prev > 5 then -- Both adds cast it seperately
prev = t
self:Bar(351827, 12, L.pools)
end
end
end
function mod:SpreadingMiseryApplied(args)
if self:Me(args.destGUID) then
self:PersonalMessage(args.spellId, nil, L.pool)
self:Say(args.spellId, L.pool)
self:SayCountdown(args.spellId, 5)
self:PlaySound(args.spellId, "warning")
end
end
function mod:SpreadingMiseryRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
end
function mod:StygianDarkshieldRemoved(args)
self:StopBar(CL.beam) -- Desolation Beam
self:StopBar(L.pools) -- Spreading Misery
self:StopBar(L.death_gaze) -- Titanic Death Gaze
self:StopBar(L.corruption) -- Slothful Corruption
if stage == 2 then
self:SetStage(1)
stage = 1
self:Message("stages", "green", CL.stage:format(1), false)
self:PlaySound("stages", "long")
self:Bar(350828, 8.3) -- Death Link
self:Bar(349979, 16, L.chains) -- Dragging Chains
self:Bar(351413, self:Mythic() and 38 or 29, CL.laser) -- Annihilating Glare
if self:Mythic() then
self:Bar(350604, 12.7, L.slow) -- Hopeless Lethargy
end
end
end
-- Stage Three: Immediate Extermination
function mod:ImmediateExtermination(args)
self:SetStage(3)
stage = 3
self:Message("stages", "green", CL.stage:format(3), false)
self:PlaySound("stages", "long")
self:Bar(350828, 9) -- Death Link
self:Bar(349979, 12, L.chains) -- Dragging Chains
self:Bar(351413, 26, CL.laser) -- Annihilating Glare
if self:Mythic() then
self:Bar(350604, 11, L.slow) -- Hopeless Lethargy
end
end
function mod:AnnihilatingGlare(args)
self:Message(args.spellId, "yellow", CL.laser)
self:PlaySound(args.spellId, "warning")
self:CastBar(args.spellId, 19, CL.laser) -- 4s cast + 15s channel
self:Bar(args.spellId, 69, CL.laser)
end
-- Mythic
do
local playerList = {}
local prev = 0
function mod:HopelessLethargyApplied(args)
local t = args.time -- new set of debuffs
if t-prev > 5 then
prev = t
playerList = {}
self:Bar(args.spellId, 20, L.slow)
end
local count = #playerList+1
playerList[count] = args.destName
if self:Me(args.destGUID) then
self:Say(args.spellId, L.slow)
self:PlaySound(args.spellId, "warning")
end
self:NewTargetsMessage(args.spellId, "red", playerList, nil, L.slow)
end
end
function mod:ScornAndIreApplied(args)
if self:Me(args.destGUID) then
local amount = args.amount or 1
if amount % 3 or amount > 10 then
self:NewStackMessage(355232, "blue", args.destName, amount, nil, args.spellName)
self:PlaySound(355232, amount > 10 and "warning" or "info")
end
end
end