Files
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

165 lines
4.9 KiB
Lua

local mod = DBM:NewMod("Muru", "DBM-Sunwell")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
mod:SetCreatureID(25741)--25741 Muru, 25840 Entropius
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_CAST_START",
"UNIT_DIED",
"UNIT_HEALTH"
)
local warnVoidSpike = mod:NewSpellAnnounce(2146314, 2)
local warnDarkness = mod:NewSpecialWarningYou(2146301, 4)
local timerDarkness = mod:NewNextTimer(0, 2146301)
--local warnVoidRift = mod:NewAnnounce("WarnVoidRift", 4, 2146310)
--local timerVoidRift = mod:NewNextTimer(60, 2146310)
local warnVoidSentinel = mod:NewSpellAnnounce(2146312, 2)
local timerVoidSentinel = mod:NewNextTimer(60, 2146312)
local SpecWarnVoidSpawn = mod:NewSpellAnnounce(2146330, 2)--("WarnVoidSpawn", 4, 2146330)
local warnDarkFiend = mod:NewSpellAnnounce(2146320, 2)--("WarnFiend", 2, 2146320)
local timerDarkFiend = mod:NewNextTimer(60, 2146320)
local warnVoidCutter = mod:NewSpellAnnounce(2146303, 2)--("WarnVoidCutter", 2, 2146303)
local timerVoidCutterSpawn = mod:NewNextTimer(64, 2146303)
--local timerVoidCutterActive = mod:NewNextTimer(64, 2146303)
local timerVCutterDuration = mod:NewTimer(30, "Void Cutter duration", 2146303)
local warnPhase2 = mod:NewPhaseAnnounce(2)
local warnBlackHole = mod:NewSpellAnnounce(2146370, 3)
local timerBlackHole = mod:NewNextTimer(30, 2146370)
local berserkTimer = mod:NewBerserkTimer(600)
function mod:OnCombatStart(delay)
self.vb.phase = 1
timerVoidSentinel:Start(10-delay)
timerVoidCutterSpawn:Start(20-delay)
timerVCutterDuration:Schedule(23-delay)
timerDarkFiend:Start(30-delay)
berserkTimer:Start(-delay)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2146314) then
if args:IsPlayer() then
warnDarkness:Show()
end
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2146322) and DBM:AntiSpam() then
warnDarkFiend:Show()
timerDarkFiend:Start(60)
timerVoidCutterSpawn:Start(55)
timerVCutterDuration:Schedule(58)
warnVoidCutter:Schedule(55)
if self.vb.phase == 1 then
warnVoidSentinel:Schedule(40)
timerVoidSentinel:Start(40)
end
elseif args:IsSpellID(2146314) then
warnVoidSpike:Show()
end
end
function mod:UNIT_HEALTH(unit)
if mod:GetUnitCreatureId(unit) == 25741 and self.vb.phase == 1 then
local hp = (math.max(0,UnitHealth(unit)) / math.max(1, UnitHealthMax(unit))) * 100
if hp <= 50 then
self.vb.phase = 2
warnPhase2:Show()
timerDarkFiend:Cancel()
timerVoidCutterSpawn:Cancel()
timerVoidSentinel:Cancel()
timerBlackHole:Start(25)
timerDarkFiend:Start(15)
timerVoidCutterSpawn:Start(20)
timerVCutterDuration:Schedule(23)
end
end
end
--[[
Timers
Portals + Sentinal 10 seconds after pull, then every 60 seconds while in Phase 1
Void Cutter 20 seconds after pull, then 55 seconds, then every 60 seconds. Spawns, becomes active after 5 seconds, then is active for 30 seconds. Visible for 35 seconds total.
Darkness + Dark Fiends 30 seconds after pull, then every 60 seconds
Black Hole 23 seconds after Entropius spawns, then every 20 seconds
Note
Timers for Portals stop when Muru hits 50%
Timers for Void Cutters and Dark Fiends are not affected by phase transition
When timers would happen at the same time, one is pushed to be earlier by 1 second. Appears that Cutter is the main spell that gets pushed.
]]--
--[[
local function phase2()
warnPhase2:Show()
warned_phase2 = true
mod:UnscheduleMethod("HumanSpawn")
mod:UnscheduleMethod("VoidSpawn")
timerBlackHoleCD:Start(15)
if mod.Options.HealthFrame then
DBM.BossHealth:Clear()
DBM.BossHealth:AddBoss(25840, L.Entropius)
end
end
function mod:VoidSpawn()
warnVoid:Show(voidCount)
voidCount = voidCount + 1
timerVoid:Start(nil, voidCount)
specWarnVW:Schedule(25)
self:ScheduleMethod(30, "VoidSpawn")
end
function mod:OnCombatStart(delay)
self.vb.phase = 1
voidCount = 1
warned_phase2 = false
timerHuman:Start(10-delay, humanCount)
timerVoid:Start(36.5-delay, voidCount)
specWarnVW:Schedule(31.5)
timerNextDarkness:Start(47-delay)
specWarnDarknessSoon:Schedule(42)
self:ScheduleMethod(10, "HumanSpawn")
self:ScheduleMethod(36.5, "VoidSpawn")
berserkTimer:Start(-delay)
end
function mod:SPELL_SUMMON(args)
if args.spellId == 46268 then
warnFiend:Show()
elseif args.spellId == 46282 and DBM:AntiSpam(2, 1) then
warnBlackHole:Show()
specWarnBH:Show()
timerBlackHoleCD:Start()
timerSingularity:Start()
end
end
function mod:UNIT_DIED(args)
if self:GetCIDFromGUID(args.destGUID) == 25840 then
DBM:EndCombat(self)
end
end
function mod:UNIT_HEALTH(uId)
if not warned_phase2 and self:GetUnitCreatureId(uId) == 25840 and UnitHealth(uId) / UnitHealthMax(uId) > 0.9 and self.vb.phase == 1 then
warned_phase2 = true
timerNextDarkness:Cancel()
timerHuman:Cancel()
timerVoid:Cancel()
specWarnDarknessSoon:Cancel()
phase2()
end
end
]]--