Files
coa-dbm/DBM-Sunwell/EredarTwins.lua
T
Szyler 82a9ac0937 Update to 5.21 Sunwell (#6)
* 5.20

* Update to 5.21

---------

Co-authored-by: Szyler <Szyler@Szyler.com>
2024-09-30 20:09:41 -07:00

291 lines
9.6 KiB
Lua

local mod = DBM:NewMod("Twins", "DBM-Sunwell")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
mod:SetCreatureID(25165, 25166)
mod:SetUsedIcons(7, 8)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_CAST_START",
"CHAT_MSG_MONSTER_YELL",
"CHAT_MSG_MONSTER_EMOTE",
"CHAT_MSG_RAID_BOSS_EMOTE",
"CHAT_MSG_MONSTER_SAY",
"CHAT_MSG_RAID_WARNING",
"UNIT_HEALTH"
)
mod:SetBossHealthInfo(
25165, L.Sacrolash,
25166, L.Alythess
)
--phase 1
local timerDance = mod:NewTimer(15,"Fire Dance/Dawn Runner", 2145929)
local timerTwinFade = mod:NewTimer(10, "The strongest Twin remains", 148477)
-- Alythess Phase
local warnSolarBurn = mod:NewSpecialWarningStack(2145905, nil, 4) -- 2145905, 2145906 spell_aura_applied
local timerFlingAlyth = mod:NewTargetTimer(1, 2145916)
local warnFireDance = mod:NewSpellAnnounce(2145928, 3) -- 2145928
local timerFireDance = mod:NewNextTimer(30, 2145928)
-- Sacrolash abilities in Aly phase
local timerCrescentMoonKick = mod:NewTargetTimer(2, 2146019)
--local warnLunarFlare = mod:NewAnnounce(,2146007, 3) -- 2145907, 2145908
local warnCrushingShadow = mod:NewSpellAnnounce(2146029, 3) -- 2146030 spell_Cast_start
local timerCrushingShadow = mod:NewNextTimer(29,2146029)
-- Sacrolash Phase
local warnLunarBurn = mod:NewAnnounce("WarnLunarStacks", 2, 2146005)
local warnFling = mod:NewTargetAnnounce(2146016, 3) -- 2146017 spell_Cast_start 40s CD, Unless pushed back
local timerFlingSacro = mod:NewTargetTimer(1, 2146016)
local warnDawnRunner = mod:NewSpellAnnounce(2146027, 3)
local timerDawnRunner = mod:NewNextTimer(30, 2146027)
-- Alythess abilities in Sacro phase
local timerRisingSunKick = mod:NewTargetTimer(2, 2145919)
--local warnSolarFlare = mod:NewSpellAnnounce(2145907, 3) -- 2145907, 2145908
local warnFlashBurn = mod:NewSpellAnnounce(2145929, 3) -- 2145929, 2145930, 2145931 spell_Cast_start
local timerFlashBurn = mod:NewNextTimer(29, 2145929)
-- Sacro'lythess
local warnDawnDancer = mod:NewSpellAnnounce(2145927)
local timerDawnDancer = mod:NewNextTimer(30, 2145927)
-- everything else
local timerSacroTankCombo = mod:NewTimer(30, "Sacrolash Tank combination", 2146016)
local timerAlythTankCombo = mod:NewTimer(30, "Alythess Tank combination", 2145916)
local timerCrashCombination = mod:NewTimer(4, "Falling Star and Crashing Moon", 2145922)
local warnCrashCombination = mod:NewAnnounce("Falling Star and Crashing Moon", 2145922)
local timerCutCombination = mod:NewTimer(5, "Crescent Moon and Rising Sun Cut", 2146025)
local warnCutCombination = mod:NewAnnounce("Crescent Moon and Rising Sun Cut", 2146025)
local timerRoleReversal = mod:NewTimer(5, "Role Reversal RP", 992179)
local timerTagTeam = mod:NewTimer(5, "Both Twins are emerging", 992179)
local timerTwinsMerge = mod:NewTimer(5, "The Twins are merging", 992179)
local berserkTimer = mod:NewBerserkTimer(600)
local sacroPath = false
local alythPath = false
function mod:OnCombatStart(delay)
self.vb.phase = 1
sacroPath = false
alythPath = false
timerDance:Start(-delay)
timerTwinFade:Start(-delay)
berserkTimer:Start(-delay)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2145905) and args:IsPlayer() then
if args.amount then
warnSolarBurn:Show(args.amount)
end
elseif args:IsSpellID(2146005) and args:IsPlayer() then
if args.amount and (args.amount == 4 or args.amount >= 8) then
warnLunarBurn:Show(args.spellName, args.amount or 1)
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:CancelTimers()
timerDance:Cancel()
timerAlythTankCombo:Cancel()
timerSacroTankCombo:Cancel()
timerFireDance:Cancel()
timerDawnRunner:Cancel()
timerCrushingShadow:Cancel()
timerFlashBurn:Cancel()
self:UnscheduleMethod("FireDance")
self:UnscheduleMethod("DawnRunner")
end
function mod:FireDance()
self:UnscheduleMethod("FireDance")
warnFireDance:Show()
timerFireDance:Start()
self:ScheduleMethod(31,"FireDance")
end
function mod:DawnRunner()
self:UnscheduleMethod("DawnRunner")
warnDawnRunner:Show()
timerDawnRunner:Start()
self:ScheduleMethod(31, "DawnRunner")
end
function mod:DawnDancer()
self:UnscheduleMethod("DawnDancer")
warnDawnDancer:Show()
timerDawnDancer:Start()
self:ScheduleMethod(31,"DawnDancer")
end
function mod:SacroPath()
timerSacroTankCombo:Start(30)
timerDawnRunner:Start(5)
timerFireDance:Start(15)
self:ScheduleMethod(5,"DawnRunner")
self:ScheduleMethod(15,"FireDance")
end
function mod:AlythPath()
timerAlythTankCombo:Start(30)
timerDawnRunner:Start(15)
timerFireDance:Start(5)
self:ScheduleMethod(15,"DawnRunner")
self:ScheduleMethod(5,"FireDance")
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2146016) and args.sourceName == "Lady Sacrolash" and self.vb.phase <= 3 then
local sacroTarget = mod:GetBossTarget(25165)
warnFling:Show(sacroTarget)
timerFlingSacro:Start(sacroTarget)
timerRisingSunKick:Start(sacroTarget)
timerCrashCombination:Start(sacroTarget)
warnCrashCombination:Schedule(4)
timerCutCombination:Start(sacroTarget)
warnCutCombination:Schedule(5)
timerSacroTankCombo:Start()
if timerDawnRunner:GetTime() > 24 then
timerDawnRunner:Update(0,6)
self:UnscheduleMethod("DawnRunner")
self:ScheduleMethod(6,"DawnRunner")
end
elseif args:IsSpellID(2145916) and args.sourceName == "Grand Warlock Alythess" and self.vb.phase <= 3 then
local alythTarget = mod:GetBossTarget(25166)
timerFlingAlyth:Start(alythTarget)
timerCrescentMoonKick:Start(alythTarget)
timerCrashCombination:Start(alythTarget)
warnCrashCombination:Schedule(4)
timerCutCombination:Start(alythTarget)
warnCutCombination:Schedule(5)
timerAlythTankCombo:Start()
if timerFireDance:GetTime() > 24 then
timerFireDance:Update(0,6)
self:UnscheduleMethod("FireDance")
self:ScheduleMethod(6,"FireDance")
end
elseif args:IsSpellID(2145929, 2145930, 2145931, 2145932) then
warnFlashBurn:Show()
timerFlashBurn:Start()
elseif args:IsSpellID(2146029, 2146030, 2146031, 2146032) then
warnCrushingShadow:Show()
timerCrushingShadow:Start()
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg == L.TwinsPull or msg:find(L.TwinsPull) then
timerDance:Start()
elseif msg == L.SacroPhase or msg:find(L.SacroPhase) then
self:ScheduleMethod(0, "CancelTimers")
timerSacroTankCombo:Start(30)
timerDawnRunner:Start(5)
self:ScheduleMethod(5, "DawnRunner")
if self.vb.phase == 1 then
self.vb.phase = 2
sacroPath = true
end
elseif msg == L.AlythPhase or msg:find(L.AlythPhase) then
self:ScheduleMethod(0, "CancelTimers")
timerAlythTankCombo:Start()
timerFireDance:Start()
self:ScheduleMethod(5, "FireDance")
if self.vb.phase == 1 then
self.vb.phase = 2
alythPath = true
end
elseif self.vb.phase == 4 and DBM:AntiSpam(5, 1) and (msg == L.SacroCombo or msg:find(L.SacroCombo) or msg == L.AlythCombo or msg:find(L.AlythCombo)) then
if msg == L.SacroCombo or msg:find(L.SacroCombo) then
local sacroTarget = mod:GetBossTarget(25165)
timerRisingSunKick:Start(sacroTarget)
timerCrashCombination:Start(sacroTarget)
warnCrashCombination:Schedule(4)
timerCutCombination:Start(sacroTarget)
warnCutCombination:Schedule(5)
timerSacroTankCombo:Start()
if timerDawnRunner:GetTime() > 24 then
timerDawnRunner:Update(0,6)
self:UnscheduleMethod("DawnRunner")
self:ScheduleMethod(6,"DawnRunner")
end
if timerFireDance:GetTime() > 24 then
timerFireDance:Update(0,6)
self:UnscheduleMethod("FireDance")
self:ScheduleMethod(6,"FireDance")
end
elseif msg == L.AlythCombo or msg:find(L.AlythCombo) then
local alythTarget = mod:GetBossTarget(25166)
timerFlingAlyth:Start(alythTarget)
timerCrescentMoonKick:Start(alythTarget)
timerCrashCombination:Start(alythTarget)
warnCrashCombination:Schedule(4)
timerCutCombination:Start(alythTarget)
warnCutCombination:Schedule(5)
timerAlythTankCombo:Start()
if timerFireDance:GetTime() > 24 then
timerFireDance:Update(0,6)
self:UnscheduleMethod("FireDance")
self:ScheduleMethod(6,"FireDance")
end
if timerDawnRunner:GetTime() > 24 then
timerDawnRunner:Update(0,6)
self:UnscheduleMethod("DawnRunner")
self:ScheduleMethod(6,"DawnRunner")
end
end
elseif msg == L.SacroAbsorb or msg:find(L.SacroAbsorb) or msg == L.AlythAbsorb or msg:find(L.AlythAbsorb) then
self:ScheduleMethod(0,"CancelTimers")
self.vb.phase = 5
timerTwinsMerge:Start()
elseif msg == L.TwinsMerge or msg:find(L.TwinsMerge) then
self:ScheduleMethod(0,"CancelTimers")
timerDawnDancer:Start()
self:ScheduleMethod(5,"DawnDancer")
end
end
function mod:UNIT_HEALTH(uId)
local cid = self:GetUnitCreatureId(uId)
if cid == 25165 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 2 then
--Sacrolash
self.vb.phase = 3
self:ScheduleMethod(0,"CancelTimers")
timerRoleReversal:Start()
elseif cid == 25166 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 2 then
--Alythess
self.vb.phase = 3
self:ScheduleMethod(0,"CancelTimers")
timerRoleReversal:Start()
elseif cid == 25165 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 3 and alythPath == true then
self.vb.phase = 4
self:ScheduleMethod(0,"CancelTimers")
timerTagTeam:Start()
self:ScheduleMethod(5,"AlythPath")
elseif cid == 25166 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 3 and sacroPath == true then
self.vb.phase = 4
self:ScheduleMethod(0,"CancelTimers")
timerTagTeam:Start()
self:ScheduleMethod(5,"SacroPath")
end
end
function mod:OnCombatEnd()
self:ScheduleMethod(0,"CancelTimers")
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end