local mod = DBM:NewMod(2526, "DBM-Party-Dragonflight", 9, 1209) local L = mod:GetLocalizedStrings() mod.statTypes = "normal,heroic,mythic,challenge"--No Follower dungeon mod:SetRevision("20240714045506") mod:SetCreatureID(198998) mod:SetEncounterID(2670) mod:SetUsedIcons(1, 2) mod:SetHotfixNoticeRev(20231102000000) mod:SetMinSyncRevision(20231102000000) --mod.respawnTime = 29 mod.sendMainBossGUID = true mod:RegisterCombat("combat") mod:RegisterEvents( "SPELL_AURA_REMOVED 400681 400642 413595" ) mod:RegisterEventsInCombat( "SPELL_CAST_START 401248 401482 400641 400649", "SPELL_CAST_SUCCESS 400642", "SPELL_AURA_APPLIED 403724 400681" -- "SPELL_PERIODIC_DAMAGE", -- "SPELL_PERIODIC_MISSED" ) --[[ (ability.id = 401248 or ability.id = 401482 or ability.id = 400641 or ability.id = 400649) and type = "begincast" or ability.id = 400642 and (type = "cast" or type = "removebuff") or type = "dungeonencounterstart" or type = "dungeonencounterend" --]] --TODO, fine tune who should be soaking --TODO, Keep an eye on if the combo stays random order or if it gets normalized later to be static --TODO, *FIXME. Increased the cooldown of Double Strike and Triple Strike. 11-21-23 local warnSparkofTyr = mod:NewTargetNoFilterAnnounce(400681, 3, nil, "RemoveMagic|Healer") local warnSiphonOath = mod:NewCountAnnounce(400642, 3) local warnSiphonOathOver = mod:NewEndAnnounce(400642, 1) local specWarnTitanicBlow = mod:NewSpecialWarningDefensive(401248, nil, nil, nil, 1, 2) local specWarnInfiniteAnnihilation = mod:NewSpecialWarningDodgeCount(401482, nil, nil, nil, 2, 2) local specWarnDividingStrike = mod:NewSpecialWarningSoakCount(400641, nil, nil, nil, 2, 2) local specWarnSparkofTyr = mod:NewSpecialWarningMoveAway(400681, nil, nil, nil, 1, 2) local yellSparkofTyr = mod:NewShortPosYell(400681) local specWarnGTFO = mod:NewSpecialWarningGTFO(403724, nil, nil, nil, 1, 8) --These 3 are shared timers tied to Infinite Hand Technique local timerTitanicBlowCD = mod:NewCDCountTimer(8, 401248, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerInfiniteAnnihilationCD = mod:NewCDCountTimer(8, 401482, nil, nil, nil, 3) local timerDividingStrikeCD = mod:NewCDCountTimer(8, 400641, nil, nil, nil, 5) --Bosses other abilities local timerRP = mod:NewRPTimer(8) local timerSparkofTyrCD = mod:NewCDCountTimer(60.7, 400681, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON) local timerSiphonOathCD = mod:NewCDCountTimer(60.7, 400642, nil, nil, nil, 6, nil, DBM_COMMON_L.DAMAGE_ICON) mod:AddSetIconOption("SetIconOnSparkofTyr", 400681, true, 0, {1, 2}) mod.vb.sparkCount = 0 mod.vb.barrierCount = 0 mod.vb.DebuffIcon = 1 mod.vb.sharedCount = 0--Dividing and Titanic share a count --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing mod.vb.firstShared = 0 mod.vb.secondShared = 0 function mod:OnCombatStart(delay) self:SetStage(1) self.vb.dividingCount = 0 self.vb.sparkCount = 0 self.vb.barrierCount = 0 self.vb.sharedCount = 0 --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.firstShared = 0 self.vb.secondShared = 0 timerSparkofTyrCD:Start(5.9-delay, 1) --Any of these can be first, we don't know which until time of cast timerTitanicBlowCD:Start(12.5-delay, 1) timerInfiniteAnnihilationCD:Start(12.5-delay, 1) timerDividingStrikeCD:Start(12.5-delay, 1) timerSiphonOathCD:Start(44.9-delay, 1) end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 401248 then self.vb.sharedCount = self.vb.sharedCount + 1 if self:IsTanking("player", "boss1", nil, true) then specWarnTitanicBlow:Show() specWarnTitanicBlow:Play("carefly") end --Shared Cd between 3 abilities, have to do fancy logic stuffs if self.vb.sharedCount == 1 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.firstShared = 1 --Still don't know what's 2nd, only that it isn't Blow timerDividingStrikeCD:Start(nil, 2) timerInfiniteAnnihilationCD:Start(nil, 2) elseif self.vb.sharedCount == 2 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.secondShared = 1 if self.vb.firstShared == 2 then--We know next is dividing since first was infinite timerDividingStrikeCD:Start(nil, 3) else--First was dividing so next is infinite timerInfiniteAnnihilationCD:Start(nil, 3) end elseif self.vb.sharedCount == 3 then --The 4 cast in combo, is whatever cast 2 was if self.vb.secondShared == 1 then timerTitanicBlowCD:Start(nil, 4) elseif self.vb.secondShared == 2 then timerInfiniteAnnihilationCD:Start(nil, 4) else timerDividingStrikeCD:Start(nil, 4) end end elseif spellId == 401482 then self.vb.sharedCount = self.vb.sharedCount + 1 specWarnInfiniteAnnihilation:Show(self.vb.sharedCount) specWarnInfiniteAnnihilation:Play("shockwave") --Shared Cd between 3 abilities, have to do fancy logic stuffs if self.vb.sharedCount == 1 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.firstShared = 2 --Still don't know what's 2nd, only that it isn't Infinite timerDividingStrikeCD:Start(nil, 2) timerTitanicBlowCD:Start(nil, 2) elseif self.vb.sharedCount == 2 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.secondShared = 2 if self.vb.firstShared == 1 then--We know next is dividing since first was Blow timerDividingStrikeCD:Start(nil, 3) else--First was dividing so next is blow timerTitanicBlowCD:Start(nil, 3) end elseif self.vb.sharedCount == 3 then --The 4 cast in combo, is whatever cast 2 was if self.vb.secondShared == 1 then timerTitanicBlowCD:Start(nil, 4) elseif self.vb.secondShared == 2 then timerInfiniteAnnihilationCD:Start(nil, 4) else timerDividingStrikeCD:Start(nil, 4) end end elseif spellId == 400641 then self.vb.sharedCount = self.vb.sharedCount + 1 specWarnDividingStrike:Show(self.vb.sharedCount) specWarnDividingStrike:Play("helpsoak") --Shared Cd between 3 abilities, have to do fancy logic stuffs if self.vb.sharedCount == 1 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.firstShared = 3 --Still don't know what's 2nd, only that it isn't Dividing timerInfiniteAnnihilationCD:Start(nil, 2) timerTitanicBlowCD:Start(nil, 2) elseif self.vb.sharedCount == 2 then --Shared Keys, 1 Titan, 2 Infinite, 3 Dividing self.vb.secondShared = 3 if self.vb.firstShared == 1 then--We know next is infinite since first was Blow timerInfiniteAnnihilationCD:Start(nil, 3) else--First was dividing so next is blow timerTitanicBlowCD:Start(nil, 3) end elseif self.vb.sharedCount == 3 then --The 4 cast in combo, is whatever cast 2 was if self.vb.secondShared == 1 then timerTitanicBlowCD:Start(nil, 4) elseif self.vb.secondShared == 2 then timerInfiniteAnnihilationCD:Start(nil, 4) else timerDividingStrikeCD:Start(nil, 4) end end elseif spellId == 400649 then self.vb.DebuffIcon = 1 self.vb.sparkCount = self.vb.sparkCount + 1 --Timer not started here, since it's 1 cast per cycle at moment and we start itmer on shield end -- timerSparkofTyrCD:Start(nil, self.vb.sparkCount+1) end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 400642 then self:SetStage(2) self.vb.barrierCount = self.vb.barrierCount + 1 warnSiphonOath:Show(self.vb.barrierCount) -- timerSiphonOathCD:Start(nil, self.vb.barrierCount+1) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 403724 and args:IsPlayer() and self:AntiSpam(3, 1) then specWarnGTFO:Show(args.spellName) specWarnGTFO:Play("watchfeet") elseif spellId == 400681 then local icon = self.vb.DebuffIcon if self.Options.SetIconOnSparkofTyr then self:SetIcon(args.destName, icon) end if args:IsPlayer() then specWarnSparkofTyr:Show() specWarnSparkofTyr:Play("scatter") yellSparkofTyr:Yell(icon, icon) end warnSparkofTyr:CombinedShow(0.5, args.destName) self.vb.DebuffIcon = self.vb.DebuffIcon + 1 end end --mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED --"<43.45 19:05:50> [CLEU] SPELL_AURA_REMOVED#Creature-0-4225-2579-2224-198998-000034485F#Tyr, the Infinite Keeper#Creature-0-4225-2579-2224-198998-000034485F#Tyr, the Infinite Keeper#413595#Pondering the Oathstone#BUFF#nil", -- [290] --"<43.48 19:05:50> [CLEU] UNIT_DIED##nil#Creature-0-4225-2579-2224-205158-000034485F#Spurlok, Timesworn Sentinel#-1#false#nil#nil", -- [291] --"<76.79 19:06:23> [NAME_PLATE_UNIT_ADDED] Tyr, the Infinite Keeper#Creature-0-4225-2579-2224-198998-000034485F", -- [559] --"<78.46 19:06:25> [ENCOUNTER_START] 2670#Tyr, the Infinite Keeper#8#5", -- [570] function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 400681 then if self.Options.SetIconOnSparkofTyr then self:SetIcon(args.destName, 0) end elseif spellId == 400642 then--Siphon ending self:SetStage(1) self.vb.sharedCount = 0 self.vb.firstShared = 0 self.vb.secondShared = 0 warnSiphonOathOver:Show() --Timers same as engage timerSparkofTyrCD:Start(6, self.vb.sparkCount+1) --Either one of these can be first, we don't know which until time of cast timerTitanicBlowCD:Start(12.5, 1) timerInfiniteAnnihilationCD:Start(12.5, 1) timerDividingStrikeCD:Start(12.5, 1) timerSiphonOathCD:Start(45.7, self.vb.barrierCount+1) elseif spellId == 413595 then timerRP:Start(33.3) end end --[[ function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName) if spellId == 386201 and destGUID == UnitGUID("player") and self:AntiSpam(2, 4) then specWarnGTFO:Show(spellName) specWarnGTFO:Play("watchfeet") end end mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE --]]