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.
223 lines
8.4 KiB
223 lines
8.4 KiB
local mod = DBM:NewMod(2536, "DBM-Party-Dragonflight", 9, 1209)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod.statTypes = "normal,heroic,mythic,challenge"--No Follower dungeon
|
|
|
|
mod:SetRevision("20240206052800")
|
|
mod:SetCreatureID(198999)
|
|
mod:SetEncounterID(2671)
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5, 6)
|
|
mod:SetHotfixNoticeRev(20240205000000)
|
|
mod:SetMinSyncRevision(20240205000000)
|
|
--mod.respawnTime = 29
|
|
mod.sendMainBossGUID = true
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 404916 403891 404364 405279 406481 407504",
|
|
"SPELL_SUMMON 403902",
|
|
"SPELL_AURA_APPLIED 401200 401667",--412768
|
|
"SPELL_AURA_REMOVED 401200",
|
|
"SPELL_DAMAGE 412769",
|
|
"SPELL_MISSED 412769"
|
|
)
|
|
|
|
--[[
|
|
(ability.id = 404916 or ability.id = 403891 or ability.id = 405279 or ability.id = 406481 or ability.id = 407504) and type = "begincast"
|
|
or type = "dungeonencounterstart" or type = "dungeonencounterend"
|
|
or ability.id = 404364 and type = "begincast"
|
|
--]]
|
|
--NOTE:, based on logs, tank can NOT sidestep Sand Blast, so warning is using generic text cause tank positions, rest avoid
|
|
--TODO, Initial data (literally just 2 pulls sadly, suggests timers are sequenced in a fixed pattern. If that's case then mod needs some LONG pulls to populate tables
|
|
--TODO, announce https://www.wowhead.com/ptr-2/spell=413208/sand-buffeted for healers?
|
|
--TODO, nameplate aura on trapped familar face? need to see how good visual is for it first
|
|
--TODO, detect when your add breaks free from trap and warn you it's lose again?
|
|
--TODO Familiar Faces timers
|
|
local warnMoreProblems = mod:NewCountAnnounce(403891, 3)
|
|
local warnFamiliarFaces = mod:NewCountAnnounce(405279, 3)
|
|
local warnFixate = mod:NewYouAnnounce(401200, 4)
|
|
local warnTimeStasis = mod:NewTargetNoFilterAnnounce(401667, 4)
|
|
|
|
local specWarnSandBlast = mod:NewSpecialWarningCount(404916, nil, nil, nil, 2, 2)
|
|
local specWarnDragonBreath = mod:NewSpecialWarningDodge(404364, nil, nil, nil, 2, 2)
|
|
local specWarnTimeTraps = mod:NewSpecialWarningDodgeCount(406481, nil, nil, nil, 2, 2)
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(412769, nil, nil, nil, 1, 8)
|
|
|
|
local timerSandBlastCD = mod:NewCDCountTimer(21.8, 404916, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--21.8-38.8
|
|
local timerMoreProblemsCD = mod:NewCDCountTimer(39.7, 403891, nil, nil, nil, 6)--40-52
|
|
local timerFamiliarFacesCD = mod:NewCDCountTimer(23, 405279, nil, nil, nil, 5)
|
|
local timerTimeTrapsCD = mod:NewCDCountTimer(50.9, 406481, nil, nil, nil, 3)
|
|
|
|
--mod:AddInfoFrameOption(391977, true)
|
|
mod:AddSetIconOption("SetIconOnImages", 403891, true, 5, {1, 2, 3, 4, 5, 6})
|
|
mod:AddNamePlateOption("NPAuraOnFixate", 401200)
|
|
|
|
local askShown = false
|
|
--local myGUIDAdd = nil
|
|
mod.vb.blastCount = 0
|
|
mod.vb.problemsCount = 0
|
|
mod.vb.problemIcons = 1
|
|
mod.vb.facesCount = 0
|
|
mod.vb.trapsCount = 0
|
|
--Even on a +25 I could not find a pull longer than this
|
|
local allTimers = {--Timers up to 3:43 for 10.2+ (with late october timer changes).
|
|
--Sand Blast
|
|
[404916] = {3, 27, 19.9, 28.9, 12, 12, 11.9, 24, 11.9, 12.0, 12.0, 24.0, 12.0, 12.0},
|
|
--More Problems
|
|
[403891] = {10, 50, 60, 60, 60},
|
|
--Time Traps
|
|
[406481] = {36, 48, 24, 47.9, 48.0},
|
|
--Familiar Faces
|
|
[405279] = {43, 52.9, 48, 23.9, 48.0, 48.0, 24.0},
|
|
}
|
|
|
|
--[[
|
|
local function updateAllTimers(self, ICD)
|
|
DBM:Debug("updateAllTimers running", 3)
|
|
--Abilities that exist in P1 and P2
|
|
if timerSandBlastCD:GetRemaining(self.vb.blastCount+1) < ICD then
|
|
local elapsed, total = timerSandBlastCD:GetTime(self.vb.blastCount+1)
|
|
local extend = ICD - (total-elapsed)
|
|
DBM:Debug("timerSandBlastCD extended by: "..extend, 2)
|
|
timerSandBlastCD:Update(elapsed, total+extend, self.vb.blastCount+1)
|
|
end
|
|
if timerMoreProblemsCD:GetRemaining(self.vb.problemIcons+1) < ICD then
|
|
local elapsed, total = timerMoreProblemsCD:GetTime(self.vb.problemIcons+1)
|
|
local extend = ICD - (total-elapsed)
|
|
DBM:Debug("timerMoreProblemsCD extended by: "..extend, 2)
|
|
timerMoreProblemsCD:Update(elapsed, total+extend, self.vb.problemIcons+1)
|
|
end
|
|
if timerTimeTrapsCD:GetRemaining(self.vb.trapsCount+1) < ICD then
|
|
local elapsed, total = timerTimeTrapsCD:GetTime(self.vb.trapsCount+1)
|
|
local extend = ICD - (total-elapsed)
|
|
DBM:Debug("timerTimeTrapsCD extended by: "..extend, 2)
|
|
timerTimeTrapsCD:Update(elapsed, total+extend, self.vb.trapsCount+1)
|
|
end
|
|
end
|
|
--]]
|
|
|
|
function mod:OnCombatStart(delay)
|
|
askShown = false
|
|
self.vb.blastCount = 0
|
|
self.vb.problemsCount = 0
|
|
self.vb.facesCount = 0
|
|
self.vb.trapsCount = 0
|
|
timerSandBlastCD:Start(3-delay, 1)
|
|
timerMoreProblemsCD:Start(10-delay, 1)
|
|
timerTimeTrapsCD:Start(36-delay, 1)
|
|
timerFamiliarFacesCD:Start(43-delay, 1)
|
|
if self.Options.NPAuraOnFixate then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.NPAuraOnFixate then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 404916 then
|
|
self.vb.blastCount = self.vb.blastCount + 1
|
|
specWarnSandBlast:Show(self.vb.blastCount)
|
|
specWarnSandBlast:Play("shockwave")
|
|
local timer = self:GetFromTimersTable(allTimers, false, false, spellId, self.vb.blastCount+1)
|
|
if timer then
|
|
timerSandBlastCD:Start(timer, self.vb.blastCount+1)
|
|
else
|
|
if not askShown then
|
|
askShown = true
|
|
DBM:AddMsg("Timers not known beyond this point, please share your WCL with DBM authors if you can")
|
|
end
|
|
end
|
|
-- updateAllTimers(self, 4.9)
|
|
elseif spellId == 403891 then
|
|
self.vb.problemsCount = self.vb.problemsCount + 1
|
|
self.vb.problemIcons = 1
|
|
warnMoreProblems:Show(self.vb.problemIcons)
|
|
local timer = self:GetFromTimersTable(allTimers, false, false, spellId, self.vb.problemsCount+1)
|
|
if timer then
|
|
timerMoreProblemsCD:Start(timer, self.vb.problemsCount+1)
|
|
else
|
|
if not askShown then
|
|
askShown = true
|
|
DBM:AddMsg("Timers not known beyond this point, please share your WCL with DBM authors if you can")
|
|
end
|
|
end
|
|
elseif spellId == 404364 and self:AntiSpam(3, 1) then--All 6 cast it at once
|
|
specWarnDragonBreath:Show()
|
|
specWarnDragonBreath:Play("breathsoon")
|
|
elseif spellId == 405279 or spellId == 407504 then
|
|
self.vb.facesCount = self.vb.facesCount + 1
|
|
warnFamiliarFaces:Show(self.vb.facesCount)
|
|
local timer = self:GetFromTimersTable(allTimers, false, false, 405279, self.vb.facesCount+1)
|
|
if timer then
|
|
timerFamiliarFacesCD:Start(timer, self.vb.facesCount+1)
|
|
else
|
|
if not askShown then
|
|
askShown = true
|
|
DBM:AddMsg("Timers not known beyond this point, please share your WCL with DBM authors if you can")
|
|
end
|
|
end
|
|
elseif spellId == 406481 then
|
|
self.vb.trapsCount = self.vb.trapsCount + 1
|
|
specWarnTimeTraps:Show(self.vb.trapsCount)
|
|
specWarnTimeTraps:Play("watchstep")
|
|
local timer = self:GetFromTimersTable(allTimers, false, false, spellId, self.vb.trapsCount+1)
|
|
if timer then
|
|
timerTimeTrapsCD:Start(timer, self.vb.trapsCount+1)
|
|
else
|
|
if not askShown then
|
|
askShown = true
|
|
DBM:AddMsg("Timers not known beyond this point, please share your WCL with DBM authors if you can")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_SUMMON(args)
|
|
local spellId = args.spellId
|
|
if spellId == 403902 then
|
|
if self.Options.SetIconOnImages then
|
|
self:ScanForMobs(args.destGUID, 2, self.vb.problemIcons, 1, nil, 12, "SetIconOnImages")
|
|
end
|
|
self.vb.problemIcons = self.vb.problemIcons + 1
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401200 and args:IsPlayer() then
|
|
-- myGUIDAdd = args.sourceGUID
|
|
warnFixate:Show()
|
|
if self.Options.NPAuraOnFixate then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 401667 then
|
|
warnTimeStasis:Show(args.destName)
|
|
-- elseif spellId == 412768 then--Anachronistic Decay applying, adds free
|
|
-- if myGUIDAdd and myGUIDAdd == args.destGUID then
|
|
--
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401200 and args:IsPlayer() then
|
|
if self.Options.NPAuraOnFixate then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 412769 and destGUID == UnitGUID("player") and self:AntiSpam(3, 4) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_MISSED = mod.SPELL_DAMAGE
|
|
|