Files
coa-dbm/DBM-Hyjal/Chromius.lua
T
Szyler dc8afd6584 5.19b (#4)
Co-authored-by: Szyler <Szyler@Szyler.com>
2024-03-03 11:23:13 -07:00

291 lines
8.8 KiB
Lua

local mod = DBM:NewMod("Chromius", "DBM-Hyjal")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 183 $"):sub(12, -3))
mod:SetCreatureID(26643)
mod:RegisterCombat("combat", 26643)
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED",
"SPELL_DAMAGE",
"CHAT_MSG_MONSTER_YELL",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_HEALTH",
"UNIT_DIED"
)
-- Final Countdown
local specWarnFinalCountdown = mod:NewSpecialWarning("Final Countdown! The Hourglass will vibrate %s times!", 2141735)
local warnCountdown = mod:NewAnnounce("There are %s vibrations left!", 2141735)
local timerNextFinalCountdown = mod:NewTimer(62,"Next Final Countdown: (%s)", 2141735)
local timerFinalDuration = mod:NewTimer(2,"Final Countdown (%s ticks)", 2141735)
local warnFinalCDSoon = mod:NewAnnounce("Final Countdown soon!", 2141735)
local timerFinalDelay = mod:NewTimer(3, "Vibration travel time", 2141735)
-- Events (Mannoroth)
local timerNextChaosBlast = mod:NewNextTimer(20,2141800)
local timerCastChaosBlast = mod:NewTargetTimer(3.85, 2141800)
local warnChaosBlast = mod:NewTargetAnnounce(2141800)
local specWarnChaosBlast = mod:NewSpecialWarning("Chaos Blast on you!", 2141800)
local timerMannorothsFury = mod:NewNextTimer(20, 2141809)
local warnMannorothsFury = mod:NewSpellAnnounce(2141809)
--Events (Tyrande)
local warnBlackArrow = mod:NewAnnounce("Black Arrow on %s!", 2141904)
local specWarnBlackArrow = mod:NewSpecialWarning("Black Arrow on you!", 2141904)
--Events (Jaina)
local warnHolyLight = mod:NewAnnounce("%s is casting Holy Light! Interrupt it!", 2141856)
local timerInsanity = mod:NewTimer(106, "Jaina is losing her mind...", 2141884)
-- Dragon abilities
local warnArcaneBreath = mod:NewSpellAnnounce(2141705)
local timerArcaneBreath = mod:NewNextTimer(30, 2141705)
local timerCastArcaneBreath = mod:NewCastTimer(2, 2141705)
local timerBreathDuration = mod:NewTimer(3, "Arcane Breath duration", 2141705)
-- adds
local warnArcaneExplosion = mod:NewAnnounce("Infinite Time Warder is casting Arcane Explosion!", 2141758)
local timerArcaneExplosion = mod:NewCastTimer(4, 2141758)
-- Phases
local warnTransSoon = mod:NewAnnounce("Portal Event incoming in 5 percent health!", 2141724)
local timerTeleport = mod:NewTimer(5, "Teleported in", 2100249)
local warnJainaPhase = mod:NewAnnounce("Enter the portal and kill Jaina!", 2141724)
local warnGromPhase = mod:NewAnnounce("Enter the portal and kill the Infinite Subjugators!", 2141724)
local warnTyrandePhase = mod:NewAnnounce("Enter the Portal and heal the Sentinels!", 2141724)
local SentinelAnnounce = mod:NewAnnounce("There are %s Sentinels remaining!", 2140018)
-- SPELL_DAMAGE special warnings
local specWarnConsecration = mod:NewSpecialWarningMove(2141858)
local specWarnSplitSecond = mod:NewSpecialWarningMove(2141725)
-- fight
local timerCombatStart = mod:NewTimer(20, "Combat starting in", 39255)
local count
local countdown
local duration
local prewarn
local SentinelsAlive
local insanity
local phase
local JainaHP
local TyrandeHP
local ThrallHP
-- INFO ---
-- SPELL_CAST_START Arcane Breath (2141705)
function mod:OnCombatStart(delay)
duration = 2
count = 1
countdown = 1
prewarn = 0
phase = 0
SentinelsAlive = 5
JainaHP = 0
TyrandeHP = 0
ThrallHP = 0
insanity = 0
timerArcaneBreath:Start(40-delay)
timerNextFinalCountdown:Start(67-delay, count)
warnFinalCDSoon:Schedule(60-delay)
self:ScheduleMethod(67-delay,"FinalCountdown")
end
function mod:FinalCountdown()
self:UnscheduleMethod("FinalCountdown")
countdown = count - 1
specWarnFinalCountdown:Show(count)
if phase == 0 then
timerFinalDuration:Start(duration, count)
count = count + 1
duration = duration + 2.5
timerNextFinalCountdown:Start(62,count)
warnFinalCDSoon:Schedule(57)
self:ScheduleMethod(62,"FinalCountdown")
elseif phase == 1 then
timerFinalDelay:Start(3)
self:ScheduleMethod(3,"FinalDuration")
elseif phase == 2 then
timerFinalDelay:Start(3)
self:ScheduleMethod(3,"FinalDuration")
elseif phase == 3 then
timerFinalDelay:Start(3)
self:ScheduleMethod(3,"FinalDuration")
end
end
function mod:FinalDuration()
timerFinalDuration:Start(duration, count)
count = count + 1
duration = duration + 2.5
self:ScheduleMethod(57,"FinalCountdown")
timerNextFinalCountdown:Start(57,count)
warnFinalCDSoon:Schedule(52)
end
function mod:ChaosBlast()
local targetCB = mod:GetBossTarget(26688)
if targetCB == UnitName("player") then
specWarnChaosBlast:Show()
SendChatMessage("Chaos Blast on "..UnitName("PLAYER").."!", "SAY")
else
warnChaosBlast:Show(targetCB)
end
timerCastChaosBlast:Start(targetCB)
self:SetIcon(targetCB, 8, 4)
end
function mod:MannorothsFury()
self:UnscheduleMethod("MannorothsFury")
timerMannorothsFury:Start()
warnMannorothsFury:Show()
self:ScheduleMethod(20,"MannorothsFury")
end
function mod:StopTimers()
timerArcaneBreath:Stop()
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2141904) then
if args:IsPlayer() then
specWarnBlackArrow:Show()
else
warnBlackArrow:Show(args.destName)
end
end
end
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(2141858,2141859,2141860,2141861) and args:IsPlayer() and DBM:AntiSpam(5,1) then
specWarnConsecration:Show()
end
if args:IsSpellID(2141725,2141726,2141727,2141728) and args:IsPlayer() and DBM:AntiSpam(5,2) then
specWarnSplitSecond:Show()
end
if args:IsSpellID(2141736,2141737,2141738,2141739) and DBM:AntiSpam(1.8,6) then
if countdown >= 1 then
warnCountdown:Show(countdown)
countdown = countdown - 1
end
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2141705) then
warnArcaneBreath:Show()
timerArcaneBreath:Start()
timerCastArcaneBreath:Start()
timerBreathDuration:Schedule(2)
end
if args:IsSpellID(2141758) then
warnArcaneExplosion:Show()
timerArcaneExplosion:Start()
self:SetIcon(args.sourceGUID, 8)
end
if args:IsSpellID(2141800) then
self:ScheduleMethod(0.15, "ChaosBlast")
timerNextChaosBlast:Start()
end
if args:IsSpellID(2141856) then
warnHolyLight:Show(args.sourceName)
end
if args:IsSpellID(2141868,2141869,2140134,2140135) and phase == 1 and insanity == 1 and args.sourceName == "Lady Jaina Proudmoore" then
insanity = 0
timerInsanity:Stop()
end
end
function mod:SPELL_CAST_SUCCESS(args)
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg == L.ChromiusRP or msg:find(L.ChromiusRP) then
timerCombatStart:Start()
elseif msg == L.ChromiusRP2 or msg:find(L.ChromiusRP2) then
timerCombatStart:Start()
elseif msg == L.JainaPhaseYell or msg:find(L.JainaPhaseYell) then -- Jaina Phase start
warnJainaPhase:Show()
timerInsanity:Start()
insanity = 1
self:ScheduleMethod(0,"StopTimers")
DBM.BossHealth:Clear()
phase = 1
elseif msg == L.GromPhaseYell or msg:find(L.GromPhaseYell) then -- Grom Phase start
warnGromPhase:Show()
self:ScheduleMethod(0,"StopTimers")
timerNextChaosBlast:Start(20)
timerMannorothsFury:Start(25)
self:ScheduleMethod(25,"MannorothsFury")
DBM.BossHealth:Clear()
phase = 2
elseif msg == L.TyrandePhaseYell or msg:find(L.TyrandePhaseYell) then -- Tyrande Phase start
warnTyrandePhase:Show()
self:ScheduleMethod(0,"StopTimers")
DBM.BossHealth:Clear()
phase = 3
end
end
function mod:UNIT_DIED(args)
if args.destName =="Infinite Manipulator" then
timerTeleport:Start(5)
timerArcaneBreath:Start(13)
self:ScheduleMethod(7,"AddBoss")
JainaHP = 1
phase = 0
end
if args.destName =="Mannoroth" then
timerTeleport:Start(5)
timerArcaneBreath:Start(13)
self:UnscheduleMethod("MannorothsFury")
timerNextChaosBlast:Stop()
timerMannorothsFury:Stop()
self:ScheduleMethod(7,"AddBoss")
ThrallHP = 1
phase = 0
end
if args.destName =="Darnassus Sentinel" then
SentinelsAlive = SentinelsAlive - 1
if DBM:AntiSpam(1, 2) then
SentinelAnnounce:Show(SentinelsAlive)
end
if SentinelsAlive == 0 then
timerTeleport:Start(5)
timerArcaneBreath:Start(13)
self:ScheduleMethod(7,"AddBoss")
TyrandeHP = 1
phase = 0
end
end
end
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.80 and prewarn == 0 and DBM:AntiSpam(5,3) then
prewarn = 1
warnTransSoon:Show()
elseif self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.55 and prewarn == 1 and DBM:AntiSpam(5,4) then
prewarn = 2
warnTransSoon:Show()
elseif self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.30 and prewarn == 2 and DBM:AntiSpam(5,5) then
prewarn = 3
warnTransSoon:Show()
end
end
function mod:AddBoss()
if JainaHP == 1 then
DBM.BossHealth:AddBoss(17772,"Lady Jaina Proudmoore")
elseif TyrandeHP == 1 then
DBM.BossHealth:AddBoss(17948,"Tyrande Whisperwind")
elseif ThrallHP == 1 then
DBM.BossHealth:AddBoss(17852,"Thrall")
end
end