|
|
|
|
local creatureID
|
|
|
|
|
local addAOESpellId, addDebuffSpellId, tankSpellId, shockwaveSpellId, rallySpellId, crySpellId
|
|
|
|
|
if UnitFactionGroup("player") == "Alliance" then--TODO, might have to change this to check party leader not player, due to cross faction groups.
|
|
|
|
|
creatureID = 203679--Anduin Lothar
|
|
|
|
|
addAOESpellId, addDebuffSpellId, tankSpellId, shockwaveSpellId, rallySpellId, crySpellId = 417018, 417030, 418059, 418054, 418047, 418062
|
|
|
|
|
else--Horde
|
|
|
|
|
creatureID = 203678--Grommash Hellscream
|
|
|
|
|
addAOESpellId, addDebuffSpellId, tankSpellId, shockwaveSpellId, rallySpellId, crySpellId = 407122, 407121, 410254, 408227, 418046, 410496
|
|
|
|
|
end
|
|
|
|
|
local mod = DBM:NewMod(2533, "DBM-Party-Dragonflight", 9, 1209)--Alliance ID used, horde is 2534
|
|
|
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
|
|
|
|
|
|
mod:SetRevision("20230814061315")
|
|
|
|
|
mod:SetCreatureID(creatureID)
|
|
|
|
|
mod:SetEncounterID(2672)
|
|
|
|
|
--mod:SetUsedIcons(1, 2, 3)
|
|
|
|
|
mod:SetHotfixNoticeRev(20230716000000)
|
|
|
|
|
mod:SetMinSyncRevision(20230716000000)
|
|
|
|
|
--mod.respawnTime = 29
|
|
|
|
|
mod.sendMainBossGUID = true
|
|
|
|
|
|
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
|
|
|
|
|
|
mod:RegisterEventsInCombat(
|
|
|
|
|
"SPELL_CAST_START 417018 407122 410234 418059 410254 418056 408228 418047 418046",
|
|
|
|
|
"SPELL_CAST_SUCCESS 418062 410496",
|
|
|
|
|
"SPELL_AURA_APPLIED 417030 407121",
|
|
|
|
|
-- "SPELL_AURA_APPLIED_DOSE",
|
|
|
|
|
-- "SPELL_AURA_REMOVED",
|
|
|
|
|
"SPELL_DAMAGE 418052 410496",
|
|
|
|
|
"SPELL_MISSED 418052 410496",
|
|
|
|
|
"UNIT_DIED"
|
|
|
|
|
-- "UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
--[[
|
|
|
|
|
(ability.id = 417018 or ability.id = 407122 or ability.id = 410234 or ability.id = 418059 or ability.id = 410254 or ability.id = 418056 or ability.id = 408228 or ability.id = 418047 or ability.id = 418046) and type = "begincast"
|
|
|
|
|
or (ability.id = 418062 or ability.id = 410496 or ability.id = 418054 or ability.id = 408227) and type = "cast"
|
|
|
|
|
or type = "dungeonencounterstart" or type = "dungeonencounterend"
|
|
|
|
|
or (ability.id = 418052 or ability.id = 410496)
|
|
|
|
|
or (ability.id = 417030 or ability.id = 407121 or ability.id = 407122 or ability.id = 410234) and type = "begincast"
|
|
|
|
|
--]]
|
|
|
|
|
--NOTE: Serrated and fireball abilities are spammed, so no timer or alert
|
|
|
|
|
--TODO, Blizzard decided to remove Cry from combat log on live because, reasons. Now we have to parse all damage on fight to see CD
|
|
|
|
|
--TODO, GTFO for add aoe? Logs I had nobody took damage from it so couldn't do yet
|
|
|
|
|
--TODO, targetscan/detect bladestorm target?
|
|
|
|
|
--The Infinite Battlefield
|
|
|
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26514))
|
|
|
|
|
local warnAddAoE = mod:NewSpellAnnounce(addAOESpellId, 3)
|
|
|
|
|
local warnAddDebuff = mod:NewTargetNoFilterAnnounce(addDebuffSpellId, 3, nil, false)
|
|
|
|
|
|
|
|
|
|
--local specWarnManaBomb = mod:NewSpecialWarningMoveAway(386181, nil, nil, nil, 1, 2)
|
|
|
|
|
--local yellManaBomb = mod:NewYell(386181)
|
|
|
|
|
--local yellManaBombFades = mod:NewShortFadesYell(386181)
|
|
|
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(386201, nil, nil, nil, 1, 8)
|
|
|
|
|
|
|
|
|
|
local timerAddAoECD = mod:NewCDTimer(12.1, addAOESpellId, nil, nil, nil, 3)
|
|
|
|
|
|
|
|
|
|
--mod:AddInfoFrameOption(391977, true)
|
|
|
|
|
--Boss (Anduin Lothar / Grommash Hellscream
|
|
|
|
|
mod:AddTimerLine(DBM_COMMON_L.BOSS)
|
|
|
|
|
local warnBladestorm = mod:NewCountAnnounce(410235, 3)
|
|
|
|
|
local warnRally = mod:NewCountAnnounce(rallySpellId, 2)
|
|
|
|
|
local warnCry = mod:NewCountAnnounce(crySpellId, 2)
|
|
|
|
|
local warnShockwave = mod:NewCountAnnounce(shockwaveSpellId, 3)--2nd and 3rd cast
|
|
|
|
|
|
|
|
|
|
local specWarnTankBuster = mod:NewSpecialWarningDefensive(tankSpellId, nil, nil, nil, 1, 2)
|
|
|
|
|
local specWarnShockwave = mod:NewSpecialWarningDodge(shockwaveSpellId, nil, nil, nil, 2, 2)--First cast in set
|
|
|
|
|
|
|
|
|
|
local timerBladestormCD = mod:NewCDCountTimer(35.2, 410235, nil, nil, nil, 3)
|
|
|
|
|
local timerTankBusterCD = mod:NewCDCountTimer(19.6, tankSpellId, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
|
|
|
local timerShockwaveCD = mod:NewCDCountTimer(29, shockwaveSpellId, nil, nil, nil, 3)
|
|
|
|
|
local timerRallyCD = mod:NewCDCountTimer(21.2, rallySpellId, nil, nil, nil, 5)
|
|
|
|
|
local timerCryCD = mod:NewCDCountTimer(10, crySpellId, nil, nil, nil, 2)
|
|
|
|
|
|
|
|
|
|
--Write the custom WA keys into the spell headers
|
|
|
|
|
mod:JustSetCustomKeys(rallySpellId, L.customWAMessage:format(418047, 418046))
|
|
|
|
|
mod:JustSetCustomKeys(crySpellId, L.customWAMessage:format(418062, 410496))
|
|
|
|
|
mod:JustSetCustomKeys(shockwaveSpellId, L.customWAMessage:format(418054, 408227))
|
|
|
|
|
mod:JustSetCustomKeys(tankSpellId, L.customWAMessage:format(418059, 410254))
|
|
|
|
|
|
|
|
|
|
mod.vb.bladestormCount = 0
|
|
|
|
|
mod.vb.shockwaveSet = 0
|
|
|
|
|
mod.vb.shockwaveCount = 0
|
|
|
|
|
mod.vb.tankBusterCount = 0
|
|
|
|
|
mod.vb.rallyCount = 0
|
|
|
|
|
mod.vb.cryCount = 0
|
|
|
|
|
|
|
|
|
|
local function checkWhichBoss(self)
|
|
|
|
|
local cid = self:GetUnitCreatureId("boss1")
|
|
|
|
|
if cid then
|
|
|
|
|
--Only do swaps if they differ from last check or load
|
|
|
|
|
if cid ~= creatureID then--cid mismatch, correct it on engage
|
|
|
|
|
creatureID = cid
|
|
|
|
|
self:SetCreatureID(cid)
|
|
|
|
|
--This hot swaps the Ids without changing option key, which is always tied to own faction
|
|
|
|
|
--This ensures objects return the faction Ids for what you're fighting, (which is tied to group leader and not your own faction)
|
|
|
|
|
--This also ensures LW parity for option keys/weak auras
|
|
|
|
|
if cid == 203679 then--Anduin Lothar
|
|
|
|
|
addAOESpellId, addDebuffSpellId, tankSpellId, shockwaveSpellId, rallySpellId, crySpellId = 417018, 417030, 418059, 418054, 418047, 418062
|
|
|
|
|
else--Grommash Hellscream
|
|
|
|
|
addAOESpellId, addDebuffSpellId, tankSpellId, shockwaveSpellId, rallySpellId, crySpellId = 407122, 407121, 410254, 408227, 418046, 410496
|
|
|
|
|
end
|
|
|
|
|
warnRally:UpdateKey(rallySpellId)
|
|
|
|
|
warnCry:UpdateKey(crySpellId)
|
|
|
|
|
warnShockwave:UpdateKey(shockwaveSpellId)
|
|
|
|
|
|
|
|
|
|
specWarnTankBuster:UpdateKey(tankSpellId)
|
|
|
|
|
specWarnShockwave:UpdateKey(shockwaveSpellId)
|
|
|
|
|
|
|
|
|
|
timerTankBusterCD:UpdateKey(tankSpellId, 1)
|
|
|
|
|
timerShockwaveCD:UpdateKey(shockwaveSpellId, 1)
|
|
|
|
|
timerRallyCD:UpdateKey(rallySpellId, 1)
|
|
|
|
|
timerCryCD:UpdateKey(crySpellId, 1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:OnCombatStart(delay)
|
|
|
|
|
self.vb.bladestormCount = 0
|
|
|
|
|
self.vb.shockwaveSet = 0
|
|
|
|
|
self.vb.shockwaveCount = 0
|
|
|
|
|
self.vb.tankBusterCount = 0
|
|
|
|
|
self.vb.rallyCount = 0
|
|
|
|
|
self.vb.cryCount = 0
|
|
|
|
|
timerTankBusterCD:Start(6-delay, 1)--Mortal Strikes/Decapitate
|
|
|
|
|
timerShockwaveCD:Start(9.4-delay, 1)--Shockwave
|
|
|
|
|
timerCryCD:Start(10.4-delay)--Battle Cry/War Cry
|
|
|
|
|
timerRallyCD:Start(20.5-delay, 1)--For the alliance/horde
|
|
|
|
|
timerBladestormCD:Start(21.5-delay, 1)
|
|
|
|
|
self:Schedule(1.5, checkWhichBoss, self)
|
|
|
|
|
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_CAST_START(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 417018 or spellId == 407122 then--Blizzard / Rain of Fire
|
|
|
|
|
warnAddAoE:Show()
|
|
|
|
|
timerAddAoECD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 410234 then--Same spell in both
|
|
|
|
|
self.vb.bladestormCount = self.vb.bladestormCount + 1
|
|
|
|
|
warnBladestorm:Show(self.vb.bladestormCount)
|
|
|
|
|
timerBladestormCD:Start(nil, self.vb.bladestormCount+1)
|
|
|
|
|
elseif spellId == 418059 or spellId == 410254 then--Mortal Strikes / Decapitate
|
|
|
|
|
self.vb.tankBusterCount = self.vb.tankBusterCount + 1
|
|
|
|
|
if self:IsTanking("player", "boss1", nil, true) then
|
|
|
|
|
specWarnTankBuster:Show()
|
|
|
|
|
specWarnTankBuster:Play("defensive")
|
|
|
|
|
end
|
|
|
|
|
timerTankBusterCD:Start(nil, self.vb.tankBusterCount+1)
|
|
|
|
|
elseif spellId == 418056 or spellId == 408228 then--Shockwave / Shockwave (formerly Death Wish)
|
|
|
|
|
self.vb.shockwaveCount = self.vb.shockwaveCount + 1
|
|
|
|
|
if self.vb.shockwaveCount == 1 then
|
|
|
|
|
self.vb.shockwaveSet = self.vb.shockwaveSet + 1
|
|
|
|
|
specWarnShockwave:Show(self.vb.shockwaveSet)
|
|
|
|
|
specWarnShockwave:Play("shockwave")
|
|
|
|
|
else
|
|
|
|
|
warnShockwave:Show(self.vb.shockwaveSet)
|
|
|
|
|
if self.vb.shockwaveCount == 3 then
|
|
|
|
|
timerShockwaveCD:Start(nil, self.vb.shockwaveSet+1)
|
|
|
|
|
self.vb.shockwaveCount = 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 418047 or spellId == 418046 then--For the alliance, for the horde
|
|
|
|
|
self.vb.rallyCount = self.vb.rallyCount + 1
|
|
|
|
|
warnRally:Show(self.vb.rallyCount)
|
|
|
|
|
--is 11.99 and 12.33 alternating. kinda interesting considering .34 doesn't make such a huge difference
|
|
|
|
|
--A pattern is a pattern though so might as well support it
|
|
|
|
|
if self.vb.rallyCount % 2 == 0 then
|
|
|
|
|
timerRallyCD:Start(12, self.vb.rallyCount+1)
|
|
|
|
|
else
|
|
|
|
|
timerRallyCD:Start(12.3, self.vb.rallyCount+1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 418062 or spellId == 410496 then--Battle Cry, War Cry
|
|
|
|
|
-- self.vb.cryCount = self.vb.cryCount + 1
|
|
|
|
|
-- warnCry:Show(self.vb.cryCount)
|
|
|
|
|
-- timerCryCD:Start(nil, self.vb.cryCount+1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 417030 or spellId == 407121 then--Fireball / Immolate
|
|
|
|
|
warnAddDebuff:Show(args.destName)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
|
|
|
|
|
|
--[[
|
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 386181 then
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
|
|
|
if (spellId == 418052 or spellId == 410496) and self:AntiSpam(5, 1) then--BattleCry Buff, Warcry Buff
|
|
|
|
|
self.vb.cryCount = self.vb.cryCount + 1
|
|
|
|
|
warnCry:Show(self.vb.cryCount)
|
|
|
|
|
timerCryCD:Start(nil, self.vb.cryCount+1)
|
|
|
|
|
-- elseif spellId == 386201 and destGUID == UnitGUID("player") and self:AntiSpam(3, 2) then
|
|
|
|
|
-- specWarnGTFO:Show(spellName)
|
|
|
|
|
-- specWarnGTFO:Play("watchfeet")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
mod.SPELL_MISSED = mod.SPELL_DAMAGE
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
|
function mod:UNIT_DIED(args)
|
|
|
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
|
|
|
if cid == 206351 or cid == 203857 then--Alliance Conjuror / Horde Warlock
|
|
|
|
|
timerAddAoECD:Stop(args.destGUID)
|
|
|
|
|
-- elseif cid == 206352 or cid == 203799 then--Alliance Archer/Horde Axe Thrower
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
if args:IsDestTypePlayer() then--Trigger Cd reset on tank buster
|
|
|
|
|
timerTankBusterCD:Stop()
|
|
|
|
|
end
|
|
|
|
|
end
|