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.

371 lines
12 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Tichondrius", 1530, 1762)
if not mod then return end
mod:RegisterEnableMob(103685)
mod.engageId = 1862
mod.respawnTime = 30
--------------------------------------------------------------------------------
-- Locals
--
local carrionPlagueCount = 1
local seekerSwarmCount = 1
local brandOfArgusCount = 1
local feastOfBloodCount = 1
local echoesOfTheVoidCount = 1
local illusionaryNightCount = 1
local addWaveCount = 1
local timers = {
-- Carrion Plague, SPELL_CAST_SUCCESS for 212997
[206480] = {7, 25, 35.5, 24.5, 75, 25.5, 35.5, 27, 75, 25.5, 40.5, 20.5},
-- Seeker Swarm, SPELL_CAST_SUCCESS
[213238] = {27, 25, 35, 25, 75, 25.5, 37.5, 25, 75, 25.5, 36, 22.5},
-- Brand of Argus, SPELL_CAST_SUCCESS
[212794] = {15, 25, 35, 25, 75, 25.5, 32.5, 30, 75, 25.5, 36, 22.5},
-- Feast of Blood, SPELL_AURA_APPLIED
[208230] = {20, 25, 35, 25, 75, 25.5, 37.5, 25, 75, 25.5, 36, 22.5},
-- Echoes of the Void, SPELL_CAST_SUCCESS
[213531] = {57.5, 65, 95.5, 67.5, 100.5, 59.5},
-- Adds, CHAT_MSG_MONSTER_YELL
["adds"] = {185.7, 47.5, 115, 35.5, 48.5},
}
local essenceTargets = {}
local addsKilled = 0
local argusMarks = {false, false, false, false, false, false}
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.addsKilled = "Adds killed"
L.gotEssence = "Got Essence"
L.adds = CL.adds
L.adds_desc = "Timers and warnings for the add spawns."
L.adds_yell1 = "Underlings! Get in here!"
L.adds_yell2 = "Show these pretenders how to fight!"
end
--------------------------------------------------------------------------------
-- Initialization
--
local argusMarker = mod:AddMarkerOption(false, "player", 1, 212794, 1, 2, 3, 4, 5, 6)
function mod:GetOptions()
return {
--[[ Stage One ]]--
{206480, "SAY"}, -- Carrion Plague
213238, -- Seeker Swarm
{212794, "SAY"}, -- Brand of Argus
argusMarker,
208230, -- Feast of Blood
213531, -- Echoes of the Void
"adds",
"berserk",
--[[ Stage Two ]]--
206365, -- Illusionary Night
215988, -- Carrion Nightmare
{206466, "INFOBOX"}, -- Essence of Night
--[[ Felsworm Spellguard ]]--
{216024, "SAY", "SAY_COUNTDOWN", "ME_ONLY"}, -- Volatile Wound
216027, -- Nether Zone
--[[ Sightless Watcher ]]--
{216040, "SAY", "PROXIMITY"}, -- Burning Soul
}, {
[206480] = -13552, -- Stage One
[206365] = -13553, -- Stage Two
[216024] = -13515, -- Felsworm Spellguard
[216040] = -13525, -- Sightless Watcher
}
end
function mod:OnBossEnable()
--[[ Stage One ]]--
self:Log("SPELL_AURA_APPLIED", "CarrionPlague", 206480)
self:Log("SPELL_CAST_SUCCESS", "CarrionPlagueSuccess", 212997)
self:Log("SPELL_CAST_SUCCESS", "SeekerSwarm", 213238)
self:Log("SPELL_AURA_APPLIED", "BrandOfArgus", 212794)
self:Log("SPELL_AURA_REMOVED", "BrandOfArgusRemoved", 212794)
self:Log("SPELL_CAST_SUCCESS", "BrandOfArgusSuccess", 212794)
self:Log("SPELL_CAST_SUCCESS", "FeastOfBlood", 208230)
self:Log("SPELL_CAST_START", "EchoesOfTheVoid", 213531)
self:RegisterEvent("CHAT_MSG_MONSTER_YELL")
--[[ Stage Two ]]--
self:Log("SPELL_CAST_START", "IllusionaryNight", 206365)
self:Log("SPELL_CAST_SUCCESS", "CarrionNightmare", 215988)
self:Log("SPELL_AURA_APPLIED", "EssenceOfNight", 206466)
self:Death("AddDeath", 104326)
--[[ Felsworm Spellguard ]]--
self:Log("SPELL_AURA_APPLIED", "VolatileWound", 216024)
self:Log("SPELL_AURA_APPLIED_DOSE", "VolatileWound", 216024)
self:Log("SPELL_AURA_REMOVED", "VolatileWoundRemoved", 216024)
self:Log("SPELL_AURA_APPLIED", "NetherZoneDamage", 216027)
self:Log("SPELL_PERIODIC_DAMAGE", "NetherZoneDamage", 216027)
self:Log("SPELL_PERIODIC_MISSED", "NetherZoneDamage", 216027)
--[[ Sightless Watcher ]]--
self:Log("SPELL_AURA_APPLIED", "BurningSoul", 216040)
self:Log("SPELL_AURA_REMOVED", "BurningSoulRemoved", 216040)
end
function mod:OnEngage()
carrionPlagueCount = 1
seekerSwarmCount = 1
brandOfArgusCount = 1
feastOfBloodCount = 1
echoesOfTheVoidCount = 1
illusionaryNightCount = 1
addWaveCount = 1
addsKilled = 0
argusMarks = {false, false, false, false, false, false}
essenceTargets = {}
self:Bar("adds", timers["adds"][addWaveCount], CL.count:format(L.adds, addWaveCount), 212552) -- 212552 = Wraith Walk, inv_helm_plate_raiddeathknight_p_01, id 1100041
if GetLocale() ~= "enUS" and L.adds_yell1 == "Underlings! Get in here!" then -- Not translated
self:ScheduleTimer("CHAT_MSG_MONSTER_YELL", timers["adds"][addWaveCount], "timer")
end
self:Bar(206480, timers[206480][carrionPlagueCount], CL.count:format(self:SpellName(206480), carrionPlagueCount))
self:Bar(213238, timers[213238][seekerSwarmCount], CL.count:format(self:SpellName(213238), seekerSwarmCount))
if not self:Easy() then
self:Bar(212794, timers[212794][brandOfArgusCount], CL.count:format(self:SpellName(212794), brandOfArgusCount))
end
self:Bar(208230, timers[208230][feastOfBloodCount], CL.count:format(self:SpellName(208230), feastOfBloodCount))
self:Bar(213531, timers[213531][echoesOfTheVoidCount], CL.count:format(self:SpellName(213531), echoesOfTheVoidCount))
self:Bar(206365, 130, CL.count:format(self:SpellName(206365), illusionaryNightCount))
if not self:LFR() then
self:Berserk(self:Normal() and 523 or 463)
end
end
--------------------------------------------------------------------------------
-- Event Handlers
--
--[[ Stage One ]]--
do
local list = mod:NewTargetList()
function mod:CarrionPlague(args)
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.1, args.spellId, list, "yellow", "warning")
end
if self:Me(args.destGUID) then
self:Say(args.spellId)
end
end
end
function mod:CarrionPlagueSuccess(args)
carrionPlagueCount = carrionPlagueCount + 1
local timer = timers[206480][carrionPlagueCount]
if timer then
self:Bar(206480, timer, CL.count:format(args.spellName, carrionPlagueCount))
end
end
function mod:SeekerSwarm(args)
self:MessageOld(args.spellId, "orange", "info", CL.count:format(args.spellName, seekerSwarmCount))
seekerSwarmCount = seekerSwarmCount + 1
local timer = timers[args.spellId][seekerSwarmCount]
if timer then
self:Bar(args.spellId, timer, CL.count:format(args.spellName, seekerSwarmCount))
end
end
do
local list = mod:NewTargetList()
function mod:BrandOfArgus(args)
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.1, args.spellId, list, "green", "alarm", CL.count:format(args.spellName, brandOfArgusCount-1))
end
if self:Me(args.destGUID) then
self:Say(args.spellId)
end
if self:GetOption(argusMarker) then
for i = 1, 6 do
if not argusMarks[i] then
argusMarks[i] = args.destName
self:CustomIcon(false, args.destName, i)
break
end
end
end
end
function mod:BrandOfArgusRemoved(args)
if self:GetOption(argusMarker) then
for i = 1, 6 do
if argusMarks[i] == args.destName then
argusMarks[i] = false
self:CustomIcon(false, args.destName)
break
end
end
end
end
end
function mod:BrandOfArgusSuccess(args)
brandOfArgusCount = brandOfArgusCount + 1
local timer = timers[args.spellId][brandOfArgusCount]
if timer then
self:Bar(args.spellId, timer, CL.count:format(args.spellName, brandOfArgusCount))
end
end
function mod:FeastOfBlood(args)
self:TargetMessageOld(args.spellId, args.destName, "orange", "long", CL.count:format(args.spellName, feastOfBloodCount), nil, true)
feastOfBloodCount = feastOfBloodCount + 1
local timer = timers[args.spellId][feastOfBloodCount]
if timer then
self:Bar(args.spellId, timer, CL.count:format(args.spellName, feastOfBloodCount))
end
end
function mod:EchoesOfTheVoid(args)
self:MessageOld(args.spellId, "red", "long", CL.count:format(args.spellName, echoesOfTheVoidCount))
self:StopBar(CL.count:format(args.spellName, echoesOfTheVoidCount))
self:Bar(args.spellId, 10, CL.count:format(args.spellName, echoesOfTheVoidCount))
echoesOfTheVoidCount = echoesOfTheVoidCount + 1
local timer = timers[args.spellId][echoesOfTheVoidCount]
if timer then
self:Bar(args.spellId, timer, CL.count:format(args.spellName, echoesOfTheVoidCount))
end
end
function mod:CHAT_MSG_MONSTER_YELL(event, msg)
if event == "timer" or msg == L.adds_yell1 or msg == L.adds_yell2 then
self:MessageOld("adds", "cyan", "alert", CL.count:format(L.adds, addWaveCount), 212552) -- 212552 = Wraith Walk, inv_helm_plate_raiddeathknight_p_01, id 1100041
addWaveCount = addWaveCount + 1
local timer = timers["adds"][addWaveCount]
if timer then
self:Bar("adds", timer, CL.count:format(L.adds, addWaveCount), 212552) -- 212552 = Wraith Walk, inv_helm_plate_raiddeathknight_p_01, id 1100041
if self:Tank() then
self:DelayedMessage("adds", timer-5, "cyan", CL.custom_sec:format(L.adds, 5))
end
if event == "timer" then
self:ScheduleTimer("CHAT_MSG_MONSTER_YELL", timer, "timer")
end
end
end
end
--[[ Stage Two ]]--
function mod:IllusionaryNight(args)
addsKilled = 0
essenceTargets = {}
self:MessageOld(args.spellId, "cyan", "long", CL.count:format(args.spellName, illusionaryNightCount))
self:CastBar(args.spellId, 32, CL.count:format(args.spellName, illusionaryNightCount))
illusionaryNightCount = illusionaryNightCount + 1
if illusionaryNightCount < 3 then
self:Bar(args.spellId, 163, CL.count:format(args.spellName, illusionaryNightCount))
end
self:CastBar(215988, 8.5) -- Carrion Nightmare
self:SetInfo(206466, 1, L.addsKilled)
self:SetInfo(206466, 2, addsKilled)
self:SetInfo(206466, 3, L.gotEssence)
self:SetInfo(206466, 4, #essenceTargets)
self:OpenInfo(206466, self:SpellName(206466))
self:ScheduleTimer("CloseInfo", 40, 206466) -- some delay to look at the InfoBox after the phase
end
function mod:CarrionNightmare(args)
self:CastBar(args.spellId, 4)
end
function mod:EssenceOfNight(args)
essenceTargets[#essenceTargets+1] = args.destName
self:SetInfo(206466, 4, #essenceTargets)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "blue", "info", CL.you:format(args.spellName))
end
end
function mod:AddDeath()
addsKilled = addsKilled + 1
self:SetInfo(206466, 2, addsKilled)
if self:Mythic() and addsKilled % 5 == 0 then
self:MessageOld(206466, "cyan", nil, CL.mob_killed:format(CL.adds, addsKilled, 20))
end
end
--[[ Felsworm Spellguard ]]--
do
local list = mod:NewTargetList()
function mod:VolatileWound(args)
if UnitIsPlayer(args.destName) then
if self:Me(args.destGUID) then
if not args.amount then
self:TargetMessageOld(args.spellId, args.destName, "blue", "alarm")
elseif args.amount % 2 == 0 then
self:StackMessage(args.spellId, args.destName, args.amount, "blue", "alarm")
end
self:TargetBar(args.spellId, 8, args.destName)
self:CancelSayCountdown(args.spellId)
self:SayCountdown(args.spellId, 8)
elseif not args.amount then -- 1 stack
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.5, args.spellId, list, "orange", "alarm")
end
end
end
end
function mod:VolatileWoundRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
self:StopBar(args.spellId, args.destName)
end
end
end
do
local prev = 0
function mod:NetherZoneDamage(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
--[[ Sightless Watcher ]]--
function mod:BurningSoul(args)
self:TargetMessageOld(args.spellId, args.destName, "yellow", "warning")
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:OpenProximity(args.spellId, 8)
end
end
function mod:BurningSoulRemoved(args)
if self:Me(args.destGUID) then
self:CloseProximity(args.spellId)
end
end