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.

702 lines
23 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Stone Legion Generals", 2296, 2425)
if not mod then return end
mod:RegisterEnableMob(
168112, -- General Kaal
168113) -- General Grashaal
mod:SetEncounterID(2417)
mod:SetRespawnTime(30)
mod:SetStage(1)
--------------------------------------------------------------------------------
-- Locals
--
local intermission = false
local wickedBladeCount = 1
local heartRendCount = 1
local serratedSwipeCount = 1
local crystalizeCount = 1
local pulverizingMeteorCount = 1
local reverberatingLeapCount = 1
local seismicUphealvalCount = 1
local shadowForcesCount = 1
local isInfoOpen = false
local mobCollector = {}
local mobCollectorGoliath = {}
local skirmisherCount = 0
local skirmisherTracker = {}
local commandoesKilled = 0
local commandoesNeeded = 7
local commandoAddMarks = {}
local wickedLacerationList = {}
local firstGoliath = false
local playerListVolAnima = {}
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.first_blade = "First Blade" -- Wicked Blade
L.second_blade = "Second Blade"
L.skirmishers = "Skirmishers" -- Short for Stone Legion Skirmishers
L.eruption = "Eruption" -- Short for Reverberating Eruption
L.custom_on_stop_timers = "Always show ability bars"
L.custom_on_stop_timers_desc = "Just for testing right now"
L.goliath = -23101
L.goliath_short = "Goliath"
L.goliath_desc = "Show warnings and timers for when the Stone Legion Goliath is going to spawn."
L.goliath_icon = "Ability_deathknight_summongargoyle"
L.commando = -22791
L.commando_short = "Commando"
L.commando_desc = "Show warnings when a Stone Legion Commando is killed."
end
--------------------------------------------------------------------------------
-- Initialization
--
local wickedBladeMarker = mod:AddMarkerOption(false, "player", 2, 333387, 2, 3) -- Wicked Blade
local heartRendMarker = mod:AddMarkerOption(false, "player", 1, 334765, 1, 2, 3, 4) -- Heart Rend
local crystalizeMarker = mod:AddMarkerOption(false, "player", 1, 339690, 1) -- Crystalize
local skirmisherMarker = mod:AddMarkerOption(false, "npc", 8, -22761, 8, 7, 6) -- Stone Legion Skirmisher
local commandoMarker = mod:AddMarkerOption(false, "npc", 8, -22772, 8, 7, 6, 5) -- Stone Legion Commando
function mod:GetOptions()
return {
"berserk",
"custom_on_stop_timers",
"goliath",
"commando",
--[[ Stage One: Kaal's Assault ]]--
329636, -- Hardened Stone Form
{333387, "SAY"}, -- Wicked Blade
{333913, "INFOBOX"}, -- Wicked Laceration
wickedBladeMarker,
334765, -- Heart Rend
heartRendMarker,
{334929, "TANK"}, -- Serrated Swipe
{339690, "SAY", "SAY_COUNTDOWN", "ME_ONLY_EMPHASIZE"}, -- Crystalize
crystalizeMarker,
{342544, "SAY"}, -- Pulverizing Meteor
343063, -- Stone Spike
{342733, "FLASH"}, -- Ravenous Feast
343898, -- Soultaint Effigy
--[[ Intermission ]]--
332406, -- Anima Infusion
339885, -- Anima Infection
342722, -- Stonewrath Exhaust
332683, -- Shattering Blast
--[[ Stage Two: Grashaal's Blitz ]]--
329808, -- Hardened Stone Form
{342425, "TANK"}, -- Stone Fist
{344496, "SAY", "ME_ONLY_EMPHASIZE"}, -- Reverberating Eruption
334498, -- Seismic Upheaval
--[[ Mythic ]]--
342256, -- Call Shadow Forces
skirmisherMarker,
342655, -- Volatile Anima Infusion
340037, -- Volatile Stone Shell
342698, -- Volatile Anima Injection
commandoMarker,
},{
["berserk"] = "general",
[329636] = -22681, -- Stage One: Kaal's Assault
[332406] = "intermission",
[329808] = -22718, -- Stage Two: Grashaal's Blitz
[342256] = "mythic",
},{
["goliath"] = L.goliath_short, -- Stone Legion Goliath (Goliath)
["commando"] = L.commando_short, -- Stone Legion Commando (Commando)
[342544] = CL.meteor, -- Pulverizing Meteor (Meteor)
[344496] = L.eruption, -- Reverberating Eruption (Eruption)
}
end
function mod:OnBossEnable()
self:RegisterMessage("BigWigs_BarCreated", "BarCreated")
self:Log("SPELL_CAST_SUCCESS", "SummonReinforcements", 342255)
--[[ Stage One: Kaal's Assault ]]--
self:Log("SPELL_AURA_APPLIED", "HardenedStoneFormApplied", 329636)
self:Log("SPELL_AURA_REMOVED", "HardenedStoneFormRemoved", 329636)
self:Log("SPELL_CAST_START", "WickedBlade", 344230, 333387) -- Normal, Heroic
self:Log("SPELL_AURA_APPLIED", "WickedBladeApplied", 333377) -- Wicked Mark
self:Log("SPELL_AURA_REMOVED", "WickedBladeRemoved", 333377)
self:Log("SPELL_AURA_APPLIED", "WickedLaceration", 333913)
self:Log("SPELL_AURA_APPLIED_DOSE", "WickedLaceration", 333913)
self:Log("SPELL_AURA_REMOVED", "WickedLacerationRemoved", 333913)
self:Log("SPELL_CAST_START", "HeartRend", 334765)
self:Log("SPELL_CAST_SUCCESS", "HeartRendSuccess", 334765)
self:Log("SPELL_AURA_APPLIED", "HeartRendApplied", 334765)
self:Log("SPELL_AURA_REMOVED", "HeartRendRemoved", 334765)
self:Log("SPELL_CAST_START", "SerratedSwipe", 334929)
self:Log("SPELL_CAST_SUCCESS", "SerratedSwipeSuccess", 334929)
self:Log("SPELL_CAST_SUCCESS", "Crystalize", 339690)
self:Log("SPELL_AURA_APPLIED", "CrystalizeApplied", 339690)
self:Log("SPELL_AURA_REMOVED", "CrystalizeRemoved", 339690)
self:Log("SPELL_CAST_START", "PulverizingMeteor", 342544)
self:Log("SPELL_AURA_APPLIED", "StoneSpikeApplied", 343063)
self:Log("SPELL_AURA_APPLIED", "AnimaApplied", 332406, 339885) -- Anima Infusion, Anima Infection
self:Log("SPELL_CAST_START", "StonewrathExhaust", 342722)
self:Log("SPELL_CAST_START", "ShatteringBlast", 332683)
self:Log("SPELL_CAST_SUCCESS", "RavenousFeast", 342732) -- Faster than 342733
self:Log("SPELL_AURA_APPLIED", "SoultaintEffigy", 343898)
--[[ Stage Two: Grashaal's Blitz ]]--
self:Log("SPELL_AURA_APPLIED", "GraniteFormApplied", 329808)
self:Log("SPELL_AURA_REMOVED", "GraniteFormRemoved", 329808)
self:Log("SPELL_CAST_START", "StoneFist", 342425)
self:Log("SPELL_AURA_APPLIED", "StoneFistApplied", 342425)
self:Log("SPELL_AURA_APPLIED_DOSE", "StoneFistApplied", 342425)
self:Log("SPELL_CAST_START", "ReverberatingEruption", 344496)
self:Log("SPELL_CAST_START", "SeismicUpheaval", 334498)
--[[ Mythic ]]--
self:Log("SPELL_CAST_START", "CallShadowForces", 342256)
self:Log("SPELL_SUMMON", "SummonSkirmisher", 342259, 342257, 342258)
self:Log("SPELL_AURA_APPLIED", "VolatileAnimaAppliedInfusion", 342655)
self:Log("SPELL_AURA_APPLIED", "VolatileAnimaAppliedInfection", 342698)
self:Log("SPELL_AURA_APPLIED", "VolatileStoneShell", 340037)
self:Death("CommandoDeath", 169601) -- Stone Legion Commando
end
function mod:OnEngage()
wickedBladeCount = 1
heartRendCount = 1
serratedSwipeCount = 1
crystalizeCount = 1
pulverizingMeteorCount = 1
reverberatingLeapCount = 1
seismicUphealvalCount = 1
shadowForcesCount = 1
intermission = false
wickedLacerationList = {}
isInfoOpen = false
mobCollectorGoliath = {}
playerListVolAnima = {}
if self:Easy() then
firstGoliath = false
else
firstGoliath = true
end
self:SetStage(1)
self:Bar(334929, 8.2, CL.count:format(self:SpellName(334929), serratedSwipeCount)) -- Serrated Swipe
self:Bar(333387, self:Mythic() and 18 or 19, CL.count:format(self:SpellName(333387), wickedBladeCount)) -- Wicked Blade
self:Bar(334765, self:Mythic() and 32.5 or 30, CL.count:format(self:SpellName(334765), heartRendCount)) -- Heart Rend // It's either Heart Rend or Crystalize in Mythic
self:Bar(339690, self:Mythic() and 32.5 or 25, CL.count:format(self:SpellName(339690), crystalizeCount)) -- Crystalize
if self:Mythic() then
self:Bar(342256, 10.7, CL.count:format(L.skirmishers, shadowForcesCount)) -- Call Shadow Forces
self:Berserk(720)
end
-- Marking stuff
mobCollector = {}
skirmisherCount = 0
skirmisherTracker = {}
commandoesKilled = 0
commandoesNeeded = 7
commandoAddMarks = {}
if self:GetOption(skirmisherMarker) or self:GetOption(commandoMarker) then
self:RegisterTargetEvents("AddMarkTracker")
end
self:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT")
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()
local _, guid = self:GetBossId(172858) -- Stone Legion Goliath
if guid and not mobCollectorGoliath[guid] then
mobCollectorGoliath[guid] = true
self:Message("goliath", "cyan", CL.spawned:format(L.goliath_short), L.goliath_icon)
self:StopBar(L.goliath_short)
self:Bar(342733, 18) -- Ravenous Feast
self:PlaySound("goliath", "info")
end
end
function mod:SummonReinforcements()
if not firstGoliath then -- Avoid a message on boss engage (only happens on hc/mythic)
self:Message("goliath", "cyan", CL.custom_sec:format(L.goliath_short, 10), false)
else
firstGoliath = false
end
self:CDBar("goliath", 10, L.goliath_short, L.goliath_icon)
end
do
local abilitysToPause = {
[333387] = true, -- Wicked Blade
[334765] = true, -- Heart Rend
[339690] = true, -- Crystallize
[344496] = true, -- Reverberating Eruption
[334498] = true, -- Seismic Upheaval
}
local castPattern = CL.cast:gsub("%%s", ".+")
local function stopAtZeroSec(bar)
if bar.remaining < 0.15 then -- Pause at 0.0
bar:SetDuration(0.01) -- Make the bar look full
bar:Start()
bar:Pause()
bar:SetTimeVisibility(false)
end
end
function mod:BarCreated(_, _, bar, _, key, text)
if self:GetOption("custom_on_stop_timers") and abilitysToPause[key] and not text:match(castPattern) then
bar:AddUpdateFunction(stopAtZeroSec)
end
end
end
do
local throttle = false
local function Message()
throttle = false
mod:Message("commando", "cyan", CL.mob_killed:format(L.commando_short, commandoesKilled, commandoesNeeded), false) -- Stone Legion Commando
end
function mod:CommandoDeath(args)
if intermission then
commandoesKilled = commandoesKilled + 1
if not throttle then
throttle = true
self:SimpleTimer(Message, 1.5)
end
end
if self:GetOption(commandoMarker) then
for i = 8, 5, -1 do -- 8, 7, 6, 5
if commandoAddMarks[i] == args.destGUID then
commandoAddMarks[i] = nil
return
end
end
end
end
end
function mod:SummonSkirmisher(args)
skirmisherCount = skirmisherCount + 1
local icon = 9-skirmisherCount
skirmisherTracker[args.destGUID] = icon
end
function mod:AddMarkTracker(event, unit, guid)
if guid and not mobCollector[guid] then
local mobId = self:MobId(guid)
if self:GetOption(skirmisherMarker) and skirmisherTracker[guid] then -- Stone Legion Skirmisher
self:CustomIcon(skirmisherMarker, unit, skirmisherTracker[guid])
mobCollector[guid] = true
elseif self:GetOption(commandoMarker) and mobId == 169601 then -- Stone Legion Commando
if self:GetHealth(unit) < 75 then -- They are 72% when they are on the floor, 100% when flying around
for i = 8, 5, -1 do -- 8, 7, 6, 5
if not commandoAddMarks[i] then
mobCollector[guid] = true
commandoAddMarks[i] = guid
self:CustomIcon(commandoMarker, unit, i)
return
end
end
end
end
end
end
--[[ Stage One: Kaal's Assault ]]--
function mod:HardenedStoneFormApplied(args)
self:Message(args.spellId, "green", CL.intermission)
self:PlaySound(args.spellId, "long")
self:Bar("goliath", 10, L.goliath_short, L.goliath_icon)
intermission = true
commandoAddMarks = {}
commandoesKilled = 0
self:StopBar(CL.count:format(L.skirmishers, shadowForcesCount)) -- Call Shadow Forces
shadowForcesCount = 1
end
function mod:HardenedStoneFormRemoved(args)
self:StopBar(CL.count:format(self:SpellName(334765), heartRendCount)) -- Heart Rend
self:StopBar(CL.count:format(self:SpellName(334929), serratedSwipeCount)) -- Serrated Swipe
self:StopBar(CL.count:format(self:SpellName(333387), wickedBladeCount)) -- Wicked Blade
self:StopBar(CL.count:format(self:SpellName(339690), crystalizeCount)) -- Crystalize
self:SetStage(2)
self:Message(args.spellId, "green", CL.stage:format(2))
self:PlaySound(args.spellId, "long")
heartRendCount = 1
serratedSwipeCount = 1
crystalizeCount = 1
pulverizingMeteorCount = 1
reverberatingLeapCount = 1
seismicUphealvalCount = 1
wickedBladeCount = 1
self:Bar(342425, 23) -- Stone Fist
self:Bar(339690, 14.5, CL.count:format(self:SpellName(339690), crystalizeCount)) -- Crystalize
self:Bar(344496, 33, CL.count:format(L.eruption, reverberatingLeapCount)) -- Reverberating Eruption
self:Bar(334498, 45, CL.count:format(self:SpellName(334498), seismicUphealvalCount)) -- Seismic Upheaval
self:Bar(333387, 25.5, CL.count:format(self:SpellName(333387), wickedBladeCount)) -- Wicked Blade
end
do
local playerList, onMe, firstGUID = {}, false, nil
local function printTarget(self, target, guid)
if #playerList ~= 0 then -- Compensate for sometimes taking a very long time (0.5s+) to pick a target by using this fallback
if not self:Me(guid) and onMe then
self:Say(333387, L.second_blade)
self:PlaySound(333387, "warning")
end
if self:GetOption(wickedBladeMarker) then
for i = 1, #playerList do
local name = playerList[i]
self:CustomIcon(wickedBladeMarker, name, name == target and 2 or 3)
end
end
else
firstGUID = guid
playerList[1] = target
end
if self:Me(guid) then
self:Say(333387, L.first_blade)
self:PlaySound(333387, "warning")
end
end
function mod:WickedBlade(args)
playerList = {}
firstGUID = nil
self:StopBar(CL.count:format(args.spellName, wickedBladeCount))
self:GetNextBossTarget(printTarget, args.sourceGUID, 1)
wickedBladeCount = wickedBladeCount + 1
self:Bar(333387, 30.5, CL.count:format(args.spellName, wickedBladeCount))
end
function mod:WickedBladeApplied(args)
if not firstGUID then -- Compensate for sometimes taking a very long time (0.5s+) to pick a target by using this fallback
playerList[#playerList+1] = args.destName
if self:Me(args.destGUID) then
onMe = true
self:Say(333387)
self:PlaySound(333387, "warning")
end
if #playerList == 2 then
--if self:GetOption(wickedBladeMarker) then -- Are potentially wrong marks better than potentially no marks?
-- self:CustomIcon(wickedBladeMarker, playerList[1], 2)
-- self:CustomIcon(wickedBladeMarker, playerList[2], 3)
--end
self:NewTargetsMessage(333387, "orange", playerList, 2, CL.count:format(self:SpellName(333387), wickedBladeCount-1))
end
elseif firstGUID and firstGUID ~= args.destGUID then
if self:Me(args.destGUID) then
self:Say(333387, L.second_blade)
self:PlaySound(333387, "warning")
end
playerList[2] = args.destName
self:CustomIcon(wickedBladeMarker, playerList[1], 2)
self:CustomIcon(wickedBladeMarker, playerList[2], 3)
self:NewTargetsMessage(333387, "orange", playerList, 2, CL.count:format(self:SpellName(333387), wickedBladeCount-1))
end
end
function mod:WickedBladeRemoved(args)
if self:Me(args.destGUID) then
onMe = false
end
self:CustomIcon(wickedBladeMarker, args.destName)
end
end
function mod:WickedLaceration(args)
if not isInfoOpen then
isInfoOpen = true
self:OpenInfo(args.spellId, args.spellName)
end
wickedLacerationList[args.destName] = args.amount or 1
self:SetInfoByTable(args.spellId, wickedLacerationList)
end
function mod:WickedLacerationRemoved(args)
wickedLacerationList[args.destName] = nil
if next(wickedLacerationList) then
self:SetInfoByTable(args.spellId, wickedLacerationList)
elseif isInfoOpen then
isInfoOpen = false
self:CloseInfo(args.spellId)
end
end
do
local playerList = {}
local prevStage, prevCount = 1, 0
function mod:HeartRend(args)
playerList = {}
prevStage = self:GetStage()
prevCount = heartRendCount
end
function mod:HeartRendSuccess(args)
if self:GetStage() == prevStage then -- Only if we didn't transition during cast
self:StopBar(CL.count:format(args.spellName, heartRendCount))
heartRendCount = heartRendCount + 1
self:Bar(args.spellId, 42.5, CL.count:format(args.spellName, heartRendCount))
end
if self:Dispeller("magic") then
self:PlaySound(args.spellId, "alarm")
end
end
function mod:HeartRendApplied(args)
local count = #playerList+1
playerList[count] = args.destName
playerList[args.destName] = count -- Set raid marker
if self:Me(args.destGUID) and not self:Dispeller("magic") then
self:PlaySound(args.spellId, "alarm")
end
self:CustomIcon(heartRendMarker, args.destName, count)
if self:GetStage() ~= prevStage then -- We transitioned during the cast and heartRendCount was reset to 1
self:NewTargetsMessage(args.spellId, "orange", playerList, self:Mythic() and 4 or 3, CL.count:format(args.spellName, prevCount))
else
self:NewTargetsMessage(args.spellId, "orange", playerList, self:Mythic() and 4 or 3, CL.count:format(args.spellName, heartRendCount-1))
end
end
function mod:HeartRendRemoved(args)
self:CustomIcon(heartRendMarker, args.destName)
end
end
function mod:SerratedSwipe(args)
self:StopBar(CL.count:format(args.spellName, serratedSwipeCount))
self:Message(args.spellId, "yellow", CL.count:format(args.spellName, serratedSwipeCount))
self:PlaySound(args.spellId, "info")
end
function mod:SerratedSwipeSuccess(args)
serratedSwipeCount = serratedSwipeCount + 1
self:CDBar(args.spellId, 21.9, CL.count:format(args.spellName, serratedSwipeCount)) -- to _start
end
function mod:Crystalize(args)
self:StopBar(CL.count:format(args.spellName, crystalizeCount))
crystalizeCount = crystalizeCount + 1
self:CDBar(args.spellId, self:Mythic() and 55 or 50, CL.count:format(args.spellName, crystalizeCount))
end
do
local prevGUID = nil
function mod:CrystalizeApplied(args)
prevGUID = args.destGUID
self:TargetMessage(args.spellId, "yellow", args.destName, CL.count:format(args.spellName, crystalizeCount-1))
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:SayCountdown(args.spellId, 5)
self:PlaySound(args.spellId, "warning")
end
self:CustomIcon(crystalizeMarker, args.destName, 1)
end
function mod:CrystalizeRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
self:CustomIcon(crystalizeMarker, args.destName)
end
function mod:PulverizingMeteor(args)
if self:Me(prevGUID) then
self:Yell(args.spellId, CL.meteor) -- Meteor
end
self:Message(args.spellId, "orange", CL.count:format(CL.meteor, pulverizingMeteorCount))
self:PlaySound(args.spellId, "alert")
pulverizingMeteorCount = pulverizingMeteorCount + 1
end
end
function mod:StoneSpikeApplied(args)
if self:Me(args.destGUID) then
self:PersonalMessage(args.spellId)
self:PlaySound(args.spellId, "alarm")
end
end
function mod:AnimaApplied(args)
if self:Me(args.destGUID) then
self:Message(args.spellId, "green", CL.you:format(args.spellName))
self:PlaySound(args.spellId, "info")
end
end
function mod:StonewrathExhaust(args)
self:Message(args.spellId, "yellow")
self:PlaySound(args.spellId, "alert")
end
function mod:ShatteringBlast(args)
self:Message(args.spellId, "red")
self:PlaySound(args.spellId, "warning")
self:CastBar(args.spellId, 5)
intermission = false
end
--[[ Stage Two: Grashaal's Blitz ]]--
function mod:GraniteFormApplied(args)
self:Message(args.spellId, "green", CL.intermission)
self:PlaySound(args.spellId, "long")
self:Bar("goliath", 10, L.goliath_short, L.goliath_icon)
commandoAddMarks = {}
commandoesKilled = 0
intermission = true
self:StopBar(CL.count:format(self:SpellName(334498), seismicUphealvalCount)) -- Seismic Upheaval
self:StopBar(CL.count:format(L.skirmishers, shadowForcesCount)) -- Call Shadow Forces
shadowForcesCount = 1
end
function mod:GraniteFormRemoved(args)
self:StopBar(CL.count:format(self:SpellName(333387), wickedBladeCount)) -- Wicked Blade
self:StopBar(CL.count:format(self:SpellName(334765), heartRendCount)) -- Heart Rend
self:StopBar(CL.count:format(self:SpellName(339690), crystalizeCount)) -- Crystalize
self:StopBar(CL.count:format(L.eruption, reverberatingLeapCount)) -- Reverberating Eruption
self:StopBar(343086) -- Ricocheting Shuriken
self:SetStage(3)
self:Message(args.spellId, "green", CL.stage:format(3))
self:PlaySound(args.spellId, "long")
--reverberatingLeapCount = 1 -- We dont reset as soaking is counting up from stage 2 + intermission
heartRendCount = 1
serratedSwipeCount = 1
wickedBladeCount = 1
seismicUphealvalCount = 1
crystalizeCount = 1
pulverizingMeteorCount = 1
self:Bar(334929, 9, CL.count:format(self:SpellName(334929), serratedSwipeCount)) -- Serrated Swipe
self:Bar(342425, 16) -- Stone Fist
self:Bar(339690, 7.5, CL.count:format(self:SpellName(339690), crystalizeCount)) -- Crystalize
self:Bar(333387, 20, CL.count:format(self:SpellName(333387), wickedBladeCount)) -- Wicked Blade
self:Bar(344496, 26, CL.count:format(L.eruption, reverberatingLeapCount)) -- Reverberating Eruption
self:Bar(334765, 33, CL.count:format(self:SpellName(334765), heartRendCount)) -- Heart Rend
self:Bar(334498, 39, CL.count:format(self:SpellName(334498), seismicUphealvalCount)) -- Seismic Upheaval
end
function mod:StoneFist(args)
self:CDBar(args.spellId, 19)
end
function mod:StoneFistApplied(args)
local amount = args.amount or 1
if amount == 1 then
self:TargetMessage(args.spellId, "purple", args.destName)
else
self:NewStackMessage(args.spellId, "purple", args.destName, amount)
end
self:PlaySound(args.spellId, "warning")
end
do
local function printTarget(self, player, guid)
if self:Me(guid) then
self:Say(344496, L.eruption) -- Eruption
self:PlaySound(344496, "warning")
end
self:TargetMessage(344496, "red", player, CL.count:format(L.eruption, reverberatingLeapCount-1))
end
function mod:ReverberatingEruption(args)
self:StopBar(CL.count:format(L.eruption, reverberatingLeapCount))
self:GetNextBossTarget(printTarget, args.sourceGUID)
reverberatingLeapCount = reverberatingLeapCount + 1
self:CDBar(args.spellId, 30, CL.count:format(L.eruption, reverberatingLeapCount))
end
end
function mod:SeismicUpheaval(args)
self:StopBar(CL.count:format(args.spellName, seismicUphealvalCount))
self:Message(args.spellId, "orange", CL.count:format(args.spellName, seismicUphealvalCount))
self:PlaySound(args.spellId, "long")
seismicUphealvalCount = seismicUphealvalCount + 1
self:CDBar(args.spellId, self:Mythic() and 26 or 28, CL.count:format(args.spellName, seismicUphealvalCount))
end
--[[ Mythic ]]--
function mod:CallShadowForces(args)
self:Message(args.spellId, "cyan", CL.count:format(L.skirmishers, shadowForcesCount))
self:PlaySound(args.spellId, "long")
skirmisherCount = 0 -- Reset for a new wave
shadowForcesCount = shadowForcesCount + 1
self:CDBar(args.spellId, 52, CL.count:format(L.skirmishers, shadowForcesCount))
end
function mod:VolatileAnimaAppliedInfusion(args)
playerListVolAnima[#playerListVolAnima+1] = args.destName
if self:Me(args.destGUID) then
self:PlaySound(args.spellId, "alert")
end
self:NewTargetsMessage(args.spellId, "cyan", playerListVolAnima, nil, nil, nil, 2) -- Throttle to 2s
end
function mod:VolatileAnimaAppliedInfection(args)
self:TargetMessage(args.spellId, "cyan", args.destName)
if self:Me(args.destGUID) then
self:PlaySound(args.spellId, "alert")
end
end
do
local prev = 0
function mod:VolatileStoneShell(args)
local t = args.time
if t-prev > 2 then
prev = t
self:Message(args.spellId, "orange")
self:PlaySound(args.spellId, "alarm")
end
end
end
function mod:RavenousFeast(args)
self:TargetMessage(342733, "red", args.destName)
if self:Me(args.destGUID) then
self:PlaySound(342733, "warning")
self:Flash(342733)
end
self:Bar(342733, self:Mythic() and 24.3 or 18.2) -- Ravenous Feast
end
function mod:SoultaintEffigy(args)
self:Message(args.spellId, "yellow", CL.percent:format(30, args.spellName))
self:PlaySound(args.spellId, "alert")
self:StopBar(342733) -- Ravenous Feast
end