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

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