local mod = DBM:NewMod(2475, "DBM-Party-Dragonflight", 2, 1197) local L = mod:GetLocalizedStrings() mod:SetRevision("20221213054234") mod:SetCreatureID(184580, 184581, 184582) mod:SetEncounterID(2555) --mod:SetUsedIcons(1, 2, 3) mod:SetBossHPInfoToHighest() --mod:SetHotfixNoticeRev(20220322000000) --mod:SetMinSyncRevision(20211203000000) --mod.respawnTime = 29 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 369573 369563 369791 369677 375924", -- "SPELL_CAST_SUCCESS", "SPELL_AURA_APPLIED 369602 377825", -- "SPELL_AURA_APPLIED_DOSE", -- "SPELL_AURA_REMOVED" "SPELL_PERIODIC_DAMAGE 377825", "SPELL_PERIODIC_MISSED 377825" ) --TODO, dwarves who are "defeated" don't die, they go on boat at 10%, so we need to detect them leaving to stop timers properly --TODO, verify target scanners. If they work, maybe upgrade it to UNIT_TARGET method --TODO, can wild cleave be dodged? Once known, create special warning to dodge it or defensive it. --TODO, verify defensive bulwark and if it's actually interruptable --TODO, timerLongboatRaidCD is disabled until i know how to detect a boss casting it because of energy/CD and one casting it because they hit 10% --TODO, genuinely need a no dps pull to see if any abilities actually can be cast twice after first raid, or if each ability is only cast once per raid cycle --[[ (ability.id = 369573 or ability.id = 369563 or ability.id = 369791 or ability.id = 369677 or ability.id = 375924) and type = "begincast" or ability.id = 369602 or type = "dungeonencounterstart" or type = "dungeonencounterend" --]] --Baelog mod:AddTimerLine(DBM:EJ_GetSectionInfo(24740)) local warnHeavyArrow = mod:NewTargetNoFilterAnnounce(369573, 3) local warnWildCleave = mod:NewSpellAnnounce(369563, 3, nil, "Tank") local specWarnHeavyArrow = mod:NewSpecialWarningYou(369573, nil, nil, nil, 1, 2) local yellHeavyArrow = mod:NewYell(369573) local timerHeavyArrowCD = mod:NewCDTimer(35, 369573, nil, nil, nil, 3) local timerWildCleaveCD = mod:NewCDTimer(35, 369563, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Council fights can be messy, on for everyone for now --Eric "The Swift" mod:AddTimerLine(DBM:EJ_GetSectionInfo(24781)) local warnSkullcracker = mod:NewTargetNoFilterAnnounce(369791, 3) local specWarnSkullcracker = mod:NewSpecialWarningYou(369791, nil, nil, nil, 1, 2) local yellSkullcracker = mod:NewYell(369791) local timerSkullcrackerCD = mod:NewCDTimer(35, 369791, nil, nil, nil, 3) --Olaf mod:AddTimerLine(DBM:EJ_GetSectionInfo(24782)) local warnRicochetingShield = mod:NewTargetNoFilterAnnounce(369677, 3) local specWarnRicochetingShield = mod:NewSpecialWarningYou(369677, nil, nil, nil, 1, 2) local yellRicochetingShield = mod:NewYell(369677) local specWarnDefensiveBulwark = mod:NewSpecialWarningInterrupt(369602, "HasInterrupt", nil, nil, 1, 2) local timerRicochetingShieldCD = mod:NewCDTimer(35, 369677, nil, nil, nil, 3) local timerDefensiveBulwarkCD = mod:NewCDTimer(35, 369602, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) --Longboat Raid! mod:AddTimerLine(DBM:EJ_GetSectionInfo(24783)) local timerLongboatRaidCD = mod:NewCDTimer(27.4, 375924, nil, nil, nil, 6) local specWarnGTFO = mod:NewSpecialWarningGTFO(377825, nil, nil, nil, 1, 8) --local berserkTimer = mod:NewBerserkTimer(600) mod:AddRangeFrameOption(5, 369677) --mod:AddInfoFrameOption(361651, true) --mod:AddSetIconOption("SetIconOnStaggeringBarrage", 361018, true, false, {1, 2, 3}) function mod:ArrowTarget(targetname) if not targetname then return end if targetname == UnitName("player") then specWarnHeavyArrow:Show() specWarnHeavyArrow:Play("targetyou") yellHeavyArrow:Yell() else warnHeavyArrow:Show(targetname) end end function mod:SkullTarget(targetname) if not targetname then return end if targetname == UnitName("player") then specWarnSkullcracker:Show() specWarnSkullcracker:Play("targetyou") yellSkullcracker:Yell() else warnSkullcracker:Show(targetname) end end function mod:ShieldTarget(targetname) if not targetname then return end if targetname == UnitName("player") then specWarnRicochetingShield:Show() specWarnRicochetingShield:Play("targetyou") yellRicochetingShield:Yell() else warnRicochetingShield:Show(targetname) end end function mod:OnCombatStart(delay) --Baelog timerWildCleaveCD:Start(8.1-delay) timerHeavyArrowCD:Start(20.6-delay) --Eric timerSkullcrackerCD:Start(6-delay) --Olaf timerRicochetingShieldCD:Start(12.1-delay) timerDefensiveBulwarkCD:Start(17.2-delay) --Raid timerLongboatRaidCD:Start(24-delay) if self.Options.RangeFrame then DBM.RangeCheck:Show(5) end end function mod:OnCombatEnd() 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 == 369573 then self:ScheduleMethod(0.2, "BossTargetScanner", args.sourceGUID, "ArrowTarget", 0.1, 8, true) -- timerHeavyArrowCD:Start() elseif spellId == 369563 then warnWildCleave:Show() -- timerWildCleaveCD:Start() elseif spellId == 369791 then self:ScheduleMethod(0.2, "BossTargetScanner", args.sourceGUID, "SkullTarget", 0.1, 8, true) -- timerSkullcrackerCD:Start() elseif spellId == 369677 then self:ScheduleMethod(0.2, "BossTargetScanner", args.sourceGUID, "ShieldTarget", 0.1, 8, true) -- timerRicochetingShieldCD:Start() elseif spellId == 375924 and self:AntiSpam(8, 1) then timerLongboatRaidCD:Start() local cid = self:GetCIDFromGUID(args.sourceGUID) if cid == 184581 then--Baelog timerHeavyArrowCD:Stop() timerWildCleaveCD:Stop() elseif cid == 184580 then--Olaf timerRicochetingShieldCD:Stop() timerDefensiveBulwarkCD:Stop() elseif cid == 184582 then--Eric "The Swift" timerSkullcrackerCD:Stop() end end end --[[ function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 362805 then end end --]] function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 369602 then -- timerDefensiveBulwarkCD:Start() if self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnDefensiveBulwark:Show(args.sourceName) specWarnDefensiveBulwark:Play("kickcast") end elseif spellId == 377825 and args:IsPlayer() and self:AntiSpam(3, 2) then specWarnGTFO:Show(args.spellName) specWarnGTFO:Play("watchfeet") end end --mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName) if spellId == 377825 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