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.

198 lines
7.5 KiB

local mod = DBM:NewMod(2477, "DBM-Party-Dragonflight", 3, 1198)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240426062327")
mod:SetCreatureID(186151)
mod:SetEncounterID(2580)
mod:SetHotfixNoticeRev(20221214000000)
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod.sendMainBossGUID = true
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 375943 375937 375929 376723 376725 376892 376827 376829 376727",
"SPELL_CAST_SUCCESS 376634 376730 376864",
"SPELL_AURA_APPLIED 376634 376864 376827",
"SPELL_AURA_REMOVED 376634 376864 376727",
"SPELL_PERIODIC_DAMAGE 376899",
"SPELL_PERIODIC_MISSED 376899",
"UNIT_DIED"
)
--TODO, timers with longer logs to verify upheavel and iron spear P1 timers
--[[
(ability.id = 375943 or ability.id = 376892 or ability.id = 375937 or ability.id = 376827 or ability.id = 375929 or ability.id = 376829 or ability.id = 376723 or ability.id = 376727) and type = "begincast"
or (ability.id = 376634 or ability.id = 376730 or ability.id = 376864) and type = "cast"
or target.id = 190294 and type = "death"
or ability.id = 376727 and type = "removebuff"
or type = "dungeonencounterstart" or type = "dungeonencounterend"
--]]
--Stage One: Balakar's Might
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25185))
local warnSavageStrike = mod:NewSpellAnnounce(375929, 4, nil, "Tank|Healer")
local warnIronSpear = mod:NewTargetAnnounce(376634, 2)
local specWarnIronSpear = mod:NewSpecialWarningMoveAway(376634, nil, nil, nil, 1, 2)
local yellIronSpear = mod:NewYell(376634)
local yellIronSpearFades = mod:NewShortFadesYell(376634)
local specWarnUpheaval = mod:NewSpecialWarningDodge(375943, nil, nil, nil, 2, 2)
local specWarnRendingStrike = mod:NewSpecialWarningDefensive(375937, nil, nil, nil, 1, 2)
local timerIronSpearCD = mod:NewCDTimer(37, 376634, nil, nil, nil, 3)--Need more data
local timerUpheavalCD = mod:NewCDTimer(37, 375943, nil, nil, nil, 3)--Need data at all
local timerRendingStrikeCD = mod:NewCDCountTimer(21.9, 375937, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--CD used for both rending and savage
--Intermission: Stormwinds
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25192))
local warnStormwinds = mod:NewSpellAnnounce(376730, 2)
local specWarnStormBolt = mod:NewSpecialWarningInterrupt(376725, "HasInterrupt", nil, nil, 1, 2)
--Stage Two: The Storm Unleashed
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25187))
local warnPhase2 = mod:NewPhaseAnnounce(2, 2)
local warnStaticSpear = mod:NewTargetAnnounce(376864, 2)
local warnThunderStrike = mod:NewSpellAnnounce(376829, 4, nil, "Tank|Healer")
local specWarnStaticSpear = mod:NewSpecialWarningMoveAway(376864, nil, nil, nil, 1, 2)
local yellStaticSpear = mod:NewYell(376864)
local yellStaticSpearFades = mod:NewShortFadesYell(376864)
local specWarnCracklingUpheaval = mod:NewSpecialWarningDodge(376892, nil, nil, nil, 2, 2)
local specWarnConductiveStrike = mod:NewSpecialWarningDefensive(376827, nil, nil, nil, 1, 2)
local specWarnConductiveStrikeDispel = mod:NewSpecialWarningDispel(376827, "RemoveMagic", nil, nil, 1, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(376899, nil, nil, nil, 1, 8)
local timerStaticSpearCD = mod:NewCDTimer(38.3, 376864, nil, nil, nil, 3)
local timerCracklingUpheavalCD = mod:NewCDTimer(38.3, 376892, nil, nil, nil, 3)
local timerConductiveStrikeCD = mod:NewCDCountTimer(17, 376827, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--CD used for both Condutive and Thunder
mod.vb.addsLeft = 0
mod.vb.comboCount = 0
function mod:OnCombatStart(delay)
self.vb.addsLeft = 0
self.vb.comboCount = 0
self:SetStage(1)
timerRendingStrikeCD:Start(8-delay, 1)
timerIronSpearCD:Start(18-delay)
timerUpheavalCD:Start(37-delay)
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 375943 then
specWarnUpheaval:Show()
specWarnUpheaval:Play("watchstep")
-- timerUpheavalCD:Start()
elseif spellId == 376892 then
specWarnCracklingUpheaval:Show()
if self:IsMythic() then
specWarnCracklingUpheaval:Play("runout")
else
specWarnCracklingUpheaval:Play("watchstep")
end
timerCracklingUpheavalCD:Start()
elseif spellId == 375937 then
self.vb.comboCount = self.vb.comboCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnRendingStrike:Show()
specWarnRendingStrike:Play("defensive")
end
--Now alternates again
local timer = (self.vb.comboCount % 2 == 0) and 15 or 22
timerRendingStrikeCD:Start(timer, self.vb.comboCount+1)
elseif spellId == 376827 then
self.vb.comboCount = self.vb.comboCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnConductiveStrike:Show()
specWarnConductiveStrike:Play("defensive")
end
local timer = (self.vb.comboCount % 2 == 0) and 17 or 22
timerConductiveStrikeCD:Start(timer, self.vb.comboCount+1)
elseif spellId == 375929 then
warnSavageStrike:Show()
elseif spellId == 376829 then
warnThunderStrike:Show()
elseif spellId == 376727 then--Boss casting Siphon Power
self:SetStage(1.5)
timerIronSpearCD:Stop()
timerUpheavalCD:Stop()
timerRendingStrikeCD:Stop()
elseif spellId == 376723 then--Adds casting Transfer Power
self.vb.addsLeft = self.vb.addsLeft + 1
elseif spellId == 376725 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnStormBolt:Show(args.sourceName)
specWarnStormBolt:Play("kickcast")
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 376634 then
-- timerIronSpearCD:Start()
elseif spellId == 376730 and self:AntiSpam(3, 1) then
warnStormwinds:Show()
elseif spellId == 376864 then
timerStaticSpearCD:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 376634 then
if args:IsPlayer() then
specWarnIronSpear:Show()
specWarnIronSpear:Play("runout")
yellIronSpear:Yell()
yellIronSpearFades:Countdown(spellId)
else
warnIronSpear:Show(args.destName)
end
elseif spellId == 376864 then
if args:IsPlayer() then
specWarnStaticSpear:Show()
specWarnStaticSpear:Play("runout")
yellStaticSpear:Yell()
yellStaticSpearFades:Countdown(spellId)
else
warnStaticSpear:Show(args.destName)
end
elseif spellId == 376827 and self:CheckDispelFilter("magic") then
specWarnConductiveStrikeDispel:Show(args.destName)
specWarnConductiveStrikeDispel:Play("helpdispel")
end
end
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 376634 and args:IsPlayer() then
yellIronSpearFades:Cancel()
elseif spellId == 376864 and args:IsPlayer() then
yellStaticSpearFades:Cancel()
elseif spellId == 376727 then
self:SetStage(2)
self.vb.comboCount = 0
warnPhase2:Show()
timerConductiveStrikeCD:Start(8, 1)
timerStaticSpearCD:Start(18)
timerCracklingUpheavalCD:Start(37)
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 190294 then--Nokhud Stormcaster
self.vb.addsLeft = self.vb.addsLeft - 1
--Unused for now
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 376899 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