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
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
|