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.

165 lines
5.8 KiB

local mod = DBM:NewMod(2488, "DBM-Party-Dragonflight", 7, 1202)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20230504231118")
mod:SetCreatureID(188252)
mod:SetEncounterID(2609)
--mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(20221126000000)
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod.sendMainBossGUID = true
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 372851 396044 373046",
"SPELL_AURA_APPLIED 372682 373022 372988 373680 385518",
"SPELL_AURA_APPLIED_DOSE 372682",
"SPELL_AURA_REMOVED 372682 372988 373680",
"SPELL_AURA_REMOVED_DOSE 372682",
"SPELL_PERIODIC_DAMAGE 372963",
"SPELL_PERIODIC_MISSED 372963"
)
--TODO, target scan Chillstorm if boss looks at victim
--[[
(ability.id = 372851 or ability.id = 396044 or ability.id = 373046) and type = "begincast"
or ability.id = 373680 and (type = "applybuff" or type = "removebuff")
or type = "dungeonencounterstart" or type = "dungeonencounterend"
or ability.id = 385518
--]]
local warnFrozenSolid = mod:NewTargetNoFilterAnnounce(373022, 4, nil, "Healer")
local warnChillstorm = mod:NewTargetNoFilterAnnounce(372851, 3)
local warnIceBulwark = mod:NewSpellAnnounce(372988, 4)
local specWarnPrimalChill = mod:NewSpecialWarningStack(372682, nil, 8, nil, nil, 1, 6)
local specWarnHailbombs = mod:NewSpecialWarningDodge(396044, nil, nil, nil, 2, 2)
local specWarnChillStorm = mod:NewSpecialWarningMoveAway(372851, nil, nil, nil, 1, 2)
local yellChillstorm = mod:NewYell(372851)
local yellChillstormFades = mod:NewShortFadesYell(372851)
local specWarnFrostOverload = mod:NewSpecialWarningInterrupt(373680, "HasInterrupt", nil, 2, 1, 2, 4)
local specWarnAwakenWhelps = mod:NewSpecialWarningSwitch(373046, "-Healer", nil, nil, 1, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(372851, nil, nil, nil, 1, 8)
local timerChillstormCD = mod:NewCDTimer(23, 372851, nil, nil, nil, 3)
local timerHailbombsCD = mod:NewCDTimer(23, 396044, nil, nil, nil, 3)
local timerFrostOverloadCD = mod:NewCDTimer(8.5, 373680, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Cast after each whelps, which is health based
--local berserkTimer = mod:NewBerserkTimer(600)
--mod:AddRangeFrameOption("8")
mod:AddInfoFrameOption(372682, true)
--mod:AddSetIconOption("SetIconOnStaggeringBarrage", 361018, true, false, {1, 2, 3})
local chillStacks = {}
function mod:OnCombatStart(delay)
table.wipe(chillStacks)
timerHailbombsCD:Start(4.7-delay)
timerChillstormCD:Start(11.9-delay)
if self.Options.InfoFrame then
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(372682))
DBM.InfoFrame:Show(5, "table", chillStacks, 1)
end
end
function mod:OnCombatEnd()
table.wipe(chillStacks)
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
if self.Options.InfoFrame then
DBM.InfoFrame:Hide()
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 372851 then
timerChillstormCD:Start()
elseif spellId == 396044 then
specWarnHailbombs:Show()
specWarnHailbombs:Play("watchstep")
timerHailbombsCD:Start()
elseif spellId == 373046 then
specWarnAwakenWhelps:Show()
specWarnAwakenWhelps:Play("killmob")
if self:IsMythic() then
timerFrostOverloadCD:Start()
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 372682 then
local amount = args.amount or 1
chillStacks[args.destName] = amount
if self.Options.InfoFrame then
DBM.InfoFrame:UpdateTable(chillStacks, 0.2)
end
if args:IsPlayer() and amount >= 8 then
specWarnPrimalChill:Cancel()--Possible to get multiple applications at once so we throttle by scheduling
specWarnPrimalChill:Schedule(0.2, amount)
specWarnPrimalChill:ScheduleVoice(0.2, "stackhigh")
end
elseif spellId == 373022 then
warnFrozenSolid:CombinedShow(1, args.destName)--Slower aggregation to reduce spam
elseif spellId == 373680 then
if not self:IsMythic() then--Interruptable at any time on non mythic
specWarnFrostOverload:Show(args.destName)
specWarnFrostOverload:Play("kickcast")
end
timerHailbombsCD:Stop()
timerChillstormCD:Stop()
elseif spellId == 372988 then
warnIceBulwark:Show()
elseif spellId == 385518 then
if args:IsPlayer() then
specWarnChillStorm:Show()
specWarnChillStorm:Play("runout")
yellChillstorm:Yell()
yellChillstormFades:Countdown(3.5, 2)--Debuff says 1sec but combat log shows 3.5 on M+ at least, not checked lower difficulties since harder to search on WCL
else
warnChillstorm: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 == 372682 then
chillStacks[args.destName] = nil
if self.Options.InfoFrame then
DBM.InfoFrame:UpdateTable(chillStacks, 0.2)
end
elseif spellId == 372988 then--Ice Bulwark Removed, now can interrupt on mythic and mythic+
specWarnFrostOverload:Show(args.destName)
specWarnFrostOverload:Play("kickcast")
elseif spellId == 373680 then--Frost Overload
--True, at least in M+
timerHailbombsCD:Start(4.8)
timerChillstormCD:Start(13.3)
end
end
function mod:SPELL_AURA_REMOVED_DOSE(args)
local spellId = args.spellId
if spellId == 372682 then
chillStacks[args.destName] = args.amount or 1
if self.Options.InfoFrame then
DBM.InfoFrame:UpdateTable(chillStacks, 0.2)
end
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 372963 and destGUID == UnitGUID("player") and self:AntiSpam(2, 4) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE