154 lines
4.4 KiB
Lua
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 |