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.
315 lines
12 KiB
315 lines
12 KiB
|
2 years ago
|
local mod = DBM:NewMod(1731, "DBM-Raids-Legion", 3, 786)
|
||
|
3 years ago
|
local L = mod:GetLocalizedStrings()
|
||
|
|
|
||
|
2 years ago
|
mod:SetRevision("20230618063432")
|
||
|
3 years ago
|
mod:SetCreatureID(104288)
|
||
|
|
mod:SetEncounterID(1867)
|
||
|
|
mod:SetUsedIcons(1)
|
||
|
|
mod:SetHotfixNoticeRev(15058)
|
||
|
|
--mod:SetModelSound("Sound\\Creature\\Trilliax\\VO_701_Trilliax_19.ogg", "Sound\\Creature\\Trilliax\\VO_701_Trilliax_19.ogg")
|
||
|
|
|
||
|
|
mod:RegisterCombat("combat")
|
||
|
|
|
||
|
|
mod:RegisterEventsInCombat(
|
||
|
|
"SPELL_CAST_START 206788 208924 207513 207502 215062 206641 214672 206820",
|
||
|
|
"SPELL_CAST_SUCCESS 206560 206557 206559 206641",
|
||
|
|
"SPELL_AURA_APPLIED 211615 208910 208915 206641 207327",
|
||
|
|
"SPELL_AURA_APPLIED_DOSE 206641",
|
||
|
|
"SPELL_AURA_REMOVED 208499 206560 207327",
|
||
|
|
"SPELL_PERIODIC_DAMAGE 206488",
|
||
|
|
"SPELL_PERIODIC_MISSED 206488",
|
||
|
|
"UNIT_DIED",
|
||
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
||
|
|
)
|
||
|
|
|
||
|
|
--[[
|
||
|
|
(ability.id = 207513 or ability.id = 206788 or ability.id = 207502 or ability.id = 214672 or ability.id = 206820) and type = "begincast"
|
||
|
|
or (ability.id = 206560 or ability.id = 206557 or ability.id = 206559 or ability.id = 206641 or ability.id = 207630) and type = "cast"
|
||
|
|
or (ability.id = 211615 or ability.id = 208910) and type = "applydebuff"
|
||
|
|
--]]
|
||
|
|
--General
|
||
|
|
local warnArcanoSlash = mod:NewStackAnnounce(206641, 3, nil, "Tank")
|
||
|
|
--Cleaner
|
||
|
|
local warnCleanerMode = mod:NewCountAnnounce(206560, 2)
|
||
|
|
local warnToxicSlice = mod:NewSpellAnnounce(206788, 2)
|
||
|
|
local warnSterilize = mod:NewTargetAnnounce(208499, 3)
|
||
|
|
--Maniac
|
||
|
|
local warnManiacMode = mod:NewCountAnnounce(206557, 2)
|
||
|
|
local warnArcingBonds = mod:NewTargetAnnounce(208915, 3)
|
||
|
|
--Caretaker
|
||
|
|
local warnCaretakerMode = mod:NewCountAnnounce(206559, 2)
|
||
|
|
local warnSucculentFeast = mod:NewSpellAnnounce(207502, 1)
|
||
|
|
|
||
|
|
--General
|
||
|
|
local specWarnArcaneSeepage = mod:NewSpecialWarningMove(206488, nil, nil, nil, 1, 2)
|
||
|
|
local specWarnArcanoSlash = mod:NewSpecialWarningDefensive(206641, "Tank", nil, 2, 1, 2)
|
||
|
|
local specWarnArcanoSlashTaunt = mod:NewSpecialWarningTaunt(206641, nil, nil, nil, 1, 2)
|
||
|
|
--Cleaner
|
||
|
|
local specWarnSterilize = mod:NewSpecialWarningMoveAway(208499, nil, nil, nil, 1, 2)
|
||
|
|
local yellSterilize = mod:NewYell(208499)
|
||
|
|
local specWarnCleansingRage = mod:NewSpecialWarningSpell(206820, nil, nil, nil, 2, 2)
|
||
|
|
--Maniac
|
||
|
|
local specWarnArcingBonds = mod:NewSpecialWarningYou(208915, nil, nil, nil, 1, 2)--Change to Moveto warning if possible to know your link
|
||
|
|
local specWarnAnnihilation = mod:NewSpecialWarningDodge(207630, nil, nil, nil, 3, 6)--Hallion Style
|
||
|
|
--Caretaker
|
||
|
|
local specWarnTidyUp = mod:NewSpecialWarningDodge(207513, nil, nil, nil, 2, 2)--Maybe switch to mob name instead of "tidy up"
|
||
|
|
--Mythic
|
||
|
|
local specWarnEchoDuder = mod:NewSpecialWarningSwitchCount(214880, nil, nil, nil, 1, 2)
|
||
|
|
|
||
|
|
--General
|
||
|
|
local timerArcaneSlashCD = mod:NewCDTimer(9, 206641, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, 2, 4)
|
||
|
|
local timerPhaseChange = mod:NewNextTimer(45, 155005, nil, nil, nil, 6, nil, nil, nil, 1, 4)
|
||
|
|
--Cleaner
|
||
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(13285))
|
||
|
|
local timerToxicSliceCD = mod:NewCDTimer(18, 206788, nil, nil, nil, 3)
|
||
|
|
--local timerSterilizeCD = mod:NewNextTimer(3, 208499, nil, nil, nil, 3)
|
||
|
|
local timerCleansingRageCD = mod:NewNextTimer(10, 206820, nil, nil, nil, 2)
|
||
|
|
--Maniac
|
||
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(13281))
|
||
|
|
local timerArcingBondsCD = mod:NewCDTimer(5, 208924, nil, nil, nil, 3)--5.7-8
|
||
|
|
local timerAnnihilationCD = mod:NewCDTimer(20.3, 207630, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 3, 4)
|
||
|
|
--Caretaker
|
||
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(13282))
|
||
|
|
local timerTidyUpCD = mod:NewNextTimer(10, 207513, nil, nil, nil, 1)
|
||
|
|
local timerSucculentFeastCD = mod:NewNextTimer(4.5, 207502, nil, nil, nil, 3)
|
||
|
|
mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12)
|
||
|
|
local timerEchoDuder = mod:NewNextTimer(10, 214880, nil, nil, nil, 1, nil, DBM_COMMON_L.HEROIC_ICON)
|
||
|
|
|
||
|
|
mod:AddRangeFrameOption(12, 208506)
|
||
|
|
mod:AddInfoFrameOption(214573, false)
|
||
|
|
mod:AddNamePlateOption("NPAuraOnCleansing", 207327)
|
||
|
|
|
||
|
|
mod.vb.ArcaneSlashCooldown = 10.5--10.5 now?, Verify it can never be 9 anymore
|
||
|
|
mod.vb.toxicSliceCooldown = 26.5--Confirmed still true
|
||
|
|
mod.vb.cleanerCount = 0
|
||
|
|
mod.vb.maniacCount = 0
|
||
|
|
mod.vb.caretakerCount = 0
|
||
|
|
local spellName = DBM:GetSpellInfo(214573)
|
||
|
|
|
||
|
|
local seenMobs = {}
|
||
|
|
|
||
|
|
function mod:OnCombatStart(delay)
|
||
|
|
table.wipe(seenMobs)
|
||
|
|
self.vb.ArcaneSlashCooldown = 10.5
|
||
|
|
self.vb.toxicSliceCooldown = 26.5
|
||
|
|
self.vb.cleanerCount = 0
|
||
|
|
self.vb.maniacCount = 0
|
||
|
|
self.vb.caretakerCount = 0
|
||
|
|
timerArcaneSlashCD:Start(7-delay)
|
||
|
|
timerToxicSliceCD:Start(10.5-delay, "boss")
|
||
|
|
timerPhaseChange:Start(45)--Maniac
|
||
|
|
--On combat start he starts in a custom cleaner mode (206570) that doesn't have sterilize or cleansing rage abilities but casts cake and ArcaneSlashs more often
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:SetHeader(DBM_COMMON_L.NO_DEBUFF:format(spellName))
|
||
|
|
DBM.InfoFrame:Show(10, "playergooddebuff", spellName, true)
|
||
|
|
end
|
||
|
|
if self:IsMythic() then
|
||
|
|
self:RegisterShortTermEvents(
|
||
|
|
"UNIT_DIED",
|
||
|
|
"INSTANCE_ENCOUNTER_ENGAGE_UNIT"
|
||
|
|
)
|
||
|
|
end
|
||
|
|
if self.Options.NPAuraOnCleansing then
|
||
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnCombatEnd()
|
||
|
|
self:UnregisterShortTermEvents()
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Hide()
|
||
|
|
end
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:Hide()
|
||
|
|
end
|
||
|
|
if self.Options.NPAuraOnCleansing then
|
||
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_START(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 206788 then--Toxic Slice (Cleaner Mode)
|
||
|
|
warnToxicSlice:Show()
|
||
|
|
timerToxicSliceCD:Start(self.vb.toxicSliceCooldown, "boss")
|
||
|
|
elseif spellId == 215062 then--Toxic Slice (Imprint)
|
||
|
|
warnToxicSlice:Show()
|
||
|
|
timerToxicSliceCD:Start(17, "echo")
|
||
|
|
elseif spellId == 207513 then--Tidy Up (Caretaker Mode)
|
||
|
|
specWarnTidyUp:Show()
|
||
|
|
specWarnTidyUp:Play("mobsoon")
|
||
|
|
specWarnTidyUp:ScheduleVoice(1.5, "watchstep")
|
||
|
|
elseif spellId == 207502 then--Succulent Feast (Caretaker Mode)
|
||
|
|
warnSucculentFeast:Show()
|
||
|
|
elseif spellId == 206641 then
|
||
|
|
specWarnArcanoSlash:Show()
|
||
|
|
specWarnArcanoSlash:Play("defensive")
|
||
|
|
elseif spellId == 214672 then--Imprint Annihilation
|
||
|
|
specWarnAnnihilation:Show()
|
||
|
|
specWarnAnnihilation:Play("stilldanger")
|
||
|
|
elseif spellId == 206820 then
|
||
|
|
specWarnCleansingRage:Show()
|
||
|
|
specWarnCleansingRage:Play("aesoon")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 206560 then--Cleaner Mode (45 seconds)
|
||
|
|
self.vb.cleanerCount = self.vb.cleanerCount + 1
|
||
|
|
self.vb.ArcaneSlashCooldown = 18
|
||
|
|
self.vb.toxicSliceCooldown = 22--Still 22? 27 in mythic logs
|
||
|
|
warnCleanerMode:Show(self.vb.cleanerCount)
|
||
|
|
timerArcaneSlashCD:Stop()
|
||
|
|
--timerSterilizeCD:Start()--Used 1-3 seconds later
|
||
|
|
timerCleansingRageCD:Start()--10
|
||
|
|
timerToxicSliceCD:Start(13, "boss")
|
||
|
|
timerArcaneSlashCD:Start(19.5)
|
||
|
|
timerPhaseChange:Stop()
|
||
|
|
timerPhaseChange:Start(45)--Maniac
|
||
|
|
elseif spellId == 206557 then--Maniac Mode (40 seconds)
|
||
|
|
self.vb.maniacCount = self.vb.maniacCount + 1
|
||
|
|
self.vb.ArcaneSlashCooldown = 7
|
||
|
|
warnManiacMode:Show(self.vb.maniacCount)
|
||
|
|
timerToxicSliceCD:Stop("boss")--Must be stopped here too since first cleaner mode has no buff removal
|
||
|
|
timerArcaneSlashCD:Stop()
|
||
|
|
timerArcingBondsCD:Start(5)--Updated Jan 24, make sure it's ok consistently
|
||
|
|
timerArcaneSlashCD:Start(9)--Updated Jan 24, make sure it's ok consistently
|
||
|
|
timerAnnihilationCD:Start(nil, "boss")--20
|
||
|
|
timerPhaseChange:Stop()
|
||
|
|
timerPhaseChange:Start(40)--Caretaker
|
||
|
|
if self:IsMythic() and self.vb.maniacCount == 2 then
|
||
|
|
timerEchoDuder:Start(10)
|
||
|
|
end
|
||
|
|
elseif spellId == 206559 then--Caretaker Mode (15 seconds)
|
||
|
|
self.vb.caretakerCount = self.vb.caretakerCount + 1
|
||
|
|
timerArcaneSlashCD:Stop()
|
||
|
|
warnCaretakerMode:Show(self.vb.caretakerCount)
|
||
|
|
timerSucculentFeastCD:Start()--4.5-5
|
||
|
|
timerTidyUpCD:Start()--10-11
|
||
|
|
timerPhaseChange:Stop()
|
||
|
|
timerPhaseChange:Start(13)--Cleaner
|
||
|
|
if self:IsMythic() and self.vb.caretakerCount == 3 then
|
||
|
|
timerEchoDuder:Start(8)--VERIFY, it's more extrapolated than first echo
|
||
|
|
--timerAnnihilationCD:Start(38, "echo")--Not a very accurate place/way to do it
|
||
|
|
end
|
||
|
|
elseif spellId == 206641 then--Arcane ArcaneSlash
|
||
|
|
timerArcaneSlashCD:Start(self.vb.ArcaneSlashCooldown)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local bombTexture = _G["_BombTexture"]
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_APPLIED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 211615 then--Pre debuff
|
||
|
|
warnSterilize:CombinedShow(0.5, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnSterilize:Show()
|
||
|
|
specWarnSterilize:Play("scatter")
|
||
|
|
yellSterilize:Yell()
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Show(12)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 208910 or spellId == 208915 then--Searing Bonds (two IDs for paired off links)
|
||
|
|
warnArcingBonds:CombinedShow(0.5, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnArcingBonds:Show()
|
||
|
|
specWarnArcingBonds:Play("linegather")
|
||
|
|
end
|
||
|
|
elseif spellId == 206641 then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
if amount >= 2 then
|
||
|
|
if not args:IsPlayer() and not UnitIsDeadOrGhost("player") then
|
||
|
|
local warnPlayer = false
|
||
|
|
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", args.spellName)
|
||
|
|
if expireTime then--Debuff, make sure it'll be gone before next slash
|
||
|
|
local remainingDebuff = expireTime-GetTime()
|
||
|
|
local arcaneSlashRemaining = timerArcaneSlashCD:GetRemaining() or 0
|
||
|
|
if remainingDebuff < arcaneSlashRemaining then
|
||
|
|
warnPlayer = true
|
||
|
|
end
|
||
|
|
else--No debuff, just warn
|
||
|
|
warnPlayer = true
|
||
|
|
end
|
||
|
|
if warnPlayer then
|
||
|
|
specWarnArcanoSlashTaunt:Show(args.destName)
|
||
|
|
specWarnArcanoSlashTaunt:Play("tauntboss")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
else
|
||
|
|
warnArcanoSlash:Show(args.destName, amount)
|
||
|
|
end
|
||
|
|
elseif spellId == 207327 then
|
||
|
|
if self.Options.NPAuraOnCleansing and not bombTexture then
|
||
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId, nil, 7)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_REMOVED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 208499 then--Post debuff
|
||
|
|
if args:IsPlayer() then
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 206560 then--Cleaner Mode (45 seconds)
|
||
|
|
timerToxicSliceCD:Stop("boss")
|
||
|
|
elseif spellId == 207327 then
|
||
|
|
if self.Options.NPAuraOnCleansing and not bombTexture then
|
||
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId)
|
||
|
|
if spellId == 206488 and destGUID == UnitGUID("player") and self:AntiSpam(2, 1) then
|
||
|
|
specWarnArcaneSeepage:Show()
|
||
|
|
specWarnArcaneSeepage:Play("runaway")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
||
|
|
|
||
|
|
function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()
|
||
|
|
for i = 1, 5 do
|
||
|
|
local unitID = "boss"..i
|
||
|
|
local GUID = UnitGUID(unitID)
|
||
|
|
local name = UnitName(unitID)
|
||
|
|
if GUID and not seenMobs[GUID] then
|
||
|
|
seenMobs[GUID] = true
|
||
|
|
local cid = self:GetCIDFromGUID(GUID)
|
||
|
|
if cid == 108144 then--Maniac Imprint
|
||
|
|
--local name = DBM:GetSpellInfo(206557)
|
||
|
|
specWarnEchoDuder:Show(name)
|
||
|
|
specWarnEchoDuder:Play("bigmob")
|
||
|
|
elseif cid == 108303 then--Caretaker Imprint
|
||
|
|
--local name = DBM:GetSpellInfo(206560)
|
||
|
|
specWarnEchoDuder:Show(name)
|
||
|
|
specWarnEchoDuder:Play("bigmob")
|
||
|
|
timerToxicSliceCD:Start(16, "echo")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:UNIT_DIED(args)
|
||
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
||
|
|
if cid == 108303 then
|
||
|
|
timerToxicSliceCD:Stop("echo")
|
||
|
|
elseif cid == 108144 then
|
||
|
|
--timerAnnihilationCD:Stop("echo")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
||
|
|
if spellId == 207620 then--Annihilation pre cast, faster than combat log
|
||
|
|
specWarnAnnihilation:Show()
|
||
|
|
specWarnAnnihilation:Play("farfromline")
|
||
|
|
timerArcaneSlashCD:Stop()
|
||
|
|
end
|
||
|
|
end
|