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.
239 lines
9.0 KiB
239 lines
9.0 KiB
local mod = DBM:NewMod(1225, "DBM-Party-WoD", 1, 547)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod.statTypes = "normal,heroic,mythic,challenge,timewalker"
|
|
|
|
mod:SetRevision("20240426175442")
|
|
mod:SetCreatureID(77734)
|
|
mod:SetEncounterID(1714)
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_AURA_APPLIED 156965 156842 156921 157168 164841 156856 156964",
|
|
"SPELL_AURA_REMOVED 156921 157168",
|
|
"SPELL_CAST_SUCCESS 156854 156974",
|
|
"SPELL_CAST_START 157039 157001 156975 156857",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
)
|
|
|
|
--TODO, get timers for other forms besides demonic, form chosen is RNG based so may take a few logs.
|
|
--Basic Abilities
|
|
local warnDrainLife = mod:NewTargetAnnounce(156854, 4)
|
|
local warnFixate = mod:NewTargetNoFilterAnnounce(157168, 2, nil, nil, 2)
|
|
--Affliction Abilities
|
|
local warnSeedOfMalevolence = mod:NewTargetAnnounce(156921, 3)
|
|
--Demonic Abilities
|
|
local warnDemonForm = mod:NewSpellAnnounce(156919, 3)
|
|
local warnDemonicLeap = mod:NewTargetAnnounce(157039, 3)
|
|
local warnChaosWave = mod:NewTargetAnnounce(157001, 3)
|
|
local warnDoom = mod:NewTargetNoFilterAnnounce(156965, 3, nil, "Healer")
|
|
|
|
--Basic Abilities
|
|
local specWarnDrainLife = mod:NewSpecialWarningInterrupt(156854, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnCorruption = mod:NewSpecialWarningDispel(156842, "RemoveMagic", nil, 2, 1, 2)
|
|
local specWarnRainOfFire = mod:NewSpecialWarningSpell(156857, nil, nil, nil, 2, 2)--156856 fires SUCCESS but do not use, it fires for any player walking in or out of it
|
|
local specWarnRainOfFireMove = mod:NewSpecialWarningGTFO(156857, nil, nil, nil, 1, 8)
|
|
--Unknown Abilities
|
|
local specWarnFixate = mod:NewSpecialWarningRun(157168, nil, nil, 2, 4, 2)
|
|
--Affliction Abilities
|
|
--TODO : Maybe need shit warning.
|
|
local specWarnSeedOfMelevolence = mod:NewSpecialWarningMoveAway(156921, nil, nil, nil, 1, 2)
|
|
local specWarnExhaustion = mod:NewSpecialWarningDispel(164841, "RemoveCurse", nil, 2, 1, 2)
|
|
--Destruction Abilities
|
|
local specWarnChaosBolt = mod:NewSpecialWarningInterrupt(156975, "HasInterrupt", nil, nil, 3, 2)
|
|
local specWarnImmolate = mod:NewSpecialWarningDispel(156964, "RemoveMagic", nil, 2, 1, 2)
|
|
--Demonic Abilities
|
|
local specWarnDemonicLeap = mod:NewSpecialWarningYou(157039, nil, nil, nil, 1, 2)
|
|
local yellDemonicLeap = mod:NewYell(157039)
|
|
local specWarnChaosWave = mod:NewSpecialWarningYou(157001, nil, nil, nil, 1, 2)
|
|
local yellWarnChaosWave = mod:NewYell(157001)
|
|
|
|
--Basic Abilities
|
|
local timerDrainLifeCD = mod:NewCDTimer(15, 156854, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--15~18 variation
|
|
local timerFixate = mod:NewTargetTimer(12, 157168, nil, "-Tank", 3, 3)
|
|
local timerRainOfFireCD = mod:NewCDTimer(12, 156857, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--12-22sec variation phase 2. Unknown Phase 1 repeat timer
|
|
--Destruction Abilities
|
|
local timerChaosBoltCD = mod:NewCDTimer(20.5, 156975, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--20-25 variation.
|
|
local timerImmolateCD = mod:NewCDTimer(12, 156964, nil, "Healer", nil, 5, nil, DBM_COMMON_L.HEALER_ICON)--Only timer that's probably not variable
|
|
--Affliction Abilities
|
|
local timerSeedOfMelevolence = mod:NewTargetTimer(18, 156921, nil, "-Tank")
|
|
local timerSeedOfMelevolenceCD = mod:NewCDTimer(22, 156921, nil, nil, nil, 3)--22-25
|
|
--local timerExhaustionCD = mod:NewCDTimer(14, 164841)--14~24 variation. Large variation, seems useless.
|
|
--Demonic Abilities
|
|
local timerChaosWaveCD = mod:NewCDTimer(13, 157001, nil, nil, nil, 3)--13-17 variation
|
|
local timerDemonicLeapCD = mod:NewCDTimer(20, 157039, nil, nil, nil, 3)
|
|
|
|
mod:AddRangeFrameOption(10, 156921)
|
|
|
|
local seedDebuff = DBM:GetSpellName(156921)
|
|
local DebuffFilter
|
|
do
|
|
DebuffFilter = function(uId)
|
|
return DBM:UnitDebuff(uId, seedDebuff)
|
|
end
|
|
end
|
|
|
|
mod.vb.seedCount = 0
|
|
|
|
function mod:LeapTarget(targetname, uId)
|
|
if not targetname then return end
|
|
if targetname == UnitName("player") then
|
|
specWarnDemonicLeap:Show()
|
|
specWarnDemonicLeap:Play("targetyou")
|
|
yellDemonicLeap:Yell()
|
|
else
|
|
warnDemonicLeap:Show(targetname)
|
|
end
|
|
end
|
|
|
|
function mod:ChaosWaveTarget(targetname, uId)
|
|
if not targetname then return end
|
|
if targetname == UnitName("player") then
|
|
specWarnChaosWave:Show()
|
|
specWarnChaosWave:Play("runaway")
|
|
yellWarnChaosWave:Yell()
|
|
else
|
|
warnChaosWave:Show(targetname)
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.seedCount = 0
|
|
self:SetStage(1)
|
|
timerRainOfFireCD:Start(15-delay)
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 156965 then
|
|
warnDoom:Show(args.destName)
|
|
elseif spellId == 156842 and self:CheckDispelFilter("magic") then
|
|
specWarnCorruption:Show(args.destName)
|
|
specWarnCorruption:Play("dispelnow")
|
|
elseif spellId == 156921 and args:IsDestTypePlayer() then--This debuff can be spread to the boss. bugged?
|
|
self.vb.seedCount = self.vb.seedCount + 1
|
|
warnSeedOfMalevolence:Show(args.destName)
|
|
--timerSeedOfMelevolenceCD:Start()
|
|
timerSeedOfMelevolence:Start(args.destName)
|
|
if args:IsPlayer() then
|
|
specWarnSeedOfMelevolence:Show()
|
|
specWarnSeedOfMelevolence:Play("runout")
|
|
end
|
|
if self.Options.RangeFrame then
|
|
if DBM:UnitDebuff("player", seedDebuff) then--You have debuff, show everyone
|
|
DBM.RangeCheck:Show(10, nil)
|
|
else--You do not have debuff, only show players who do
|
|
DBM.RangeCheck:Show(10, DebuffFilter)
|
|
end
|
|
end
|
|
elseif spellId == 157168 then
|
|
timerFixate:Start(args.destName)
|
|
if args:IsPlayer() then
|
|
specWarnFixate:Show()
|
|
specWarnFixate:Play("justrun")
|
|
else
|
|
warnFixate:Show(args.destName)
|
|
end
|
|
elseif spellId == 164841 and self:CheckDispelFilter("curse") then
|
|
specWarnExhaustion:Show(args.destName)
|
|
specWarnExhaustion:Play("dispelnow")
|
|
--timerExhaustionCD:Start()
|
|
elseif spellId == 156964 and self:CheckDispelFilter("magic") then--Base version cast only in phase 1
|
|
specWarnImmolate:Show(args.destName)
|
|
timerImmolateCD:Start()
|
|
specWarnImmolate:Play("dispelnow")
|
|
elseif spellId == 156856 and args:IsPlayer() then
|
|
specWarnRainOfFireMove:Show(args.spellName)
|
|
specWarnRainOfFireMove:Play("watchfeet")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 156921 and args:IsDestTypePlayer() then
|
|
self.vb.seedCount = self.vb.seedCount - 1
|
|
timerSeedOfMelevolence:Cancel(args.destName)
|
|
if self.Options.RangeFrame and self.vb.seedCount == 0 then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
elseif spellId == 157168 then
|
|
timerFixate:Cancel(args.destName)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 157039 then
|
|
timerDemonicLeapCD:Start()
|
|
self:BossTargetScanner(77734, "LeapTarget", 0.1, 16)--Timing not verified, but Boss DOES look at leap target
|
|
elseif spellId == 157001 then
|
|
timerChaosWaveCD:Start()
|
|
self:BossTargetScanner(77734, "ChaosWaveTarget", 0.1, 16)--Timing not verified, but Boss DOES look at leap target
|
|
elseif spellId == 156975 then
|
|
timerChaosBoltCD:Start()--TODO, verify it's 20 on heroic and normal too. it's definitely 20 on CM
|
|
specWarnChaosBolt:Show(args.sourceName)
|
|
if self:IsTank() then
|
|
specWarnChaosBolt:Play("kickcast")
|
|
else
|
|
specWarnChaosBolt:Play("helpkick")
|
|
end
|
|
elseif spellId == 156857 then--Base version cast only in phase 1
|
|
specWarnRainOfFire:Show()
|
|
specWarnRainOfFire:Play("watchstep")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 156854 then
|
|
warnDrainLife:Show(args.destName)
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnDrainLife:Show(args.sourceName)
|
|
specWarnDrainLife:Play("kickcast")
|
|
end
|
|
timerDrainLifeCD:Start()
|
|
elseif spellId == 156974 then--Instant cast version from destro
|
|
specWarnRainOfFire:Show()
|
|
specWarnRainOfFire:Play("watchstep")
|
|
timerRainOfFireCD:Start()
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 156919 then--Demonology Transformation
|
|
self:SetStage(2)
|
|
timerDrainLifeCD:Cancel()
|
|
timerRainOfFireCD:Cancel()
|
|
timerChaosWaveCD:Start(10)
|
|
timerDemonicLeapCD:Start(23)
|
|
elseif spellId == 156863 then--Affliction Transformation
|
|
self:SetStage(2)
|
|
timerRainOfFireCD:Cancel()
|
|
--timerSeedOfMelevolenceCD:Start(5)
|
|
--timerDrainLifeCD:Start()--Update timer here
|
|
--no timers. need logs.
|
|
elseif spellId == 156866 then--Destruction Transformation
|
|
self:SetStage(2)
|
|
timerDrainLifeCD:Cancel()
|
|
if self:IsDifficulty("challenge5") then-- (in CM, it says he goes into this form but it's a lie)
|
|
timerSeedOfMelevolenceCD:Start(5)
|
|
timerRainOfFireCD:Start(13)
|
|
timerChaosBoltCD:Start(15)
|
|
timerImmolateCD:Start(22)--Debuff timer, not cast. you don't interrupt, so timer for healer dispel, not cast
|
|
else--Actual heroic/normal destro form
|
|
--no timers. need logs.
|
|
--timerRainOfFireCD:Start(13)
|
|
--timerChaosBoltCD:Start(15)
|
|
--timerImmolateCD:Start(22)
|
|
end
|
|
elseif spellId == 114268 then
|
|
DBM:EndCombat(self)
|
|
end
|
|
end
|
|
|