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.
243 lines
7.5 KiB
243 lines
7.5 KiB
local mod = DBM:NewMod(2142, "DBM-Party-BfA", 6, 1030)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240428124541")
|
|
mod:SetCreatureID(133379, 133944)
|
|
mod:SetEncounterID(2124)
|
|
mod:SetUsedIcons(8)
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_AURA_APPLIED 263246 263371",
|
|
"SPELL_AURA_REMOVED 263246 263371",
|
|
"SPELL_CAST_START 263257 263318 263775 263234 263309 263365",
|
|
"SPELL_CAST_SUCCESS 263371 263424 263425",
|
|
"UNIT_DIED",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1 boss2",
|
|
"UNIT_TARGET_UNFILTERED"
|
|
)
|
|
|
|
--TODO, target scan/warn Gale Force target if possible
|
|
--TODO, get a LONG pull so timer work can be actually figured out. VIDEO too
|
|
--General
|
|
local warnLightningShield = mod:NewTargetNoFilterAnnounce(263246, 3)
|
|
|
|
mod:AddRangeFrameOption("8")
|
|
mod:AddInfoFrameOption(263246, true)
|
|
mod:AddSetIconOption("SetIconOnNoLit", 263246, true, 5, {8})
|
|
--Aspix
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(18484))
|
|
----Lighting
|
|
local warnConduction = mod:NewTargetAnnounce(263371, 2)
|
|
|
|
local specWarnJolt = mod:NewSpecialWarningInterrupt(263318, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnConduction = mod:NewSpecialWarningMoveAway(263371, nil, nil, nil, 3, 2)
|
|
local yellConduction = mod:NewYell(263371)
|
|
local yellConductionFades = mod:NewShortFadesYell(263371)
|
|
local specWarnStaticShock = mod:NewSpecialWarningSpell(263257, nil, nil, nil, 2, 2)
|
|
|
|
local timerConductionCD = mod:NewCDTimer(13, 263371, nil, nil, nil, 3)--NYI
|
|
local timerStaticShockCD = mod:NewCDTimer(13, 263257, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)
|
|
----Wind
|
|
local specWarnGust = mod:NewSpecialWarningInterrupt(263775, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnGaleForce = mod:NewSpecialWarningSpell(263776, nil, nil, nil, 2, 2)
|
|
|
|
local timerGaleForceCD = mod:NewCDTimer(14.5, 263776, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON)
|
|
--Adderis
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(18485))
|
|
----Lightning
|
|
local specWarnPearlofThunder = mod:NewSpecialWarningRun(263365, nil, nil, nil, 4, 2)
|
|
|
|
local timerArcDashCD = mod:NewCDTimer(23, 263424, nil, nil, nil, 3)
|
|
----Wind
|
|
local specWarnCycloneStrike = mod:NewSpecialWarningYou(263573, nil, nil, nil, 3, 2)
|
|
local specWarnCycloneStrikeOther = mod:NewSpecialWarningDodge(263573, nil, nil, nil, 3, 2)
|
|
local yellCycloneStrike = mod:NewYell(263573)
|
|
|
|
local timerArcingBladeCD = mod:NewCDTimer(13.4, 263234, nil, nil, nil, 5, nil, DBM_COMMON_L.HEROIC_ICON)
|
|
local timerCycloneStrikeCD = mod:NewCDTimer(13.3, 263573, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)
|
|
|
|
mod.vb.noLitShield = nil
|
|
|
|
function mod:CycloneTarget(targetname)
|
|
if not targetname then return end
|
|
if targetname == UnitName("player") then
|
|
specWarnCycloneStrike:Show()
|
|
specWarnCycloneStrike:Play("targetyou")
|
|
yellCycloneStrike:Yell()
|
|
else
|
|
specWarnCycloneStrikeOther:Show()
|
|
specWarnCycloneStrikeOther:Play("shockwave")
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.noLitShield = nil
|
|
--Adderis should be in winds, Aspix timers started by Lightning Shield buff
|
|
timerCycloneStrikeCD:Start(8.5-delay)
|
|
if not self:IsNormal() then
|
|
timerArcingBladeCD:Start(7.3-delay)
|
|
end
|
|
--Aspix
|
|
-- timerArcDashCD:Start(14-delay)--Can be used instantly on pull, so no timer
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:SetHeader(DBM_CORE_L.INFOFRAME_POWER)
|
|
DBM.InfoFrame:Show(3, "enemypower", 10)
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 263246 then--Lightning Shield
|
|
warnLightningShield:Show(args.destName)
|
|
warnLightningShield:Play("targetchange")
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
--Start lightning timers and stop wind
|
|
if cid == 133379 then--Adderis
|
|
timerArcingBladeCD:Stop()
|
|
timerCycloneStrikeCD:Stop()
|
|
--timerArcDashCD:Start(11.2)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(8)
|
|
end
|
|
elseif cid == 133944 then--Aspix
|
|
timerConductionCD:Start(11.6)
|
|
timerStaticShockCD:Start(20)
|
|
if not self:IsNormal() then
|
|
--No Doubt wrong
|
|
timerGaleForceCD:Stop()
|
|
timerGaleForceCD:Start(26)
|
|
end
|
|
end
|
|
elseif spellId == 263371 then
|
|
if args:IsPlayer() then
|
|
specWarnConduction:Show()
|
|
specWarnConduction:Play("runout")
|
|
yellConduction:Yell()
|
|
yellConductionFades:Countdown(5)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(8)
|
|
end
|
|
else
|
|
warnConduction:Show(args.destName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 263246 then--Lightning Shield
|
|
self.vb.noLitShield = args.destGUID
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
--Start wind timers and stop lightning
|
|
if cid == 133379 then--Adderis
|
|
--timerArcDashCD:Stop()
|
|
--timerCycloneStrikeCD:Start(2)
|
|
if not self:IsNormal() then
|
|
--timerArcingBladeCD:Start(2)
|
|
end
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
elseif cid == 133944 then--Aspix
|
|
timerConductionCD:Stop()
|
|
timerStaticShockCD:Stop()
|
|
end
|
|
elseif spellId == 263371 then
|
|
if args:IsPlayer() then
|
|
yellConductionFades:Cancel()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 263257 then
|
|
specWarnStaticShock:Show()
|
|
specWarnStaticShock:Play("aesoon")
|
|
--timerStaticShockCD:Start()
|
|
elseif spellId == 263318 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnJolt:Show(args.sourceName)
|
|
specWarnJolt:Play("kickcast")
|
|
elseif spellId == 263775 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnGust:Show(args.sourceName)
|
|
specWarnGust:Play("kickcast")
|
|
elseif spellId == 263234 then
|
|
timerArcingBladeCD:Start()
|
|
elseif spellId == 263309 then
|
|
timerCycloneStrikeCD:Start()
|
|
self:ScheduleMethod(0.2, "BossTargetScanner", args.sourceGUID, "CycloneTarget", 0.04, 16)--give 0.2 delay before scan start.
|
|
elseif spellId == 263365 then
|
|
specWarnPearlofThunder:Show()
|
|
specWarnPearlofThunder:Play("justrun")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 263371 then
|
|
--timerConductionCD:Start()
|
|
elseif spellId == 263425 and self:AntiSpam(3, 1) then--263424?
|
|
timerArcDashCD:Start()
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 133379 then--Adderis
|
|
timerArcDashCD:Stop()
|
|
timerCycloneStrikeCD:Stop()
|
|
timerArcingBladeCD:Stop()
|
|
elseif cid == 133944 then--Aspix
|
|
timerConductionCD:Stop()
|
|
timerStaticShockCD:Stop()
|
|
timerGaleForceCD:Stop()
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, spellId)
|
|
if spellId == 263776 then--Gale Force
|
|
specWarnGaleForce:Show()
|
|
specWarnGaleForce:Play("specialsoon")
|
|
timerGaleForceCD:Start()
|
|
end
|
|
end
|
|
|
|
do
|
|
local function TrySetTarget(self)
|
|
if DBM:GetRaidRank() >= 1 then
|
|
for uId in DBM:GetGroupMembers() do
|
|
if UnitGUID(uId.."target") == self.vb.noLitShield then
|
|
self.vb.noLitShield = nil
|
|
local icon = GetRaidTargetIndex(uId)
|
|
if not icon then
|
|
self:SetIcon(uId.."target", 8)
|
|
break
|
|
end
|
|
end
|
|
if not (self.vb.noLitShield) then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_TARGET_UNFILTERED()
|
|
if self.Options.SetIconOnNoLit and self.vb.noLitShield then
|
|
TrySetTarget(self)
|
|
end
|
|
end
|
|
end
|
|
|