You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.3 KiB

--------------------------------------------------------------------------------
-- TODO:
-- - Mythic Abilties
-- - Improve timers
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Oryphrion", 2285, 2414)
if not mod then return end
mod:RegisterEnableMob(162060) -- Oryphrion
mod.engageId = 2358
mod.respawnTime = 30
--------------------------------------------------------------------------------
-- Locals
--
local prevEnergy = 100
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.early_intermission_over = "Intermission Over (%d |4orb:orbs; reached)"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
"stages",
324046, -- Recharge Anima
324427, -- Empyreal Ordnance
{334053, "SAY"}, -- Purifying Blast
324608, -- Charged Stomp
}
end
function mod:OnBossEnable()
self:Log("SPELL_AURA_APPLIED", "DrainedApplied", 323878)
self:Log("SPELL_AURA_REMOVED", "DrainedApplied", 323878)
self:Log("SPELL_CAST_SUCCESS", "OverchargeAnima", 324307) -- an orb reached the boss during the intermission
self:Log("SPELL_AURA_APPLIED", "RechargeAnima", 324046)
self:Log("SPELL_CAST_START", "EmpyrealOrdnance", 324427)
self:Log("SPELL_CAST_START", "PurifyingBlast", 334053)
self:Log("SPELL_CAST_START", "ChargedStomp", 324608)
self:RegisterUnitEvent("UNIT_POWER_FREQUENT", nil, "boss1")
end
function mod:OnEngage()
prevEnergy = 100
self:Bar(334053, 8.5) -- Purifying Blast
self:Bar(324427, 17) -- Empyreal Ordnance
end
--------------------------------------------------------------------------------
-- Event Handlers
--
do
local orbsReached, intermissionEnds = 0, 0
function mod:DrainedApplied(args)
orbsReached = 0
intermissionEnds = args.time + 23.2
self:Message("stages", "green", CL.intermission, false)
self:PlaySound("stages", "long")
self:Bar("stages", 23.2, CL.over:format(CL.intermission), args.spellId)
self:StopBar(324427) -- Empyreal Ordnance
self:StopBar(334053) -- Purifying Blast
end
function mod:DrainedRemoved()
if orbsReached > 0 then
self:Message("stages", "orange", L.early_intermission_over:format(orbsReached), false)
else
self:Message("stages", "orange", CL.over:format(CL.intermission), false)
end
self:PlaySound("stages", "long")
self:StopBar(CL.over:format(CL.intermission))
self:Bar(334053, 9) -- Purifying Blast
self:Bar(324427, 17.1) -- Empyreal Ordnance
end
function mod:OverchargeAnima(args)
orbsReached = orbsReached + 1
intermissionEnds = intermissionEnds - 1
local timeLeft = intermissionEnds - args.time
if timeLeft > 0 then
self:Bar("stages", timeLeft, CL.over:format(CL.intermission), 323878) -- Drained
end
end
end
function mod:RechargeAnima(args)
self:Message(args.spellId, "yellow", CL.casting:format(args.spellName))
self:PlaySound(args.spellId, "alert")
end
function mod:EmpyrealOrdnance(args)
self:Message(args.spellId, "red")
self:PlaySound(args.spellId, "warning")
self:CDBar(args.spellId, 26)
end
do
local function printTarget(self, name, guid)
if self:Me(guid) then
self:Say(334053)
self:PlaySound(334053, "warning")
end
self:TargetMessage(334053, "red", name)
end
function mod:PurifyingBlast(args)
self:GetBossTarget(printTarget, 0.4, args.sourceGUID)
self:CDBar(args.spellId, 13)
end
end
function mod:ChargedStomp(args)
self:Message(args.spellId, "yellow", CL.casting:format(args.spellName))
self:PlaySound(args.spellId, "alert")
end
function mod:UNIT_POWER_FREQUENT(_, unit, powerType)
if powerType ~= "ENERGY" then return end
local current = UnitPower(unit, 3) -- ENERGY = 3
if current < prevEnergy and current == 10 then
self:Message("stages", "cyan", CL.soon:format(self:SpellName(323878)), false) -- Drained Soon
self:PlaySound("stages", "info")
elseif current > prevEnergy and current == 80 then
self:Message("stages", "cyan", CL.soon:format(self:SpellName(232880)), false) -- Fully Charged Soon
self:PlaySound("stages", "info")
end
prevEnergy = current
end