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.

504 lines
14 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Nighthold Trash", 1530)
if not mod then return end
mod.displayName = CL.trash
mod:RegisterEnableMob(
--[[ Skorpyron to Chronomatic Anomaly ]]--
115914, -- Torm the Brute
111081, -- Fulminant
111072, -- Pulsauron
--[[ Chronomatic Anomaly to Trilliax ]]--
112255, -- Sludgerax
--[[ Trilliax to Aluriel ]]--
116008, -- Kar'zun
112712, -- Gilded Guardian
112671, -- Duskwatch Battle-Magus
113307, -- Chronowraith
112665, -- Nighthold Protector
--[[ Aluriel to Etraeus ]]--
112803, -- Astrologer Jarin
--[[ Aluriel to Telarn ]]--
112638, -- Astral Defender
112973, -- Duskwatch Weaver
112595, -- Shal'dorei Archmage
111295, -- Domesticated Manasaber
112678, -- Shal'dorei Naturalist
--[[ Aluriel to Krosus ]]--
111210, -- Searing Infernal
--[[ Aluriel to Tichondrius ]]--
113012, -- Felsworn Chaos-Mage
113043 -- Abyss Watcher
)
--------------------------------------------------------------------------------
-- Locals
--
local list = mod:NewTargetList()
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
--[[ Skorpyron to Trilliax ]]--
L.torm = "Torm the Brute"
L.fulminant = "Fulminant"
L.pulsauron = "Pulsauron"
--[[ Chronomatic Anomaly to Trilliax ]]--
L.sludgerax = "Sludgerax"
--[[ Trilliax to Aluriel ]]--
L.karzun = "Kar'zun"
L.guardian = "Gilded Guardian"
L.battle_magus = "Duskwatch Battle-Magus"
L.chronowraith = "Chronowraith"
L.protector = "Nighthold Protector"
--[[ Aluriel to Etraeus ]]--
L.jarin = "Astrologer Jarin"
--[[ Aluriel to Telarn ]]--
L.defender = "Astral Defender"
L.weaver = "Duskwatch Weaver"
L.archmage = "Shal'dorei Archmage"
L.manasaber = "Domesticated Manasaber"
L.naturalist = "Shal'dorei Naturalist"
--[[ Aluriel to Krosos ]]--
L.infernal = "Searing Infernal"
--[[ Aluriel to Tichondrius ]]--
L.chaosmage = "Felsworn Chaos-Mage"
L.watcher = "Abyss Watcher"
L.fear = "{224944} ({5782})"
L.fear_desc = 224944
L.fear_icon = 224944
end
--------------------------------------------------------------------------------
-- Initialization
--
local wrapMarker = mod:AddMarkerOption(true, "npc", 8, 230994, 8, 7, 6) -- Shadow Wrap
function mod:GetOptions()
return {
--[[ Skorpyron to Chronomatic Anomaly ]]--
230438, -- Devastating Strike (Torm)
{231086, "SAY", "FLASH"}, -- Bolder Strike (Torm)
230482, -- Rumbling Blow (Torm)
230488, -- Rumbling Ground (Torm)
221164, -- Fulminate (Fulminant)
221160, -- Compress the Void (Pulsauron)
--[[ Chronomatic Anomaly to Trilliax ]]--
{223655, "SAY", "FLASH", "ICON"}, -- Oozing Rush (Sludgerax)
--[[ Trilliax to Aluriel ]]--
{230994, "SAY"}, -- Shadow Wrap (Kar'zun)
wrapMarker,
231005, -- Arcane Emanations (Kar'zun)
225927, -- Gravity Well (Gilded Guardian)
{224440, "FLASH"}, -- Crushing Stomp (Gilded Guardian)
224510, -- Crackling Slice (Duskwatch Battle-Magus)
225412, -- Mass Siphon (Chronowraith)
224568, -- Mass Suppress (Nighthold Protector)
224572, -- Disrupting Energy (Nighthold Protector)
--[[ Aluriel to Etraeus ]]--
{224632, "SAY", "SAY_COUNTDOWN", "FLASH"}, -- Heavenly Crash (Astrologer Jarin)
--[[ Aluriel to Telarn ]]--
225390, -- Stellar Dust (Astral Defender)
{225845, "FLASH"}, -- Chosen Fate (Duskwatch Weaver)
{225105, "FLASH", "SAY", "PROXIMITY"}, -- Arcanic Release (Shal'dorei Archmage)
225800, -- Greater Time Warp (Shal'dorei Archmage)
{225857, "TANK"}, -- Arcane Wound (Domesticated Manasaber)
225856, -- Poison Brambles (Shal'dorei Naturalist)
--[[ Aluriel to Krosos ]]--
{221344, "SAY", "FLASH"}, -- Annihilating Orb (Searing Infernal)
--[[ Aluriel to Tichondrius ]]--
{"fear", "SAY", "FLASH"}, -- Will of the Legion (Felsworn Chaos-Mage)
{224982, "SAY", "FLASH"}, -- Fel Glare (Abyss Watcher)
}, {
[230438] = L.torm,
[221164] = L.fulminant,
[221160] = L.pulsauron,
[223655] = L.sludgerax,
[230994] = L.karzun,
[225927] = L.guardian,
[224510] = L.battle_magus,
[225412] = L.chronowraith,
[224568] = L.protector,
[224632] = L.jarin,
[225390] = L.defender,
[225845] = L.weaver,
[225105] = L.archmage,
[225857] = L.manasaber,
[225856] = L.naturalist,
[221344] = L.infernal,
["fear"] = L.chaosmage,
[224982] = L.watcher,
}
end
function mod:OnBossEnable()
--[[ General ]]--
self:RegisterMessage("BigWigs_OnBossEngage", "Disable")
-- Rumbling Ground, Disrupting Energy, Poison Brambles, Stellar Dust
self:Log("SPELL_AURA_APPLIED", "GroundEffectDamage", 230488, 224572, 225856, 225390)
self:Log("SPELL_PERIODIC_DAMAGE", "GroundEffectDamage", 230488, 224572, 225856, 225390)
self:Log("SPELL_PERIODIC_MISSED", "GroundEffectDamage", 230488, 224572, 225856, 225390)
--[[ Skorpyron to Chronomatic Anomaly ]]--
self:Log("SPELL_CAST_START", "DevastatingStrike", 230438)
self:Log("SPELL_CAST_START", "BolderStrike", 231086)
self:Log("SPELL_CAST_START", "RumblingBlow", 230482)
self:Death("TormDeath", 115914)
self:Log("SPELL_CAST_START", "Fulminate", 221164)
self:Log("SPELL_CAST_SUCCESS", "CompressTheVoid", 221160)
--[[ Chronomatic Anomaly to Trilliax ]]--
self:Log("SPELL_CAST_START", "OozingRushStart", 223655)
self:Log("SPELL_AURA_APPLIED", "OozingRush", 223655)
self:Log("SPELL_AURA_REMOVED", "OozingRushRemoved", 223655)
--[[ Trilliax to Aluriel ]]--
self:Log("SPELL_AURA_APPLIED", "ShadowWrap", 230994)
self:Log("SPELL_SUMMON", "ShadowWrapSummon", 230993)
self:Log("SPELL_CAST_START", "ArcaneEmanations", 231005)
self:Log("SPELL_CAST_START", "GravityWell", 225927)
self:Log("SPELL_CAST_START", "CrushingStomp", 224440)
self:Death("GuardianDeath", 112712)
self:Log("SPELL_CAST_START", "CracklingSlice", 224510)
self:Log("SPELL_CAST_SUCCESS", "MassSiphon", 225412)
self:Death("ChronowraithDeath", 113307)
self:Log("SPELL_CAST_START", "MassSuppress", 224568)
--[[ Aluriel to Etraeus ]]--
self:Log("SPELL_AURA_APPLIED", "HeavenlyCrash", 224632)
self:Log("SPELL_AURA_REMOVED", "HeavenlyCrashRemoved", 224632)
--[[ Aluriel to Telarn ]]--
self:Log("SPELL_AURA_APPLIED", "ChosenFate", 225845)
self:Log("SPELL_AURA_APPLIED", "ArcanicRelease", 225105)
self:Log("SPELL_AURA_REMOVED", "ArcanicReleaseRemoved", 225105)
self:Log("SPELL_CAST_SUCCESS", "GreaterTimeWarp", 225800)
self:Log("SPELL_AURA_APPLIED", "ArcaneWound", 225857)
self:Log("SPELL_AURA_APPLIED_DOSE", "ArcaneWound", 225857)
--[[ Aluriel to Krosos ]]--
self:Log("SPELL_AURA_APPLIED", "AnnihilatingOrb", 221344)
self:Log("SPELL_AURA_REMOVED", "AnnihilatingOrbRemoved", 221344)
self:Death("InfernalDeath", 111210)
--[[ Aluriel to Tichondrius ]]--
self:Log("SPELL_AURA_APPLIED", "WillOfTheLegion", 224944)
self:Log("SPELL_AURA_REMOVED", "WillOfTheLegionRemoved", 224944)
self:Log("SPELL_AURA_APPLIED", "FelGlare", 224982)
end
--------------------------------------------------------------------------------
-- Event Handlers
--
--[[ General ]]--
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(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
--[[ Skorpyron to Chronomatic Anomaly ]]--
function mod:DevastatingStrike(args)
self:MessageOld(args.spellId, "red", "alarm")
self:CDBar(args.spellId, 7.5)
end
do
local function printTarget(self, player, guid)
self:TargetMessageOld(231086, player, "orange", "long", nil, nil, true)
if self:Me(guid) then
self:Say(231086)
self:Flash(231086)
end
end
function mod:BolderStrike(args)
self:GetUnitTarget(printTarget, 0.3, args.sourceGUID)
end
end
function mod:RumblingBlow(args)
self:MessageOld(args.spellId, "yellow", "info")
end
function mod:TormDeath()
self:StopBar(230438) -- Devastating Strike
end
do
local prev, fulminateCount = 0, 0
function mod:Fulminate(args)
local t = GetTime()
if t-prev > 2 then
prev = t
self:MessageOld(args.spellId, "red", "alarm")
end
local pad = strrep(" ", fulminateCount) -- hack so i can have two bars/messages for the same thing up
self:Bar(args.spellId, 5, CL.cast:format(args.spellName)..pad)
fulminateCount = 1 - fulminateCount
end
end
do
local prev = 0
function mod:CompressTheVoid(args)
local t = GetTime()
if t-prev > 2 then
prev = t
self:MessageOld(args.spellId, "orange", t-prev > 2 and "long")
self:Bar(args.spellId, 15)
end
end
end
--[[ Chronomatic Anomaly to Trilliax ]]--
do
local prev = nil
local function printTarget(self, player, guid)
prev = player
self:TargetMessageOld(223655, player, "red", "warning")
self:PrimaryIcon(223655, player)
if self:Me(guid) then
self:Say(223655)
self:Flash(223655)
end
end
function mod:OozingRushStart(args)
self:GetUnitTarget(printTarget, 0.5, args.sourceGUID)
end
function mod:OozingRush(args)
self:TargetBar(args.spellId, 10, args.destName)
if prev ~= args.destName then
printTarget(self, args.destName, args.destGUID)
end
end
function mod:OozingRushRemoved(args)
self:StopBar(args.spellId, args.destName)
self:PrimaryIcon(args.spellId)
end
end
--[[ Trilliax to Aluriel ]]--
do
local wraps = {}
local wrapCount = 8
function mod:MarkShadowWrap(event, unit, guid)
if wraps[guid] then
self:CustomIcon(false, unit, wraps[guid])
wraps[guid] = nil
end
end
function mod:ShadowWrapSummon(args)
if self:GetOption(wrapMarker) then
wraps[args.destGUID] = wrapCount
wrapCount = wrapCount - 1
end
end
function mod:ShadowWrap(args)
list[#list+1] = args.destName
if #list == 1 then
if self:GetOption(wrapMarker) then
wraps = {}
wrapCount = 8
self:RegisterTargetEvents("MarkShadowWrap")
self:ScheduleTimer("UnregisterTargetEvents", 10)
end
self:ScheduleTimer("TargetMessageOld", 0.3, args.spellId, list, "yellow", "warning", nil, nil, true)
end
if self:Me(args.destGUID) then
self:Say(args.spellId)
end
end
end
function mod:ArcaneEmanations(args)
self:MessageOld(args.spellId, "red", "long", CL.casting:format(args.spellName))
end
function mod:GravityWell(args)
self:MessageOld(args.spellId, "yellow", "info")
self:CDBar(args.spellId, 23)
end
function mod:CrushingStomp(args)
self:MessageOld(args.spellId, "orange", "warning")
self:CDBar(args.spellId, 23)
self:Flash(args.spellId)
end
function mod:GuardianDeath()
self:StopBar(225927) -- Gravity Well
self:StopBar(224440) -- Crushing Stomp
end
do
local prev = 0
function mod:CracklingSlice(args)
local t = GetTime()
if t-prev > 2 then
prev = t
self:MessageOld(args.spellId, "yellow", "long")
end
end
end
function mod:MassSiphon(args)
self:MessageOld(args.spellId, "orange", self:Interrupter(args.sourceGUID) and "info", CL.casting:format(args.spellName))
self:Bar(args.spellId, 15)
end
function mod:ChronowraithDeath()
self:StopBar(225412) -- Mass Siphon
end
function mod:MassSuppress(args)
self:MessageOld(args.spellId, "yellow", self:Interrupter(args.sourceGUID) and "long")
end
--[[ Aluriel to Etraeus ]]--
function mod:HeavenlyCrash(args)
self:TargetMessageOld(args.spellId, args.destName, "orange", "warning", nil, nil, true)
local _, _, _, expires = self:UnitDebuff(args.destName, args.spellId)
local t = expires - GetTime()
self:TargetBar(args.spellId, t, args.destName)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
self:SayCountdown(args.spellId, t)
end
end
function mod:HeavenlyCrashRemoved(args)
self:StopBar(args.spellId, args.destName)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
end
--[[ Aluriel to Telarn ]]--
function mod:ChosenFate(args)
if self:Me(args.destGUID) then
self:TargetMessageOld(args.spellId, args.destName, "blue", "warning")
self:Flash(args.spellId)
end
end
function mod:ArcanicRelease(args)
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 1, args.spellId, list, "yellow", "alert", nil, nil, true)
end
self:TargetBar(args.spellId, 6, args.destName)
if self:Me(args.destGUID) then
self:OpenProximity(args.spellId, 8)
self:Say(args.spellId)
self:Flash(args.spellId)
end
end
function mod:ArcanicReleaseRemoved(args)
self:StopBar(args.spellName, args.destName)
if self:Me(args.destGUID) then
self:CloseProximity(args.spellId)
end
end
do
local prev = 0
function mod:GreaterTimeWarp(args)
local t = GetTime()
if t-prev > 0.5 then
prev = t
self:MessageOld(args.spellId, "red", self:Dispeller("magic", true) and "info")
end
end
end
function mod:ArcaneWound(args)
if self:Tank(args.destName) then
local amount = args.amount or 1
self:StackMessage(args.spellId, args.destName, amount, "red", amount > 3 and "warning")
self:StopBar(CL.count:format(args.spellName, amount-1), args.destName)
self:TargetBar(args.spellId, 20, args.destName, CL.count:format(args.spellName, amount))
end
end
--[[ Aluriel to Krosos ]]--
function mod:AnnihilatingOrb(args)
self:TargetMessageOld(args.spellId, args.destName, "red", "warning")
self:TargetBar(args.spellId, 5, args.destName, 230932, args.spellId) -- Orb
self:Bar(args.spellId, 35)
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:Flash(args.spellId)
end
end
function mod:AnnihilatingOrbRemoved(args)
self:StopBar(230932, args.destName) -- Orb
end
function mod:InfernalDeath()
self:StopBar(221344) -- Annihilating Orb
end
--[[ Aluriel to Tichondrius ]]--
function mod:WillOfTheLegion(args)
local fear = self:SpellName(5782) -- "Fear"
self:TargetMessageOld("fear", args.destName, "red", "long", fear, args.spellId, true)
self:TargetBar("fear", 10, args.destName, fear, args.spellId)
if self:Me(args.destGUID) then
self:Say("fear", fear)
elseif self:Dispeller("magic") then
self:Flash("fear", args.spellId)
end
end
function mod:WillOfTheLegionRemoved(args)
self:StopBar(5782, args.destName) -- "Fear"
end
function mod:FelGlare(args)
self:TargetMessageOld(args.spellId, args.destName, "red", "warning", nil, nil, true)
self:TargetBar(args.spellId, 10, args.destName)
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:Flash(args.spellId)
end
end