dc8afd6584
Co-authored-by: Szyler <Szyler@Szyler.com>
291 lines
8.8 KiB
Lua
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
|