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.

177 lines
5.3 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Inquisitor Tormentorum", 1493, 1695)
if not mod then return end
mod:RegisterEnableMob(96015)
mod.engageId = 1850
--------------------------------------------------------------------------------
-- Locals
--
local nextTeleportSoonWarning = 0
local fleshToStoneList = {}
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
200898, -- Teleport
202455, -- Void Shield
212564, -- Inquisitive Stare
{200904, "FLASH"}, -- Sapped Soul
196208, -- Seed of Corruption
201488, -- Frightening Shout
199918, -- Shadow Crash
{203685, "INFOBOX"}, -- Flesh to Stone
}
end
function mod:OnBossEnable()
self:Log("SPELL_CAST_START", "Teleport", 200898)
self:Log("SPELL_AURA_APPLIED", "VoidShieldApplied", 202455)
self:Log("SPELL_AURA_REMOVED", "VoidShieldRemoved", 202455)
self:Log("SPELL_AURA_APPLIED", "InquisitiveStare", 212564) -- using AURA events instead of SPELL_CAST_START because a player won't get targetted if they had an immunity
self:Log("SPELL_AURA_REFRESH", "InquisitiveStare", 212564)
self:Log("SPELL_CAST_SUCCESS", "SapSoul", 206303) -- Mythic, Mythic+
self:Log("SPELL_CAST_SUCCESS", "SapSoulInterruptible", 200905) -- Normal, Heroic
self:Log("SPELL_AURA_APPLIED", "SappedSoul", 200904)
self:Log("SPELL_AURA_REFRESH", "SappedSoul", 200904)
self:RegisterUnitEvent("UNIT_HEALTH", nil, "boss1")
self:Log("SPELL_CAST_START", "SeedofCorruption", 196208)
self:Log("SPELL_CAST_START", "FrighteningShout", 201488)
self:Log("SPELL_AURA_APPLIED", "ShadowCrashDamage", 199918) -- Shadow Crash
self:Log("SPELL_PERIODIC_DAMAGE", "ShadowCrashDamage", 199918)
self:Log("SPELL_PERIODIC_MISSED", "ShadowCrashDamage", 199918)
self:Log("SPELL_AURA_APPLIED", "FleshToStoneApplied", 203685)
self:Log("SPELL_AURA_APPLIED_DOSE", "FleshToStoneAppliedDose", 203685)
self:Log("SPELL_AURA_REMOVED", "FleshToStoneRemoved", 203685)
end
function mod:OnEngage()
fleshToStoneList = {}
nextTeleportSoonWarning = 75 -- Teleport at 70%
self:CDBar(200904, 11.6, self:SpellName(206303)) -- Sap Soul
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:Teleport(args)
self:MessageOld(args.spellId, "yellow", "info", CL.casting:format(args.spellName))
end
function mod:VoidShieldApplied(args)
self:Bar(args.spellId, 10, CL.onboss:format(args.spellName))
end
function mod:VoidShieldRemoved(args)
self:MessageOld(args.spellId, "green", "info", CL.removed:format(args.spellName))
end
do
local prev = 0
function mod:InquisitiveStare(args)
if self:Me(args.destGUID) then
local t = GetTime()
if t-prev > 0.5 then
prev = t
self:MessageOld(args.spellId, "orange", "alarm")
end
self:CastBar(args.spellId, 3)
end
end
end
function mod:SapSoul(args)
self:MessageOld(200904, "yellow", "info", CL.casting:format(args.spellName))
self:CDBar(200904, 15.8, args.spellName)
end
function mod:SapSoulInterruptible(args)
self:MessageOld(200904, "yellow", self:Interrupter() and "warning" or "info", CL.casting:format(args.spellName))
self:CDBar(200904, 20, args.spellName)
end
do
local prev = 0
function mod:SappedSoul(args)
if self:Me(args.destGUID) then
local t = GetTime()
if t-prev > 0.5 then
prev = t
self:TargetMessageOld(args.spellId, args.destName, "red", "long")
self:Flash(args.spellId)
end
end
end
end
function mod:UNIT_HEALTH(event, unit)
local hp = UnitHealth(unit) / UnitHealthMax(unit) * 100
if hp < nextTeleportSoonWarning then
self:MessageOld(200898, "yellow", nil, CL.soon:format(self:SpellName(200898)))
nextTeleportSoonWarning = nextTeleportSoonWarning - 30 -- Teleport at 40%
if nextTeleportSoonWarning < 40 then
self:UnregisterUnitEvent(event, unit)
end
end
end
function mod:SeedofCorruption(args)
self:MessageOld(args.spellId, "orange", "warning", CL.casting:format(args.spellName))
end
function mod:FrighteningShout(args)
self:MessageOld(args.spellId, "orange", "warning", CL.casting:format(args.spellName))
end
do
local prev = 0
function mod:ShadowCrashDamage(args)
if self:Me(args.destGUID) then
local t = GetTime()
if t-prev > 1.5 then
prev = t
self:MessageOld(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
end
function mod:FleshToStoneApplied(args)
if not next(fleshToStoneList) then
self:OpenInfo(args.spellId, args.spellName)
end
fleshToStoneList[args.destName] = 1
self:SetInfoByTable(args.spellId, fleshToStoneList)
end
function mod:FleshToStoneAppliedDose(args)
fleshToStoneList[args.destName] = args.amount
self:SetInfoByTable(args.spellId, fleshToStoneList)
if self:Me(args.destGUID) and args.amount > 6 then
self:StackMessage(args.spellId, args.destName, args.amount, "orange")
if args.amount < 9 then
self:PlaySound(args.spellId, "alarm")
else
self:PlaySound(args.spellId, "warning")
end
end
end
function mod:FleshToStoneRemoved(args)
fleshToStoneList[args.destName] = nil
if not next(fleshToStoneList) then
self:CloseInfo(args.spellId)
else
self:SetInfoByTable(args.spellId, fleshToStoneList)
end
end