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.
149 lines
5.4 KiB
149 lines
5.4 KiB
local mod = DBM:NewMod("Kruul", "DBM-Challenges", 3)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod.statTypes = "normal,timewalker"
|
|
|
|
mod:SetRevision("20211210065736")
|
|
mod:SetCreatureID(117933, 117198)--Variss, Kruul
|
|
mod:SetBossHPInfoToHighest()
|
|
mod.soloChallenge = true
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 234423 233473 234631 241717 236537 236572 234676",
|
|
"SPELL_CAST_SUCCESS 236572",
|
|
"SPELL_AURA_APPLIED 234422",
|
|
"SPELL_AURA_APPLIED_DOSE 234422",
|
|
"UNIT_DIED",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3"
|
|
)
|
|
|
|
--Tank
|
|
-- Stack warning? what amounts switch from reg warning to special warning?
|
|
-- Improve timers still with more data?
|
|
--Tank (Kruul)
|
|
local warnHolyWard = mod:NewCastAnnounce(233473, 1)
|
|
local warnDecay = mod:NewStackAnnounce(234422, 3)
|
|
local warnShadowSweep = mod:NewSpellAnnounce(234441, 3)
|
|
----Add Spawns
|
|
local warnTormentingEye = mod:NewSpellAnnounce(234428, 2)
|
|
local warnNetherAberration = mod:NewSpellAnnounce(235110, 2)
|
|
local warnInfernal = mod:NewSpellAnnounce(235112, 2)
|
|
|
|
--Tank
|
|
local specWarnDecay = mod:NewSpecialWarningStack(234422, nil, 5, nil, nil, 1, 6)
|
|
local specWarnDrainLife = mod:NewSpecialWarningInterrupt(234423, nil, nil, 2, 3, 2)
|
|
local specWarnSmash = mod:NewSpecialWarningDodge(234631, nil, nil, nil, 1, 2)
|
|
local specWarnAnnihilate = mod:NewSpecialWarningDefensive(236572, nil, nil, nil, 1, 2)
|
|
local specWarnTwistedReflection = mod:NewSpecialWarningInterrupt(234676, nil, nil, nil, 3, 2)
|
|
|
|
--Tank
|
|
local timerDrainLifeCD = mod:NewCDTimer(24.3, 234423, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON, nil, 2, 4)
|
|
local timerHolyWardCD = mod:NewCDTimer(33, 233473, nil, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)
|
|
local timerHolyWard = mod:NewCastTimer(8, 233473, nil, false, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)
|
|
local timerTormentingEyeCD = mod:NewCDTimer(15.4, 234428, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)--15.4-19.4
|
|
local timerNetherAbberationCD = mod:NewCDTimer(35, 235110, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON, nil, 1, 4)
|
|
local timerInfernalCD = mod:NewCDTimer(65, 235112, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON, nil, 3, 4)
|
|
--Phase 2
|
|
local timerShadowSweepCD = mod:NewCDTimer(20, 234441, nil, nil, nil, 3)--20-27
|
|
local timerAnnihilateCD = mod:NewCDCountTimer(27, 236572, nil, nil, nil, 3, nil, DBM_COMMON_L.TANK_ICON, nil, 2, 4)
|
|
|
|
mod.vb.annihilateCast = 0
|
|
local activeBossGUIDS = {}
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self:SetStage(1)
|
|
self.vb.annihilateCast = 0
|
|
timerTormentingEyeCD:Start(3.8)--3.8-5
|
|
timerDrainLifeCD:Start(5)--5-9?
|
|
timerHolyWardCD:Start(8)--8-16
|
|
timerNetherAbberationCD:Start(9.6)--9.6-12.3
|
|
timerInfernalCD:Start(37.5)--37-43
|
|
DBM:AddMsg("There is a chance some of these timers are health based and can't be completely relied upon. More data is needed")
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 234423 then
|
|
specWarnDrainLife:Show(args.sourceName)
|
|
specWarnDrainLife:Play("kickcast")
|
|
timerDrainLifeCD:Start()
|
|
elseif spellId == 233473 then
|
|
warnHolyWard:Show()
|
|
timerHolyWard:Start()
|
|
timerHolyWardCD:Start()
|
|
elseif (spellId == 234631 or spellId == 241717 or spellId == 236537) and self:AntiSpam(2.5, 1) then
|
|
specWarnSmash:Show()
|
|
specWarnSmash:Play("shockwave")
|
|
elseif spellId == 236572 then
|
|
specWarnAnnihilate:Show()
|
|
specWarnAnnihilate:Play("defensive")
|
|
elseif spellId == 234676 then
|
|
specWarnTwistedReflection:Show(args.sourceName)
|
|
specWarnTwistedReflection:Play("kickcast")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
if args.spellId == 236572 then--Timer here, boss sometimes stutter casts/interrupts his own annihilate cast to do soething else, then returns to annihilate 4-5 seconds later
|
|
self.vb.annihilateCast = self.vb.annihilateCast + 1
|
|
timerAnnihilateCD:Start(25, self.vb.annihilateCast+1)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 234422 then
|
|
local amount = args.amount or 1
|
|
if amount >= 5 then
|
|
specWarnDecay:Show(amount)
|
|
if amount > 10 then
|
|
specWarnDecay:Play("runout")
|
|
else
|
|
specWarnDecay:Play("stackhigh")
|
|
end
|
|
elseif amount % 2 == 0 then
|
|
warnDecay:Show(args.destName, amount)
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:UNIT_DIED(args)
|
|
if args.destGUID == UnitGUID("player") then--Solo scenario, a player death is a wipe
|
|
DBM:EndCombat(self, true)
|
|
end
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 117933 then--Variss
|
|
self:SetStage(2)
|
|
timerDrainLifeCD:Stop()
|
|
timerTormentingEyeCD:Stop()
|
|
timerNetherAbberationCD:Stop()
|
|
timerInfernalCD:Stop()
|
|
--timerAnnihilateCD:Start(16.5, 1)--16-28?, too variable, disabled for now
|
|
--Does holy ward reset here? reset timer here if it does
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 234428 then--Summon Tormenting Eye
|
|
warnTormentingEye:Show()
|
|
timerTormentingEyeCD:Start()
|
|
elseif spellId == 235110 then--Nether Aberration
|
|
warnNetherAberration:Show()
|
|
if self.vb.phase == 2 then
|
|
timerNetherAbberationCD:Start(30)
|
|
else
|
|
timerNetherAbberationCD:Start()--35
|
|
end
|
|
elseif spellId == 235112 then--Smoldering Infernal Summon
|
|
warnInfernal:Show()
|
|
timerInfernalCD:Start()
|
|
elseif spellId == 234920 then
|
|
warnShadowSweep:Show()
|
|
timerShadowSweepCD:Start()
|
|
elseif spellId == 233456 then--Kill Credit
|
|
DBM:EndCombat(self)
|
|
end
|
|
end
|
|
|