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

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