local mod = DBM:NewMod(2392, "DBM-Party-Shadowlands", 1, 1182) local L = mod:GetLocalizedStrings() mod:SetRevision("20240817092309") mod:SetCreatureID(162689) mod:SetEncounterID(2389) mod:SetHotfixNoticeRev(20240817000000) --mod:SetMinSyncRevision(20211203000000) mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 320358 320376 327664 334488", "SPELL_CAST_SUCCESS 320359 322681 320376", "SPELL_AURA_APPLIED 320200 322681 322548 334321", "SPELL_AURA_REMOVED 322681", "SPELL_PERIODIC_DAMAGE 320366", "SPELL_PERIODIC_MISSED 320366", "UNIT_DIED" -- "UNIT_SPELLCAST_SUCCEEDED boss1" ) --TODO, need longer pulls where boss is NOT hooked for a while to see if he goes through cast sequences of spawning more adds or more Ichor --[[ (ability.id = 320358 or ability.id = 327664 or ability.id = 334488) and type = "begincast" or (ability.id = 320359 or ability.id = 326574 or ability.id = 322681) and type = "cast" or ability.id = 327041 or ability.id = 322548 or ability.id = 320376 and type = "begincast" or ability.id = 334321 and type = "applybuff" or type = "dungeonencounterstart" or type = "dungeonencounterend" --]] local warnSummonCreation = mod:NewCountAnnounce(320358, 2) local warnMutilate = mod:NewCastAnnounce(320376, 4, nil, nil, "Tank|Healer")--Spammy if lots of adds up, which is why not special warning local warnSeverFlesh = mod:NewCountAnnounce(334488, 3, nil, "Tank|Healer") local warnEscape = mod:NewCastAnnounce(320359, 3) local warnEmbalmingIchor = mod:NewTargetNoFilterAnnounce(327664, 3) local warnMeatHook = mod:NewTargetNoFilterAnnounce(322681, 3) local warnStichNeedle = mod:NewTargetNoFilterAnnounce(320200, 3, nil, false, 2)--Kind of spammy local specWarnEmbalmingIchor = mod:NewSpecialWarningMoveAway(327664, nil, nil, nil, 1, 2) local yellEmbalmingIchor = mod:NewYell(327664) local specWarnMeatHook = mod:NewSpecialWarningMoveTo(322681, nil, nil, nil, 3, 2) local yellMeatHook = mod:NewYell(322681) local yellMeatHookFades = mod:NewShortFadesYell(322681) --local specWarnHealingBalm = mod:NewSpecialWarningInterrupt(257397, "HasInterrupt", nil, nil, 1, 2) local specWarnGTFO = mod:NewSpecialWarningGTFO(320366, nil, nil, nil, 1, 8) local timerSummonCreationCD = mod:NewCDCountTimer(35.1, 320358, nil, nil, nil, 1) local timerEmbalmingIchorCD = mod:NewCDCountTimer(18, 327664, nil, nil, nil, 3) local timerSeverFleshCD = mod:NewCDCountTimer(9.7, 334488, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerEscape = mod:NewCastTimer(30, 320359, nil, nil, nil, 6) --Add local timerMutilateCD = mod:NewCDNPTimer(11, 320376, nil, "Tank|Healer", nil, 5) local timerMeatHookCD = mod:NewCDTimer(18.2, 322681, nil, nil, nil, 3) --local timerStichNeedleCD = mod:NewCDTimer(15.8, 320200, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)--Basically spammed mod.vb.bossDown = false mod.vb.creationCount = 0 mod.vb.ichorCount = 0 mod.vb.severCount = 0 function mod:IchorTarget(targetname, uId) if not targetname then return end if targetname == UnitName("player") then specWarnEmbalmingIchor:Show() specWarnEmbalmingIchor:Play("runout") yellEmbalmingIchor:Yell() else warnEmbalmingIchor:Show(targetname) end end ---@param self DBMMod local function findCreation(self, delay) for i = 1, 2 do local id = self:GetUnitCreatureId("boss"..i) if id == 164578 then--Creation local guid = UnitGUID("boss"..i) timerMutilateCD:Start(6-delay, guid) timerMeatHookCD:Start(19.6-delay, guid) break end end end function mod:OnCombatStart(delay) self:SetStage(1) self.vb.bossDown = false self.vb.creationCount = 1--One already exists on pull self.vb.ichorCount = 0 self.vb.severCount = 0 -- timerSummonCreationCD:Start(1-delay, 2)--START (unknown, nobody in public logs is this bad) timerEmbalmingIchorCD:Start(9.4-delay) -- timerStichNeedleCD:Start(1-delay)--SUCCESS --Makes ure IEEU has fired before scanning for creations GUID self:Schedule(1, findCreation, self, delay) end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 320358 then self.vb.creationCount = self.vb.creationCount + 1 warnSummonCreation:Show(self.vb.creationCount) timerSummonCreationCD:Start(nil, self.vb.creationCount+1) elseif spellId == 320376 then warnMutilate:Show() elseif spellId == 327664 then self.vb.ichorCount = self.vb.ichorCount + 1 self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "IchorTarget", 0.1, 6) timerEmbalmingIchorCD:Start(nil, self.vb.ichorCount+1) elseif spellId == 334488 then self.vb.severCount = self.vb.severCount + 1 warnSeverFlesh:Show(self.vb.severCount) timerSeverFleshCD:Start(nil, self.vb.severCount+1) end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 320359 then self:SetStage(1) warnEscape:Show() timerEscape:Stop()--Escaped early? timerSeverFleshCD:Stop() timerEmbalmingIchorCD:Start(10.9, self.vb.ichorCount+1)--8-11 elseif spellId == 322681 then timerMeatHookCD:Start(15, args.sourceGUID) elseif spellId == 320376 then--Doesn't go on CD unless cast finishes timerMutilateCD:Start(10, args.sourceGUID) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 320200 then warnStichNeedle:CombinedShow(0.3, args.destName) elseif spellId == 322681 then if args:IsPlayer() then specWarnMeatHook:Show(DBM_COMMON_L.BOSS) specWarnMeatHook:Play("targetyou") yellMeatHook:Yell() yellMeatHookFades:Countdown(spellId) else warnMeatHook:Show(args.destName) end elseif spellId == 322548 and not self:GetStage(2) then--Boss getting meat hooked self:SetStage(2) timerSummonCreationCD:Stop() timerEmbalmingIchorCD:Stop() warnMeatHook:Show(args.destName) timerEscape:Start(30) timerSummonCreationCD:Start(31, self.vb.creationCount+1)--Give or take 1-2~ timerSeverFleshCD:Start(6, self.vb.severCount+1) elseif spellId == 334321 then--Festering Rot timerMutilateCD:Start(7.4, args.destGUID) timerMeatHookCD:Start(12.2, args.destGUID) end end function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 322681 then if args:IsPlayer() then yellMeatHookFades:Cancel() end end end function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName) if spellId == 320366 and destGUID == UnitGUID("player") and self:AntiSpam(2, 2) then specWarnGTFO:Show(spellName) specWarnGTFO:Play("watchfeet") end end mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 164578 then--Creation timerMeatHookCD:Stop(args.destGUID) timerMutilateCD:Stop(args.destGUID) end end --[[ function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId) if spellId == 257453 then end end --]]