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.

177 lines
5.0 KiB

4 years ago
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("The Arcatraz Trash", 552)
if not mod then return end
mod.displayName = CL.trash
mod:RegisterEnableMob(
20868, -- Entropic Eye
21346, -- Sightless Eye
20879, -- Eredar Soul-Eater
20883, -- Spiteful Temptress
20898 -- Gargantuan Abyssal
)
--------------------------------------------------------------------------------
-- Locals
--
local meteorsGoingOff, castersCollector = 0, {}
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.entropic_eye = "Entropic Eye"
L.sightless_eye = "Sightless Eye"
L.soul_eater = "Eredar Soul-Eater"
L.temptress = "Spiteful Temptress"
L.abyssal = "Gargantuan Abyssal"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
--[[ Entropic Eye ]]--
36700, -- Hex
--[[ Sightless Eye ]]--
38815, -- Sightless Touch
--[[ Eredar Soul-Eater ]]--
36778, -- Soul Steal
--[[ Spiteful Temptress ]]--
36866, -- Domination
36886, -- Spiteful Fury
--[[ Gargantuan Abyssal ]]--
{38903, "PROXIMITY"}, -- Meteor
}, {
[36700] = L.entropic_eye,
[38815] = L.sightless_eye,
[36778] = L.soul_eater,
[36866] = L.temptress,
[38903] = L.abyssal,
}
end
function mod:OnBossEnable()
self:RegisterMessage("BigWigs_OnBossEngage", "Disable")
self:Log("SPELL_AURA_APPLIED", "Hex", 38903)
self:Log("SPELL_CAST_START", "SightlessTouch", 36646, 38815) -- normal, heroic
self:Log("SPELL_AURA_APPLIED", "SoulStealDebuff", 36778)
self:Log("SPELL_AURA_APPLIED", "SoulStealBuff", 36782)
self:Log("SPELL_AURA_APPLIED", "Domination", 36866)
self:Log("SPELL_AURA_APPLIED", "SpitefulFury", 36886)
self:Log("SPELL_AURA_REMOVED", "DebuffRemoved", 36778, 36866, 36886) -- Soul Steal, Domination, Spiteful Fury
self:Log("SPELL_CAST_START", "Meteor", 38903)
self:Log("SPELL_CAST_SUCCESS", "MeteorSuccess", 38903)
self:Death("AbyssalDeath", 20898)
end
function mod:OnBossDisable()
meteorsGoingOff = 0
castersCollector = {}
end
--------------------------------------------------------------------------------
-- Event Handlers
--
do
-- One of the randomly chosen debuffs that apply to people being hit by Chaos Breath (36677), so there's a chance of multiple people getting it.
local playerList = mod:NewTargetList()
function mod:Hex(args)
if not self:Player(args.destFlags) then return end -- filter out pets
playerList[#playerList + 1] = args.destName
if #playerList == 1 then
self:ScheduleTimer("TargetMessageOld", 0.3, args.spellId, playerList, "orange", "alert", nil, nil, self:Dispeller("magic"))
end
end
end
do
local prev = 0
function mod:SightlessTouch(args)
local t = GetTime()
if t - prev > 1 then
prev = t
self:MessageOld(38815, "yellow", self:Interrupter() and "alarm", CL.casting:format(args.spellName))
end
end
end
function mod:SoulStealDebuff(args)
if self:Me(args.destGUID) or self:Dispeller("magic") then
self:TargetMessageOld(args.spellId, args.destName, "yellow", "alarm", nil, nil, true)
self:TargetBar(args.spellId, 20, args.destName)
end
end
function mod:SoulStealBuff(args)
if self:Dispeller("magic", true) and not self:Dispeller("magic") then -- Only show 1 message to those who can dispel both (priests, restoration shamans)
self:TargetMessageOld(36778, args.destName, "yellow", "alarm", nil, nil, true)
end
end
function mod:Domination(args)
self:TargetMessageOld(args.spellId, args.destName, "red", "warning", nil, nil, true)
self:TargetBar(args.spellId, 6, args.destName)
end
function mod:SpitefulFury(args)
if self:Me(args.destGUID) or self:Tank() or self:Healer() then
self:TargetMessageOld(args.spellId, args.destName, "orange", "long", nil, nil, true)
self:TargetBar(args.spellId, 8, args.destName)
end
end
function mod:DebuffRemoved(args)
self:StopBar(args.spellName, args.destName)
end
do
local prev = 0
function mod:Meteor(args)
meteorsGoingOff = meteorsGoingOff + 1 -- just in case both Abyssals are pulled
castersCollector[args.sourceGUID] = true
if meteorsGoingOff == 1 then
self:OpenProximity(args.spellId, 10) -- not possible to detect its target, no helpful visual circle either
end
local t = GetTime()
if t - prev > 1 then
prev = t
self:MessageOld(args.spellId, "red", "warning", CL.incoming:format(args.spellName))
end
self:Bar(args.spellId, 2)
end
function mod:MeteorSuccess(args)
meteorsGoingOff = meteorsGoingOff - 1
castersCollector[args.sourceGUID] = nil
if meteorsGoingOff == 0 then
self:CloseProximity(args.spellId)
end
end
function mod:AbyssalDeath(args)
if castersCollector[args.destGUID] then
meteorsGoingOff = meteorsGoingOff - 1
castersCollector[args.destGUID] = nil
if meteorsGoingOff == 0 then
self:CloseProximity(38903)
end
end
end
end