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.

261 lines
11 KiB

local mod = DBM:NewMod(2557, "DBM-Raids-Dragonflight", 1, 1207)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20231024015835")
mod:SetCreatureID(208478)
mod:SetEncounterID(2737)
mod:SetUsedIcons(1, 2, 3, 4)
--mod:SetHotfixNoticeRev(20210126000000)
--mod:SetMinSyncRevision(20210126000000)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 421672 425401 425400 420933 421616 420415 423117 421703",
"SPELL_CAST_SUCCESS 421284",
"SPELL_AURA_APPLIED 421207 419054 427201",
"SPELL_AURA_APPLIED_DOSE 419054",
"SPELL_AURA_REMOVED 421207 427201",
-- "SPELL_AURA_REMOVED_DOSE",
"SPELL_PERIODIC_DAMAGE 421082 423494",
"SPELL_PERIODIC_MISSED 421082 423494",
-- "UNIT_DIED",
"UNIT_SPELLCAST_START boss1",
"UNIT_SPELLCAST_SUCCEEDED boss1"
)
--[[
(ability.id = 421672 or ability.id = 425401 or ability.id = 425400 or ability.id = 420933 or ability.id = 421616 or ability.id = 420415 or ability.id = 423117 or ability.id = 421703) and type = "begincast"
or ability.id = 421284 and type = "cast"
--]]
--TODO, disgorge targets?
--TODO, chat bubbles for Coiling Flames
--TODO, work out right taunt timing, just swap for each jaws or on venom stacks?
--TODO, add obvious https://www.wowhead.com/ptr-2/spell=424218/combusting-rage if tanks aren't in range?
--mod:AddTimerLine(DBM:EJ_GetSectionInfo(22309))
local warnSperentsFury = mod:NewCountAnnounce(421672, 3)
local warnMoltenVenom = mod:NewStackAnnounce(419054, 2, nil, "Tank|Healer")
local warnSerpentsWrath = mod:NewSpellAnnounce(421703, 4)
local warnVolcanicDisgorge = mod:NewTargetCountAnnounce(421616, 3, nil, nil, nil, nil, nil, nil, true)
local specWarnCoilingFlames = mod:NewSpecialWarningYou(421207, nil, 7897, nil, 1, 2)
local yellCoilingFlames = mod:NewYell(421207, 7897)--Shortname Flames
local yellCoilingFlamesFades = mod:NewShortFadesYell(421207)
local specWarnCoilingEruption = mod:NewSpecialWarningYou(427201, nil, nil, nil, 1, 2)
local yellCoilingEruption = mod:NewShortYell(427201, DBM_COMMON_L.GROUPSOAK, nil, nil, "YELL")--NewShortPosYell
local yellCoilingEruptionFades = mod:NewShortFadesYell(427201, nil, nil, nil, "YELL")--NewIconFadesYell
local specWarnMoltenVenom = mod:NewSpecialWarningStack(419054, nil, 6, nil, nil, 1, 6)
--local specWarnMoltenVenomSwap = mod:NewSpecialWarningTaunt(419054, nil, nil, nil, 1, 2)--Need to evaulate whether tanks swap for this or jaws. double tank mechanic fights are redundant
local specWarnFloodoftheFirleands = mod:NewSpecialWarningSoakCount(420933, nil, nil, nil, 2, 2)
local specWarnVolcanicDisgorge = mod:NewSpecialWarningYou(421616, nil, nil, nil, 2, 2)
local yellVolcanicDisgorge = mod:NewShortYell(421616, DBM_COMMON_L.POOLS)
local specWarnScorchtailCrash = mod:NewSpecialWarningDodgeCount(420415, nil, 136870, nil, 3, 2)
local specWarnCataclysmJaws = mod:NewSpecialWarningDefensive(423117, nil, nil, nil, 1, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(421082, nil, nil, nil, 1, 8)
local timerSerpentsFuryCD = mod:NewNextCountTimer(70, 421672, 7897, nil, nil, 3)--Shortname "Flames"
local timerCoilingFlames = mod:NewCastTimer(7.5, 421672, 7897, nil, nil, 5)
local timerCoilingEruption = mod:NewCastTimer(16, 427201, L.DebuffSoaks, nil, nil, 5)
local timerFloodoftheFirelandsCD = mod:NewNextCountTimer(70, 420933, DBM_COMMON_L.GROUPSOAKS.." (%s)", nil, nil, 5)
local timerVolcanicDisgorgeCD = mod:NewNextCountTimer(10, 421616, DBM_COMMON_L.POOLS.." (%s)", nil, nil, 3)
local timerScorchtailCrashCD = mod:NewCDCountTimer(20, 420415, 136870, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--Short name "Tail Slam"
local timerCataclysmJawsCD = mod:NewNextCountTimer(10, 423117, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--local berserkTimer = mod:NewBerserkTimer(600)
--mod:AddRangeFrameOption("5/6/10")
--mod:AddInfoFrameOption(407919, true)
--mod:AddSetIconOption("SetIconOnCoilingFlames", 421207, false, false, {1, 2, 3, 4})
mod:AddSetIconOption("SetIconOnCoilingEruption", 427201, false, false, {1, 2, 3, 4})--Off by default since other mods don't use icons at all
mod.vb.flamesIcon = 1
mod.vb.furyCount = 0
mod.vb.floodCount = 0
mod.vb.volcanicCount = 0
mod.vb.tailCount = 0
mod.vb.jawsCount = 0
local allTimers = {
--Cata Jaws
[423117] = {5.0, 30.0, 30.0, 40.0, 30.0, 40.0, 30.0, 25.0, 25.0, 20.0},
--Volcanic Disgorge
[421616] = {29.9, 20.0, 40.0, 10.0, 10.0, 10.0, 10.0, 30.0, 10.0, 10.0, 10.0, 10.0, 40.0, 20.0}
}
function mod:DisgorgeTarget(targetname, uId)
if not targetname then return end
if targetname == UnitName("player") then
specWarnVolcanicDisgorge:Show()
specWarnVolcanicDisgorge:Play("targetyou")
yellVolcanicDisgorge:Yell()
else
warnVolcanicDisgorge:Show(self.vb.volcanicCount, targetname)
end
end
function mod:OnCombatStart(delay)
self.vb.flamesIcon = 1
self.vb.furyCount = 0
self.vb.floodCount = 0
self.vb.volcanicCount = 0
self.vb.tailCount = 0
self.vb.jawsCount = 0
timerCataclysmJawsCD:Start(5-delay, 1)
timerSerpentsFuryCD:Start(9.9-delay, 1)
timerScorchtailCrashCD:Start(20-delay, 1)
timerVolcanicDisgorgeCD:Start(29.9-delay, 1)
timerFloodoftheFirelandsCD:Start(69.9-delay, 1)
end
--function mod:OnCombatEnd()
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
--end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 421672 or spellId == 425401 or spellId == 425400 then--herioc, Unknown, Mythic?
self.vb.furyCount = self.vb.furyCount + 1
self.vb.flamesIcon = 1
warnSperentsFury:Show(self.vb.furyCount)
timerSerpentsFuryCD:Start(nil, self.vb.furyCount+1)
timerCoilingFlames:Start(7.5)
elseif spellId == 420933 then
self.vb.floodCount = self.vb.floodCount + 1
specWarnFloodoftheFirleands:Show(self.vb.floodCount)
specWarnFloodoftheFirleands:Play("helpsoak")
timerFloodoftheFirelandsCD:Start(nil, self.vb.floodCount+1)
elseif spellId == 421616 then
self.vb.volcanicCount = self.vb.volcanicCount + 1
-- self:BossTargetScanner(args.sourceGUID, "DisgorgeTarget", 0.1, 8, true)
specWarnVolcanicDisgorge:Show(self.vb.volcanicCount)
specWarnVolcanicDisgorge:Play("watchstep")
local timer = self:GetFromTimersTable(allTimers, false, false, spellId, self.vb.volcanicCount+1)
if timer then
timerVolcanicDisgorgeCD:Start(timer, self.vb.volcanicCount+1)
end
-- elseif spellId == 420415 then
elseif spellId == 423117 then
self.vb.jawsCount = self.vb.jawsCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnCataclysmJaws:Show()
specWarnCataclysmJaws:Play("defensive")
else
--Other tank has this debuff already and it will NOT be gone when cast finishes, TAUNT NOW!
--This doesn't check TankSwapBehavior dropdown because this always validates that the player about to get hit by this, shouldn't be hit by it
--if UnitExists("boss1target") and not UnitIsUnit("player", "boss1target") then
-- local _, _, _, _, _, expireTimeTarget = DBM:UnitDebuff("boss1target", 407547)
-- if (expireTimeTarget and expireTimeTarget-GetTime() >= 2) and self:AntiSpam(1, 1) then
-- specWarnFlamingSlashTaunt:Show(UnitName("boss1target"))
-- specWarnFlamingSlashTaunt:Play("tauntboss")
-- end
--end
end
local timer = self:GetFromTimersTable(allTimers, false, false, spellId, self.vb.jawsCount+1)
if timer then
timerCataclysmJawsCD:Start(timer, self.vb.jawsCount+1)
end
elseif spellId == 421703 then
warnSerpentsWrath:Show()
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 421207 then
--local icon = self.vb.flamesIcon
--if self.Options.SetIconOnCoilingFlames then
-- self:SetIcon(args.destName, icon)
--end
if args:IsPlayer() then
specWarnCoilingFlames:Show()
specWarnCoilingFlames:Play("targetyou")
yellCoilingFlames:Yell()
yellCoilingFlamesFades:Countdown(spellId)
end
if self:IsMythic() and self:AntiSpam(5, 2) then
timerCoilingEruption:Start(16, self.vb.furyCount)--Time until mythic debuffs expire so combination of this one expiring, next one applying, and also expiring
end
elseif spellId == 427201 then
local icon = self.vb.flamesIcon
if self.Options.SetIconOnCoilingEruption then
self:SetIcon(args.destName, icon)
end
if args:IsPlayer() then
specWarnCoilingEruption:Show()
specWarnCoilingEruption:Play("targetyou")
yellCoilingEruption:Yell(icon, icon)--icon, icon
yellCoilingEruptionFades:Countdown(spellId)--, nil, icon
end
self.vb.flamesIcon = self.vb.flamesIcon + 1
elseif spellId == 419054 then
local uId = DBM:GetRaidUnitId(args.destName)
if self:IsTanking(uId) then
local amount = args.amount or 1
if amount % 3 == 0 then
if args:IsPlayer() and amount >= 6 then
specWarnMoltenVenom:Show()
specWarnMoltenVenom:Play("stackhigh")
else
-- if not DBM:UnitDebuff("player", spellId) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
-- specWarnMoltenVenomSwap:Show(args.destName)
-- specWarnMoltenVenomSwap:Play("tauntboss")
-- else
warnMoltenVenom:Show(args.destName, amount)
-- end
end
end
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 421207 then
--if self.Options.SetIconOnCoilingFlames then
-- self:SetIcon(args.destName, 0)
--end
if args:IsPlayer() then
yellCoilingFlamesFades:Cancel()
end
elseif spellId == 427201 then
if self.Options.SetIconOnCoilingEruption then
self:SetIcon(args.destName, 0)
end
if args:IsPlayer() then
yellCoilingEruptionFades:Cancel()
end
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if (spellId == 423494 or spellId == 421082) and destGUID == UnitGUID("player") and self:AntiSpam(3, 4) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--"<31.18 15:55:30> [UNIT_SPELLCAST_START] Volcoross(75.6%-43.0%){Target:Nnoggie} -Volcanic Disgorge- 2.5s [[boss1:Cast-3-5773-2549-5244-421616-0099903FD1:421616]]",
--"<31.18 15:55:30> [CLEU] SPELL_CAST_START#Creature-0-5773-2549-5244-208478-0000103F2B#Volcoross(75.6%-43.0%)##nil#421616#Volcanic Disgorge#nil#nil",
--"<31.20 15:55:30> [UNIT_TARGET] boss1#Volcoross#Target: ??#TargetOfTarget: ??",
--"<31.69 15:55:30> [UNIT_TARGET] boss1#Volcoross#Target: Revvezt#TargetOfTarget: Volcoross",
function mod:UNIT_SPELLCAST_START(uId, _, spellId)
if spellId == 421616 then
self:BossUnitTargetScanner(uId, "DisgorgeTarget", 1.1, true)--Allow tank true
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 421684 then--Scorchtail Crash
self.vb.tailCount = self.vb.tailCount + 1
specWarnScorchtailCrash:Show(self.vb.tailCount)
specWarnScorchtailCrash:Play("watchstep")
timerScorchtailCrashCD:Start(nil, self.vb.tailCount+1)
end
end