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.

213 lines
6.5 KiB

--------------------------------------------------------------------------------
-- TODO List:
-- - Arcane Tether warnings for tanks
-- - Mythic mode transform cds
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Skorpyron", 1530, 1706)
if not mod then return end
mod:RegisterEnableMob(102263)
mod.engageId = 1849
mod.respawnTime = 40 -- moves into room at 30, ~40 until he's attackable
--------------------------------------------------------------------------------
-- Locals
--
local engageTime = 0
local arcanoslashCount = 1
local shardOnMe = false
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.blue = "Blue"
L.red = "Red"
L.green = "Green"
L.mode = "%s Mode"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
--[[ General ]]--
{204275, "TANK"}, -- Arcanoslash
204316, -- Shockwave
204448, -- Chitinous Exoskeleton
204459, -- Exoskeletal Vulnerability
204372, -- Call of the Scorpid
204471, -- Focused Blast
{204284, "EMPHASIZE"}, -- Broken Shard
--204292, -- Crystalline Fragments
204744, -- Toxic Chitin
"berserk",
--[[ Mythic ]]--
-13767, -- Chromatic Exoskeleton
},{
[204275] = "general",
[-13767] = "mythic",
}
end
function mod:OnBossEnable()
self:Log("SPELL_CAST_START", "Arcanoslash", 204275)
self:Log("SPELL_CAST_START", "Shockwave", 204316)
self:Log("SPELL_CAST_SUCCESS", "ShockwaveSuccess", 204316)
self:Log("SPELL_AURA_APPLIED", "BrokenShard", 204284)
self:Log("SPELL_AURA_REMOVED", "BrokenShardRemoved", 204284)
self:Log("SPELL_AURA_APPLIED", "ChitinousExoskeletonApplied", 204448)
self:Log("SPELL_AURA_REMOVED_DOSE", "ChitinousExoskeletonStacks", 204448)
self:Log("SPELL_AURA_APPLIED", "ExoskeletalVulnerabilityApplied", 204459)
self:Log("SPELL_CAST_START", "CallOfTheScorpid", 204372)
self:Log("SPELL_CAST_START", "FocusedBlast", 204471)
--self:Log("SPELL_SUMMON", "CrystallineFragments", 204292, 214662) -- blue/red fragments, don't think spawn messages are useful
self:Log("SPELL_AURA_APPLIED", "ToxicDamage", 204744)
self:Log("SPELL_PERIODIC_DAMAGE", "ToxicDamage", 204744)
self:Log("SPELL_PERIODIC_MISSED", "ToxicDamage", 204744)
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
end
function mod:OnEngage()
shardOnMe = false
engageTime = GetTime()
arcanoslashCount = 1
self:Berserk(542) -- Heroic
self:Bar(204275, 6) -- Arcanoslash
self:Bar(204471, 16) -- Focused Blast (time to _success)
self:Bar(204372, 20) -- Call of the Scorpid (time to _start)
self:Bar(204316, 59) -- Shockwave (time to _success)
if self:Mythic() then
self:Bar(-13767, 22, L.mode:format(L.red), 211801)
end
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:Arcanoslash(args)
if arcanoslashCount % 3 == 1 then -- flurry of 3x 1s casts
self:MessageOld(args.spellId, "red", "alarm", CL.casting:format(args.spellName))
self:CDBar(args.spellId, 10)
end
arcanoslashCount = arcanoslashCount + 1
end
do
local brokenShardCheck, name = nil, mod:SpellName(204284)
local function checkForBrokenShard()
if not shardOnMe then
mod:MessageOld(204284, "blue", "warning", CL.no:format(name))
brokenShardCheck = mod:ScheduleTimer(checkForBrokenShard, 1)
else
mod:MessageOld(204284, "green", nil, CL.you:format(name))
end
end
function mod:Shockwave(args)
self:MessageOld(args.spellId, "red", "alarm", CL.casting:format(args.spellName))
self:CastBar(args.spellId, 3)
self:CDBar(args.spellId, 58) -- can be delayed by up to 3s
self:CDBar(204372, 11) -- Call of the Scorpid (time to _start)
self:CDBar(204471, 24) -- Focused Blast (time to _success)
checkForBrokenShard()
end
function mod:ShockwaveSuccess()
if brokenShardCheck then
self:CancelTimer(brokenShardCheck)
end
end
end
function mod:BrokenShard(args)
if self:Me(args.destGUID) then
shardOnMe = true
end
end
function mod:BrokenShardRemoved(args)
if self:Me(args.destGUID) then
shardOnMe = false
end
end
function mod:ChitinousExoskeletonApplied(args)
if self.isEngaged and (GetTime() - engageTime) > 10 then -- also applied when the boss spawns and/or(?) is pulled
self:MessageOld(args.spellId, "cyan", nil)
end
end
function mod:ChitinousExoskeletonStacks(args)
if (args.amount % 5 == 0) or args.amount < 4 then -- 20,15,10,5,3,2,1 This seems sane for now
self:MessageOld(args.spellId, "cyan", nil, CL.count:format(self:SpellName(args.spellId), args.amount))
end
end
function mod:ExoskeletalVulnerabilityApplied(args)
self:MessageOld(args.spellId, "green", "info")
self:CastBar(args.spellId, 14, 160734, args.spellId) -- 160734 = Vulnerability
self:CDBar(204471, 21.5) -- Focused Blast (time to _success), 14+7.5
self:CDBar(204372, 22.5) -- Call of the Scorpid, 14+8.5
end
function mod:CallOfTheScorpid(args)
self:MessageOld(args.spellId, "yellow", "long")
self:CDBar(args.spellId, 20)
end
function mod:FocusedBlast(args)
self:MessageOld(args.spellId, "orange", "alert")
self:CastBar(args.spellId, 4)
self:CDBar(args.spellId, 30)
end
do
local prev = 0
function mod:ToxicDamage(args)
local t = GetTime()
if self:Me(args.destGUID) and t-prev > 1.5 then
prev = t
self:MessageOld(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
do
local prev = 0
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
local t = GetTime()
if spellId == 214800 and t-prev > 1 then -- Red
prev = t
self:MessageOld(-13767, "cyan", "info", L.mode:format(L.red), 211801)
self:Bar(-13767, 45, L.mode:format(L.green), 214718)
self:StopBar(L.mode:format(L.red))
self:StopBar(L.mode:format(L.blue))
elseif spellId == 215042 and t-prev > 1 then -- Green
prev = t
self:MessageOld(-13767, "cyan", "info", L.mode:format(L.green), 214718)
self:Bar(-13767, 45, L.mode:format(L.blue), 204292)
self:StopBar(L.mode:format(L.red))
self:StopBar(L.mode:format(L.green))
elseif spellId == 215055 and t-prev > 1 then -- Blue
prev = t
self:MessageOld(-13767, "cyan", "info", L.mode:format(L.blue), 204292)
self:Bar(-13767, 45, L.mode:format(L.red), 211801)
self:StopBar(L.mode:format(L.green))
self:StopBar(L.mode:format(L.blue))
end
end
end