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.

196 lines
5.9 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Kanrethad Ebonlocke", 1112)
if not mod then return end
mod:RegisterEnableMob(69964, 70052) -- Kanrethad Ebonlocke, Demonic Soulwell
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.name = "Kanrethad Ebonlocke"
L.summons = "Summons"
L.debuffs = "Debuffs"
L.start_say = "BEHOLD" -- BEHOLD! I have truly mastered the fel energies of this world! The demonic power I now command... It is indescribable, unlimited, OMNIPOTENT!
L.win_say = "Jubeka" -- Jubeka?! What are you...?!
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
138789, 138685, 138751, 138755,
138561, 138560, 138558,
138559, 138564, {139060, "FLASH"}, 1098, "stages"
},{
[138789] = L.summons,
[138561] = L.debuffs,
[138559] = "general",
}
end
function mod:OnRegister()
self.displayName = L.name
end
function mod:VerifyEnable(unit, mobId)
if mobId == 70052 then -- Always enable on Soulwell
return true
else
local hp = UnitHealth(unit) / UnitHealthMax(unit) * 100
if hp > 8 and UnitCanAttack("player", unit) then
return true
end
end
end
function mod:OnBossEnable()
self:Log("SPELL_AURA_APPLIED", "Curse", 138558)
self:Log("SPELL_CAST_SUCCESS", "PitLord", 138789)
self:Log("SPELL_CAST_SUCCESS", "Imps", 138685)
self:Log("SPELL_CAST_SUCCESS", "Felhunters", 138751)
self:Log("SPELL_CAST_SUCCESS", "DoomLord", 138755)
self:Log("SPELL_CAST_SUCCESS", "DevourEnslavement", 139060)
self:Log("SPELL_AURA_APPLIED", "EnslaveDemon", 1098)
self:Log("SPELL_AURA_APPLIED", "Cataclysm", 138564)
self:Log("SPELL_AURA_REMOVED", "CataclysmInterrupted", 138564)
self:Log("SPELL_CAST_START", "ChaosBolt", 138559)
self:Log("SPELL_AURA_APPLIED", "Agony", 138560)
self:Log("SPELL_AURA_REMOVED", "AgonyRemoved", 138560)
self:Log("SPELL_AURA_APPLIED", "RainOfFire", 138561)
self:Log("SPELL_PERIODIC_DAMAGE", "RainOfFire", 138561)
self:RegisterEvent("CHAT_MSG_MONSTER_SAY", "WinCheck")
self:RegisterEvent("PLAYER_REGEN_ENABLED", "WipeTimer")
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:Curse(args)
self:Berserk(720, true, nil, args.spellId, args.spellName)
end
function mod:PitLord(args)
self:MessageOld(args.spellId, "yellow")
self:Bar(args.spellId, 10, "<"..args.spellName..">")
self:CDBar(138685, 66) -- Imps
self:CDBar(138559, 30) -- Chaos Bolt
end
function mod:Imps(args)
self:MessageOld(args.spellId, "yellow")
self:StopBar(args.spellId)
self:Bar(args.spellId, 10, "<"..args.spellName..">")
self:CDBar(138751, 57) -- Felhunters
end
function mod:Felhunters(args)
self:MessageOld(args.spellId, "yellow")
self:StopBar(args.spellId)
self:Bar(args.spellId, 9, "<"..args.spellName..">")
self:CDBar(138755, 59) -- Doom Lord
end
function mod:DoomLord(args)
self:MessageOld(args.spellId, "yellow")
self:StopBar(args.spellId)
self:Bar(args.spellId, 10, "<"..args.spellName..">")
self:CDBar(138685, 60) -- Imps
end
function mod:DevourEnslavement(args)
self:MessageOld(args.spellId, "orange", "warning", CL["removed"]:format(self:SpellName(1098))) -- Enslave Demon
self:Flash(args.spellId)
self:StopBar(1098)
self:CancelDelayedMessage(CL["custom_sec"]:format(CL["over"]:format(args.spellName), 60))
self:CancelDelayedMessage(CL["custom_sec"]:format(CL["over"]:format(args.spellName), 30))
self:CancelDelayedMessage(CL["custom_sec"]:format(CL["over"]:format(args.spellName), 10))
self:CancelDelayedMessage(CL["custom_sec"]:format(CL["over"]:format(args.spellName), 5))
end
function mod:EnslaveDemon(args)
if self:Me(args.sourceGUID) and self:MobId(args.destGUID) == 70075 then
self:Bar(args.spellId, 300)
self:DelayedMessage(args.spellId, 240, "cyan", CL["custom_sec"]:format(CL["over"]:format(args.spellName), 60))
self:DelayedMessage(args.spellId, 270, "cyan", CL["custom_sec"]:format(CL["over"]:format(args.spellName), 30))
self:DelayedMessage(args.spellId, 290, "cyan", CL["custom_sec"]:format(CL["over"]:format(args.spellName), 10))
self:DelayedMessage(args.spellId, 295, "cyan", CL["custom_sec"]:format(CL["over"]:format(args.spellName), 5))
end
end
do
local t = 0
function mod:Cataclysm(args)
self:MessageOld(args.spellId, "red", "warning")
self:Bar(args.spellId, 6, "<"..args.spellName..">")
self:CDBar(args.spellId, 60)
t = GetTime()
end
function mod:CataclysmInterrupted(args)
if (GetTime() - t) < 5.5 then
self:StopBar("<"..args.spellName..">")
self:MessageOld(args.spellId, "green", nil, CL["interrupted"]:format(args.spellName))
end
end
end
function mod:Agony(args)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "blue", "alarm", CL["you"]:format(args.spellName))
end
end
function mod:AgonyRemoved(args)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "green", nil, CL["removed"]:format(args.spellName))
end
end
function mod:RainOfFire(args)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "blue", "alert", CL["you"]:format(args.spellName))
end
end
function mod:ChaosBolt(args)
self:MessageOld(args.spellId, "orange", "long")
self:Bar(args.spellId, 6, "<"..args.spellName..">")
self:Bar(args.spellId, 60)
end
function mod:WinCheck(_, msg)
if msg:find(L["win_say"], nil, true) then
self:Win()
elseif msg:find(L["start_say"], nil, true) then
self:Bar("stages", 15, COMBAT) -- Global "Combat" string
self:CDBar(138789, 29) -- Pit Lord
end
end
do
local function wipeCheck()
if not InCombatLockdown() and not UnitAffectingCombat("player") then
mod:Reboot()
end
end
function mod:WipeTimer()
self:ScheduleTimer(wipeCheck, 4)
end
end