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.

353 lines
14 KiB

local mod = DBM:NewMod(2524, "DBM-Aberrus", nil, 1208)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20230407084118")
mod:SetCreatureID(199659)--Warlord Kagni
mod:SetEncounterID(2682)
--mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(20230406000000)
--mod:SetMinSyncRevision(20221215000000)
--mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 404585 401258 401867 408959 397383 409271 401108 407009 410351 397386 397514",
"SPELL_CAST_SUCCESS 401401",
"SPELL_AURA_APPLIED 401867 402066 401381 409275 408873 410353 401452",
"SPELL_AURA_APPLIED_DOSE 408873 410353",
"SPELL_AURA_REMOVED 401867 402066 401452",
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED",
"UNIT_DIED",
"UNIT_SPELLCAST_SUCCEEDED boss1"
)
--[[
(ability.id = 410516 or ability.id = 401258 or ability.id = 408959 or ability.id = 409271 or ability.id = 401108 or ability.id = 407009 or ability.id = 410351 or ability.id = 397514) and type = "begincast"
or (ability.id = 404585 or ability.id = 397386 or ability.id = 397383 or ability.id = 401867) and type = "begincast"
--]]
--TODO, refine slam and door aoe stack warnings for Barrier Backfire?
--TODO, nameplate aura for https://www.wowhead.com/ptr/spell=410740/from-the-ashes ? need to make sure it actually has nameplate first
--TODO, can lava flow be dodged? if so probably should be emphasized, if not, cast alert should be removed
--TOOD, adds timers when cleaner way to detect spawns, as well as timers for their initial casts
--TODO, stage 2 https://www.wowhead.com/ptr/spell=406585/ignaras-fury fury timer?
--TODO, Devastating Slam may be sequenced but needs bigger sample size
--General
local warnBatteringSlam = mod:NewCastAnnounce(404585, 3)
--local specWarnGTFO = mod:NewSpecialWarningGTFO(370648, nil, nil, nil, 1, 8)
--local berserkTimer = mod:NewBerserkTimer(600)
--Stage One: The Zaqali Forces
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26604))
----Ignara (Mythic Only)
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26737))
local warnPhoenixRush = mod:NewCountAnnounce(401108, 3)
local specWarnAwakenedFocus = mod:NewSpecialWarningRun(401381, nil, nil, nil, 4, 2, 4)
local specWarnVigorousGale = mod:NewSpecialWarningCount(407009, nil, nil, nil, 2, 13, 4)
local timerPhoenixRushCD = mod:NewAITimer(29.9, 401108, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerVigorousGaleCD = mod:NewAITimer(29.9, 407009, nil, nil, nil, 2, nil, DBM_COMMON_L.MYTHIC_ICON)
----Warlord Kagni
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26209))
local warnHeavyCudgel = mod:NewStackAnnounce(401258, 2, nil, "Tank|Healer")
local specWarnHeavyCudgel = mod:NewSpecialWarningDefensive(401258, nil, nil, nil, 1, 2)
local specWarnHeavyCudgelStack = mod:NewSpecialWarningStack(401258, nil, 2, nil, nil, 1, 6)
local specWarnHeavyCudgelSwap = mod:NewSpecialWarningTaunt(401258, nil, nil, nil, 1, 2)
local specWarnDevastatingLeap = mod:NewSpecialWarningDodgeCount(408959, nil, nil, nil, 2, 2)
local timerHeavyCudgelCD = mod:NewCDCountTimer(21.0, 401258, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerDevastatingLeapCD = mod:NewCDCountTimer(29.9, 408959, nil, nil, nil, 3)
----Magma Mystic
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26217))
local warnMoltenBarrier = mod:NewCastAnnounce(397383, 4)
local warnMagmaFlowCast = mod:NewCastAnnounce(409271, 2)
local warnMagmaFlow = mod:NewTargetNoFilterAnnounce(409271, 2, nil, "RemoveMagic")
local specWarnLavaBolt = mod:NewSpecialWarningInterruptCount(397386, "HasInterrupt", nil, nil, 1, 2)--3.7 CD
local timerMoltenBarrierCD = mod:NewAITimer(29.9, 397383, nil, nil, nil, 2)
local timerMagmaFlowCD = mod:NewCDTimer(20.7, 409271, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)
----Obsidian Guard
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26210))
local warnVolcanicShield = mod:NewCastAnnounce(401867, 4)
--local specWarnVolcanicShield = mod:NewSpecialWarningYou(401867, nil, nil, nil, 2, 2)
--local yellVolcanicShield = mod:NewShortYell(401867)
--local yellVolcanicShieldFades = mod:NewShortFadesYell(401867)
local timerVolcanicShieldCD = mod:NewAITimer(29.9, 401867, nil, nil, nil, 3)
----Flamebound Huntsman
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26213))
local warnBlazingSpear = mod:NewTargetAnnounce(401401, 3)
local specWarnBlazingSpear = mod:NewSpecialWarningMoveAway(401401, nil, nil, nil, 1, 2)
local yellBlazingSpear = mod:NewShortYell(401401)
local yellBlazingSpearFades = mod:NewShortFadesYell(401401)
--local timerBlazingSpearCD = mod:NewAITimer(29.9, 401401, nil, nil, nil, 3)
--Stage Two: Warlord's Will
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26683))
local warnDesperateImmo = mod:NewSpellAnnounce(409359, 3)
local warnFlamingCudgel = mod:NewStackAnnounce(410351, 2, nil, "Tank|Healer")
local specWarnDevastatingSlam = mod:NewSpecialWarningCount(410535, nil, nil, nil, 2, 2)
local specWarnFlamingCudgel = mod:NewSpecialWarningCount(410351, nil, nil, nil, 2, 2)--Count because it's hybrid warning
local specWarnFlamingCudgelStack = mod:NewSpecialWarningStack(410351, nil, 2, nil, nil, 1, 6)
local specWarnFlamingCudgelSwap = mod:NewSpecialWarningTaunt(410351, nil, nil, nil, 1, 2)
--local timerIgnarasFuryCD = mod:NewAITimer(29.9, 406585, nil, nil, nil, 2)
local timerDevastatingSlamCD = mod:NewCDCountTimer(30.3, 410535, nil, nil, nil, 5)
local timerFlamingCudgelCD = mod:NewCDCountTimer(34, 410351, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--mod:AddInfoFrameOption(361651, true)
--mod:AddRangeFrameOption(5, 390715)
--mod:AddSetIconOption("SetIconOnMagneticCharge", 399713, true, 0, {4})
--mod:GroupSpells(390715, 396094)
local castsPerGUID = {}
mod.vb.cudgelCount = 0
mod.vb.leapCount = 0
mod.vb.rushCount = 0
mod.vb.galeCount = 0
function mod:OnCombatStart(delay)
table.wipe(castsPerGUID)
self:SetStage(1)
self.vb.cudgelCount = 0
self.vb.leapCount = 0
self.vb.rushCount = 0
self.vb.galeCount = 0
timerHeavyCudgelCD:Start(11.9-delay, 1)
timerDevastatingLeapCD:Start(98.4-delay, 1)
-- if self.Options.NPAuraOnLeap then
-- DBM:FireEvent("BossMod_EnableHostileNameplates")
-- end
end
function mod:OnCombatEnd()
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
-- if self.Options.InfoFrame then
-- DBM.InfoFrame:Hide()
-- end
-- if self.Options.NPAuraOnLeap then
-- DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
-- end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 404585 then
warnBatteringSlam:Show()
elseif spellId == 401258 then
self.vb.cudgelCount = self.vb.cudgelCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnHeavyCudgel:Show(self.vb.cudgelCount)
specWarnHeavyCudgel:Play("defensive")
end
--12.0, 59.7, 21.0, 26.0, 22.0, 31.0, 21.0, 26.0, 22.0, 31.0, 21.0, 26.0
--11.9, 59.5, 21.0, 26.0, 22.0, 31.0, 21.0, 26.0",
local timer
if self.vb.cudgelCount == 1 then--One off
timer = 59.5
elseif self.vb.cudgelCount % 4 == 2 then--2, 6, 10, 14, etc
timer = 21
elseif self.vb.cudgelCount % 4 == 3 then--3, 7, 11, 15, etc
timer = 26
elseif self.vb.cudgelCount % 4 == 0 then--4, 8, 12, 16, etc
timer = 22
elseif self.vb.cudgelCount % 4 == 1 then--5, 9, 13, 17, etc
timer = 31
end
timerHeavyCudgelCD:Start(timer, self.vb.cudgelCount+1)
elseif spellId == 401867 then
warnVolcanicShield:Show()
timerVolcanicShieldCD:Start(nil, args.sourceGUID)
elseif spellId == 408959 then
self.vb.leapCount = self.vb.leapCount + 1
specWarnDevastatingLeap:Show(self.vb.leapCount)
specWarnDevastatingLeap:Play("shockwave")
--98.4, 47.5, 52.3, 47.6, 52.3
if self.vb.leapCount % 2 == 0 then
timerDevastatingLeapCD:Start(52.3, self.vb.leapCount+1)
else
timerDevastatingLeapCD:Start(47.5, self.vb.leapCount+1)
end
elseif spellId == 397383 then
warnMoltenBarrier:Show()
timerMoltenBarrierCD:Start(nil, args.sourceGUID)
elseif spellId == 409271 then
warnMagmaFlowCast:Show()
timerMagmaFlowCD:Start(nil, args.sourceGUID)
elseif spellId == 401108 then
self.vb.rushCount = self.vb.rushCount + 1
warnPhoenixRush:Show(self.vb.rushCount)
timerPhoenixRushCD:Start()
elseif spellId == 407009 then
self.vb.galeCount = self.vb.galeCount + 1
specWarnVigorousGale:Show(self.vb.galeCount)
specWarnVigorousGale:Play("pushbackincoming")
timerVigorousGaleCD:Start()
elseif spellId == 410351 then
self.vb.cudgelCount = self.vb.cudgelCount + 1
specWarnFlamingCudgel:Show(self.vb.cudgelCount)
if self:IsTanking("player", "boss1", nil, true) then
specWarnFlamingCudgel:Play("defensive")
else
specWarnFlamingCudgel:Play("scatter")
end
timerFlamingCudgelCD:Start(nil, self.vb.cudgelCount+1)
elseif spellId == 397386 then
if not castsPerGUID[args.sourceGUID] then
castsPerGUID[args.sourceGUID] = 0
end
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
local count = castsPerGUID[args.sourceGUID]
if self:CheckInterruptFilter(args.sourceGUID, false, false) then--Count interrupt, so cooldown is not checked
specWarnLavaBolt:Show(args.sourceName, count)
if count < 6 then
specWarnLavaBolt:Play("kick"..count.."r")
else
specWarnLavaBolt:Play("kickcast")
end
end
elseif spellId == 397514 then--Desperate Immolation
self.vb.cudgelCount = 0
self.vb.leapCount = 0--Reused with demo slam
self:SetStage(2)
warnDesperateImmo:Show()
timerHeavyCudgelCD:Stop()
timerDevastatingLeapCD:Stop()
timerPhoenixRushCD:Stop()
timerVigorousGaleCD:Stop()
timerFlamingCudgelCD:Start(26.3, 1)
timerDevastatingSlamCD:Start(38.2, 1)
end
end
--[[
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 401401 then
-- timerBlazingSpearCD:Start(nil, args.sourceGUID)
end
end
--]]
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 401381 and args:IsPlayer() and self:AntiSpam(3, 1) then
specWarnAwakenedFocus:Show()
specWarnAwakenedFocus:Play("justrun")
elseif spellId == 409275 then
warnMagmaFlow:CombinedShow(0.3, args.destName)
elseif spellId == 408873 then
local amount = args.amount or 1
if amount >= 2 then--And you pretty much swap every other cast
if args:IsPlayer() then
specWarnHeavyCudgelStack:Show(amount)
specWarnHeavyCudgelStack:Play("stackhigh")
else
if not DBM:UnitDebuff("player", spellId) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
specWarnHeavyCudgelSwap:Show(args.destName)
specWarnHeavyCudgelSwap:Play("tauntboss")
else
warnHeavyCudgel:Show(args.destName, amount)
end
end
else
warnHeavyCudgel:Show(args.destName, amount)
end
elseif spellId == 410353 then
local amount = args.amount or 1
if amount >= 2 then--And you pretty much swap every other cast
if args:IsPlayer() then
specWarnFlamingCudgelStack:Show(amount)
specWarnFlamingCudgelStack:Play("stackhigh")
else
if not DBM:UnitDebuff("player", spellId) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
specWarnFlamingCudgelSwap:Show(args.destName)
specWarnFlamingCudgelSwap:Play("tauntboss")
else
warnFlamingCudgel:Show(args.destName, amount)
end
end
else
warnFlamingCudgel:Show(args.destName, amount)
end
elseif spellId == 401452 then
if args:IsPlayer() then
specWarnBlazingSpear:Show()
specWarnBlazingSpear:Play("runout")
yellBlazingSpear:Yell()
yellBlazingSpearFades:Countdown(spellId)
else
warnBlazingSpear:Show(args.destName)
end
--elseif spellId == 401867 or spellId == 402066 then
-- if args:IsPlayer() then
-- specWarnVolcanicShield:Show()
-- specWarnVolcanicShield:Play("targetyou")
-- yellVolcanicShield:Yell()
-- yellVolcanicShieldFades:Countdown(spellId)
-- else
-- warnVolcanicShield:Show(args.destName)
-- end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 401452 then
if args:IsPlayer() then
yellBlazingSpearFades:Cancel()
end
-- elseif spellId == 398938 or spellId == 398829 then
-- if self.Options.NPAuraOnLeap then
-- DBM.Nameplate:Hide(true, args.destGUID, spellId)
-- end
-- elseif spellId == 401867 or spellId == 402066 then
-- if args:IsPlayer() then
-- yellVolcanicShieldFades:Cancel()
-- end
end
end
--[[
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 370648 and destGUID == UnitGUID("player") and self:AntiSpam(2, 2) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 200836 or cid == 202937 then--obsidian-guard
timerVolcanicShieldCD:Stop(args.destGUID)
-- elseif cid == 200840 then--flamebound-huntsman
-- timerBlazingSpearCD:Stop(args.destGUID)
elseif cid == 199703 then--magma-mystic
castsPerGUID[args.destGUID] = nil
timerMoltenBarrierCD:Stop(args.destGUID)
timerMagmaFlowCD:Stop(args.destGUID)
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 410540 then--Demolishg Slam
self.vb.leapCount = self.vb.leapCount + 1
specWarnDevastatingSlam:Show(self.vb.leapCount)
specWarnDevastatingSlam:Play("helpsoak")
--383.0, 32.8, 30.3, 34.0, 34.0, 35.2, 32.8, 35.2
timerDevastatingSlamCD:Start(nil, self.vb.leapCount+1)
end
end