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.
498 lines
24 KiB
498 lines
24 KiB
local mod = DBM:NewMod(2025, "DBM-Raids-Legion", 1, 946)
|
|
local L = mod:GetLocalizedStrings()
|
|
local DBM_COMMON_L = DBM_COMMON_L
|
|
|
|
mod:SetRevision("20240426185020")
|
|
mod:SetCreatureID(124445)
|
|
mod:SetEncounterID(2075)
|
|
--mod:SetBossHPInfoToHighest()
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5, 6)
|
|
mod:SetHotfixNoticeRev(16960)
|
|
--mod.respawnTime = 29
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 249121 250701",
|
|
"SPELL_CAST_SUCCESS 246753 254769 250048",
|
|
"SPELL_AURA_APPLIED 250074 250555 249016 248332 250073 250693 250691 250140",
|
|
"SPELL_AURA_APPLIED_DOSE 250140",
|
|
"SPELL_AURA_REMOVED 250074 250555 249016 248332 250693 250691",
|
|
-- "SPELL_DAMAGE 248329",
|
|
-- "SPELL_MISSED 248329",
|
|
"UNIT_DIED",
|
|
"CHAT_MSG_RAID_BOSS_EMOTE",
|
|
"UNIT_SPELLCAST_CHANNEL_STOP boss1 boss2 boss3 boss4 boss5",
|
|
"UNIT_SPELLCAST_STOP boss1 boss2 boss3 boss4 boss5"
|
|
)
|
|
|
|
--TODO, verify Meteor Storm in LFR
|
|
--[[
|
|
(ability.id = 249121 or ability.id = 250048) and type = "begincast"
|
|
or (ability.id = 246753 or ability.id = 254769 or ability.id = 250048) and type = "cast"
|
|
or (ability.id = 248332) and type = "applydebuff"
|
|
or (ability.id = 250073) and type = "applybuff"
|
|
or target.name = "Volant Kerapteron"
|
|
or target.id = 124445 and ability.id = 250030
|
|
|
|
4 Life Force LFR Logs, and slower add spawn rates:
|
|
https://www.warcraftlogs.com/reports/bWwmdJ8gCkcP1BYF#fight=1&type=summary&view=events&pins=2%24Off%24%23244F4B%24expression%24(ability.id%20%3D%20249121%20or%20ability.id%20%3D%20250048)%20and%20type%20%3D%20%22begincast%22%20%20or%20(ability.id%20%3D%20246753%20or%20ability.id%20%3D%20254769)%20and%20type%20%3D%20%22cast%22%20%20or%20(ability.id%20%3D%20248332)%20and%20type%20%3D%20%22applydebuff%22%20%20or%20(ability.id%20%3D%20250073)%20and%20type%20%3D%20%22applybuff%22%20%20or%20target.name%20%3D%20%22Volant%20Kerapteron%22
|
|
https://www.warcraftlogs.com/reports/RcjbYJQHWNCt41Fm#fight=24&type=summary&pins=2%24Off%24%23244F4B%24expression%24(ability.id%20%3D%20249121%20or%20ability.id%20%3D%20250048)%20and%20type%20%3D%20%22begincast%22%20%20or%20(ability.id%20%3D%20246753%20or%20ability.id%20%3D%20254769)%20and%20type%20%3D%20%22cast%22%20%20or%20(ability.id%20%3D%20248332)%20and%20type%20%3D%20%22applydebuff%22%20%20or%20(ability.id%20%3D%20250073)%20and%20type%20%3D%20%22applybuff%22%20%20or%20target.name%20%3D%20%22Volant%20Kerapteron%22&view=events
|
|
3 Life Force LFR Logs, with faster add spawn rates:
|
|
https://www.warcraftlogs.com/reports/9xkDgRXYLtzb1Bnq#fight=2&type=summary&view=events&pins=2%24Off%24%23244F4B%24expression%24(ability.id%20%3D%20249121%20or%20ability.id%20%3D%20250048)%20and%20type%20%3D%20%22begincast%22%20%20or%20(ability.id%20%3D%20246753%20or%20ability.id%20%3D%20254769)%20and%20type%20%3D%20%22cast%22%20%20or%20(ability.id%20%3D%20248332)%20and%20type%20%3D%20%22applydebuff%22%20%20or%20(ability.id%20%3D%20250073)%20and%20type%20%3D%20%22applybuff%22%20%20or%20target.name%20%3D%20%22Volant%20Kerapteron%22
|
|
https://www.warcraftlogs.com/reports/V1dPgAZtFLwq2HDz#fight=8&type=summary&view=events&pins=2%24Off%24%23244F4B%24expression%24(ability.id%20%3D%20249121%20or%20ability.id%20%3D%20250048)%20and%20type%20%3D%20%22begincast%22%20%20or%20(ability.id%20%3D%20246753%20or%20ability.id%20%3D%20254769)%20and%20type%20%3D%20%22cast%22%20%20or%20(ability.id%20%3D%20248332)%20and%20type%20%3D%20%22applydebuff%22%20%20or%20(ability.id%20%3D%20250073)%20and%20type%20%3D%20%22applybuff%22%20%20or%20target.name%20%3D%20%22Volant%20Kerapteron%22
|
|
--]]
|
|
--General/The Paraxis
|
|
mod:AddTimerLine(GENERAL)
|
|
local warnRainofFel = mod:NewTargetCountAnnounce(248332, 2)
|
|
local warnWarpIn = mod:NewTargetAnnounce(246888, 3, nil, nil, nil, nil, nil, 2, true)
|
|
local warnLifeForce = mod:NewCountAnnounce(250048, 1)
|
|
|
|
local specWarnSpearofDoom = mod:NewSpecialWarningDodge(248789, nil, nil, nil, 2, 2)
|
|
--local yellSpearofDoom = mod:NewYell(248789)
|
|
local specWarnRainofFel = mod:NewSpecialWarningMoveAway(248332, nil, nil, 2, 1, 2)
|
|
local yellRainofFel = mod:NewYell(248332)
|
|
local yellRainofFelFades = mod:NewShortFadesYell(248332)
|
|
|
|
local timerSpearofDoomCD = mod:NewCDCountTimer(55, 248789, nil, nil, nil, 3)--55-69
|
|
local timerRainofFelCD = mod:NewCDCountTimer(61, 248332, nil, nil, nil, 3)
|
|
|
|
mod:AddInfoFrameOption(nil, true)
|
|
mod:AddRangeFrameOption("8/10")
|
|
--Adds
|
|
mod:AddTimerLine(DBM_COMMON_L.ADDS)
|
|
local specWarnSwing = mod:NewSpecialWarningDodge(250701, "MeleeDps", nil, nil, 1, 2)
|
|
--local yellBurstingDreadflame = mod:NewPosYell(238430, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)
|
|
--local specWarnMalignantAnguish = mod:NewSpecialWarningInterrupt(236597, "HasInterrupt")
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(238028, nil, nil, nil, 1, 2)
|
|
|
|
local timerDestructorCD = mod:NewTimer(90, "timerDestructor", 254769, nil, nil, 1, DBM_COMMON_L.TANK_ICON)
|
|
local timerObfuscatorCD = mod:NewTimer(90, "timerObfuscator", 246753, nil, nil, 1, DBM_COMMON_L.DAMAGE_ICON)
|
|
local timerPurifierCD = mod:NewTimer(90, "timerPurifier", 250074, nil, nil, 1, DBM_COMMON_L.TANK_ICON)
|
|
local timerBatsCD = mod:NewTimer(90, "timerBats", 242080, nil, nil, 1, DBM_COMMON_L.DAMAGE_ICON)
|
|
|
|
mod:AddNamePlateOption("NPAuraOnPurification", 250074)
|
|
--Mythic
|
|
mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12)
|
|
local specWarnFinalDoom = mod:NewSpecialWarningCount(249121, "-Tank", nil, nil, 1, 2)
|
|
local specWarnArcaneBuildup = mod:NewSpecialWarningMoveAway(250693, nil, nil, nil, 1, 2)
|
|
local yellArcaneBuildup = mod:NewYell(250693)
|
|
local yellArcaneBuildupFades = mod:NewShortFadesYell(250693)
|
|
local specWarnBurningEmbers = mod:NewSpecialWarningMoveAway(250691, nil, nil, nil, 1, 2)
|
|
local yellBurningEmbers = mod:NewYell(250691)
|
|
local yellBurningEmbersFades = mod:NewShortFadesYell(250691)
|
|
local specWarnFoulSteps = mod:NewSpecialWarningStack(250140, nil, 12, nil, nil, 1, 6)--Fine tune
|
|
|
|
local timerFinalDoom = mod:NewCastTimer(50, 249121, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 2, 5)
|
|
local timerFinalDoomCD = mod:NewCDCountTimer(90, 249121, nil, nil, nil, 4, nil, DBM_COMMON_L.HEROIC_ICON, nil, 1, 5)
|
|
|
|
mod:AddSetIconOption("SetIconOnFeedbackTargeted2", 249016, false)
|
|
mod:AddNamePlateOption("NPAuraOnFelShielding", 250555)
|
|
|
|
|
|
mod.vb.rainOfFelCount = 0
|
|
mod.vb.lifeForceCast = 0
|
|
mod.vb.lifeRequired = 5
|
|
mod.vb.spearCast = 0
|
|
mod.vb.finalDoomCast = 0
|
|
mod.vb.destructors = 0
|
|
mod.vb.obfuscators = 0
|
|
mod.vb.purifiers = 0
|
|
--Timers combine multi sets,counts above do not combine cause for info frame
|
|
mod.vb.destructorCast = 0
|
|
mod.vb.obfuscatorCast = 0
|
|
mod.vb.purifierCast = 0
|
|
mod.vb.batCast = 0
|
|
mod.vb.targetedIcon = 1
|
|
local normalRainOfFelTimers = {}--PTR, recheck
|
|
local heroicRainOfFelTimers = {9.3, 43, 10, 43, 20, 19, 20, 29.2, 45, 25, 99}--Live, Dec 26
|
|
local mythicRainOfFelTimers = {6, 23.1, 24.1, 46, 25, 49.3, 15, 45, 24, 49.2, 24.1, 49.2, 50}--Live, Dec 14
|
|
--local mythicSpearofDoomTimers = {}
|
|
local heroicSpearofDoomTimers = {35, 59.2, 64.3, 40, 84.7, 34.1, 65.2}--Live, Nov 29
|
|
local finalDoomTimers = {59.3, 120, 94, 104.6, 99.6}--Live, Dec 5
|
|
local lfrDestructors = {21.5, 51.9, 50.3, 64.3, 107.2, 58.2, 44.1, 46.2, 44.2}--4 Life Force LFR Version
|
|
local lfrDestructors2 = {21.2, 43.8, 39.0, 51.1, 37.0, 53.0, 43.6, 45.2, 43.2}--3 Life force LFR version
|
|
local normalDestructors = {17, 46.2, 32, 52.4, 93.7, 40.9, 50.2, 55.4, 49.2}--Live, Dec 01. Old 17, 39.4, 28, 44.2, 92.4, 41.3, 50, 53.4, 48.1
|
|
local heroicDestructors = {15.7, 35.3, 40.6, 104.6, 134.7, 99.6}
|
|
local mythicDestructors = {27, 18, 87.4, 288.4, 20, 79}--Changed Dec 12th
|
|
local normalObfuscators = {193}--Live, Dec 01
|
|
local heroicObfuscators = {80.6, 148.5, 94.7, 99.9}
|
|
local mythicObfuscators = {46, 243, 43.8, 90.8}
|
|
local heroicPurifiers = {125, 66.1, 30.6}
|
|
local mythicPurifiers = {65.7, 82.6, 66.9, 145.7}
|
|
local heroicBats = {170, 125, 105, 105}--170, 295, 405, 510 (probably way off for 3rd and 4th because the heroic logs with long pulls are shit showa of terrible and unware dps that don't hit bats until they are in middle of path)
|
|
local mythicBats = {195, 79.9, 100, 95}--195, 275, 375, 470
|
|
local warnedAdds = {}
|
|
local addCountToLocationMythic = {
|
|
["Dest"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE},
|
|
["Obfu"] = {DBM_COMMON_L.BOTTOM, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM},
|
|
["Pur"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP}
|
|
}
|
|
local addCountToLocationHeroic = {
|
|
["Dest"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.MIDDLE.."/"..DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE.."/"..DBM_COMMON_L.TOP},
|
|
["Obfu"] = {DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.BOTTOM},
|
|
["Pur"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.MIDDLE}
|
|
}
|
|
local addCountToLocationNormal = {
|
|
["Dest"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE},
|
|
["Obfu"] = {DBM_COMMON_L.MIDDLE}
|
|
}
|
|
local addCountToLocationLFR = {
|
|
["Dest"] = {DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM, DBM_COMMON_L.TOP, DBM_COMMON_L.BOTTOM}
|
|
}
|
|
|
|
local lifeForceName = DBM:GetSpellName(250048)
|
|
local updateInfoFrame
|
|
do
|
|
local lines = {}
|
|
local sortedLines = {}
|
|
local function addLine(key, value)
|
|
-- sort by insertion order
|
|
lines[key] = value
|
|
sortedLines[#sortedLines + 1] = key
|
|
end
|
|
updateInfoFrame = function()
|
|
table.wipe(lines)
|
|
table.wipe(sortedLines)
|
|
--Boss Powers first
|
|
local cid = mod:GetUnitCreatureId("boss1") or 0
|
|
if cid ~= 124445 then--Filter Paraxus
|
|
local currentPower = UnitPower("boss1", 10) or 0
|
|
local currentHealth = (UnitHealth("boss1")/UnitHealthMax("boss1") * 100) or 100
|
|
addLine(L.EonarHealth, math.floor(currentHealth).."%")
|
|
addLine(L.EonarPower, currentPower)
|
|
end
|
|
local cid2 = mod:GetUnitCreatureId("boss2") or 0
|
|
if cid2 ~= 124445 then--Filter Paraxus
|
|
local currentPower = UnitPower("boss2", 10) or 0
|
|
local currentHealth = (UnitHealth("boss2")/UnitHealthMax("boss2") * 100) or 100
|
|
addLine(L.EonarHealth, math.floor(currentHealth).."%")
|
|
addLine(L.EonarPower, currentPower.."%")
|
|
end
|
|
addLine(lifeForceName, mod.vb.lifeForceCast.."/"..mod.vb.lifeRequired)
|
|
if mod:IsLFR() then
|
|
local nextLocation = addCountToLocationLFR["Dest"][mod.vb.destructorCast+1]
|
|
if nextLocation then
|
|
addLine(L.NextLoc, nextLocation)
|
|
end
|
|
end
|
|
if mod.vb.obfuscators > 0 then
|
|
addLine(L.Obfuscators, mod.vb.obfuscators)
|
|
end
|
|
if mod.vb.destructors > 0 then
|
|
addLine(L.Destructors, mod.vb.destructors)
|
|
end
|
|
if mod.vb.purifiers > 0 then
|
|
addLine(L.Purifiers, mod.vb.purifiers)
|
|
end
|
|
return lines, sortedLines
|
|
end
|
|
end
|
|
|
|
--This is backup for fixing timers if destructors die before they ever cast high alert, such as massively overgearing encounter and able to burn it down in less than 10 seconds
|
|
local function checkForDeadDestructor(self, forceStart)
|
|
self:Unschedule(checkForDeadDestructor)
|
|
self.vb.destructorCast = self.vb.destructorCast + 1
|
|
local timer = self:IsMythic() and mythicDestructors[self.vb.destructorCast+1] or self:IsHeroic() and heroicDestructors[self.vb.destructorCast+1] or self:IsNormal() and normalDestructors[self.vb.destructorCast+1] or self:IsLFR() and lfrDestructors2[self.vb.destructorCast+1]
|
|
if forceStart then
|
|
DBM:Debug("checkForDeadDestructor ran with forceStart arg for "..self.vb.destructorCast, 2)
|
|
local text = self:IsHeroic() and addCountToLocationHeroic["Dest"][self.vb.destructorCast+1] or self:IsNormal() and addCountToLocationNormal["Dest"][self.vb.destructorCast+1] or self:IsMythic() and addCountToLocationMythic["Dest"][self.vb.destructorCast+1] or self:IsLFR() and addCountToLocationLFR["Dest"][self.vb.destructorCast+1] or self.vb.destructorCast+1
|
|
timerDestructorCD:Start(forceStart, text)--Minus 10 for being 10 seconds after high alert, and minus 10 for wanting when it spawns not high alert cast
|
|
self:Schedule(forceStart+20, checkForDeadDestructor, self)--10 seconds after high alert
|
|
elseif timer then
|
|
local text = self:IsHeroic() and addCountToLocationHeroic["Dest"][self.vb.destructorCast+1] or self:IsNormal() and addCountToLocationNormal["Dest"][self.vb.destructorCast+1] or self:IsMythic() and addCountToLocationMythic["Dest"][self.vb.destructorCast+1] or self:IsLFR() and addCountToLocationLFR["Dest"][self.vb.destructorCast+1] or self.vb.destructorCast+1
|
|
timerDestructorCD:Start(timer-20, text)--Minus 10 for being 10 seconds after high alert, and minus 10 for wanting when it spawns not high alert cast
|
|
self:Schedule(timer, checkForDeadDestructor, self)--10 seconds after high alert
|
|
end
|
|
DBM:Debug("checkForDeadDestructor ran, which means a destructor died before casting high alert, or DBM has a timer error near: "..self.vb.destructorCast, 2)
|
|
end
|
|
|
|
local function startBatsStuff(self)
|
|
self.vb.batCast = self.vb.batCast + 1
|
|
warnWarpIn:Show(L.Bats)
|
|
warnWarpIn:Play("killmob")
|
|
local timer = self:IsMythic() and mythicBats[self.vb.batCast+1] or self:IsHeroic() and heroicBats[self.vb.batCast+1]
|
|
if timer then
|
|
timerBatsCD:Start(timer, self.vb.batCast+1)
|
|
self:Schedule(timer, startBatsStuff, self)
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.rainOfFelCount = 0
|
|
self.vb.destructors = 0
|
|
self.vb.obfuscators = 0
|
|
self.vb.purifiers = 0
|
|
self.vb.destructorCast = 0
|
|
self.vb.obfuscatorCast = 0
|
|
self.vb.purifierCast = 0
|
|
self.vb.batCast = 0
|
|
self.vb.lifeForceCast = 0
|
|
self.vb.spearCast = 0
|
|
self.vb.finalDoomCast = 0
|
|
self.vb.targetedIcon = 1
|
|
if not self:IsLFR() then
|
|
self.vb.lifeRequired = 4
|
|
if self:IsMythic() then
|
|
timerRainofFelCD:Start(6-delay, 1)
|
|
--timerSpearofDoomCD:Start(35-delay, 1)
|
|
timerDestructorCD:Start(17, DBM_COMMON_L.MIDDLE)
|
|
self:Schedule(30, checkForDeadDestructor, self, 5)
|
|
timerObfuscatorCD:Start(46, DBM_COMMON_L.BOTTOM)
|
|
timerPurifierCD:Start(65.7, DBM_COMMON_L.MIDDLE)
|
|
timerFinalDoomCD:Start(59.3-delay, 1)
|
|
timerBatsCD:Start(195, 1)
|
|
self:Schedule(195, startBatsStuff, self)
|
|
elseif self:IsHeroic() then
|
|
timerRainofFelCD:Start(9.3-delay, 1)
|
|
timerDestructorCD:Start(7, DBM_COMMON_L.MIDDLE)
|
|
self:Schedule(27, checkForDeadDestructor, self)
|
|
timerSpearofDoomCD:Start(34-delay, 1)
|
|
timerObfuscatorCD:Start(80.6, DBM_COMMON_L.TOP)
|
|
timerPurifierCD:Start(125, DBM_COMMON_L.MIDDLE)
|
|
timerBatsCD:Start(170, 1)
|
|
self:Schedule(170, startBatsStuff, self)
|
|
else--Normal
|
|
timerDestructorCD:Start(7, DBM_COMMON_L.MIDDLE)
|
|
self:Schedule(27, checkForDeadDestructor, self)
|
|
timerObfuscatorCD:Start(174, 1)
|
|
--timerRainofFelCD:Start(30-delay, 1)
|
|
end
|
|
else
|
|
self.vb.lifeRequired = 3
|
|
timerDestructorCD:Start(12, DBM_COMMON_L.MIDDLE)
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Show(7, "function", updateInfoFrame, false, false)
|
|
end
|
|
if self.Options.NPAuraOnPurification or self.Options.NPAuraOnFelShielding then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
table.wipe(warnedAdds)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
if self.Options.NPAuraOnPurification or self.Options.NPAuraOnFelShielding then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 249121 then
|
|
self.vb.finalDoomCast = self.vb.finalDoomCast + 1
|
|
specWarnFinalDoom:Show(self.vb.finalDoomCast)
|
|
specWarnFinalDoom:Play("specialsoon")
|
|
timerFinalDoom:Start()
|
|
local timer = finalDoomTimers[self.vb.finalDoomCast+1]
|
|
if timer then
|
|
timerFinalDoomCD:Start(timer, self.vb.finalDoomCast+1)
|
|
end
|
|
elseif spellId == 250701 and self:CheckInterruptFilter(args.sourceGUID, true) then
|
|
specWarnSwing:Show()
|
|
specWarnSwing:Play("watchstep")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 246753 and not warnedAdds[args.sourceGUID] then--Cloak
|
|
warnedAdds[args.sourceGUID] = true
|
|
self.vb.obfuscators = self.vb.obfuscators + 1
|
|
if self:AntiSpam(5, args.sourceName) then
|
|
warnWarpIn:Show(L.Obfuscators)
|
|
warnWarpIn:Play("bigmob")
|
|
self.vb.obfuscatorCast = self.vb.obfuscatorCast + 1
|
|
local timer = self:IsMythic() and mythicObfuscators[self.vb.obfuscatorCast+1] or self:IsHeroic() and heroicObfuscators[self.vb.obfuscatorCast+1] or self:IsNormal() and normalObfuscators[self.vb.obfuscatorCast+1]
|
|
if timer then
|
|
local text = self:IsHeroic() and addCountToLocationHeroic["Obfu"][self.vb.obfuscatorCast+1] or self:IsNormal() and addCountToLocationNormal["Obfu"][self.vb.obfuscatorCast+1] or self:IsMythic() and addCountToLocationMythic["Obfu"][self.vb.obfuscatorCast+1] or self.vb.obfuscatorCast+1
|
|
timerObfuscatorCD:Start(timer, text)
|
|
end
|
|
end
|
|
elseif spellId == 254769 and args:GetSrcCreatureID() == 123760 and not warnedAdds[args.sourceGUID] then--High Alert
|
|
warnedAdds[args.sourceGUID] = true
|
|
self:Unschedule(checkForDeadDestructor)
|
|
self.vb.destructors = self.vb.destructors + 1
|
|
if self:AntiSpam(5, args.sourceName) then
|
|
warnWarpIn:Show(L.Destructors)
|
|
warnWarpIn:Play("bigmob")
|
|
self.vb.destructorCast = self.vb.destructorCast + 1
|
|
local timer = self:IsMythic() and mythicDestructors[self.vb.destructorCast+1] or self:IsHeroic() and heroicDestructors[self.vb.destructorCast+1] or self:IsNormal() and normalDestructors[self.vb.destructorCast+1] or self:IsLFR() and lfrDestructors2[self.vb.destructorCast+1]
|
|
if timer then
|
|
local text = self:IsHeroic() and addCountToLocationHeroic["Dest"][self.vb.destructorCast+1] or self:IsNormal() and addCountToLocationNormal["Dest"][self.vb.destructorCast+1] or self:IsMythic() and addCountToLocationMythic["Dest"][self.vb.destructorCast+1] or self:IsLFR() and addCountToLocationLFR["Dest"][self.vb.destructorCast+1] or self.vb.destructorCast+1
|
|
if not self:IsLFR() then--This work around doesn't work in LFR because if dps is slow LFR massively slows down spawns to help out
|
|
self:Schedule(timer+10, checkForDeadDestructor, self)
|
|
else
|
|
timerDestructorCD:Stop()--Because of way LFR works, we need to do timer cleanup if they come earlier than expected
|
|
end
|
|
timerDestructorCD:Start(timer-10, text)--High alert fires about 9 seconds after spawn so using it as a trigger has a -10 adjustment
|
|
end
|
|
end
|
|
elseif spellId == 250048 then
|
|
self.vb.lifeForceCast = self.vb.lifeForceCast + 1
|
|
warnLifeForce:Show(self.vb.lifeForceCast)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 250073 and not warnedAdds[args.sourceGUID] then--Purification (buff on purifier)
|
|
warnedAdds[args.sourceGUID] = true
|
|
self.vb.purifiers = self.vb.purifiers + 1
|
|
if self:AntiSpam(5, 2) then
|
|
warnWarpIn:Show(L.Purifiers)
|
|
warnWarpIn:Play("bigmob")
|
|
self.vb.purifierCast = self.vb.purifierCast + 1
|
|
local timer = self:IsMythic() and mythicPurifiers[self.vb.purifierCast+1] or self:IsHeroic() and heroicPurifiers[self.vb.purifierCast+1]
|
|
if timer then
|
|
local text = self:IsHeroic() and addCountToLocationHeroic["Pur"][self.vb.purifierCast+1] or self:IsNormal() and addCountToLocationNormal["Pur"][self.vb.purifierCast+1] or self:IsMythic() and addCountToLocationMythic["Pur"][self.vb.purifierCast+1] or self.vb.purifierCast+1
|
|
timerPurifierCD:Start(timer, text)
|
|
end
|
|
end
|
|
elseif spellId == 250074 then--Purification (buff on enemies near purifier)
|
|
if self.Options.NPAuraOnPurification then
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 250555 then--Fel Shielding
|
|
if self.Options.NPAuraOnFelShielding then
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 249016 then
|
|
if self.Options.SetIconOnFeedbackTargeted2 then
|
|
self:SetIcon(args.destName, self.vb.targetedIcon)
|
|
end
|
|
self.vb.targetedIcon = self.vb.targetedIcon + 1
|
|
elseif spellId == 248332 then--Rain of Fel
|
|
warnRainofFel:CombinedShow(1, self.vb.rainOfFelCount, args.destName)
|
|
if self:AntiSpam(10, 4) then
|
|
self.vb.rainOfFelCount = self.vb.rainOfFelCount + 1
|
|
local timer = self:IsMythic() and mythicRainOfFelTimers[self.vb.rainOfFelCount+1] or self:IsHeroic() and heroicRainOfFelTimers[self.vb.rainOfFelCount+1] or self:IsNormal() and normalRainOfFelTimers[self.vb.rainOfFelCount+1]
|
|
if timer then
|
|
timerRainofFelCD:Start(timer, self.vb.rainOfFelCount+1)
|
|
end
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnRainofFel:Show()
|
|
specWarnRainofFel:Play("scatter")
|
|
yellRainofFel:Yell()
|
|
yellRainofFelFades:Countdown(5)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(8)
|
|
end
|
|
end
|
|
elseif spellId == 250693 then--Arcane Buildup
|
|
if args:IsPlayer() then
|
|
specWarnArcaneBuildup:Show()
|
|
specWarnArcaneBuildup:Play("runout")
|
|
yellArcaneBuildup:Yell()
|
|
yellArcaneBuildupFades:Countdown(5, 4)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(10)
|
|
end
|
|
end
|
|
elseif spellId == 250691 then --Burning Embers
|
|
if args:IsPlayer() then
|
|
specWarnBurningEmbers:Show()
|
|
specWarnBurningEmbers:Play("runout")
|
|
yellBurningEmbers:Yell()
|
|
yellBurningEmbersFades:Countdown(5, 4)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(8)
|
|
end
|
|
end
|
|
elseif spellId == 250140 then--Foul Steps
|
|
if args:IsPlayer() then
|
|
local amount = args.amount or 1
|
|
if amount >= 12 and amount % 4 == 0 then
|
|
specWarnFoulSteps:Show(amount)
|
|
specWarnFoulSteps:Play("stackhigh")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 250074 then--Purification
|
|
if self.Options.NPAuraOnPurification then
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 250555 then--Fel Shielding
|
|
if self.Options.NPAuraOnFelShielding then
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 249016 then
|
|
if self.Options.SetIconOnFeedbackTargeted2 then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
elseif spellId == 248332 then--Rain of Fel
|
|
if args:IsPlayer() then
|
|
yellRainofFelFades:Cancel()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
elseif spellId == 250693 then--Arcane Buildup
|
|
if args:IsPlayer() then
|
|
yellArcaneBuildupFades:Cancel()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
elseif spellId == 250691 then --Burning Embers
|
|
if args:IsPlayer() then
|
|
yellBurningEmbersFades:Cancel()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 124207 and self.vb.obfuscators > 0 then--Fel-Charged Obfuscator
|
|
self.vb.obfuscators = self.vb.obfuscators - 1
|
|
elseif cid == 123760 then
|
|
if warnedAdds[args.destGUID] and self.vb.destructors > 0 then--Fel-Infused Destructor
|
|
self.vb.destructors = self.vb.destructors - 1
|
|
end
|
|
elseif cid == 123726 and self.vb.purifiers > 0 then--Fel-Infused Purifier
|
|
self.vb.purifiers = self.vb.purifiers - 1
|
|
end
|
|
end
|
|
|
|
--[[
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId)
|
|
if spellId == 248329 and self:AntiSpam(5, 4) then
|
|
|
|
end
|
|
end
|
|
mod.SPELL_MISSED = mod.SPELL_DAMAGE
|
|
--]]
|
|
|
|
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, npc, _, _, target)
|
|
if msg:find("spell:248861") then
|
|
self.vb.spearCast = self.vb.spearCast + 1
|
|
specWarnSpearofDoom:Show()
|
|
specWarnSpearofDoom:Play("watchstep")
|
|
local timer = self:IsHeroic() and heroicSpearofDoomTimers[self.vb.spearCast+1]
|
|
if timer then
|
|
timerSpearofDoomCD:Start(timer, self.vb.spearCast+1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_CHANNEL_STOP(uId, _, spellId)
|
|
if spellId == 249121 then
|
|
timerFinalDoom:Stop()
|
|
end
|
|
end
|
|
mod.UNIT_SPELLCAST_STOP = mod.UNIT_SPELLCAST_CHANNEL_STOP
|
|
|