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
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
|
|
|