You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
12 KiB
310 lines
12 KiB
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
|
|
|
|
|