Files
Szyler 82a9ac0937 Update to 5.21 Sunwell (#6)
* 5.20

* Update to 5.21

---------

Co-authored-by: Szyler <Szyler@Szyler.com>
2024-09-30 20:09:41 -07:00

915 lines
32 KiB
Lua

local mod = DBM:NewMod("KaelThas", "DBM-TheEye", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(19622, 20064, 20063, 20060, 20062)
mod:RegisterCombat("yell", "Capernian will see to it that your stay here is a short one." ,"Energy. Power. My people are addicted to it... a dependence made manifest after the Sunwell was destroyed. Welcome to the future. A pity you are too late to stop it. No one can stop me now! Selama ashal'anore!")
mod:SetUsedIcons(7,8)
mod:RegisterEvents(
"CHAT_MSG_MONSTER_YELL",
"CHAT_MSG_MONSTER_EMOTE",
"SPELL_AURA_APPLIED",
"UNIT_DIED",
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS"
)
-- local warn
local warnConflag = mod:NewTargetAnnounce(2135350, 4) --Heroic: 2135351, ASC 10Man: 2135352, 25Man: 2135353
local warnGaze = mod:NewTargetAnnounce(2135337, 4)
local specWarnGaze = mod:NewSpecialWarningYou(2135337)
local warnFocusedBurst = mod:NewTargetAnnounce(2135362, 4) -- ASC only mechanic
local warnMC = mod:NewTargetAnnounce(2135467, 4) --Heroic: 2135468, Asc(most likely) : 2135469
-- local specWarnSeal = mod:NewSpecialWarning("SpecWarnSeal", "spell", 2135342) --Heroic : 2135343 , Ascended 10Man: 2135344, 25Man: 2135345
--local specWarnSeal = mod:NewAnnounce(L.KTSeal, 2, 2135342)
local specWarnWiF = mod:NewSpecialWarningSpell(2135369) -- ASC only
local specWarnBladestorm = mod:NewSpecialWarningRun(2135338) -- ASC only
local specWarnFocusedBurstYou = mod:NewSpecialWarningYou(2135362) -- ASC only
local specWarnBloodLeech = mod:NewSpecialWarningSpell(2135531) -- ASC only
local specWarnManaShield = mod:NewSpecialWarningDispel(2135453) -- ASC only
local specWarnRebirth = mod:NewSpecialWarningRun(2135508)
local specWarnFlamestrike = mod:NewSpecialWarningRun(2135459)
local specWarnFormDyingStar = mod:NewSpecialWarningSpell(2135487) -- ASC only
-- Pyroblasts seem to happen 10seconds after phase switch (exception is flying phase) and then 40sec after cast start (seen only 1)
-- local timer
local timerNextWorldInFlames = mod:NewNextTimer(60, 2135369) -- ASC only
local timerCDBlastWave = mod:NewCDTimer(12, 2135354)
local DURATION_GAZE = 15
local timerNextGaze = mod:NewNextTimer(DURATION_GAZE, 2135337)
local timerNextBladestorm = mod:NewNextTimer(58, 2135338) -- ASC only
local timerFocusedBurst = mod:NewTimer(4.5, "FocusedBurst", 2135392) -- ASC only
local timerNextFocusedBurst = mod:NewNextTimer(60, 2135362) -- 2135392 debuff on target when shooting
local timerBellow = mod:NewNextTimer(30, 2135340)
local timerNextBloodLeech = mod:NewNextTimer(60, 2135531) -- ASC only
local timerNextPyro = mod:NewNextTimer(40, 2135444) --Heroic: 2135445, ASC 10Man: 2135446, 25Man: 2135447
local DURATION_PYRO_CAST = 7
local pyroCast = mod:NewCastTimer(DURATION_PYRO_CAST, 2135444)
local timerNextFlameStrike = mod:NewNextTimer(40, 2135459)
local timerExplosion = mod:NewTimer(5, "TimerExplosion",2135459)
local timerNextMC = mod:NewNextTimer(40, 2135468)
local capernianWiF = mod:NewBuffActiveTimer(12, 2135369)
local DURATION_BLADESTORM = 13
local bladestormDuration = mod:NewBuffActiveTimer(DURATION_BLADESTORM, 2135338)
local bloodLeechDuration = mod:NewBuffActiveTimer(11, 2135531)
local timerNextRebirth = mod:NewNextTimer(40, 2135508)
local timerNextManaShield = mod:NewNextTimer(40, 2135453)
local DURATION_BANISH = 22
local banishDuration = mod:NewBuffActiveTimer(DURATION_BANISH, 2135470)
local DURATION_DYING_STAR_CHANNEL = 6
local timerNextDyingStar = mod:NewNextTimer(129, 2135487)
local DURATION_GRAVITY_LAPSE = 30
local timerNextGravityLapse = mod:NewNextTimer(129 , 2135477)
-- Lieutenant timers
local CapernianPull = mod:NewTimer(6, "Capernian spawning in: ", 2135337)
local ThaladredPull = mod:NewTimer(5, "Thaladred spawning in: ", 2135337)
local TelonicusPull = mod:NewTimer(7.5, "Telonicus spawning in: ", 2135337)
local SanguinarPull = mod:NewTimer(12, "Sanguinar spawning in: ", 2135337)
local WeaponsPull = mod:NewTimer(5, "Weapons spawning in: ", 2135337)
local SCHEDULE_ALL_PULL = 14
local AllPull = mod:NewTimer(SCHEDULE_ALL_PULL, "Everyone spawning in: ", 2135337)
local KaelThasPull = mod:NewTimer(7, "Kael'Thas spawning in: ", 2135337)
-- local variables
local isAscendedDifficulty = false
local warnConflagTargets = {}
local warnMCTargets = {}
local leechSpam = 0
local allowGazeAlert = 0
local emoteGazeText = "sets eyes on"
local nextGazeCounter = 0
-- local options
mod:AddBoolOption(L.GazeIcon, false)
mod:AddBoolOption(L.FocusedBurst, false)
function mod:OnCombatStart(delay)
table.wipe(warnConflagTargets)
table.wipe(warnMCTargets)
allowGazeAlert = 1
nextGazeCounter = 0
mod.vb.phase = 1
isAscendedDifficulty = mod:IsDifficulty("heroic10", "heroic25")
end
local function showMC()
warnMC:Show(table.concat(warnMCTargets, "<, >"))
table.wipe(warnMCTargets)
end
local function showConflag()
warnConflag:Show(table.concat(warnConflagTargets, "<, >"))
table.wipe(warnConflagTargets)
end
function mod:HandleCommonGaze(target)
if target == UnitName("player") then
specWarnGaze:Show()
else
warnGaze:Show(target)
end
if self.Options.GazeIcon then
self:SetIcon(target, 8, DURATION_GAZE)
end
end
function mod:HandleAscendedGaze(target)
if nextGazeCounter % 3 == 0 then
timerNextGaze:Start(DURATION_GAZE + DURATION_BLADESTORM) --Why is this needed, doesn't he still gaze while bladestorming? the next gaze will come at the same time as bladestorm.
nextGazeCounter = 1
else
timerNextGaze:Start()
nextGazeCounter = nextGazeCounter + 1
end
mod:HandleCommonGaze(target)
end
function mod:CHAT_MSG_MONSTER_EMOTE(msg, _, _, _, target)
if allowGazeAlert and (msg == emoteGazeText or msg:find(emoteGazeText)) then
if isAscendedDifficulty then
mod:HandleAscendedGaze(target)
else
timerNextGaze:Start()
mod:HandleCommonGaze(target)
end
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
local FirstPull = "Energy. Power. My people are addicted to it... a dependence made manifest after the Sunwell was destroyed. Welcome to the future. A pity you are too late to stop it. No one can stop me now! Selama ashal'anore!"
local CapernianPullYell = "Capernian will see to it that your stay here is a short one."
local ThaladredPullYell = "Let us see how your nerves hold up against the Darkener, Thaladred!"
local TelonicusPullYell = "Well done, you have proven worthy to test your skills against my master engineer, Telonicus."
local SanguinarPullYell = "You have persevered against some of my best advisors... but none can withstand the might of the Blood Hammer. Behold, Lord Sanguinar!"
local WeaponsPullYell = "As you see, I have many weapons in my arsenal...."
local AllPullYell = "Perhaps I underestimated you. It would be unfair to make you fight all four advisors at once, but... fair treatment was never shown to my people. I'm just returning the favor."
local KaelThasPullYell = "Alas, sometimes one must take matters into one's own hands. Balamore shanal!"
if (msg == FirstPull or msg:find(FirstPull)) then
CapernianPull:Start(29) -- 23 + capernain pull timer
elseif (msg == CapernianPullYell or msg:find(CapernianPullYell)) then
CapernianPull:Start()
if isAscendedDifficulty then
timerNextWorldInFlames:Start(21) -- 15s + PullTimer(6)
end
elseif (msg == ThaladredPullYell or msg:find(ThaladredPullYell)) then
ThaladredPull:Start()
if isAscendedDifficulty then
timerNextBladestorm:Start(20) -- 15s + PullTimer(5)
end
elseif (msg == TelonicusPullYell or msg:find(TelonicusPullYell)) then
TelonicusPull:Start()
if isAscendedDifficulty then
timerNextFocusedBurst:Start(22.5) -- 15s + PullTimer(7.5)
end
elseif (msg == SanguinarPullYell or msg:find(SanguinarPullYell)) then
SanguinarPull:Start()
timerBellow:Start(32) -- 20s + PullTimer(12)
if isAscendedDifficulty then
timerNextBloodLeech:Start(27) -- 15s + PullTimer(12)
end
elseif (msg == WeaponsPullYell or msg:find(WeaponsPullYell)) then
WeaponsPull:Start()
mod.vb.phase = 2
elseif (msg == AllPullYell or msg:find(AllPullYell)) then
-- Capernian instant spawn, but each npc ress is delayed by 2 sec compared to the all pull timer
AllPull:Start()
mod.vb.phase = 3
timerCDBlastWave:Start(SCHEDULE_ALL_PULL + 6) -- Delay(0) + 2 x FireBalls
timerNextGaze:Start(SCHEDULE_ALL_PULL + 2) -- Delay(2)
timerBellow:Start(SCHEDULE_ALL_PULL + 26) -- Delay(6) + 20s
if isAscendedDifficulty then
timerNextWorldInFlames:Start(SCHEDULE_ALL_PULL + 15) -- Delay(0) + 15s
nextGazeCounter = 2
timerNextBladestorm:Start(SCHEDULE_ALL_PULL + 32) -- Delay(2) + 30s
timerNextFocusedBurst:Start(SCHEDULE_ALL_PULL + 49) -- Delay(4) + 45s
-- TODO the timer here is for the Aura of Blood. Blood Leech happens 1 second after Aura of blood
timerNextBloodLeech:Start(SCHEDULE_ALL_PULL + 66) -- Delay(6) + 60s
end
elseif (msg == KaelThasPullYell or msg:find(KaelThasPullYell)) then
KaelThasPull:Start()
timerNextPyro:Start(17) -- 10s + PullTimer(7)
timerNextFlameStrike:Start(27) -- 20s + PullTimer(7)
specWarnFlamestrike:Schedule(27) -- 20s + PullTimer(7)
timerExplosion:Start(32) -- 25s + PullTimer(7)
timerNextMC:Start(47) -- 40s + + PullTimer(7)
mod.vb.phase = 4
timerNextRebirth:Start(32) -- 25s + PullTimer(7)/
if isAscendedDifficulty then
timerNextManaShield:Start(22) -- 15s + PullTimer(7)
end
end
end
function mod:StopKaelTimers()
timerNextManaShield:Stop()
timerNextPyro:Stop()
timerNextFlameStrike:Stop()
timerNextRebirth:Stop()
timerExplosion:Stop()
timerNextMC:Stop()
end
function mod:HandleGravity()
self:StopKaelTimers()
timerNextGravityLapse:Start()
local delayTime = 0
if isAscendedDifficulty then
delayTime = DURATION_DYING_STAR_CHANNEL
timerNextDyingStar:Start(33)
timerNextManaShield:Start(DURATION_GRAVITY_LAPSE + 13 + DURATION_PYRO_CAST + delayTime)
end
timerNextPyro:Start(DURATION_GRAVITY_LAPSE + 14 + delayTime)
timerNextFlameStrike:Start(DURATION_GRAVITY_LAPSE + 24 + delayTime)
timerNextRebirth:Start(DURATION_GRAVITY_LAPSE + 28 + delayTime)
timerNextMC:Start(DURATION_GRAVITY_LAPSE + 44 + delayTime)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2135467, 2135468, 2135469) then
warnMCTargets[#warnMCTargets + 1] = args.destName
self:Unschedule(showMC)
timerNextMC:Start()
if #warnMCTargets >= 3 then
showMC()
else
self:Schedule(0.3, showMC)
end
elseif args:IsSpellID(2135350, 2135351, 2135352, 2135353) then
warnConflagTargets[#warnConflagTargets + 1] = args.destName
self:Unschedule(showConflag)
self:Schedule(0.3, showConflag)
elseif args:IsSpellID(2135340) then
timerBellow:Start()
elseif args:IsSpellID(2135354, 2135355, 2135356, 2135357) then
timerCDBlastWave:Start()
elseif args:IsSpellID(2135470) then
banishDuration:Start()
mod.vb.phase = 5
self:StopKaelTimers()
-- TODO find whatever spellID AND COMBAT_LOG_EVENT Gravity Lapse is triggered by and split it. SPELL_AURA_APPLIED, SPELL_CAST_START and SPELL_CAST_SUCCESS doesnt work
self:ScheduleMethod(DURATION_BANISH + 20, "HandleGravity")
timerNextGravityLapse:Start(DURATION_BANISH + 20)
timerNextPyro:Start(DURATION_BANISH + 10)
if isAscendedDifficulty then
timerNextManaShield:Start(DURATION_BANISH + 10 + DURATION_PYRO_CAST - 1)
end
elseif args:IsSpellID(2135531, 2135533) and (GetTime() - leechSpam > 20) then
leechSpam = GetTime()
specWarnBloodLeech:Show()
bloodLeechDuration:Start()
--First leech applies 1 second later than the Aura of Blood
timerNextBloodLeech:Start(59)
elseif args:IsSpellID(2135369) then
capernianWiF:Start()
specWarnWiF:Show()
timerNextWorldInFlames:Start()
elseif args:IsSpellID(2135338) then
bladestormDuration:Start()
specWarnBladestorm:Show()
timerNextBladestorm:Start()
elseif args:IsSpellID(2135453) then
timerNextManaShield:Start()
specWarnManaShield:Show()
elseif args:IsSpellID(2135487) then
timerNextDyingStar:Start()
specWarnFormDyingStar:Show()
end
end
function mod:HandleFocusedBurstTarget()
local target = mod:GetBossTarget(20063)
if target then
warnFocusedBurst:Show(target)
if mod.vb.phase == 3 and UnitName("player") == target then
specWarnFocusedBurstYou:Show()
end
if self.Options.FocusedBurst then
self:SetIcon(target, 7, 8)
end
end
end
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(2135444, 2135445, 2135446, 2135447) and DBM:AntiSpam(20, 1) then
timerNextPyro:Start(36)
end
end
mod.SPELL_MISSED = mod.SPELL_DAMAGE -- Hack to include SPELL_MISSED as well without more code
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2135444, 2135445, 2135446, 2135447) and DBM:AntiSpam(20, 1) then
pyroCast:Start()
timerNextPyro:Start()
elseif args:IsSpellID(2135362) then
self:ScheduleMethod(2, "HandleFocusedBurstTarget")
if mod.vb.phase == 3 then
timerNextFocusedBurst:Start(60)
timerFocusedBurst:Start()
end
elseif args:IsSpellID(2135506, 2135507, 2135508, 2135509) then
timerNextRebirth:Start()
specWarnRebirth:Show()
self:SetIcon(args.sourceName, 8)
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(2135459, 2135460, 2135461, 2135462) then
timerNextFlameStrike:Start(35)
specWarnFlamestrike:Schedule(35)
timerExplosion:Start(40)
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 20060 then
if isAscendedDifficulty then
timerNextBloodLeech:Stop()
bloodLeechDuration:Stop()
end
timerBellow:Stop()
elseif cid == 20062 then
timerCDBlastWave:Stop()
if isAscendedDifficulty then
timerNextWorldInFlames:Stop()
capernianWiF:Stop()
end
elseif cid == 20063 and isAscendedDifficulty then
timerNextFocusedBurst:Stop()
timerFocusedBurst:Stop()
elseif cid == 20064 then
timerNextGaze:Stop()
if isAscendedDifficulty then
bladestormDuration:Stop()
timerNextBladestorm:Stop()
nextGazeCounter = 0
end
end
end
function mod:OnCombatEnd()
allowGazeAlert = 0
nextGazeCounter = 0
end
-- Old Kaelthas DBM code
-- local lastConflag = 0;
-- local MCTargets = {};
-- local MCIcons = {
-- [1] = false,
-- [2] = false,
-- [3] = false,
-- [4] = false,
-- [5] = false,
-- [6] = false,
-- [7] = false,
-- [8] = false
-- };
-- local weaponFrame = false;
-- local phase2 = false;
-- local phase5 = false;
-- local weaponHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- [5] = 100,
-- [6] = 100,
-- [7] = 100
-- };
-- local addFrame = false;
-- local addHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- };
-- local lastEgg = 0;
-- local gravityLapse = false;
-- local phase = 1
-- Kael:RegisterEvents(
-- "CHAT_MSG_MONSTER_EMOTE",
-- "CHAT_MSG_MONSTER_YELL",
-- "SPELL_CAST_START",
-- "SPELL_AURA_APPLIED",
-- "SPELL_MISSED",
-- "SPELL_AURA_REMOVED",
-- "SPELL_CAST_SUCCESS"
-- );
-- Kael:AddOption("WarnPhase", true, DBM_KAEL_OPTION_PHASE);
-- Kael:AddOption("ThalaIcon", true, DBM_KAEL_OPTION_ICON_P1);
-- Kael:AddOption("ThalaWhisper", true, DBM_KAEL_OPTION_WHISPER_P1);
-- Kael:AddOption("RangeCheck", true, DBM_KAEL_OPTION_RANGECHECK);
-- Kael:AddOption("WarnConflag", true, DBM_KAEL_OPTION_CONFLAG);
-- Kael:AddOption("WarnConflag2", false, DBM_KAEL_OPTION_CONFLAG2);
-- Kael:AddOption("TimerConflag2", false, DBM_KAEL_OPTION_CONFLAGTIMER2);
-- Kael:AddOption("WarnFear", true, DBM_KAEL_OPTION_FEAR);
-- Kael:AddOption("WarnFearSoon", true, DBM_KAEL_OPTION_FEARSOON);
-- Kael:AddOption("WarnToy", true, DBM_KAEL_OPTION_TOY);
-- --Kael:AddOption("ShowFrame", true, DBM_KAEL_OPTION_FRAME);
-- --Kael:AddOption("ShowAddFrame", true, DBM_KAEL_OPTION_ADDFRAME);
-- Kael:AddOption("WarnPyro", false, DBM_KAEL_OPTION_PYRO);
-- Kael:AddOption("WarnBarrier", true, DBM_KAEL_OPTION_BARRIER);
-- Kael:AddOption("WarnBarrier2", false, DBM_KAEL_OPTION_BARRIER2);
-- Kael:AddOption("WarnPhoenix", true, DBM_KAEL_OPTION_PHOENIX);
-- Kael:AddOption("WarnMC", true, DBM_KAEL_OPTION_WARNMC);
-- Kael:AddOption("IconMC", true, DBM_KAEL_OPTION_ICONMC);
-- Kael:AddOption("WarnGravity", true, DBM_KAEL_OPTION_GRAVITY);
-- Kael:AddBarOption("Thaladred")
-- Kael:AddBarOption("Lord Sanguinar")
-- Kael:AddBarOption("Capernian")
-- Kael:AddBarOption("Telonicus")
-- Kael:AddBarOption("Gaze Cooldown")
-- Kael:AddBarOption("Next Fear")
-- Kael:AddBarOption("Fear")
-- Kael:AddBarOption("Conflagration: (.*)")
-- Kael:AddBarOption("Remote Toy: (.*)")
-- Kael:AddBarOption("Phase 3")
-- Kael:AddBarOption("Phase 4")
-- Kael:AddBarOption("Next Shock Barrier")
-- Kael:AddBarOption("Shock Barrier")
-- Kael:AddBarOption("Phoenix")
-- Kael:AddBarOption("Rebirth")
-- Kael:AddBarOption("Pyroblast")
-- Kael:AddBarOption("Gravity Lapse")
-- Kael:AddBarOption("Next Gravity Lapse")
-- Kael:SetCreatureID(19622)
-- Kael:RegisterCombat("yell", DBM_KAEL_YELL_PHASE1)
-- Kael:SetMinCombatTime(60)
-- function Kael:OnCombatStart(delay)
-- phase = 1
-- if self.Options.WarnPhase then
-- self:Announce(DBM_KAEL_WARN_PHASE1, 1);
-- end
-- self:StartStatusBarTimer(32 - delay, "Thaladred", "Interface\\Icons\\Spell_Nature_WispSplode");
-- MCTargets = {};
-- MCIcons = {
-- [1] = false,
-- [2] = false,
-- [3] = false,
-- [4] = false,
-- [5] = false,
-- [6] = false,
-- [7] = false,
-- [8] = false
-- };
-- phase2 = false;
-- phase5 = false;
-- weaponHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- [5] = 100,
-- [6] = 100,
-- [7] = 100
-- };
-- addHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- };
-- end
-- function Kael:OnCombatEnd()
-- if self.Options.RangeCheck then
-- DBM_Gui_DistanceFrame_Hide();
-- end
-- if weaponFrame then
-- weaponFrame:Hide();
-- end
-- if addFrame then
-- addFrame:Hide();
-- end
-- phase = 1
-- end
-- function Kael:OnEvent(event, arg1)
-- if event == "CHAT_MSG_MONSTER_EMOTE" and arg1 then
-- local _, _, target = arg1:find(DBM_KAEL_EMOTE_THALADRED_TARGET);
-- if target then
-- self:SendSync("ThalaTarget"..target);
-- end
-- elseif event == "CHAT_MSG_MONSTER_YELL" then
-- if arg1 == DBM_KAEL_YELL_PHASE2 then
-- self:SendSync("Phase2");
-- elseif arg1 == DBM_KAEL_YELL_PHASE3 then
-- self:SendSync("Phase3");
-- elseif arg1 == DBM_KAEL_YELL_PHASE4 then
-- self:SendSync("Phase4");
-- elseif arg1 == DBM_KAEL_YELL_PHASE5 then
-- self:SendSync("Phase5");
-- elseif arg1 == DBM_KAEL_YELL_CAPERNIAN_DOWN then
-- if self.Options.RangeCheck then
-- DBM_Gui_DistanceFrame_Hide();
-- end
-- elseif arg1 == DBM_KAEL_YELL_PHASE1_SANGUINAR then
-- self:Announce(DBM_KAEL_WARN_INC:format(DBM_KAEL_SANGUINAR), 1);
-- self:StartStatusBarTimer(12.5, "Lord Sanguinar", "Interface\\Icons\\Spell_Nature_WispSplode");
-- elseif arg1 == DBM_KAEL_YELL_PHASE1_CAPERNIAN then
-- self:Announce(DBM_KAEL_WARN_INC:format(DBM_KAEL_CAPERNIAN), 1);
-- self:StartStatusBarTimer(7, "Capernian", "Interface\\Icons\\Spell_Nature_WispSplode");
-- self:EndStatusBarTimer("Next Fear");
-- self:UnScheduleSelf("FearSoon");
-- if self.Options.RangeCheck then
-- DBM_Gui_DistanceFrame_Show();
-- end
-- elseif arg1 == DBM_KAEL_YELL_PHASE1_TELONICUS then
-- self:Announce(DBM_KAEL_WARN_INC:format(DBM_KAEL_TELONICUS), 1);
-- self:StartStatusBarTimer(8.4, "Telonicus", "Interface\\Icons\\Spell_Nature_WispSplode");
-- if self.Options.RangeCheck then
-- DBM_Gui_DistanceFrame_Hide();
-- end
-- elseif arg1 == DBM_KAEL_YELL_GRAVITY_LAPSE or arg1 == DBM_KAEL_YELL_GRAVITY_LAPSE2 then
-- self:SendSync("GravityLapse");
-- end
-- elseif event == "SPELL_CAST_START" and arg1 then
-- if arg1.spellId == 39427 then -- ?
-- self:SendSync("CastFear")
-- elseif arg1.spellId == 36819 then
-- self:SendSync("Pyroblast")
-- end
-- elseif event == "SPELL_MISSED" then
-- if arg1.spellId == 39427 then -- ?
-- self:SendSync("Fear")
-- end
-- elseif event == "SPELL_AURA_APPLIED" then
-- if arg1.spellId == 39427 then -- ?
-- self:SendSync("Fear");
-- elseif arg1.spellId == 37018 then -- ?
-- self:SendSync("Conflag"..tostring(arg1.destName))
-- elseif arg1.spellId == 36797 then
-- self:SendSync("MC"..tostring(arg1.destName))
-- elseif arg1.spellId == 37027 then
-- self:SendSync("Toy"..tostring(arg1.destName))
-- elseif arg1.spellId == 36815 then
-- self:SendSync("Barrier");
-- end
-- elseif event == "SPELL_AURA_REMOVED" then
-- if arg1.spellId == 36815 then
-- self:SendSync("BarrierDown")
-- elseif arg1.spellId == 36797 then
-- self:SendSync("BrokeMC"..tostring(arg1.destName))
-- end
-- elseif event == "SPELL_CAST_SUCCESS" then
-- if arg1.spellId == 36723 then
-- self:SendSync("Phoenix")
-- end
-- elseif event == "FearSoon" then
-- if self.Options.WarnFearSoon then
-- self:Announce(DBM_KAEL_WARN_FEAR_SOON, 2);
-- end
-- elseif event == "WarnPhase3" then
-- if self.Options.WarnPhase then
-- self:Announce(DBM_KAEL_WARN_PHASE3, 1);
-- end
-- elseif event == "Phase3" then
-- self:StartStatusBarTimer(173, "Phase 4", "Interface\\Icons\\Spell_Shadow_BloodBoil");
-- if self.Options.RangeCheck then
-- DBM_Gui_DistanceFrame_Show();
-- end
-- elseif event == "BarrierWarn" then
-- if self.Options.WarnBarrier and (not phase5 or self.Options.WarnBarrier2) then
-- self:Announce(DBM_KAEL_WARN_BARRIER_SOON, 2);
-- end
-- elseif event == "AnnounceMCTargets" then
-- if self.Options.WarnMC then
-- local targetString = "";
-- for i, v in ipairs(MCTargets) do
-- targetString = targetString..">"..v.."<, ";
-- end
-- if targetString ~= "" then
-- self:Announce(DBM_KAEL_WARN_MC_TARGETS:format(targetString:sub(0, -3)), 1);
-- end
-- end
-- MCTargets = {};
-- elseif event == "ClearIcon" and arg1 then
-- MCIcons[arg1] = false;
-- elseif event == "GravityLapseEnd" then
-- gravityLapse = false;
-- self:ScheduleSelf(55, "GravityWarn");
-- self:StartStatusBarTimer(60, "Next Gravity Lapse", "Interface\\Icons\\Spell_Magic_FeatherFall");
-- elseif event == "GravityWarn" and self.Options.WarnGravity then
-- self:Announce(DBM_KAEL_GRAVITY_SOON, 2);
-- elseif event == "GravityEndWarn" and self.Options.WarnGravity then
-- self:Announce(DBM_KAEL_GRAVITY_END_SOON, 3);
-- end
-- end
-- function Kael:OnSync(msg)
-- if msg:sub(0, 11) == "ThalaTarget" then
-- msg = msg:sub(12);
-- if msg then
-- if msg == UnitName("player") then
-- self:AddSpecialWarning(DBM_KAEL_SPECWARN_THALADRED_TARGET);
-- end
-- self:Announce(DBM_KAEL_WARN_THALADRED_TARGET:format(msg), 2);
-- if self.Options.ThalaIcon then
-- self:SetIcon(msg, 15);
-- end
-- if self.Options.ThalaWhisper and self.Options.Announce and DBM.Rank >= 1 then
-- self:SendHiddenWhisper(DBM_KAEL_WHISPER_THALADRED_TARGET, msg);
-- end
-- self:StartStatusBarTimer(8.5, "Gaze Cooldown", "Interface\\Icons\\Spell_Fire_BurningSpeed");
-- end
-- elseif msg:sub(0, 7) == "Conflag" and (GetTime() - lastConflag) > 5 then -- spam protection....
-- msg = msg:sub(8);
-- if msg then
-- lastConflag = GetTime();
-- if (self.Options.WarnConflag and not phase2) or (self.Options.WarnConflag2 and self.Options.WarnConflag and phase2) then
-- self:Announce(DBM_KAEL_WARN_CONFLAGRATION:format(msg), 1);
-- end
-- if phase2 and self.Options.TimerConflag2 then
-- self:StartStatusBarTimer(9.5, "Conflagration: "..msg, "Interface\\Icons\\Spell_Fire_Incinerate", true);
-- elseif not phase2 then
-- self:StartStatusBarTimer(9.5, "Conflagration: "..msg, "Interface\\Icons\\Spell_Fire_Incinerate");
-- end
-- end
-- elseif msg:sub(0, 3) == "Toy" and not phase2 then
-- msg = msg:sub(4);
-- if msg then
-- if self.Options.WarnToy then
-- self:Announce(DBM_KAEL_WARN_REMOTETOY:format(msg), 1);
-- end
-- self:StartStatusBarTimer(60, "Remote Toy: "..msg, "Interface\\Icons\\INV_Misc_Urn_01");
-- end
-- elseif msg == "Phase2" then
-- phase = 2
-- phase2 = true;
-- if self.Options.WarnPhase then
-- self:Announce(DBM_KAEL_WARN_PHASE2, 1);
-- end
-- self:StartStatusBarTimer(105, "Phase 3", "Interface\\Icons\\Spell_Shadow_AnimateDead");
-- self:ScheduleSelf(105, "WarnPhase3");
-- if self.Options.ShowFrame and DBMGui and DBMGui.CreateInfoFrame then
-- if weaponFrame then
-- weaponHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- [5] = 100,
-- [6] = 100,
-- [7] = 100
-- };
-- self:UpdateHealth();
-- weaponFrame:Show();
-- else
-- weaponFrame = DBMGui:CreateInfoFrame(DBM_KAEL_INFOFRAME_TITLE);
-- if (not weaponFrame) then
-- -- self:AddMsg("Error while creating frame: Not supported in DBMv4");
-- return;
-- end
-- for i = 1, 7 do
-- weaponFrame["Bar"..i] = weaponFrame:CreateStatusBar(0, 100, 100, nil, DBM_KAEL_WEAPONS_NAMES[i], "100%");
-- end
-- end
-- end
-- elseif msg == "Phase3" then
-- phase = 3
-- self:ScheduleSelf(10, "Phase3");
-- if self.Options.ShowAddFrame and DBMGui and DBMGui.CreateInfoFrame then
-- if addFrame then
-- addHealth = {
-- [1] = 100,
-- [2] = 100,
-- [3] = 100,
-- [4] = 100,
-- };
-- self:UpdateHealth();
-- addFrame:Show();
-- else
-- addFrame = DBMGui:CreateInfoFrame(DBM_KAEL_INFOFRAME_ADDS_TITLE);
-- if (not addFrame) then
-- return;
-- end
-- for i = 1, 4 do
-- addFrame["Bar"..i] = addFrame:CreateStatusBar(0, 100, 100, nil, DBM_KAEL_ADVISORS_NAMES[i], "100%");
-- end
-- end
-- end
-- elseif msg == "Phase4" then
-- phase = 4
-- phase5 = false;
-- if self.Options.WarnPhase then
-- self:Announce(DBM_KAEL_WARN_PHASE4, 1);
-- end
-- self:EndStatusBarTimer("Phase 4");
-- self:ScheduleSelf(55, "BarrierWarn");
-- self:StartStatusBarTimer(60, "Next Shock Barrier", "Interface\\Icons\\Spell_Nature_LightningShield");
-- self:StartStatusBarTimer(50, "Phoenix", "Interface\\Icons\\Spell_FireResistanceTotem_01");
-- elseif msg == "Phase5" then
-- phase = 5
-- phase5 = true;
-- if self.Options.WarnPhase then
-- self:Announce(DBM_KAEL_WARN_PHASE5, 1);
-- end
-- self:EndStatusBarTimer("Next Shock Barrier");
-- self:UnScheduleSelf("BarrierWarn");
-- gravityLapse = false;
-- self:ScheduleSelf(53, "GravityWarn");
-- self:StartStatusBarTimer(58, "Next Gravity Lapse", "Interface\\Icons\\Spell_Magic_FeatherFall");
-- elseif msg == "CastFear" then
-- if self.Options.WarnFear then
-- self:Announce(DBM_KAEL_WARN_FEAR, 2);
-- end
-- self:UnScheduleSelf("FearSoon");
-- self:StartStatusBarTimer(31, "Next Fear", "Interface\\Icons\\Spell_Shadow_PsychicScream");
-- self:ScheduleSelf(28, "FearSoon");
-- self:StartStatusBarTimer(1.5, "Fear", "Interface\\Icons\\Spell_Shadow_PsychicScream");
-- elseif msg == "Fear" then
-- if not self:GetStatusBarTimerTimeLeft("Next Fear") then
-- self:StartStatusBarTimer(29.5, "Next Fear", "Interface\\Icons\\Spell_Shadow_PsychicScream");
-- end
-- if not self:GetSelfScheduleTimeLeft("FearSoon") then
-- self:ScheduleSelf(26.5, "FearSoon");
-- end
-- elseif msg == "Pyroblast" then
-- if self.Options.WarnPyro then
-- self:Announce(DBM_KAEL_WARN_PYRO, 2);
-- end
-- self:StartStatusBarTimer(4, "Pyroblast", "Interface\\Icons\\Spell_Fire_Fireball02");
-- elseif msg == "Barrier" then
-- if self.Options.WarnBarrier and (not phase5 or self.Options.WarnBarrier2) then
-- self:Announce(DBM_KAEL_WARN_BARRIER_NOW, 3);
-- end
-- if not phase5 then
-- self:ScheduleSelf(55, "BarrierWarn");
-- self:StartStatusBarTimer(60, "Next Shock Barrier", "Interface\\Icons\\Spell_Nature_LightningShield");
-- end
-- self:StartStatusBarTimer(10, "Shock Barrier", "Interface\\Icons\\Spell_Nature_LightningShield");
-- elseif msg == "BarrierDown" then
-- if self.Options.WarnBarrier and (not phase5 or self.Options.WarnBarrier2) then
-- self:Announce(DBM_KAEL_WARN_BARRIER_DOWN, 3);
-- end
-- elseif msg == "Phoenix" then
-- if self.Options.WarnPhoenix then
-- self:Announce(DBM_KAEL_WARN_PHOENIX, 2);
-- end
-- elseif msg:sub(0, 2) == "MC" then
-- msg = msg:sub(3);
-- if msg then
-- table.insert(MCTargets, msg);
-- if #MCTargets >= 3 then
-- self:UnScheduleSelf("AnnounceMCTargets");
-- self:OnEvent("AnnounceMCTargets");
-- end
-- self:UnScheduleSelf("AnnounceMCTargets");
-- self:ScheduleSelf(1, "AnnounceMCTargets");
-- local iconID = 0;
-- for i = 8, 1, -1 do
-- if not MCIcons[i] then
-- iconID = i;
-- MCIcons[i] = msg;
-- break;
-- end
-- end
-- if self.Options.IconMC and iconID ~= 0 and self.Options.Announce and DBM.Rank >= 1 then
-- self:SetIcon(msg, 25, iconID);
-- self:ScheduleSelf(25, "ClearIcon", iconID);
-- end
-- end
-- elseif msg:sub(0, 7) == "BrokeMC" then
-- msg = msg:sub(8);
-- if msg then
-- for i, v in pairs(MCIcons) do
-- if v == msg then
-- self:OnEvent("ClearIcon", i);
-- break;
-- end
-- end
-- end
-- elseif msg == "Egg" and not gravityLapse then
-- self:Announce(DBM_KAEL_WARN_REBIRTH, 3);
-- self:StartStatusBarTimer(15, "Rebirth", "Interface\\Icons\\INV_Relics_TotemofRebirth");
-- elseif msg == "GravityLapse" then
-- gravityLapse = true;
-- if self.Options.WarnGravity then
-- self:Announce(DBM_KAEL_WARN_GRAVITY_LAPSE, 3);
-- end
-- self:StartStatusBarTimer(32.5, "Gravity Lapse", "Interface\\Icons\\Spell_Magic_FeatherFall");
-- self:ScheduleSelf(32.5, "GravityLapseEnd");
-- self:ScheduleSelf(27.5, "GravityEndWarn");
-- end
-- end
-- function Kael:GetBossHP()
-- if phase <= 3 then
-- return DBM_GENERIC_PHASE_MSG:format(phase)
-- end
-- end
-- function Kael:UpdateHealth()
-- if weaponFrame then
-- for i = 1, 7 do
-- weaponFrame["Bar"..i]:SetValue(weaponHealth[i]);
-- if weaponHealth[i] > 50 then
-- weaponFrame["Bar"..i]:GetObject():SetStatusBarColor(0, 1, 0);
-- elseif weaponHealth[i] > 20 then
-- weaponFrame["Bar"..i]:GetObject():SetStatusBarColor(1, 0.6, 0);
-- else
-- weaponFrame["Bar"..i]:GetObject():SetStatusBarColor(1, 0, 0);
-- end
-- if weaponHealth[i] > 0 then
-- getglobal(weaponFrame["Bar"..i]:GetObject():GetName().."RightText"):SetText(weaponHealth[i].."%");
-- else
-- getglobal(weaponFrame["Bar"..i]:GetObject():GetName().."RightText"):SetText(DBM_DEAD:lower());
-- end
-- end
-- end
-- if addFrame then
-- for i = 1, 4 do
-- addFrame["Bar"..i]:SetValue(addHealth[i]);
-- if addHealth[i] > 50 then
-- addFrame["Bar"..i]:GetObject():SetStatusBarColor(0, 1, 0);
-- elseif addHealth[i] > 20 then
-- addFrame["Bar"..i]:GetObject():SetStatusBarColor(1, 0.6, 0);
-- else
-- addFrame["Bar"..i]:GetObject():SetStatusBarColor(1, 0, 0);
-- end
-- if addHealth[i] > 0 then
-- getglobal(addFrame["Bar"..i]:GetObject():GetName().."RightText"):SetText(addHealth[i].."%");
-- else
-- getglobal(addFrame["Bar"..i]:GetObject():GetName().."RightText"):SetText(DBM_DEAD:lower());
-- end
-- end
-- end
-- end
-- Kael.UpdateInterval = 0.2;
-- function Kael:OnUpdate(elapsed)
-- if phase2 then
-- local egg = false;
-- for i = 1, GetNumRaidMembers() do
-- if UnitName("raid"..i.."target") then
-- if DBM_KAEL_WEAPONS[UnitName("raid"..i.."target")] then
-- weaponHealth[DBM_KAEL_WEAPONS[UnitName("raid"..i.."target")]] = UnitHealth("raid"..i.."target");
-- elseif DBM_KAEL_ADVISORS[UnitName("raid"..i.."target")] then
-- addHealth[DBM_KAEL_ADVISORS[UnitName("raid"..i.."target")]] = UnitHealth("raid"..i.."target");
-- elseif UnitName("raid"..i.."target") == DBM_KAEL_EGG then
-- egg = UnitHealth("raid"..i.."target");
-- end
-- end
-- end
-- self:UpdateHealth();
-- local weaponsDown = true;
-- for i = 1, 7 do
-- if weaponHealth[i] > 0 then
-- weaponsDown = false;
-- end
-- end
-- if weaponsDown and weaponFrame then
-- weaponFrame:Hide();
-- end
-- local addsDown = true;
-- for i = 1, 4 do
-- if addHealth and addHealth[i] > 0 then
-- addsDown = false;
-- end
-- end
-- if addsDown and addFrame then
-- addFrame:Hide();
-- end
-- if egg and egg > 95 and (GetTime() - lastEgg) > 7.5 then
-- lastEgg = GetTime();
-- self:SendSync("Egg");
-- end
-- end
-- end