Files
coa-dbm/DBM-Karazhan/RomuloAndJulianne.lua
Andrew6810 39c0ed874e init
2022-10-21 06:50:13 -07:00

154 lines
4.4 KiB
Lua

local mod = DBM:NewMod("RomuloAndJulianne", "DBM-Karazhan")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 175 $"):sub(12, -3))
mod:SetCreatureID(17534, 17533)
mod:RegisterCombat("yell", L.RJ_Pull)
mod:RegisterKill("yell", L.Bogus)--there isn't actually a yell, but we use this to prevent mod from ending combat early using UNIT_DIED after they both die once.
mod:SetWipeTime(25)--guesswork
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"CHAT_MSG_MONSTER_YELL",
"UNIT_DIED",
"CHAT_MSG_RAID_WARNING"
)
local warnPhase2 = mod:NewPhaseAnnounce(2)
local warnPhase3 = mod:NewPhaseAnnounce(3)
local warningHeal = mod:NewCastAnnounce(30878, 4)
local warningDaring = mod:NewTargetAnnounce(30841, 3)
local warningDevotion = mod:NewTargetAnnounce(30887, 3)
local warningPosion = mod:NewAnnounce("warningPosion", 2, 30830, mod:IsHealer() or mod:IsTank())
-- Heroic
local WarnHeartbroken = mod:NewAnnounce(L.WarnHeartbroken, 2, 85237)
local WarnLove = mod:NewAnnounce(L.WarnLove, 2, 85236)
local timerHeal = mod:NewCastTimer(5, 30878)
local timerDaring = mod:NewTargetTimer(8, 30841)
local timerDevotion = mod:NewTargetTimer(10, 30887)
local timerCombatStart = mod:NewTimer(55, "TimerCombatStart", 2457)
local timerNextSpotlight = mod:NewTimer(30, L.OperaSpotlight, 85112)
mod:AddBoolOption("HealthFrame", true)
local phases = {}
local JulianneDied = 0
local RomuloDied = 0
local LoversSpam = 0
local heartbrokenStacks = 0
local function updateHealthFrame(phase)--WIP
if phases[phase] then
return
end
phases[phase] = true
if phase == 1 then
DBM.BossHealth:Clear()
DBM.BossHealth:AddBoss(17534, L.Julianne)
elseif phase == 2 then--UNIT_DIED event triggers not tested yet
DBM.BossHealth:AddBoss(17533, L.Romulo)
warnPhase2:Show()
elseif phase == 3 then
DBM.BossHealth:AddBoss(17534, L.Julianne)
DBM.BossHealth:AddBoss(17533, L.Romulo)
end
end
function mod:OnCombatStart(delay)
updateHealthFrame(1)
JulianneDied = 0
RomuloDied = 0
timerNextSpotlight:Start(20-delay)
self.vb.phase = 1
heartbrokenStacks = 0
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(30878) then
warningHeal:Show()
if mod:IsDifficulty("normal25", "heroic10", "heroic25") then
timerHeal:Start()
else
timerHeal:Start(2)
end
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(30822, 30830) then
warningPosion:Show(args.spellName, args.destName, args.amount or 1)
elseif args:IsSpellID(30841) then
warningDaring:Show(args.destName)
timerDaring:Start(args.destName)
elseif args:IsSpellID(30887) then
warningDevotion:Show(args.destName)
timerDevotion:Start(args.destName)
elseif args:IsSpellID(85237) then -- Heartbroken
heartbrokenStacks = args.amount
if args.amount and (GetTime() - LoversSpam) > 5 and args.amount >= 10 and args.amount % 5 == 0 then
LoversSpam = GetTime()
WarnHeartbroken:Show(args.amount, args.spellName)
end
elseif args:IsSpellID(85236) then
if heartbrokenStacks > 0 then
heartbrokenStacks = heartbrokenStacks - 0.5
end
if args.amount and (GetTime() - LoversSpam) > 5 and heartbrokenStacks <= 5 and args.amount % 5 == 0 and args.amount >= 15 then -- The Power of Love
LoversSpam = GetTime()
WarnLove:Show(args.amount, args.spellName)
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(30841) then
timerDaring:Cancel(args.destName)
elseif args:IsSpellID(30887) then
timerDevotion:Cancel(args.destName)
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg == L.DBM_RJ_PHASE2_YELL or msg:find(L.DBM_RJ_PHASE2_YELL) then
warnPhase3:Show()
updateHealthFrame(3)
self.vb.phase = 3
elseif msg == L.Event or msg:find(L.Event) then
timerCombatStart:Start()
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 17534 then
if phase == 3 then--Only want to remove from boss health frame first time they die, and kill only in phase 3.
JulianneDied = GetTime()
if (GetTime() - RomuloDied) < 10 then
mod:EndCombat()
end
else
DBM.BossHealth:RemoveBoss(cid)
updateHealthFrame(2)
self.vb.phase = 2
end
elseif cid == 17533 then
if phase == 3 then--Only want to remove from boss health frame first time they die, and kill only in phase 3.
RomuloDied = GetTime()
if (GetTime() - JulianneDied) < 10 then
mod:EndCombat()
end
else
DBM.BossHealth:RemoveBoss(cid)
end
end
end