295 lines
9.6 KiB
Lua
295 lines
9.6 KiB
Lua
local mod = DBM:NewMod("Alar", "DBM-TheEye", 1)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
|
|
mod:SetCreatureID(19514)
|
|
mod:RegisterCombat("combat", 19551)
|
|
-- mod:RegisterKill("yell", L.NeverHappen) --There is no yell. Just abusing it so DBM doesnt end combat when al'ar dies in between Phases
|
|
mod:SetWipeTime(25)
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_AURA_APPLIED",
|
|
"SPELL_AURA_APPLIED_DOSE",
|
|
"SPELL_AURA_REFRESH",
|
|
"SPELL_AURA_REMOVED",
|
|
"SPELL_CAST_START",
|
|
"SPELL_CAST_SUCCESS",
|
|
"CHAT_MSG_RAID_BOSS_EMOTE",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
-- local warn
|
|
local warnEmber = mod:NewAnnounce("WarnEmber", 2, 2135208)
|
|
-- local warnDive = mod:NewAnnounce("WarnDive", 2, "Interface\\Icons\\Spell_Fire_Fireball02")
|
|
local warnDive = mod:NewSpecialWarningRun(2135164)
|
|
local warnAlarRebirth = mod:NewSpellAnnounce(2135200, 4) --Heroic 2135201, Ascended 10Man-2135202, 25Man-2135203
|
|
local warnFlameCascade = mod:NewSpellAnnounce(2135190, 3)
|
|
local specWarnFeather = mod:NewSpecialWarning("SpecWarnFeather")
|
|
local specWarnGround = mod:NewSpecialWarningYou(2135186)
|
|
local warnFlameBreath = mod:NewAnnounce(L.FlameBreath, 2, 2135155)
|
|
|
|
-- local timer
|
|
local timerNextPlatform = mod:NewTimer(30, "NextPlatform", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp") -- timer might be slightly off need to test in action
|
|
local berserkTimer = mod:NewTimer(720, "Berserk", 26662)
|
|
local timerAlarUp = mod:NewTimer(30, "AlarUp", "Interface\\Icons\\Spell_Fire_Fireball02")
|
|
local timerAlarDive = mod:NewTimer(14, "AlarDive", "Interface\\Icons\\Spell_Fire_Fireball02")
|
|
local timerEmberSpawn = mod:NewTimer(12, "TimerEmberSpawn", 2135208) --heroic 2135209 , Ascended 10Man-2135210, 25Man-2135211
|
|
local timerNextBreath = mod:NewNextTimer(10, 2135154) --Heroic 2135155 , Ascended 10Man-2135156, 25Man-2135157
|
|
local timerNextAlarRebirth = mod:NewNextTimer(10, 2135200)
|
|
local timerNextFlameCascade = mod:NewNextTimer(60, 2135190)
|
|
local timerFlameCascade = mod:NewBuffActiveTimer(17, 2135190)
|
|
|
|
--Ascended mechanics:
|
|
local yellLivingBomb = mod:NewFadesYell(2135176)
|
|
mod:AddBoolOption(L.LivingBombYellOpt, true)
|
|
|
|
-- local variables
|
|
|
|
-- local options
|
|
mod.vb.phase = 1
|
|
|
|
function mod:PlatformSwap()
|
|
self:UnscheduleMethod("PlatformSwap")
|
|
timerEmberSpawn:Start()
|
|
warnEmber:Schedule(12)
|
|
timerNextPlatform:Start(32)
|
|
self:ScheduleMethod(32, "PlatformSwap")
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
berserkTimer:Start(-delay)
|
|
timerNextPlatform:Start(-delay)
|
|
self:ScheduleMethod(32-delay, "PlatformSwap")
|
|
timerNextBreath:Start(-delay)
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if args:IsSpellID(2135190) then
|
|
timerFlameCascade:Start()
|
|
timerEmberSpawn:Cancel()
|
|
warnFlameCascade:Show()
|
|
elseif args:IsSpellID(2135186, 2135187, 2135188, 2135189) and args:IsPlayer() then
|
|
specWarnGround:Show()
|
|
elseif args:IsSpellID(2135174) and args:IsPlayer() then
|
|
specWarnFeather:Schedule(45)
|
|
elseif args:IsSpellID(2135154, 2135155, 2135156, 2135157) then --Flame Breath debuffs on tanks
|
|
warnFlameBreath:Show(args.spellName, args.destName, args.amount or 1)
|
|
elseif args:IsSpellID(2135176, 2135177, 2135178, 2135179) and self.Options.LivingBombYellOpt and args:IsPlayer() then
|
|
SendChatMessage("Living Bomb on "..args.destName.."!", "YELL")
|
|
yellLivingBomb:Countdown(12)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED_DOSE(args)
|
|
if args:IsSpellID(2135154, 2135155, 2135156, 2135157) then
|
|
warnFlameBreath:Show(args.spellName, args.destName, args.amount or 1)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REFRESH(args)
|
|
if args:IsSpellID(2135174) and args:IsPlayer() then
|
|
self:Unschedule(specWarnFeather)
|
|
specWarnFeather:Schedule(45)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
if args:IsSpellID(2135190) then
|
|
timerEmberSpawn:Start(11)
|
|
timerNextFlameCascade:Start()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
if args:IsSpellID(2135154, 2135155, 2135156, 2135157) and self.vb.phase ~= 3 then
|
|
timerNextBreath:Start()
|
|
elseif args:IsSpellID(2135196, 2135197, 2135198, 2135199) then
|
|
if self.vb.phase == 1 then
|
|
self.vb.phase = 2
|
|
timerEmberSpawn:Stop()
|
|
timerAlarUp:Start(40)
|
|
timerNextBreath:Stop()
|
|
timerNextPlatform:Stop()
|
|
self:UnscheduleMethod("PlatformSwap")
|
|
elseif self.vb.phase == 2 then
|
|
self.vb.phase = 3
|
|
timerNextBreath:Stop()
|
|
timerEmberSpawn:Stop()
|
|
timerAlarUp:Stop()
|
|
end
|
|
elseif args:IsSpellID(2135190) then
|
|
timerEmberSpawn:Start()
|
|
timerNextFlameCascade:Start()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
if args:IsSpellID(2135200, 2135201, 2135202, 2135203) then
|
|
warnAlarRebirth:Show()
|
|
timerNextBreath:Start(2)
|
|
if self.vb.phase == 2 then
|
|
timerAlarUp:Start(33)
|
|
timerNextBreath:Start(18)
|
|
end
|
|
elseif args:IsSpellID(2135208, 2135209, 2135210, 2135211) then
|
|
warnEmber:Show()
|
|
self:SetIcon(args.sourceName, 5, 30)
|
|
if self.vb.phase == 1 then
|
|
timerEmberSpawn:Start(45) -- 45 sec unless boss goes into the air
|
|
elseif self.vb.phase == 3 then
|
|
timerEmberSpawn:Start(12)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
|
|
if msg == L.EmoteAlarUp or msg:find(L.EmoteAlarUp) then
|
|
timerNextBreath:Stop()
|
|
timerAlarDive:Start()
|
|
timerEmberSpawn:Start(24)
|
|
warnDive:Schedule(14)
|
|
timerAlarUp:Start()
|
|
elseif msg == L.EmotePhase3 or msg:find(L.EmotePhase3) then
|
|
timerAlarUp:Stop()
|
|
timerEmberSpawn:Start(22)
|
|
timerNextFlameCascade:Start()
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 19514 then
|
|
if self.vb.phase == 1 then
|
|
self.vb.phase = 2
|
|
mod:IsInCombat()
|
|
mod.inCombat = true
|
|
timerNextAlarRebirth:Start()
|
|
elseif self.vb.phase == 2 then
|
|
self.vb.phase = 3
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- Old Alar code
|
|
|
|
|
|
-- Alar:RegisterEvents(
|
|
-- "SPELL_AURA_APPLIED"
|
|
-- );
|
|
|
|
|
|
-- Alar:AddOption("WarnArmor", true, DBM_ALAR_OPTION_MELTARMOR);
|
|
-- Alar:AddOption("Meteor", true, DBM_ALAR_OPTION_METEOR);
|
|
|
|
-- Alar:AddBarOption("Enrage")
|
|
-- Alar:AddBarOption("Meteor")
|
|
-- Alar:AddBarOption("Melt Armor: (.*)")
|
|
|
|
-- function Alar:OnCombatStart(delay)
|
|
-- self:ScheduleSelf(10, "CheckForAlar"); -- to prevent bugs if you are using an unsupported client language...
|
|
-- end
|
|
|
|
-- function Alar:OnEvent(event, arg1)
|
|
-- if event == "CheckForAlar" then
|
|
-- for i = 1, GetNumRaidMembers() do
|
|
-- if UnitName("raid"..i.."target") == DBM_ALAR_NAME and UnitAffectingCombat("raid"..i.."target") then
|
|
-- warnPhase = true;
|
|
-- break;
|
|
-- end
|
|
-- end
|
|
-- if not warnPhase then
|
|
-- langError = true;
|
|
-- end
|
|
|
|
-- elseif event == "SPELL_AURA_APPLIED" then
|
|
-- if arg1.spellId == 35383 and arg1.destName == UnitName("player") then
|
|
-- self:AddSpecialWarning(DBM_ALAR_WARN_FIRE);
|
|
-- elseif arg1.spellId == 35410 then
|
|
-- self:SendSync("MeltArmor"..tostring(arg1.destName));
|
|
-- end
|
|
-- elseif event == "MeteorSoon" then
|
|
-- if self.Options.Meteor then
|
|
-- self:Announce(DBM_ALAR_WARN_METEOR_SOON, 1);
|
|
-- end
|
|
|
|
-- elseif event == "EnrageWarn" and type(arg1) == "number" then
|
|
-- if arg1 >= 60 then
|
|
-- self:Announce(string.format(DBM_ALAR_WARN_ENRAGE, (arg1/60), DBM_MIN), 1);
|
|
-- else
|
|
-- self:Announce(string.format(DBM_ALAR_WARN_ENRAGE, arg1, DBM_SEC), 3);
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
-- function Alar:OnSync(msg)
|
|
-- if msg == "Rebirth" and not self:IsWipe() and self.InCombat then
|
|
-- self:Announce(DBM_ALAR_WARN_REBIRTH, 2);
|
|
-- self:EndStatusBarTimer("Next Platform");
|
|
-- self:ScheduleSelf(47, "MeteorSoon");
|
|
-- self:StartStatusBarTimer(52, "Meteor", "Interface\\Icons\\Spell_Fire_Fireball02");
|
|
-- self:StartStatusBarTimer(600, "Enrage", "Interface\\Icons\\Spell_Shadow_UnholyFrenzy");
|
|
-- self:ScheduleSelf(300, "EnrageWarn", 300);
|
|
-- self:ScheduleSelf(480, "EnrageWarn", 120);
|
|
-- self:ScheduleSelf(540, "EnrageWarn", 60);
|
|
-- self:ScheduleSelf(570, "EnrageWarn", 30);
|
|
-- self:ScheduleSelf(590, "EnrageWarn", 10);
|
|
|
|
-- elseif string.sub(msg, 0, 9) == "MeltArmor" then
|
|
-- local target = string.sub(msg, 10);
|
|
-- if target then
|
|
-- if self:GetStatusBarTimerTimeLeft("Melt Armor: "..target) then
|
|
-- self:UpdateStatusBarTimer("Melt Armor: "..target, 0, 60);
|
|
-- else
|
|
-- self:StartStatusBarTimer(60, "Melt Armor: "..target, "Interface\\Icons\\Spell_Fire_Immolation");
|
|
-- end
|
|
-- if self.Options.WarnArmor then
|
|
-- self:Announce(DBM_ALAR_WARN_MELTARMOR:format(target), 1);
|
|
-- end
|
|
-- end
|
|
-- elseif msg == "AddInc" and (GetTime() - lastAdd) > 15 and self.InCombat then
|
|
-- lastAdd = GetTime();
|
|
-- flying = true;
|
|
-- self:EndStatusBarTimer("Next Platform");
|
|
-- self:Announce(DBM_ALAR_WARN_ADD, 2);
|
|
-- elseif msg == "Meteor" and (GetTime() - lastMeteor) > 30 and self.InCombat then
|
|
-- lastMeteor = GetTime();
|
|
-- if self.Options.Meteor then
|
|
-- self:Announce(DBM_ALAR_WARN_METEOR, 3);
|
|
-- end
|
|
-- self:ScheduleSelf(49, "MeteorSoon");
|
|
-- self:StartStatusBarTimer(54.5, "Meteor", "Interface\\Icons\\Spell_Fire_Fireball02");
|
|
-- elseif msg == "NextPlatform" and self.InCombat then
|
|
-- end
|
|
-- end
|
|
|
|
|
|
-- function Alar:OnUpdate(elapsed)
|
|
-- if self.InCombat and not langError and not self:IsWipe() then
|
|
-- local foundIt;
|
|
-- local target;
|
|
-- for i = 1, GetNumRaidMembers() do
|
|
-- if UnitName("raid"..i.."target") == DBM_ALAR_NAME then
|
|
-- foundIt = true;
|
|
-- target = UnitName("raid"..i.."targettarget");
|
|
-- if not target and UnitCastingInfo("raid"..i.."target") == DBM_ALAR_FLAME_BUFFET then
|
|
-- target = "Dummy";
|
|
-- end
|
|
-- break;
|
|
-- end
|
|
-- end
|
|
|
|
-- if not foundIt and warnPhase then
|
|
-- self:SendSync("Rebirth");
|
|
-- end
|
|
|
|
-- if foundIt and not target and not phase2 then
|
|
-- self:SendSync("AddInc");
|
|
-- elseif not target and type(phase2) == "number" and (GetTime() - phase2) > 25 then
|
|
-- self:SendSync("Meteor");
|
|
-- elseif target and flying then
|
|
-- self:SendSync("NextPlatform");
|
|
-- end
|
|
-- end
|
|
-- end
|