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.
115 lines
4.0 KiB
115 lines
4.0 KiB
local mod = DBM:NewMod(1501, "DBM-Party-Legion", 6, 726)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod.statTypes = "heroic,mythic,challenge"
|
|
|
|
mod:SetRevision("20230307064655")
|
|
mod:SetCreatureID(98208)
|
|
mod:SetEncounterID(1829)
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_AURA_APPLIED 203957 220871",
|
|
"SPELL_AURA_APPLIED_DOSE 203176",
|
|
"SPELL_CAST_START 202974 203882 203176",
|
|
"SPELL_DAMAGE 203833",
|
|
"SPELL_MISSED 203833",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
)
|
|
|
|
--TODO, it might be time to build an interrupt table ("hasInterrupt") for better option defaults for spammy interrupt warnings.
|
|
--Force bomb might be more consistent now, need more logs, last log was 35
|
|
local warnTimeLock = mod:NewTargetAnnounce(203957, 4)
|
|
local warnUnstableMana = mod:NewTargetAnnounce(203176, 2)
|
|
|
|
local specWarnTimeSplit = mod:NewSpecialWarningMove(203833, nil, nil, nil, 1, 2)
|
|
local specWarnForceBomb = mod:NewSpecialWarningSpell(202974, nil, nil, nil, 2, 12)
|
|
local specWarnBlast = mod:NewSpecialWarningInterruptCount(203176, "HasInterrupt", nil, 2, 1, 2)
|
|
local specWarnBlastStacks = mod:NewSpecialWarningDispel(203176, "MagicDispeller")
|
|
local specWarnTimeLock = mod:NewSpecialWarningInterrupt(203957, "HasInterrupt", nil, 2, 1, 2)
|
|
local specWarnUnstableMana = mod:NewSpecialWarningMove(203176, nil, nil, nil, 1, 2)
|
|
|
|
local timerForceBombD = mod:NewCDTimer(31.8, 202974, nil, nil, nil, 2)
|
|
local timerEvent = mod:NewBuffFadesTimer(124, 203914, nil, nil, nil, 6, nil, nil, nil, 1, 10)
|
|
|
|
mod.vb.interruptCount = 0
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.interruptCount = 0
|
|
timerForceBombD:Start(16.7-delay)
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 202974 then
|
|
specWarnForceBomb:Show()
|
|
specWarnForceBomb:Play("forcenovacoming")
|
|
timerForceBombD:Start()
|
|
elseif spellId == 203882 then
|
|
timerForceBombD:Cancel()
|
|
timerEvent:Start()
|
|
elseif spellId == 203176 then
|
|
if self.vb.interruptCount == 3 then self.vb.interruptCount = 0 end
|
|
self.vb.interruptCount = self.vb.interruptCount + 1
|
|
local kickCount = self.vb.interruptCount
|
|
specWarnBlast:Show(args.sourceName, kickCount)
|
|
--Takes 3 to block all casts, it only takes 2 in a row to break his stacks though.
|
|
--3 count still makes sense for 2 though because you know which cast to skip to maintain order. Kick 1-2, skip 3, easy
|
|
--A group with only one interruptor won't be able to prevent his stacks and need to use dispels on boss instead
|
|
if kickCount == 1 then
|
|
specWarnBlast:Play("kick1r")
|
|
elseif kickCount == 2 then
|
|
specWarnBlast:Play("kick2r")
|
|
elseif kickCount == 3 then
|
|
specWarnBlast:Play("kick3r")
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 203957 then
|
|
--if people run different directions 2-3 of these can activate at once.
|
|
--So combined show and anti spam measures used.
|
|
warnTimeLock:CombinedShow(0.5, args.destName)
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnTimeLock:Show(args.sourceName)
|
|
specWarnTimeLock:Play("kickcast")
|
|
end
|
|
elseif spellId == 220871 then
|
|
if args:IsPlayer() then
|
|
specWarnUnstableMana:Show()
|
|
specWarnUnstableMana:Play("runout")
|
|
specWarnUnstableMana:ScheduleVoice(1, "keepmove")
|
|
else
|
|
warnUnstableMana:Show(args.destName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED_DOSE(args)
|
|
local spellId = args.spellId
|
|
if spellId == 203176 then
|
|
if args.amount >= 5 then
|
|
specWarnBlastStacks:Show(args.destName)
|
|
specWarnBlastStacks:Play("dispelboss")
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId)
|
|
if spellId == 203833 and destGUID == UnitGUID("player") and self:AntiSpam(2, 1) then
|
|
specWarnTimeSplit:Show()
|
|
specWarnTimeSplit:Play("runaway")
|
|
end
|
|
end
|
|
mod.SPELL_MISSED = mod.SPELL_DAMAGE
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 147995 then--Interrupt Channeling
|
|
self.vb.interruptCount = 0
|
|
timerEvent:Cancel()
|
|
timerForceBombD:Start(20)--20-23
|
|
end
|
|
end
|
|
|