local mod = DBM:NewMod(1732, "DBM-Raids-Legion", 3, 786) local L = mod:GetLocalizedStrings() mod:SetRevision("20240426185020") mod:SetCreatureID(103758) mod:SetEncounterID(1863) --mod:SetUsedIcons(8, 7, 6, 3, 2, 1) mod:SetHotfixNoticeRev(15841) mod.respawnTime = 50 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 205408 206949 206517 207720 207439 216909", "SPELL_CAST_SUCCESS 206464 206936 205649 207143 205984 214335 214167 221875", "SPELL_AURA_APPLIED 206464 205429 216344 216345 205445 205984 214335 214167 206585 206936 205649 207143 206398", "SPELL_AURA_REMOVED 206464 205429 216344 216345 205445 205984 214335 214167 206585 206936 205649 207143", "SPELL_SUMMON 207813", -- "SPELL_PERIODIC_DAMAGE 206398", -- "SPELL_PERIODIC_MISSED 206398", "UNIT_DIED", "UNIT_SPELLCAST_SUCCEEDED boss1", "UNIT_AURA player" ) --TODO, void ejection gone? --[[ (ability.id = 205408 or ability.id = 206949 or ability.id = 206517 or ability.id = 207720 or ability.id = 207439 or ability.id = 216909 or ability.id = 221875) and type = "begincast" or (ability.id = 205984 or ability.id = 214335 or ability.id = 214167 or ability.id = 221875) and type = "cast" or (ability.id = 206464 or ability.id = 206936 or ability.id = 205649 or ability.id = 207143) and type = "cast" --]] --Base abilities local warnStarSignCrab = mod:NewTargetAnnounce(205429, 2)--Yellow (looks orange but icon text is yellow) local warnStarSignDragon = mod:NewTargetAnnounce(216344, 2)--Blue local warnStarSignHunter = mod:NewTargetAnnounce(216345, 2)--Green local warnStarSignWolf = mod:NewTargetAnnounce(205445, 2)--Red local warnGravitationalPull = mod:NewTargetAnnounce(205984, 3, nil, "Tank") --Stage One: The Dome of Observation local warnCoronalEjection = mod:NewTargetAnnounce(206464, 2) --Stage Two: Absolute Zero local warnIcyEjection = mod:NewTargetAnnounce(206936, 2) --Stage Three: A Shattered World local warnFelEjection = mod:NewTargetAnnounce(205649, 2) local warnFelEjectionPuddle = mod:NewCountAnnounce(205649, 2) --Stage Four: Inevitable Fate --local warnVoidEjection = mod:NewTargetAnnounce(207143, 2) local specWarnGravitationalPull = mod:NewSpecialWarningYou(205984, nil, nil, nil, 3, 2) local specWarnGravitationalPullOther= mod:NewSpecialWarningTaunt(205984, nil, nil, nil, 1, 2) local yellGravitationalPull = mod:NewFadesYell(205984) --Stage One: The Dome of Observation local specWarnCoronalEjection = mod:NewSpecialWarningMoveAway(206464, nil, nil, nil, 1, 2) --Stage Two: Absolute Zero local specWarnIcyEjection = mod:NewSpecialWarningMoveAway(206936, nil, nil, nil, 1, 2) local yellIcyEjection = mod:NewFadesYell(206936) local specWarnFrigidNova = mod:NewSpecialWarningSpell(206949, nil, nil, nil, 2, 2)--maybe change to MoveTo warning --Stage Three: A Shattered World local specWarnFelEjection = mod:NewSpecialWarningMoveAway(205649, nil, nil, nil, 1, 2) local yellFelEjection = mod:NewYell(205649) local yellFelEjectionFade = mod:NewFadesYell(205649) local specWarnFelNova = mod:NewSpecialWarningRun(206517, nil, nil, nil, 4, 2) local specWarnFelFlame = mod:NewSpecialWarningMove(206398, nil, nil, nil, 1, 2) --Stage Four: Inevitable Fate local specWarnThing = mod:NewSpecialWarningSwitch("ej13057", "Tank", nil, 2, 1, 2) local specWarnWitnessVoid = mod:NewSpecialWarningLookAway(207720, nil, nil, nil, 1, 2) local specWarnVoidEjection = mod:NewSpecialWarningMoveAway(207143, nil, nil, nil, 1, 2)--Should this be a move away, does void burst do any damage? local specWarnVoidNova = mod:NewSpecialWarningSpell(207439, nil, nil, nil, 2, 2) local specWarnWorldDevouringForce = mod:NewSpecialWarningDodge(216909, nil, nil, nil, 3, 2) --Mythic local specWarnConjunction = mod:NewSpecialWarningMoveAway(205408, nil, nil, nil, 3, 2) local specWarnConjunctionSign = mod:NewSpecialWarningYouPos(205408, nil, nil, nil, 1, 12) local yellConjunctionSign = mod:NewPosYell(205408, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION) --Base abilities local timerGravPullCD = mod:NewCDTimer(28, 205984, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) --Stage One: The Dome of Observation mod:AddTimerLine(SCENARIO_STAGE:format(1)) --local timerCoronalEjectionCD = mod:NewCDTimer(16, 206464, nil, nil, nil, 3)--CD is not known, always push phase 2 before this is cast 2nd time --Stage Two: Absolute Zero mod:AddTimerLine(SCENARIO_STAGE:format(2)) local timerIcyEjectionCD = mod:NewCDCountTimer(16, 206936, nil, nil, nil, 3) local timerFrigidNovaCD = mod:NewCDCountTimer(61.5, 206949, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 5) --Stage Three: A Shattered World mod:AddTimerLine(SCENARIO_STAGE:format(3)) local timerFelEjectionCD = mod:NewCDCountTimer(16, 205649, nil, nil, nil, 3) local timerFelNovaCD = mod:NewCDCountTimer(25, 206517, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 5) --Stage Four: Inevitable Fate mod:AddTimerLine(SCENARIO_STAGE:format(4)) local timerWitnessVoid = mod:NewCastTimer(4, 207720, nil, nil, nil, 2) local timerWitnessVoidCD = mod:NewCDTimer(13, 207720, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON) --local timerVoidEjectionCD = mod:NewCDCountTimer(16, 207143, nil, nil, nil, 3)--Where did it go? wasn't on normal test and wasn't on heroic retest local timerVoidNovaCD = mod:NewCDCountTimer(74, 207439, nil, nil, nil, 2)--Only saw a single pull it was cast twice, so CD needs more verification local timerWorldDevouringForceCD = mod:NewCDCountTimer(42, 216909, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON..DBM_COMMON_L.HEROIC_ICON, nil, 1, 6) mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12) local timerConjunctionCD = mod:NewCDCountTimer(16, 205408, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON, nil, 3, 10) local timerConjunction = mod:NewBuffFadesTimer(15, 207720, nil, nil, nil, 5, nil, DBM_COMMON_L.DEADLY_ICON, nil, 3, 10) local berserkTimer = mod:NewBerserkTimer(463) mod:AddRangeFrameOption("5/8") mod:AddInfoFrameOption(205408)--really needs a "various" option mod:AddBoolOption("ConjunctionYellFilter", true) mod.vb.StarSigns = 0 mod.vb.phase = 1 mod.vb.icyEjectionCount = 0 mod.vb.felEjectionCount = 0 mod.vb.frostNovaCount = 0 mod.vb.felNovaCount = 0 mod.vb.voidNovaCount = 0 mod.vb.grandConCount = 0 mod.vb.conActive = false mod.vb.worldDestroyingCount = 0 mod.vb.isPhaseChanging = false --mod.vb.voidEjectionCount = 0 --These timers are self corrective, which is annoying when all inclusive but better if scrubbing short timers --For example Icy will always be 35.2, 64.5, 24.7 if you scrub the short timers or within 0.3. However including short timers and you get more variation. --For time being, i'll be all inclusive, particuarlly with void since some of the shorter auto correcting ones are over 10 seconds. --Example of self correction. Note 3rd pull, because of the 14 being late by 3 seconds, the 3 seconds corrected from the 20. --"207143-Void Ejection" = "pull:338.3, 4.5, 14.2, 20.7, 1.6, 7.3, 26.5, 2.4", --"207143-Void Ejection" = "pull:328.7, 5.7, 14.1, 20.7, 2.8, 6.1, 25.7, 4.9", --"207143-Void Ejection" = "pull:326.8, 4.4, 17.5, 17.4, 4.6, 4.7, 26.3, 4.8", --For all inclusive, i'll simply use lowest observed time for each count, which will give close approx cd timer but imprecise to be a "next" timer. local icyEjectionTimers = {24.5, 34.1, 6.5, 4.8, 50.2, 1.2, 2.4, 25.6, 2.8}--43.3, 35.6, 8.1, 4.1, 52.2, 1.2, 2.4 local felEjectionTimers = {18.2, 3.6, 3.2, 2.4, 10.2, 4.4, 2.8, 32.8, 4.0, 1.6, 4.0, 4.5, 22.3, 6.9, 17.0, 1.6, 1.2, 2.0, 18.3, 0.4}--10 after 4, 32 after 7, 22 after 12, 17 after 14, 18 after 18 local mythicfelEjectionTimers = {17.4, 3.2, 2.8, 2.4, 9.3, 2.4, 3.2, 30, 2, 1.2, 12.6, 1.2, 1.7, 21.1, 5.6, 9.3, 2.5, 1.5, 24.3, 3.2} local voidEjectionTimers = {24, 3.2, 14.1, 17.4, 0.8, 4.7, 25.7, 2.3} --local felNovaTImers = {34.8, 31.3, 29.3}--Latest is 47.1, 45.0, 25.1. Currently unused. for now just doing 45 or 25 local worldDestroyingTimers = {22, 41.3, 57, 51.8} local ps1Grand = {15, 12.2} local ps2Grand = {27, 43.9, 58.3} local ps3Grand = {58.7, 43, 41.4} local ps4Grand = {46.5, 61.6, 51.2} local abZeroDebuff, chilledDebuff, gravPullDebuff = DBM:GetSpellName(206585), DBM:GetSpellName(206589), DBM:GetSpellName(205984) local icyEjectionDebuff, coronalEjectionDebuff, voidEjectionDebuff = DBM:GetSpellName(206936), DBM:GetSpellName(206464), DBM:GetSpellName(207143) local crabDebuff, dragonDebuff, hunterDebuff, wolfDebuff = DBM:GetSpellName(205429), DBM:GetSpellName(216344), DBM:GetSpellName(216345), DBM:GetSpellName(205445) local crabs = {} local dragons = {} local hunters = {} local wolves = {} local playerAffected = false local voidWarned = false local chilledFilter, tankFilter do chilledFilter = function(uId) if DBM:UnitDebuff(uId, chilledDebuff) then return true end end tankFilter = function(uId) if mod:IsTanking(uId, "boss1") then return true end end end local updateInfoFrame do local lines = {} updateInfoFrame = function() table.wipe(lines) local infoNeeded = false --Star Signs Helper --If player has debuff, find and show other players with same debuff as player if DBM:UnitDebuff("player", crabDebuff) then infoNeeded = true for i = 1, #crabs do local name = crabs[i] lines[name] = "" end elseif DBM:UnitDebuff("player", dragonDebuff) then infoNeeded = true for i = 1, #dragons do local name = dragons[i] lines[name] = "" end elseif DBM:UnitDebuff("player", hunterDebuff) then infoNeeded = true for i = 1, #hunters do local name = hunters[i] lines[name] = "" end elseif DBM:UnitDebuff("player", wolfDebuff) then infoNeeded = true for i = 1, #wolves do local name = wolves[i] lines[name] = "" end else--Player has no debuff, show overview frame with total debuff counts remaining local crabsigns, dragonsigns, huntersigns, wolfsigns = #crabs, #dragons, #hunters, #wolves --FIXME, figure out why colors are wrong if crabsigns > 0 then lines["|cff7d0aCD"..crabDebuff.."|r"] = crabsigns infoNeeded = true end if dragonsigns > 0 then lines["|c69ccf0CD"..dragonDebuff.."|r"] = dragonsigns infoNeeded = true end if huntersigns > 0 then lines["|cabd473CD"..hunterDebuff.."|r"] = huntersigns infoNeeded = true end if wolfsigns > 0 then lines["|cff0000CD"..wolfDebuff.."|r"] = wolfsigns infoNeeded = true end end if not infoNeeded then--Nothing left, hide infoframe DBM.InfoFrame:Hide() end return lines end end local function updateRangeFrame(self, force) if not self.Options.RangeFrame then return end if DBM:UnitDebuff("player", icyEjectionDebuff) or DBM:UnitDebuff("player", coronalEjectionDebuff) then DBM.RangeCheck:Show(8) elseif self.vb.phase == 2 and self:IsTank() then--Spread for iceburst DBM.RangeCheck:Show(6) elseif DBM:UnitDebuff("Player", gravPullDebuff) or DBM:UnitDebuff("player", voidEjectionDebuff) or force or self.vb.StarSigns > 0 then DBM.RangeCheck:Show(5) elseif DBM:UnitDebuff("player", abZeroDebuff) then DBM.RangeCheck:Show(8, chilledFilter) elseif self.vb.phase == 2 and self:IsMelee() then--Avoid tanks iceburst DBM.RangeCheck:Show(6, tankFilter) else DBM.RangeCheck:Hide() end end --This function went from pretty to ugly but it should work local function showConjunction(self) if DBM:UnitDebuff("player", crabDebuff) then warnStarSignCrab:Show(table.concat(crabs, "<, >")) elseif DBM:UnitDebuff("player", dragonDebuff) then warnStarSignDragon:Show(table.concat(dragons, "<, >")) elseif DBM:UnitDebuff("player", hunterDebuff) then warnStarSignHunter:Show(table.concat(hunters, "<, >")) elseif DBM:UnitDebuff("player", wolfDebuff) then warnStarSignWolf:Show(table.concat(wolves, "<, >")) end end local function updateConjunctionYell(self, icon) if not self.Options.ConjunctionYellFilter then return end if playerAffected then yellConjunctionSign:Yell(icon, "", icon) self:Schedule(2, updateConjunctionYell, self, icon) end end function mod:OnCombatStart(delay) voidWarned = false playerAffected = false self.vb.StarSigns = 0 self.vb.phase = 1 self.vb.isPhaseChanging = false if self:IsMythic() then self.vb.grandConCount = 0 self.vb.conActive = false self.vb.worldDestroyingCount = 0 -- timerCoronalEjectionCD:Start(12-delay)--Still could be health based timerConjunctionCD:Start(15-delay, 1) else -- timerCoronalEjectionCD:Start(12.9-delay)--Still could be health based 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 == 205408 then self.vb.grandConCount = self.vb.grandConCount + 1 self.vb.conActive = true C_Timer.After(19, function() self.vb.conActive = false end) specWarnConjunction:Show() specWarnConjunction:Play("scatter") local timers if self.vb.phase == 1 then timers = ps1Grand[self.vb.grandConCount+1] elseif self.vb.phase == 2 then timers = ps2Grand[self.vb.grandConCount+1] elseif self.vb.phase == 3 then timers = ps3Grand[self.vb.grandConCount+1] else timers = ps4Grand[self.vb.grandConCount+1] end if timers then timerConjunctionCD:Start(timers, self.vb.grandConCount+1) end updateRangeFrame(self, true) self:Schedule(4.5, showConjunction, self) table.wipe(crabs) table.wipe(dragons) table.wipe(hunters) table.wipe(wolves) elseif spellId == 206949 then self.vb.frostNovaCount = self.vb.frostNovaCount + 1 specWarnFrigidNova:Show() specWarnFrigidNova:Play("gathershare") timerFrigidNovaCD:Start(nil, self.vb.frostNovaCount+1) elseif spellId == 206517 then self.vb.felNovaCount = self.vb.felNovaCount + 1 specWarnFelNova:Show() specWarnFelNova:Play("justrun") if self.vb.felNovaCount < 3 then timerFelNovaCD:Start(44, self.vb.felNovaCount+1) else timerFelNovaCD:Start(nil, self.vb.felNovaCount+1) end elseif spellId == 207720 then specWarnWitnessVoid:Show(args.sourceName) specWarnWitnessVoid:Play("turnaway") timerWitnessVoid:Start(nil, args.sourceGUID) if self:IsMythic() then timerWitnessVoidCD:Start(13, args.sourceGUID) else timerWitnessVoidCD:Start(14.5, args.sourceGUID) end elseif spellId == 207439 then self.vb.voidNovaCount = self.vb.voidNovaCount + 1 specWarnVoidNova:Show() specWarnVoidNova:Play("aesoon") timerVoidNovaCD:Start(nil, self.vb.voidNovaCount+1) elseif spellId == 216909 then self.vb.worldDestroyingCount = self.vb.worldDestroyingCount + 1 specWarnWorldDevouringForce:Show() specWarnWorldDevouringForce:Play("farfromline") local timer = worldDestroyingTimers[self.vb.worldDestroyingCount+1] if timer then timerWorldDevouringForceCD:Start(timer, self.vb.worldDestroyingCount+1) end end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 206464 then --timerCoronalEjectionCD:Start() elseif spellId == 206936 and not self.vb.isPhaseChanging then self.vb.icyEjectionCount = self.vb.icyEjectionCount + 1 local timer = icyEjectionTimers[self.vb.icyEjectionCount+1] if timer and timer >= 4 then--No sense in starting timers for the sub 4 second casts timerIcyEjectionCD:Start(timer, self.vb.icyEjectionCount+1) end elseif spellId == 205649 and not self.vb.isPhaseChanging then self.vb.felEjectionCount = self.vb.felEjectionCount + 1 --10 after 4, 32 after 7, 22 after 12, 17 after 14, 18 after 18 --9.4 after 4, 31.2 after 7, 14 after 10 (Mythic) --The rest are like sub 5 second timers with variations to boot so not worth timers local timer = self:IsMythic() and mythicfelEjectionTimers[self.vb.felEjectionCount+1] or felEjectionTimers[self.vb.felEjectionCount+1] if timer and timer >= 4 then--No sense in starting timers for the sub 5 second casts timerFelEjectionCD:Start(timer, self.vb.felEjectionCount+1) end elseif spellId == 207143 and not self.vb.isPhaseChanging then DBM:Debug("Void Ejection is back", 2) --[[ self.vb.voidEjectionCount = self.vb.voidEjectionCount + 1 local timer = voidEjectionTimers[self.vb.voidEjectionCount+1] if timer and timer >= 4 then--No sense in starting timers for the sub 4 second casts timerVoidEjectionCD:Start(timer, self.vb.voidEjectionCount+1) end--]] elseif spellId == 205984 or spellId == 214335 or spellId == 214167 then--205984 Frost, 214167 Fel, 214335 Void if spellId == 214335 then timerGravPullCD:Start(65) else--29 timerGravPullCD:Start() end if args:IsPlayer() then specWarnGravitationalPull:Show() specWarnGravitationalPull:Play("targetyou") elseif self:IsTank() then specWarnGravitationalPullOther:Show(args.destName) specWarnGravitationalPullOther:Play("tauntboss") else warnGravitationalPull:Show(args.destName) end elseif spellId == 221875 then self.vb.isPhaseChanging = false end end function mod:SPELL_SUMMON(args) local spellId = args.spellId if spellId == 207813 then specWarnThing:Show() specWarnThing:Play("bigmob") timerWitnessVoidCD:Start(10, args.destGUID) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 205429 or spellId == 216344 or spellId == 216345 or spellId == 205445 then--Star Signs self.vb.StarSigns = self.vb.StarSigns + 1 if spellId == 205429 then--Crab crabs[#crabs + 1] = args.destName if args:IsPlayer() then specWarnConjunctionSign:Show(args.spellName) yellConjunctionSign:Yell(2, "", 2)--Orange Circle self:Schedule(2, updateConjunctionYell, self, 2) specWarnConjunctionSign:Play("findcrab") timerConjunction:Start() playerAffected = true end elseif spellId == 216344 then--Dragon dragons[#dragons + 1] = args.destName if args:IsPlayer() then specWarnConjunctionSign:Show(args.spellName) yellConjunctionSign:Yell(6, "", 6)--Blue Square self:Schedule(2, updateConjunctionYell, self, 6) specWarnConjunctionSign:Play("finddragon") timerConjunction:Start() playerAffected = true end elseif spellId == 216345 then--Hunter hunters[#hunters + 1] = args.destName if args:IsPlayer() then specWarnConjunctionSign:Show(args.spellName) yellConjunctionSign:Yell(4, "", 4)--Green Triangle self:Schedule(2, updateConjunctionYell, self, 4) specWarnConjunctionSign:Play("findhunter") timerConjunction:Start() playerAffected = true end elseif spellId == 205445 then--Wolf wolves[#wolves + 1] = args.destName if args:IsPlayer() then specWarnConjunctionSign:Show(args.spellName) yellConjunctionSign:Yell(7, "", 7)--Red Cross self:Schedule(2, updateConjunctionYell, 7) specWarnConjunctionSign:Play("findwolf") timerConjunction:Start() playerAffected = true end end if self.vb.StarSigns == 1 then updateRangeFrame(self) if self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then DBM.InfoFrame:Show(15, "function", updateInfoFrame, false, true) end end elseif spellId == 206464 then warnCoronalEjection:CombinedShow(0.5, args.destName) if args:IsPlayer() then specWarnCoronalEjection:Show() specWarnCoronalEjection:Play("runout") updateRangeFrame(self) end elseif spellId == 205984 or spellId == 214335 or spellId == 214167 then if args:IsPlayer() then updateRangeFrame(self) local _, _, _, _, duration, expires = DBM:UnitDebuff("player", args.spellName) if expires then local remaining = expires-GetTime() if self.Options.ConjunctionYellFilter and self.vb.conActive then return end--No ejection yells during conjunction yellGravitationalPull:Schedule(remaining-1, 1) yellGravitationalPull:Schedule(remaining-2, 2) yellGravitationalPull:Schedule(remaining-3, 3) end end elseif spellId == 206585 then updateRangeFrame(self) elseif spellId == 206936 then warnIcyEjection:CombinedShow(0.5, args.destName)--If only one, move this to else rule to filter from player if args:IsPlayer() then specWarnIcyEjection:Show() specWarnIcyEjection:Play("runout") updateRangeFrame(self) if self.Options.ConjunctionYellFilter and self.vb.conActive then return end--No ejection yells during conjunction yellIcyEjection:Schedule(9, 1) yellIcyEjection:Schedule(8, 2) yellIcyEjection:Schedule(7, 3) end elseif spellId == 205649 then warnFelEjection:CombinedShow(0.5, args.destName) if args:IsPlayer() then specWarnFelEjection:Show() specWarnFelEjection:Play("runout") specWarnFelEjection:ScheduleVoice(1, "keepmove") warnFelEjectionPuddle:Schedule(2, 3) warnFelEjectionPuddle:Schedule(4, 2) warnFelEjectionPuddle:Schedule(6, 1) warnFelEjectionPuddle:Schedule(8, 0) if self.Options.ConjunctionYellFilter and self.vb.conActive then return end--No ejection yells during conjunction yellFelEjection:Yell() yellFelEjectionFade:Schedule(7, 1) yellFelEjectionFade:Schedule(6, 2) yellFelEjectionFade:Schedule(5, 3) end elseif spellId == 207143 then --warnVoidEjection:CombinedShow(0.5, args.destName) if args:IsPlayer() then specWarnVoidEjection:Show() specWarnVoidEjection:Play("runout") end elseif spellId == 206398 and args:IsPlayer() and self:AntiSpam(2, 1) and not DBM:UnitDebuff("Player", gravPullDebuff) then specWarnFelFlame:Show() end end function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 205429 or spellId == 216344 or spellId == 216345 or spellId == 205445 then--Star Signs self.vb.StarSigns = self.vb.StarSigns - 1 if args:IsPlayer() then timerConjunction:Stop() playerAffected = false end if self.vb.StarSigns == 0 then updateRangeFrame(self) end if spellId == 205429 then--Crab tDeleteItem(crabs, args.destName) elseif spellId == 216344 then--Dragon tDeleteItem(dragons, args.destName) elseif spellId == 216345 then--Hunter tDeleteItem(hunters, args.destName) elseif spellId == 205445 then--Wolf tDeleteItem(wolves, args.destName) end elseif spellId == 205984 or spellId == 214335 or spellId == 214167 then if args:IsPlayer() then updateRangeFrame(self) yellGravitationalPull:Cancel() end elseif spellId == 206585 then updateRangeFrame(self) elseif spellId == 206464 and args:IsPlayer() then updateRangeFrame(self) elseif spellId == 206936 and args:IsPlayer() then yellIcyEjection:Cancel() updateRangeFrame(self) elseif spellId == 205649 and args:IsPlayer() then yellFelEjectionFade:Cancel() warnFelEjectionPuddle:Cancel() updateRangeFrame(self) elseif spellId == 207143 and args:IsPlayer() then updateRangeFrame(self) end end function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 104880 then--Thing That Should Not Be timerWitnessVoidCD:Cancel(args.destGUID) timerWitnessVoid:Cancel(args.destGUID) end end --[[ function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId) if spellId == 206398 and destGUID == UnitGUID("player") and self:AntiSpam(2, 1) and not DBM:UnitDebuff("Player", gravPullDebuff) then specWarnFelFlame:Show() specWarnFelFlame:Play("runaway") end end mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE --]] --Phases can also be done with Nether Traversal (221875) with same timing. --However, this is more robust since unique spellids for each phase is better than same used for all 3 function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId) if spellId == 222130 then--Phase 2 Conversation self.vb.phase = 2 self.vb.isPhaseChanging = true self.vb.frostNovaCount = 0 self.vb.icyEjectionCount = 0 -- timerCoronalEjectionCD:Stop() timerConjunctionCD:Stop() timerGravPullCD:Start(28.7) if not self:IsEasy() then timerFrigidNovaCD:Start(49, 1) end if self:IsMythic() then self:Unschedule(showConjunction) self.vb.grandConCount = 0 timerIcyEjectionCD:Start(15, 1) timerConjunctionCD:Start(24, 1) else timerIcyEjectionCD:Start(23.3, 1) end elseif spellId == 222133 then--Phase 3 Conversation self.vb.phase = 3 self.vb.isPhaseChanging = true self.vb.felEjectionCount = 0 self.vb.felNovaCount = 0 timerIcyEjectionCD:Stop() timerFrigidNovaCD:Stop() timerGravPullCD:Stop() timerConjunctionCD:Stop() timerGravPullCD:Start(29) if self:IsMythic() then self:Unschedule(showConjunction) self.vb.grandConCount = 0 timerFelEjectionCD:Start(17.5, 1) timerFelNovaCD:Start(50.4, 1) timerConjunctionCD:Start(58, 1) else timerFelEjectionCD:Start(18.2, 1) if not self:IsEasy() then timerFelNovaCD:Start(57.7, 1) end end elseif spellId == 222134 then--Phase 4 Conversation self.vb.phase = 4 self.vb.isPhaseChanging = true self.vb.voidNovaCount = 0 --self.vb.voidEjectionCount = 0 timerFelEjectionCD:Stop() timerFelNovaCD:Stop() timerGravPullCD:Stop() timerConjunctionCD:Stop() timerGravPullCD:Start(19.6) if not self:IsEasy() then--Was never used on normal, probably not LFR either then --timerVoidEjectionCD:Start(24, 1) timerVoidNovaCD:Start(39.2, 1) end if self:IsMythic() then self:Unschedule(showConjunction) self.vb.grandConCount = 0 self.vb.worldDestroyingCount = 0 timerWorldDevouringForceCD:Start(22, 1) timerConjunctionCD:Start(46, 1) berserkTimer:Start(201) else berserkTimer:Start(231) end end end do function mod:UNIT_AURA(uId) local hasDebuff = DBM:UnitDebuff("player", voidEjectionDebuff) if hasDebuff and not voidWarned then voidWarned = true specWarnVoidEjection:Show() specWarnVoidEjection:Play("runout") --yellScornedTouch:Yell() --if self.Options.RangeFrame then -- DBM.RangeCheck:Show(8) --end elseif not hasDebuff and voidWarned then voidWarned = false --if self.Options.RangeFrame then -- DBM.RangeCheck:Hide() --end end end end