82a9ac0937
* 5.20 * Update to 5.21 --------- Co-authored-by: Szyler <Szyler@Szyler.com>
401 lines
14 KiB
Lua
401 lines
14 KiB
Lua
local mod = DBM:NewMod("Kil", "DBM-Sunwell")
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
|
mod:SetCreatureID(25657, 25588, 25696, 25315)
|
|
mod:SetUsedIcons(4, 5, 6, 7, 8)
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_AURA_APPLIED",
|
|
"SPELL_AURA_APPLIED_DOSE",
|
|
"SPELL_AURA_REMOVED",
|
|
"SPELL_CAST_START",
|
|
"SPELL_CAST_SUCCESS",
|
|
"SPELL_INTERRUPT",
|
|
"CHAT_MSG_MONSTER_YELL",
|
|
"CHAT_MSG_MONSTER_SAY",
|
|
"UNIT_HEALTH",
|
|
"UNIT_DIED"
|
|
)
|
|
--Phase 1
|
|
-- Apolyon
|
|
local warnSoulbomb = mod:NewTargetAnnounce(2146682, 2)
|
|
local YellSoulbomb = mod:NewFadesYell(2146682)
|
|
local timerTargetSoulbomb = mod:NewTargetTimer(10, 2146682)
|
|
local timerNextSoulbomb = mod:NewNextTimer(10, 2146682)
|
|
|
|
local warnSoulrend = mod:NewSpellAnnounce(2146680, 2) -- 2146680 Spell_cast_Start
|
|
local timerNextSoulRend = mod:NewNextTimer(30, 2146680) -- 2146680 Spell_cast_Start (20 yard radius)
|
|
local timerCastSoulRend = mod:NewCastTimer(3, 2146680) -- 2146680 Spell_cast_Start
|
|
|
|
-- Agamath
|
|
-- local warnRagingBlow = mod:NewSpellAnnounce(2146684, 3)
|
|
local timerNextRagingBlow = mod:NewNextTimer(10, 2146684)
|
|
|
|
local warnFelRage = mod:NewTargetAnnounce(2146688, 2)
|
|
local timerFelRage = mod:NewTargetTimer(5, 2146688)
|
|
|
|
-- Archonisus
|
|
local warnSummonWildImps = mod:NewSpellAnnounce(2146676, 3) -- 2146676 Spell_cast_Start
|
|
local timerNextSummonWildImps = mod:NewNextTimer(31, 2146676) -- 2146676 Spell_cast_Start
|
|
local timerCastImplosion = mod:NewCastTimer(31, 2146691)
|
|
local warnImplosion = mod:NewSpellAnnounce(2146691, 3) -- Spell_Damage 2146691
|
|
|
|
local warnSpecYouConflag = mod:NewSpecialWarningYou(2146673)
|
|
local warnTargetConflag = mod:NewTargetAnnounce(2146673, 3)
|
|
local timerTargetConflag = mod:NewTargetTimer(2.85, 2146673)
|
|
|
|
-- make warnings and timers for these, and make the trigger in their respective functions
|
|
-- Change all args.spellID into args:IsSpellID() with comma separated for the spellIDs
|
|
|
|
local berserkTimer = mod:NewBerserkTimer(900)
|
|
local warnPhaseSoon = mod:NewAnnounce("WarnPhaseSoon", 2, nil)
|
|
local warnPhase = mod:NewAnnounce("WarnPhase", 2, nil)
|
|
|
|
-- overall KJ
|
|
-- KJ timers
|
|
local timerEmerge = mod:NewTimer(18,"Kil'Jaeden is emerging", nil)
|
|
|
|
local timerTargetLegionLightning = mod:NewTargetTimer(2.85, 2146510) -- 2146510, 2146511 Spell_cast_start
|
|
local warnTargetLegionLightning = mod:NewTargetAnnounce(2146510, 2) -- 2146510, 2146511 Spell_cast_start
|
|
local warnSpecYouLegionLightning = mod:NewSpecialWarningYou(2146510) -- 2146510, 2146511 Spell_cast_start
|
|
|
|
local timerNextFireBloom = mod:NewNextTimer(30, 2146523) -- 2146523, 2146524, 2146525, 2146526 Spell_cast_start
|
|
local timerCastFireBloom = mod:NewCastTimer(1.4, 2146523)
|
|
local timerTargetFireBloom = mod:NewTargetTimer(15, 2146524) -- 2146523, 2146524, 2146525, 2146526 Spell_cast_start
|
|
local specwarnFireBloom = mod:NewSpecialWarningYou(2146524)
|
|
local warnFireBloomTargets = mod:NewTargetAnnounce(2146524, 2)
|
|
local yellFireBloom = mod:NewFadesYell(2146524)
|
|
|
|
local warnReflections = mod:NewSpellAnnounce(2146538, 3) -- 2146522 Spell_cast_start
|
|
local timerNextReflections = mod:NewNextTimer(60, 2146538) -- 2146522 Spell_cast_start
|
|
|
|
local timerNextWorldBreaker = mod:NewNextTimer(30, 2146515) -- 2146519, 2146520 Spell_cast_start
|
|
local warnWorldBreaker = mod:NewSpellAnnounce(2146515, 1) -- 2146519, 2146520 Spell_cast_start
|
|
local timerWorldBreaker = mod:NewTimer(1.4, "TimerWorldBreaker", 2146515)
|
|
|
|
-- Events
|
|
local timerNextMiniEvent = mod:NewTimer(60, "Next random Mini-Event", nil)
|
|
|
|
local warnDarkness = mod:NewSpellAnnounce(2146540, 3) -- 2146540, 2146541, 2146542 Spell_cast_start
|
|
local timerNextDarkness = mod:NewNextTimer(55, 2146540) -- 2146540, 2146541, 2146542 Spell_cast_start
|
|
local timerCastDarkness = mod:NewCastTimer(9, 2146540)
|
|
|
|
local timerDragonOrb = mod:NewTimer(60, "Dragon Orb active in", nil)
|
|
local warnDragonOrb = mod:NewAnnounce("Dragon Orb activated!", 3, nil)
|
|
|
|
-- Phase 2
|
|
local timerCastAllConsuming = mod:NewCastTimer(2, 2146521) -- 2146521 Spell_cast_start
|
|
local timerDurAllConsuming = mod:NewTimer(85, "The All Consuming Darkness duration", 2146521)
|
|
local specWarnConsumingDarkness = mod:NewSpecialWarningMove(2146554, 2)
|
|
|
|
local timerCastAnnihilate = mod:NewCastTimer(4, 2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
|
local warnAnnihilate = mod:NewSpellAnnounce(2146555, 2) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
|
local timerChannelAnnihilate = mod:NewTimer(50, "Annihilate duration",2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
|
local timerNextAnnihilate = mod:NewNextTimer(96, 2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
|
|
|
-- phase 3
|
|
local warnObliterate = mod:NewSpellAnnounce(2146575, 3) -- 2146575, 2146576, 2146578 Spell_cast_start
|
|
local timerCastObliterate = mod:NewCastTimer(4, 2146575) -- 2146575, 2146576, 2146578 Spell_cast_start
|
|
local timerObliterateEvent = mod:NewTimer(54, "Obliterate Event duration", 2146575)
|
|
local warnObliterateCount = mod:NewAnnounce("%s Obliterate remaining", 2146575)
|
|
|
|
-- phase 4
|
|
local warnArmageddon = mod:NewSpellAnnounce(2146581, 3)
|
|
local timerCastArmageddon = mod:NewCastTimer(2, 2146581)
|
|
local timerChannelArmageddon = mod:NewTimer(50, "Armageddon duration", 2146581)
|
|
local timerCastFirestorm = mod:NewCastTimer(4, 2146585)
|
|
|
|
-- Everything else
|
|
local fireBloomTargets = {}
|
|
local fireBloomIcon = 6
|
|
local obliterateCount
|
|
local worldbreaker
|
|
local longObliterateDone = false
|
|
|
|
self.vb.phase = 1
|
|
|
|
-- Need to add: timerTargetBlueFight (Dragon form, 1 minute, 2146650) [not in combatlog]
|
|
-- seperate triggers for Main Event and Mini Event? [yes]
|
|
-- Correct timers after transition [p2 and p3 timers working] -- fix p4 and p5 [yes]
|
|
-- some kind of self.vb.phase == 6 for next Darkness cast (after mini-events or after last orb)
|
|
-- Orb timer into each phase [yes]
|
|
-- add special warning if you walk into the All Consuming Darkness [yes]
|
|
|
|
local function WarnFireBloomTargets()
|
|
warnFireBloomTargets:Show(table.concat(fireBloomTargets, "<, >"))
|
|
table.wipe(fireBloomTargets)
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.phase = 1
|
|
timerNextSoulbomb:Start(5-delay)
|
|
timerNextSoulRend:Start(20-delay)
|
|
obliterateCount = 0
|
|
worldbreaker = 0
|
|
longObliterateDone = false
|
|
end
|
|
|
|
local function CancelTimers()
|
|
timerNextWorldBreaker:Cancel()
|
|
timerNextFireBloom:Cancel()
|
|
timerNextReflections:Cancel()
|
|
timerNextDarkness:Cancel()
|
|
timerNextMiniEvent:Cancel()
|
|
end
|
|
|
|
function mod:LegionLightningTarget()
|
|
local target = nil
|
|
target = mod:GetBossTarget(25315)
|
|
if target == UnitName("player") then
|
|
warnSpecYouLegionLightning:Show()
|
|
else
|
|
warnTargetLegionLightning:Show(target)
|
|
end
|
|
timerTargetLegionLightning:Start(target)
|
|
self:SetIcon(target, 8, 3)
|
|
end
|
|
|
|
function mod:ConflagTarget()
|
|
local conflagTarget = nil
|
|
conflagTarget = mod:GetBossTarget(25696)
|
|
if conflagTarget == UnitName("player") then
|
|
warnSpecYouConflag:Show()
|
|
else
|
|
warnTargetConflag:Show(conflagTarget)
|
|
end
|
|
timerTargetConflag:Start(conflagTarget)
|
|
self:SetIcon(conflagTarget, 8, 3)
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
if self.vb.phase == 1 then
|
|
if args:IsSpellID(2146680) then
|
|
warnSoulrend:Show()
|
|
timerNextSoulRend:Start()
|
|
timerCastSoulRend:Start()
|
|
elseif args:IsSpellID(2146684) then
|
|
-- warnRagingBlow:Show()
|
|
timerNextRagingBlow:Start()
|
|
elseif args:IsSpellID(2146673) then
|
|
self:ScheduleMethod(0.15,"ConflagTarget");
|
|
elseif args:IsSpellID(2146676) then
|
|
warnSummonWildImps:Show()
|
|
timerNextSummonWildImps:Start()
|
|
timerCastImplosion:Start()
|
|
warnImplosion:Schedule(27)
|
|
end
|
|
elseif self.vb.phase >= 2 and args.sourceName == "Kil'jaeden" then
|
|
if args:IsSpellID(2146509) then
|
|
self:ScheduleMethod(0.15,"LegionLightningTarget");
|
|
elseif args:IsSpellID(2146515, 2146516) and args.sourceName =="Kil'jaeden" then
|
|
if worldbreaker == 0 then
|
|
timerWorldBreaker:Start("Knockup")
|
|
timerNextWorldBreaker:Start()
|
|
worldbreaker = 1
|
|
else
|
|
timerWorldBreaker:Start("Knockback")
|
|
worldbreaker = 0
|
|
end
|
|
warnWorldBreaker:Show()
|
|
elseif args:IsSpellID(2146538) then
|
|
warnReflections:Show()
|
|
if self.vb.phase == 2 then
|
|
timerNextReflections:Start(60)
|
|
elseif self.vb.phase == 6 and DBM:AntiSPam(15, 1) then
|
|
timerNextMiniEvent:Start()
|
|
timerNextDarkness:Start(20)
|
|
else
|
|
timerNextMiniEvent:Start()
|
|
end
|
|
elseif args:IsSpellID(2146523) then
|
|
timerNextFireBloom:Start()
|
|
timerCastFireBloom:Start()
|
|
elseif args:IsSpellID(2146555) then
|
|
timerChannelAnnihilate:Schedule(4)
|
|
timerNextDarkness:Schedule(45, 20)
|
|
timerNextFireBloom:Schedule(50, 28)
|
|
timerNextWorldBreaker:Schedule(50, 35)
|
|
timerNextMiniEvent:Schedule(50,48)
|
|
timerDragonOrb:Start(59)
|
|
elseif args:IsSpellID(2146560) then
|
|
timerCastAnnihilate:Start()
|
|
warnAnnihilate:Show()
|
|
timerChannelAnnihilate:Schedule(4, 11)
|
|
timerNextMiniEvent:Start(60)
|
|
if self.vb.phase == 6 and DBM:AntiSPam(15, 2) then
|
|
timerNextDarkness:Start(20)
|
|
end
|
|
elseif args:IsSpellID(2146521) then
|
|
timerCastAllConsuming:Start()
|
|
elseif args:IsSpellID(2146540) then
|
|
warnDarkness:Show()
|
|
timerCastDarkness:Start()
|
|
elseif args:IsSpellID(2146575) then
|
|
warnObliterate:Show()
|
|
timerCastObliterate:Start()
|
|
longObliterateDone = false
|
|
elseif args:IsSpellID(2146576) then
|
|
timerCastObliterate:Start()
|
|
if not longObliterateDone and obliterateCount < 9 then
|
|
warnObliterateCount:Show(10 - obliterateCount)
|
|
obliterateCount = obliterateCount + 1
|
|
elseif not longObliterateDone and obliterateCount == 9 then
|
|
warnObliterateCount:Show(1)
|
|
obliterateCount = 0
|
|
longObliterateDone = true
|
|
elseif longObliterateDone and obliterateCount < 3 then
|
|
warnObliterateCount:Show(3 - obliterateCount)
|
|
obliterateCount = obliterateCount + 1
|
|
elseif longObliterateDone and obliterateCount == 2 then
|
|
warnObliterateCount:Show(1)
|
|
obliterateCount = 0
|
|
end
|
|
if self.vb.phase == 6 and DBM:AntiSpam(15, 3) then
|
|
timerNextDarkness:Start(20)
|
|
end
|
|
elseif args:IsSpellID(2146581) then
|
|
warnArmageddon:Show()
|
|
timerCastArmageddon:Start()
|
|
timerChannelArmageddon:Schedule(2)
|
|
timerNextDarkness:Schedule(45,15)
|
|
timerNextFireBloom:Schedule(50,15)
|
|
timerNextWorldBreaker:Schedule(50,20)
|
|
elseif args:IsSpellID(2146590) then
|
|
warnArmageddon:Show()
|
|
timerCastArmageddon:Start()
|
|
timerChannelArmageddon:Schedule(2, 10)
|
|
timerNextMiniEvent:Start()
|
|
if self.vb.phase == 6 and DBM:AntiSpam(15, 4) then
|
|
timerNextDarkness:Start(20)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_INTERRUPT(args)
|
|
if (args.extraSpellId == 2146673 or args.spellId == 2146673) and args.destName == "Archonisus" then
|
|
-- warnSpecYouConflag:Hide()
|
|
-- warnTargetConflag:Hide()
|
|
timerTargetConflag:Cancel()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if self.vb.phase == 1 then
|
|
if args:IsSpellID(2146688) then
|
|
warnFelRage:Show(args.destName)
|
|
timerFelRage:Start(args.destName)
|
|
elseif args:IsSpellID(2146681) then
|
|
if args:IsPlayer() then
|
|
YellSoulbomb:Countdown(10, 3)
|
|
end
|
|
warnSoulbomb:Show(args.destName)
|
|
timerNextSoulbomb:Start()
|
|
timerTargetSoulbomb:Start(args.destName)
|
|
end
|
|
else
|
|
if args:IsSpellID(2146524) and args.sourceName == "Kil'jaeden" then
|
|
fireBloomTargets[#fireBloomTargets + 1] = args.destName
|
|
if args:IsPlayer() then
|
|
specwarnFireBloom:Show()
|
|
yellFireBloom:Countdown(15,3)
|
|
end
|
|
timerTargetFireBloom:Start(args.destName)
|
|
self:SetIcon(args.destName, fireBloomIcon, 60)
|
|
fireBloomIcon = fireBloomIcon - 1
|
|
self:Unschedule(WarnFireBloomTargets)
|
|
self:Schedule(0.2, WarnFireBloomTargets)
|
|
elseif args:IsSpellID(2146554) and args:IsPlayer() and DBM:AntiSpam(5, 5) then
|
|
specWarnConsumingDarkness:Show()
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
if args:IsSpellID() and args.sourceName == "Kil'jaeden" then
|
|
self:SetIcon(args.destName, 0)
|
|
fireBloomIcon = fireBloomIcon + 1
|
|
end
|
|
end
|
|
|
|
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
|
if msg == L.Phase2KJ or msg:find(L.Phase2KJ) then
|
|
self.vb.phase = 2
|
|
warnPhase:Show(2)
|
|
berserkTimer:Start()
|
|
timerEmerge:Start()
|
|
timerNextFireBloom:Start(28)
|
|
timerNextWorldBreaker:Start(33)
|
|
timerNextReflections:Start(43)
|
|
elseif msg == L.Phase3KJ or msg:find(L.Phase3KJ) then
|
|
self.vb.phase = 3
|
|
warnPhase:Show(3)
|
|
self:Schedule(0, CancelTimers)
|
|
timerCastAllConsuming:Start()
|
|
timerNextAnnihilate:Start(28)
|
|
timerDurAllConsuming:Schedule(3)
|
|
elseif msg == L.Phase4KJ or msg:find(L.Phase4KJ) then
|
|
self.vb.phase = 4
|
|
warnPhase:Show(4)
|
|
self:Schedule(0, CancelTimers)
|
|
timerObliterateEvent:Start(45)
|
|
timerNextDarkness:Schedule(45,10)
|
|
timerNextFireBloom:Schedule(45, 24)
|
|
timerNextWorldBreaker:Schedule(45, 29)
|
|
timerNextMiniEvent:Schedule(45, 43)
|
|
timerDragonOrb:Start(51)
|
|
elseif msg == L.Phase5KJ or msg:find(L.Phase5KJ) then
|
|
self.vb.phase = 5
|
|
warnPhase:Show(5)
|
|
self:Schedule(0, CancelTimers)
|
|
timerNextDarkness:Schedule(45,19)
|
|
timerCastFirestorm:Schedule(54, 24)
|
|
timerNextWorldBreaker:Schedule(54, 29)
|
|
timerNextMiniEvent:Schedule(54,44)
|
|
timerDragonOrb:Start(59)
|
|
elseif msg == L.Phase6KJ or msg:find(L.Phase6KJ) then
|
|
self.vb.phase = 6
|
|
warnPhase:Show(6)
|
|
self:Schedule(0, CancelTimers)
|
|
timerDragonOrb:Start(20)
|
|
timerNextDarkness:Start(25)
|
|
timerNextFireBloom:Start(39)
|
|
timerNextWorldBreaker:Start(44)
|
|
timerNextMiniEvent:Start(59)
|
|
elseif msg == L.OrbYell1 or msg:find(L.OrbYell1) or
|
|
msg == L.OrbYell2 or msg:find(L.OrbYell2) or
|
|
msg == L.OrbYell3 or msg:find(L.OrbYell3) or
|
|
msg == L.OrbYell4 or msg:find(L.OrbYell4) then
|
|
warnDragonOrb:Show()
|
|
end
|
|
end
|
|
mod.CHAT_MSG_MONSTER_SAY = mod.CHAT_MSG_MONSTER_YELL
|
|
|
|
function mod:UNIT_HEALTH(unit)
|
|
if self:GetUnitCreatureId(unit) == 25315 then
|
|
local health = DBM_UnitHealthPercent(unit)
|
|
if health <= 84 and self.vb.phase == 2 and DBM:AntiSpam(35, 6) then
|
|
warnPhaseSoon:Show(3)
|
|
elseif health <= 64 and self.vb.phase == 3 and DBM:AntiSpam(35, 6) then
|
|
warnPhaseSoon:Show(4)
|
|
elseif health <= 44 and self.vb.phase == 4 and DBM:AntiSpam(35, 6) then
|
|
warnPhaseSoon:Show(5)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 25588 then --
|
|
timerNextSoulbomb:Stop()
|
|
timerNextSoulRend:Stop()
|
|
elseif cid == 25657 then -- Agamath
|
|
timerNextRagingBlow:Stop()
|
|
timerFelRage:Stop()
|
|
elseif cid == 25696 then -- Archonisus
|
|
timerNextSummonWildImps:Stop()
|
|
end
|
|
end |