local mod = DBM:NewMod(1856, "DBM-Raids-Legion", 2, 875) local L = mod:GetLocalizedStrings() mod:SetRevision("20240428104720") mod:SetCreatureID(116407) mod:SetEncounterID(2036) --mod:SetBossHPInfoToHighest() --mod:SetUsedIcons(1) mod:SetHotfixNoticeRev(16282) mod.respawnTime = 29 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 232174 231904 234194 240319 241590", "SPELL_CAST_SUCCESS 231854 231729 234129", "SPELL_AURA_APPLIED 231998 231729 231904 234016 241600 233429 232061", "SPELL_AURA_APPLIED_DOSE 231998", "SPELL_AURA_REMOVED 233429 234016 241600", "SPELL_AURA_REMOVED_DOSE 233429", "SPELL_PERIODIC_DAMAGE 231768", "SPELL_PERIODIC_MISSED 231768", "UNIT_DIED", "INSTANCE_ENCOUNTER_ENGAGE_UNIT", "UNIT_SPELLCAST_SUCCEEDED boss1" ) --[[ (ability.id = 232174 or ability.id = 231904) and type = "begincast" or (ability.id = 231854 or ability.id = 232061) and type = "cast" or (ability.id = 233429 or ability.id = 232061) and (type = "applybuff" or type = "removebuff") or (target.id = 116569 or target.id = 117596 or target.id = 117522 or target.id = 120545) and type = "death" or (ability.id = 241590 or ability.id = 240319 or ability.id = 234194) and type = "begincast" or (abilty.id = 231729 or ability.id = 234129 or ability.id = 234016) and type = "cast" --]] --Harjatan local warnJaggedAbrasion = mod:NewStackAnnounce(231998, 2, nil, "Tank") local warnFrigidBlows = mod:NewStackAnnounce(233429, 2) --Razorjaw Wavemender local warnAqueousBurst = mod:NewTargetAnnounce(231729, 2, nil, false)--Spammy --Razorjaw Gladiator local warnDrivenAssault = mod:NewTargetAnnounce(234016, 3, nil, false)--Spammy --Mythic (Eggs and tadpoles) local warnSicklyFixate = mod:NewTargetAnnounce(241600, 4) --Harjatan local specWarnJaggedAbrasion = mod:NewSpecialWarningStack(231998, nil, 4, nil, nil, 1, 6) local specWarnJaggedAbrasionOther = mod:NewSpecialWarningTaunt(231998, nil, nil, nil, 1, 2) local specWarnUncheckedRage = mod:NewSpecialWarningCount(231854, nil, nil, nil, 2, 2) local specWarnDrenchingWaters = mod:NewSpecialWarningMove(231768, nil, nil, nil, 1, 2) local specWarnCommandingroar = mod:NewSpecialWarningSwitch(232192, "-Healer", nil, nil, 1, 2) local specWarnDrawIn = mod:NewSpecialWarningSpell(232061, nil, nil, nil, 1, 2) local specWarnFrostyDischarge = mod:NewSpecialWarningSpell(232174, nil, nil, nil, 1, 2) --Razorjaw Wavemender local specWarnAqueousBurst = mod:NewSpecialWarningMoveAway(231729, nil, nil, nil, 1, 2) local yellAqueousBurst = mod:NewShortYell(231729) local specWarnTendWounds = mod:NewSpecialWarningInterrupt(231904, "HasInterrupt") local specWarnTendWoundsDispel = mod:NewSpecialWarningDispel(231904, "MagicDispeller") --Razorjaw Gladiator local specWarnDrivenAssault = mod:NewSpecialWarningRun(234016, nil, nil, 2, 4, 2) --Mythic (Eggs and tadpoles) local specWarnHatching = mod:NewSpecialWarningSwitch(240319, nil, nil, 2, 1, 2) local specWarnSicklyFixate = mod:NewSpecialWarningRun(241600, nil, nil, 2, 4, 2) local specWarnTantrum = mod:NewSpecialWarningSpell(241590, nil, nil, nil, 2, 2) --Harjatan mod:AddTimerLine(BOSS) local timerUncheckedRageCD = mod:NewNextCountTimer(20, 231854, nil, nil, nil, 2, nil, nil, nil, 1, 4)--5 power per second heroic, 20 seconds for 100 energy local timerDrawInCD = mod:NewNextTimer(59, 232061, nil, nil, nil, 6) local timerCommandingRoarCD = mod:NewNextTimer(31.8, 232192, nil, nil, nil, 1) mod:AddTimerLine(DBM_COMMON_L.ADDS) --Razorjaw Wavemender local timerAqueousBurstCD = mod:NewCDTimer(6, 231729, nil, false, nil, 3)--6-8 --Razorjaw Gladiator local timerDrivenAssault = mod:NewTargetTimer(10, 234016, nil, false, nil, 3)--Too many spawn, this would be spammy so off by default local timerSplashCleaveCD = mod:NewCDTimer(12, 234129, nil, false, nil, 5, nil, DBM_COMMON_L.TANK_ICON) --Mythic mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12) local timerHatchingCD = mod:NewNextTimer(40.6, 240319, nil, nil, nil, 1)--40.6-42 local berserkTimer = mod:NewBerserkTimer(360) --mod:AddSetIconOption("SetIconOnShield", 228270, true) --mod:AddInfoFrameOption(227503, true) --mod:AddRangeFrameOption("5/8/15") mod:AddNamePlateOption("NPAuraOnSicklyFixate", 241600) mod:AddNamePlateOption("NPAuraOnDrivenAssault", 234016) mod:AddSetIconOption("SetIconOnWavemender", "ej14555", true, 5) mod.vb.rageCount = 0 local seenMobs = {} function mod:OnCombatStart(delay) self.vb.rageCount = 0 table.wipe(seenMobs) timerUncheckedRageCD:Start(-delay, 1) specWarnUncheckedRage:Schedule(16-delay, 1) specWarnUncheckedRage:ScheduleVoice(16-delay, "gathershare") timerCommandingRoarCD:Start(17.3-delay) timerDrawInCD:Start(58-delay) if not self:IsEasy() then if self:IsMythic() then timerHatchingCD:Start(30.5-delay) berserkTimer:Start(360-delay) end else berserkTimer:Start(480-delay)--Confirm in LFR too? end if self.Options.NPAuraOnSicklyFixate and self:IsMythic() or self.Options.NPAuraOnDrivenAssault then DBM:FireEvent("BossMod_EnableHostileNameplates") end end function mod:OnCombatEnd() -- if self.Options.RangeFrame then -- DBM.RangeCheck:Hide() -- end -- if self.Options.InfoFrame then -- DBM.InfoFrame:Hide() -- end if self.Options.NPAuraOnSicklyFixate and self:IsMythic() or self.Options.NPAuraOnDrivenAssault then DBM.Nameplate:Hide(true, nil, nil, nil, true, true) end end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 232174 then specWarnFrostyDischarge:Show() specWarnFrostyDischarge:Play("phasechange") self.vb.rageCount = 0 timerCommandingRoarCD:Start(17.1) timerUncheckedRageCD:Start(21.1, 1)--21.1-23.5 specWarnUncheckedRage:Schedule(17, 1) specWarnUncheckedRage:ScheduleVoice(17, "gathershare") timerDrawInCD:Start() if self:IsMythic() then timerHatchingCD:Start(30) end elseif spellId == 231904 then if self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnTendWounds:Show(args.sourceName) specWarnTendWounds:Play("kickcast") end elseif spellId == 234194 then --warnFrostySpittle:Show() --timerFrostySpittleCD:Start(nil, args.sourceGUID) elseif spellId == 241590 then specWarnTantrum:Show() specWarnTantrum:Play("aesoon") end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 231729 then timerAqueousBurstCD:Start(nil, args.sourceGUID) elseif spellId == 231854 then--Unchecked Rage self.vb.rageCount = self.vb.rageCount + 1 timerUncheckedRageCD:Start(nil, self.vb.rageCount+1) specWarnUncheckedRage:Schedule(17, self.vb.rageCount+1) specWarnUncheckedRage:ScheduleVoice(17, "gathershare") elseif spellId == 234129 then timerSplashCleaveCD:Start(nil, args.sourceGUID) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 231998 then local uId = DBM:GetRaidUnitId(args.destName) if self:IsTanking(uId) then local amount = args.amount or 1 if amount >= 4 then--Lasts 30 seconds, cast every 5 seconds, swapping will be at 6 if args:IsPlayer() then--At this point the other tank SHOULD be clear. specWarnJaggedAbrasion:Show(amount) specWarnJaggedAbrasion:Play("stackhigh") else--Taunt as soon as stacks are clear, regardless of stack count. if not UnitIsDeadOrGhost("player") and not DBM:UnitDebuff("player", args.spellName) then specWarnJaggedAbrasionOther:Show(args.destName) specWarnJaggedAbrasionOther:Play("tauntboss") else warnJaggedAbrasion:Show(args.destName, amount) end end else if amount % 2 == 0 then warnJaggedAbrasion:Show(args.destName, amount) end end end elseif spellId == 231729 then warnAqueousBurst:CombinedShow(1, args.destName) if args:IsPlayer() then specWarnAqueousBurst:Show() specWarnAqueousBurst:Play("runout") yellAqueousBurst:Yell() end elseif spellId == 231904 then specWarnTendWoundsDispel:Show(args.destName) if self.Options.SpecWarn231904dispel then specWarnTendWoundsDispel:Play("dispelnow") end elseif spellId == 234016 then timerDrivenAssault:Start(10, args.destName) warnDrivenAssault:CombinedShow(1, args.destName) if args:IsPlayer() and self:AntiSpam(3, 4) then specWarnDrivenAssault:Show() specWarnDrivenAssault:Play("justrun") specWarnDrivenAssault:ScheduleVoice(1, "keepmove") end if self.Options.NPAuraOnDrivenAssault then DBM.Nameplate:Show(true, args.sourceGUID, spellId) end elseif spellId == 241600 then warnSicklyFixate:CombinedShow(0.5, args.destName) if args:IsPlayer() and self:AntiSpam(3, 3) then specWarnSicklyFixate:Show() specWarnSicklyFixate:Play("justrun") specWarnSicklyFixate:ScheduleVoice(1, "keepmove") end if self.Options.NPAuraOnSicklyFixate then DBM.Nameplate:Show(true, args.sourceGUID, spellId) end elseif spellId == 232061 then timerUncheckedRageCD:Stop() specWarnUncheckedRage:Cancel() specWarnUncheckedRage:CancelVoice() timerCommandingRoarCD:Stop() timerDrawInCD:Stop() specWarnDrawIn:Show() specWarnDrawIn:Play("phasechange") end end mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 233429 then local amount = args.amount or 0 if amount < 4 or self:AntiSpam(5, 1) then --Every 5 seconds or every stack under 4 warnFrigidBlows:Show(args.destName, amount) end elseif spellId == 234016 then timerDrivenAssault:Stop(args.destName) if self.Options.NPAuraOnDrivenAssault then DBM.Nameplate:Hide(true, args.sourceGUID, spellId) end elseif spellId == 241600 then if self.Options.NPAuraOnSicklyFixate then DBM.Nameplate:Hide(true, args.sourceGUID, spellId) end end end mod.SPELL_AURA_REMOVED_DOSE = mod.SPELL_AURA_REMOVED function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId) if spellId == 231768 and destGUID == UnitGUID("player") and self:AntiSpam(2, 2) then specWarnDrenchingWaters:Show() specWarnDrenchingWaters:Play("runaway") end end mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 116569 then--Razorjaw Wavemender timerAqueousBurstCD:Stop(args.destGUID) elseif cid == 117596 then--Razorjaw Gladiator timerSplashCleaveCD:Stop(args.destGUID) --elseif cid == 117522 then--Darkscale Taskmaster --timerFrostySpittleCD:Stop(args.destGUID) elseif cid == 120545 then--Incubated Egg end end --"<26.92 17:09:49> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args:#boss1#false#false#false#??#nil#normal#0#boss2#false#false#false#??#nil#normal#0#boss3#false#false#false#??#nil#normal#0#boss4#false#false#false#??#nil#normal#0#boss5#false#false#false#??#nil#normal#0#Real Args:", -- [74] --"<26.93 17:09:49> [UNIT_TARGETABLE_CHANGED] nameplate3#false#false#true#Razorjaw Gladiator#Creature-0-2083-1676-7590-117596-00011E36EB#elite#10751230", -- [75] --"<26.93 17:09:49> [UNIT_TARGETABLE_CHANGED] nameplate4#false#false#true#Razorjaw Gladiator#Creature-0-2083-1676-7590-117596-00009E36EB#elite#10751230", -- [76] --Didn't live long enough to see if IEEU would work for these, based on above it wouldn't or it wouldn't be as fast as UNIT_TARGETABLE_CHANGED. However UNIT_TARGETABLE_CHANGED might rely on nameplate unitIDs function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT() for i = 1, 5 do local unitID = "boss"..i local GUID = UnitGUID(unitID) if GUID and not seenMobs[GUID] then seenMobs[GUID] = true local cid = self:GetCIDFromGUID(GUID) if cid == 116569 then--Razorjaw Wavemender --timerAqueousBurstCD:Start(1, GUID) if self.Options.SetIconOnWavemender then self:ScanForMobs(GUID, 0, 8, 2, nil, 12, "SetIconOnWavemender") end end end end end function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId) if spellId == 232192 then--Commanding Roar specWarnCommandingroar:Show() specWarnCommandingroar:Play("killmob") timerCommandingRoarCD:Start() elseif spellId == 240347 then--Warn Players of Hatching Eggs specWarnHatching:Show() specWarnHatching:Play("killmob") timerHatchingCD:Start() end end