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.

201 lines
6.1 KiB

4 years ago
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Archmage Xylem", 1673) -- Closing the Eye
if not mod then return end
mod:RegisterEnableMob(115244) -- Archmage Xylem
mod.otherMenu = 1716 -- Broken Shore Mage Tower
--------------------------------------------------------------------------------
-- Locals
--
local phase = 1
local blinkCount = 1
local annihilationCount = 0
local drawPowerCount = 0
local blinkSpells = {
232661, -- Razor Ice x3
232661,
232661,
234728, -- Arcane Annihilation
false,
234728, -- Arcane Annihilation
-- XXX don't have much for logs after the second Arcane Annihilation
-- 232661, Razor Ice
-- (Shadow Barrage not blink),
}
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.name = "Archmage Xylem"
L.corruptingShadows = "Corrupting Shadows"
L.warmup_trigger1 = "You are too late, warrior! With the Focusing Iris under my control, I can siphon the arcane energy from Azeroth's ley lines directly into my magnificent self!"
-- L.warmup_trigger2 = "Drained of magic, your world will be ripe for destruction by my demon masters... and my power will be limitless!"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
"warmup",
"stages",
--[[ Phase 1 ]]--
242015, -- Blink
234728, -- Arcane Annihilation
231443, -- Shadow Barrage
231522, -- Draw Power
--[[ Phase 2 ]]--
232672, -- Creeping Shadows
233248, -- Seed of Darkness
},{
warmup = "general",
[242015] = L.name,
[232672] = L.corruptingShadows,
}
end
function mod:OnRegister()
self.displayName = L.name
end
function mod:OnBossEnable()
self:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT")
self:RegisterEvent("CHAT_MSG_MONSTER_YELL", "Warmup")
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
self:RegisterUnitEvent("UNIT_SPELLCAST_STOP", nil, "boss1")
self:Log("SPELL_CAST_START", "ArcaneAnnihilation", 234728)
self:Log("SPELL_CAST_SUCCESS", "ShadowBarrage", 231443)
self:Log("SPELL_CAST_SUCCESS", "DrawPower", 231522)
self:Log("SPELL_PERIODIC_DAMAGE", "CreepingShadowsDamage", 232672)
self:Log("SPELL_CAST_SUCCESS", "SeedOfDarkness", 233248)
self:Death("Win", 116839) -- Corrupting Shadows
end
function mod:OnEngage()
phase = 1
blinkCount, drawPowerCount, annihilationCount = 1, 0, 0
self:Bar(242015, 11, ("%s (%s)"):format(self:SpellName(242015), self:SpellName(232661))) -- Blink (Razor Ice)
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT(event)
if not self.isEngaged then
self:CheckForEncounterEngage()
else
if UnitIsDead("player") then
-- u dun goof'd
self:ScheduleTimer("Wipe", 4)
return
end
if phase == 1 and not UnitExists("boss1") then
-- Need to ignore the IEEU from defeating Archmage Xylem so we don't disable
self:SendMessage("BigWigs_StopBars", self)
phase = 2
self:MessageOld("stages", "cyan", nil, CL.soon:format(CL.phase:format(2)), false)
self:Bar("warmup", 29, CL.phase:format(2), "spell_arcane_prismaticcloak")
elseif phase == 2 and UnitExists("boss1") then
-- Phase 2 OnEngage
phase = 3
self:MessageOld("stages", "cyan", nil, CL.phase:format(2), false)
self:Bar(233248, 21) -- Seed of Darkness
self:RegisterEvent(event, "CheckBossStatus") -- Shenanigans over
end
end
end
---------------------------------------
-- Archmage Xylem
function mod:Warmup(event, msg)
if msg == L.warmup_trigger1 then
self:UnregisterEvent(event)
self:Bar("warmup", 28, CL.active, "spell_mage_focusingcrystal")
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(unit, spellName, _, _, spellId)
if spellId == 242015 then -- Blink
self:MessageOld(242015, "yellow", nil, blinkSpells[blinkCount] and ("%s (%s)"):format(spellName, self:SpellName(blinkSpells[blinkCount])) or spellName)
blinkCount = blinkCount + 1
self:CDBar(242015, 26, blinkSpells[blinkCount] and ("%s (%s)"):format(spellName, self:SpellName(blinkSpells[blinkCount])) or spellName)
-- XXX second second razor ice is actually shadow barrage and it's a mystery what happens after that
end
end
function mod:ArcaneAnnihilation(args)
self:MessageOld(args.spellId, "cyan")
self:Bar(args.spellId, 40, CL.cast:format(args.spellName))
annihilationCount = annihilationCount + 1
drawPowerCount = 0
end
function mod:UNIT_SPELLCAST_STOP(unit, spellName, _, _, spellId)
if spellId == 234728 then -- Arcane Annihilation
self:StopBar(CL.cast:format(spellName))
self:MessageOld(spellId, "cyan", nil, CL.over:format(spellName))
blinkCount = blinkCount + 1
if blinkCount > #blinkSpells then
blinkCount = 1
end
local blinkText = blinkSpells[blinkCount] and ("%s (%s)"):format(self:SpellName(242015), self:SpellName(blinkSpells[blinkCount])) or self:SpellName(242015)
if annihilationCount % 2 == 0 then
self:CDBar(231443, 3) -- Shadow Barrage
self:CDBar(242015, 16, blinkText) -- Blink
else
self:CDBar(231443, 4.5) -- Shadow Barrage
self:CDBar(231522, 16) -- Draw Power 16-18
self:CDBar(242015, 23, blinkText) -- Blink
end
end
end
function mod:ShadowBarrage(args)
self:StopBar(args.spellName)
self:MessageOld(args.spellId, "orange", "alarm")
self:Bar(args.spellId, 8, CL.cast:format(args.spellName))
end
function mod:DrawPower(args)
self:MessageOld(args.spellId, "red", "alert")
drawPowerCount = drawPowerCount + 1
if drawPowerCount < 2 then
self:CDBar(args.spellId, 20)
end
end
---------------------------------------
-- Corrupting Shadows
function mod:CreepingShadowsDamage(args)
self:MessageOld(args.spellId, "blue", "alarm", CL.underyou:format(args.spellName))
end
function mod:SeedOfDarkness(args)
self:MessageOld(args.spellId, "red", "long")
self:TargetBar(args.spellId, 8, args.destName)
self:Bar(args.spellId, 65.6)
end