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.

235 lines
9.8 KiB

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