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.
229 lines
9.3 KiB
229 lines
9.3 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("20240515181120")
|
|
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:NewCDTimer(60, 427899, nil, nil, nil, 2)
|
|
local timerGlacialFusionCD = mod:NewCDTimer(60, 428082, nil, nil, nil, 3)
|
|
local timerSpetialCompressionCD = mod:NewCDTimer(60, 428139, nil, nil, nil, 5)
|
|
-- local timerComboCD = mod:NewCDComboTimer(20)--Use on mythic instead?
|
|
|
|
mod.vb.pullCount = 0
|
|
mod.vb.comboCount = 0
|
|
|
|
--local grip = DBM:GetSpellName(56689)
|
|
|
|
--Fire alone (no previos yet, arcane in future combos)
|
|
--Frost + Previous (fire)
|
|
--Arcane + Previous (frost)
|
|
--Repeats
|
|
--This hardcoded function is required because sometimes boss and add invert who casts what (ie it's right combo, but the previous and current are inverted)
|
|
local function comboHandler(self)
|
|
self.vb.comboCount = self.vb.comboCount + 1
|
|
--Fire alone first time (fire + arcane for 4)
|
|
if self.vb.comboCount % 3 == 1 then
|
|
--So next is Frost + Fire
|
|
timerGlacialFusionCD:Start(18.4)
|
|
timerCinderboltStormCD:Start(18.4)
|
|
--timerComboCD:Start(DBM_COMMON_L.AOEDAMAGE, DBM_COMMON_L.ORBS)
|
|
--Frost + Previous (fire)
|
|
elseif self.vb.comboCount % 3 == 2 then
|
|
--So next is Arcane + Frost
|
|
timerSpetialCompressionCD:Start(18.4)
|
|
timerGlacialFusionCD:Start(18.4)
|
|
--timerComboCD:Start(grip, DBM_COMMON_L.ORBS)
|
|
--Arcane + Previous (frost)
|
|
else
|
|
--So next is fire + arcane
|
|
timerCinderboltStormCD:Start(19.4)
|
|
timerSpetialCompressionCD:Start(19.4)
|
|
--timerComboCD:Start(DBM_COMMON_L.AOEDAMAGE, grip)
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.pullCount = 0
|
|
self.vb.comboCount = 0
|
|
timerCinderboltStormCD:Start(3)
|
|
if not self:IsMythic() then--Mythic schedulers timers differently
|
|
timerGlacialFusionCD:Start(24.1)
|
|
timerSpetialCompressionCD:Start(43.7)
|
|
end
|
|
--Haven't seen bug in a while, guess print did it's job. Will remove if no one reports further problems with this boss for a while.
|
|
--DBM:AddMsg("This boss is very buggy and blizzard has ignored bug reports on the bugs. Sol sometimes resets her rotation back to cinder at random. Now, I've decided to reinstate showing what next rotation is SUPPOSED TO BE but if it's wrong don't complain to me, complain to blizzard for not fixing rotation bug")
|
|
end
|
|
|
|
function mod:OnCombatEnd(wipe, secondRun)
|
|
if not wipe and not secondRun then
|
|
local EverBloomTrash = DBM:GetModByName("EverBloomTrash")
|
|
EverBloomTrash:PortalRP()
|
|
end
|
|
end
|
|
|
|
--Another great log with variances
|
|
--https://www.warcraftlogs.com/reports/79WcKGf4znd8qgj2#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&boss=61279&difficulty=10&wipes=2
|
|
|
|
--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
|
|
comboHandler(self)
|
|
end
|
|
else
|
|
timerSpetialCompressionCD:Start(60)
|
|
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
|
|
comboHandler(self)
|
|
end
|
|
else
|
|
timerCinderboltStormCD:Start(60)
|
|
end
|
|
elseif spellId == 428082 then
|
|
specWarnGlacialFusion:Show()
|
|
specWarnGlacialFusion:Play("watchorb")
|
|
if self:IsMythic() then
|
|
if args:GetSrcCreatureID() == 82682 then--Source is Boss
|
|
comboHandler(self)
|
|
end
|
|
else
|
|
timerGlacialFusionCD:Start(60)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 426991 and destGUID == UnitGUID("player") and self:AntiSpam(3, 2) 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
|
|
|