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.

188 lines
7.5 KiB

local mod = DBM:NewMod(1208, "DBM-Party-WoD", 5, 556)
local L = mod:GetLocalizedStrings()
local wowToc = DBM:GetTOC()
mod.statTypes = "normal,heroic,mythic,challenge,timewalker"
if (wowToc >= 100200) then
mod.upgradedMPlus = true
end
mod:SetRevision("20231022202350")
mod:SetCreatureID(82682)
mod:SetEncounterID(1751)
mod:SetHotfixNoticeRev(20231020000000)
--mod:SetMinSyncRevision(20211203000000)
mod:RegisterCombat("combat")
if (wowToc >= 100200) then
--Patch 10.2 or later
mod:RegisterEventsInCombat(
"SPELL_CAST_START 428139 427863",
"SPELL_AURA_APPLIED 427899 428082",
"SPELL_PERIODIC_DAMAGE 426991",
"SPELL_PERIODIC_MISSED 426991"
)
--[[
(ability.id = 428139) and type = "begincast"
or (ability.id = 428177 or ability.id = 427899 or ability.id = 428082) and type = "applybuff"
or type = "dungeonencounterstart" or type = "dungeonencounterend"
or (ability.id = 427899 or ability.id = 428082) and type = "begincast"
--NOTE, You can detect cinder and glacial earlier on main boss with cast start, BUT spore image only has applied.
--NOTE, sometimes boss bugs and starts casting random shit at random times (ie breaks order)
--For consistency sake, applied is used for both. Spacial has cast start for both so that's used for both
--TODO, visit warning types for each type, just to avoid double special alerts for overlaps which basically
--TODO, target scan who the boss is targetting during arcane to see who furthest distance is?
--]]
local warnCinderboltStorm = mod:NewSpellAnnounce(427899, 4)
local specWarnGlacialFusion = mod:NewSpecialWarningDodge(428082, nil, nil, nil, 2, 2)
local specWarnSpetialCompression = mod:NewSpecialWarningCount(428139, nil, nil, nil, 2, 13)
local specWarnFrostbolt = mod:NewSpecialWarningInterrupt(427863, "HasInterrupt", nil, nil, 1, 2)--Prio frostbolt interrupts over other two, because of slow
local specWarnGTFO = mod:NewSpecialWarningGTFO(426991, nil, nil, nil, 1, 8)
local timerCinderboltStormCD = mod:NewCDSourceTimer(60, 427899, nil, nil, nil, 2)
local timerGlacialFusionCD = mod:NewCDSourceTimer(60, 428082, nil, nil, nil, 3)
local timerSpetialCompressionCD = mod:NewCDSourceTimer(60, 428139, nil, nil, nil, 5)
mod.vb.pullCount = 0
function mod:OnCombatStart(delay)
self.vb.pullCount = 0
timerCinderboltStormCD:Start(3, DBM_COMMON_L.BOSS)
if not self:IsMythic() then--Mythic schedulers timers differently
timerGlacialFusionCD:Start(24.1, DBM_COMMON_L.BOSS)
timerSpetialCompressionCD:Start(43.7, DBM_COMMON_L.BOSS)
end
end
--boss first / add second
--expected:
--fire alone
--ice and fire
--arcane and ice
--fire and arcane
--wtf:
--Fire alone
--ice and fire
--fire and arcane
--ice and fire
--https://www.warcraftlogs.com/reports/4ftYFxqJajW3PvVb#fight=6&pins=2%24Off%24%23244F4B%24expression%24%09(ability.id%20%3D%20428139)%20and%20type%20%3D%20%22begincast%22%0A%09%20or%20(ability.id%20%3D%20428177%20or%20ability.id%20%3D%20427899%20or%20ability.id%20%3D%20428082)%20and%20type%20%3D%20%22applybuff%22%0A%09%20or%20type%20%3D%20%22dungeonencounterstart%22%20or%20type%20%3D%20%22dungeonencounterend%22&view=events
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 428139 then
self.vb.pullCount = self.vb.pullCount + 1
specWarnSpetialCompression:Show(self.vb.pullCount)
specWarnSpetialCompression:Play("pullin")
if self:IsMythic() then
if args:GetSrcCreatureID() == 82682 then--Source is Boss
timerGlacialFusionCD:Start(20, DBM_COMMON_L.BOSS)--Fire, Ice, Arcane, repeat
timerSpetialCompressionCD:Start(20, DBM_COMMON_L.ADD)--Add will recast this next
end
else
timerSpetialCompressionCD:Start(60, DBM_COMMON_L.BOSS)
end
elseif spellId == 427863 then
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnFrostbolt:Show(args.sourceName)
specWarnFrostbolt:Play("kickcast")
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 427899 then
warnCinderboltStorm:Show()
if self:IsMythic() then
if args:GetSrcCreatureID() == 82682 then--Source is Boss
timerGlacialFusionCD:Start(20, DBM_COMMON_L.BOSS)--Fire, Ice, Arcane, repeat
timerCinderboltStormCD:Start(20, DBM_COMMON_L.ADD)--Add will recast this next
end
else
timerCinderboltStormCD:Start(60, DBM_COMMON_L.BOSS)
end
elseif spellId == 428082 then
specWarnGlacialFusion:Show()
specWarnGlacialFusion:Play("watchorb")
if self:IsMythic() then
if args:GetSrcCreatureID() == 82682 then--Source is Boss
timerSpetialCompressionCD:Start(20, DBM_COMMON_L.BOSS)--Fire, Ice, Arcane, repeat
timerGlacialFusionCD:Start(20, DBM_COMMON_L.ADD)--Add will recast this next
end
else
timerGlacialFusionCD:Start(60, DBM_COMMON_L.BOSS)
end
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 426991 and destGUID == UnitGUID("player") and self:AntiSpam(3, 1) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
else
mod:RegisterEventsInCombat(
"SPELL_CAST_START 168885",
"SPELL_AURA_APPLIED 166492 166572 166726 166475 166476 166477",
"SPELL_INTERRUPT"
)
--10.1.7 on retail, and classic if it happens (if it doesn't happen old version of mod will be retired)
local warnFrostPhase = mod:NewSpellAnnounce(166476, 2, nil, nil, nil, nil, nil, 2)
local warnArcanePhase = mod:NewSpellAnnounce(166477, 2, nil, nil, nil, nil, nil, 2)
local specWarnParasiticGrowth = mod:NewSpecialWarningCount(168885, "Tank")--No voice ideas for this
--local specWarnFireBloom = mod:NewSpecialWarningSpell(166492, nil, nil, nil, 2)
local specWarnFrozenRainMove = mod:NewSpecialWarningMove(166726, nil, nil, nil, 1, 8)
local timerParasiticGrowthCD = mod:NewCDCountTimer(11.5, 168885, nil, "Tank|Healer", 2, 5, nil, DBM_COMMON_L.TANK_ICON)--Every 12 seconds unless comes off cd during fireball/frostbolt, then cast immediately after.
mod.vb.ParasiteCount = 0
function mod:OnCombatStart(delay)
self.vb.ParasiteCount = 0
timerParasiticGrowthCD:Start(32.5-delay, 1)
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 168885 then
self.vb.ParasiteCount = self.vb.ParasiteCount + 1
specWarnParasiticGrowth:Show(self.vb.ParasiteCount)
timerParasiticGrowthCD:Stop()
timerParasiticGrowthCD:Start(nil, self.vb.ParasiteCount+1)
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
--if args:IsSpellID(166492, 166572) and self:AntiSpam(12) then--Because the dumb spell has no cast Id, we can only warn when someone gets hit by one of rings.
--specWarnFireBloom:Show()
--specWarnFireBloom:Play("firecircle")
if spellId == 166726 and args:IsPlayer() and self:AntiSpam(2) then--Because dumb spell has no cast Id, we can only warn when people get debuff from standing in it.
specWarnFrozenRainMove:Show()
specWarnFrozenRainMove:Play("watchfeet")
elseif spellId == 166476 then
warnFrostPhase:Show()
warnFrostPhase:Play("ptwo")
elseif spellId == 166477 then
warnArcanePhase:Show()
warnArcanePhase:Play("pthree")
end
end
function mod:SPELL_INTERRUPT(args)
if type(args.extraSpellId) == "number" and args.extraSpellId == 168885 then
timerParasiticGrowthCD:Stop()
self.vb.ParasiteCount = 0
timerParasiticGrowthCD:Start(30, 1)
end
end
end