|
|
|
|
local mod = DBM:NewMod(2093, "DBM-Party-BfA", 2, 1001)
|
|
|
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
|
|
|
|
|
|
mod:SetRevision("20231020041658")
|
|
|
|
|
mod:SetCreatureID(126845, 126847, 126848)--Captain Jolly, Captain Raoul, Captain Eudora
|
|
|
|
|
mod:SetEncounterID(2094)
|
|
|
|
|
mod:DisableRegenDetection()
|
|
|
|
|
mod:DisableFriendlyDetection()
|
|
|
|
|
mod:SetHotfixNoticeRev(20230922000000)
|
|
|
|
|
mod:SetMinSyncRevision(20230922000000)
|
|
|
|
|
|
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
|
|
|
|
|
|
mod:RegisterEventsInCombat(
|
|
|
|
|
"SPELL_CAST_START 258338 256589 257117 267522 272884 267533 272902 265088 264608 265168 256979 281329",
|
|
|
|
|
"SPELL_CAST_SUCCESS 258381",
|
|
|
|
|
"SPELL_AURA_APPLIED 265085 265056 278467",
|
|
|
|
|
"SPELL_DAMAGE 272397",
|
|
|
|
|
"SPELL_MISSED 272397",
|
|
|
|
|
"UNIT_DIED"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
--TODO: target scan Blackout Barrel?
|
|
|
|
|
--TODO, rework brews if target scanning of which boss it's being casting toward is possible.
|
|
|
|
|
--[[
|
|
|
|
|
(ability.id = 258338 or ability.id = 256589 or ability.id = 257117 or ability.id = 267522 or ability.id = 272884 or ability.id = 267533 or ability.id = 272902 or ability.id = 265088 or ability.id = 264608 or ability.id = 265168 or ability.id = 256979 or ability.id = 281329) and type = "begincast"
|
|
|
|
|
or ability.id = 258381 and type = "cast"
|
|
|
|
|
or type = "dungeonencounterstart" or type = "dungeonencounterend"
|
|
|
|
|
--]]
|
|
|
|
|
--General
|
|
|
|
|
----Announce Brews
|
|
|
|
|
--text, color, icon, optionDefault, optionName, soundOption, spellID
|
|
|
|
|
local warnGoodBrew = mod:NewAnnounce("warnGoodBrew", 1, 265088, nil, nil, nil, 264605)
|
|
|
|
|
local warnCausticBrew = mod:NewCastAnnounce(265168, 4)
|
|
|
|
|
local warnCausticBrewOnBoss = mod:NewTargetNoFilterAnnounce(278467, 1)
|
|
|
|
|
|
|
|
|
|
local specWarnBrewOnBoss = mod:NewSpecialWarning("specWarnBrewOnBoss", "Tank", nil, nil, 1, 2)
|
|
|
|
|
|
|
|
|
|
local timerTendingBarCD = mod:NewNextTimer(8, 264605, nil, nil, nil, 3)
|
|
|
|
|
|
|
|
|
|
--mod:GroupSpells(264605, 265168)--Group good brew and bad brew with "tending Bar"
|
|
|
|
|
--Jolly
|
|
|
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(17025))
|
|
|
|
|
local warnLuckySevens = mod:NewSpellAnnounce(257117, 1)
|
|
|
|
|
|
|
|
|
|
local specWarnCuttingSurge = mod:NewSpecialWarningDodge(267522, nil, nil, nil, 2, 2)
|
|
|
|
|
local specWarnWhirlpoolofBlades = mod:NewSpecialWarningDodge(267533, nil, nil, nil, 2, 2)
|
|
|
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(272397, nil, nil, nil, 1, 8)
|
|
|
|
|
|
|
|
|
|
----Hostile
|
|
|
|
|
local timerCuttingSurgeCD = mod:NewCDTimer(22.7, 267522, nil, nil, nil, 3)
|
|
|
|
|
local timerWhirlpoolofBladesCD = mod:NewCDTimer(22.7, 267533, nil, nil, nil, 3)
|
|
|
|
|
----Friendly
|
|
|
|
|
local timerLuckySevensCD = mod:NewNextTimer(29.1, 257117, nil, nil, nil, 5)
|
|
|
|
|
local timerTradeWindsVigorCD = mod:NewNextTimer(26.7, 281329, nil, nil, nil, 5)
|
|
|
|
|
|
|
|
|
|
mod:AddRangeFrameOption(5, 267522)
|
|
|
|
|
--Raoul
|
|
|
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(17023))
|
|
|
|
|
local warnTappedKeg = mod:NewSpellAnnounce(272884, 1)
|
|
|
|
|
|
|
|
|
|
local specWarnBarrelSmash = mod:NewSpecialWarningRun(256589, "Melee", nil, nil, 4, 2)
|
|
|
|
|
local specWarnBlackoutBarrel = mod:NewSpecialWarningSwitch(258338, "-Healer", nil, 2, 1, 2)
|
|
|
|
|
|
|
|
|
|
----Hostile
|
|
|
|
|
local timerBarrelSmashCD = mod:NewCDTimer(22.9, 256589, nil, "Melee", nil, 3)--22.9-24.5
|
|
|
|
|
local timerBlackoutBarrelCD = mod:NewCDTimer(46.1, 258338, nil, nil, nil, 3, nil, DBM_COMMON_L.DAMAGE_ICON)
|
|
|
|
|
----Friendly
|
|
|
|
|
local timerTappedKegCD = mod:NewNextTimer(22.3, 272884, nil, nil, nil, 5)
|
|
|
|
|
--Eudora
|
|
|
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(17024))
|
|
|
|
|
local warnChainShot = mod:NewSpellAnnounce(272902, 1)
|
|
|
|
|
local warnPowderShot = mod:NewTargetNoFilterAnnounce(256979, 3)
|
|
|
|
|
|
|
|
|
|
local specWarnGrapeShot = mod:NewSpecialWarningDodge(258381, nil, nil, nil, 3, 2)
|
|
|
|
|
local specWarnPowderShot = mod:NewSpecialWarningYou(256979, nil, nil, nil, 1, 2)
|
|
|
|
|
|
|
|
|
|
----Hostile
|
|
|
|
|
local timerGrapeShotCD = mod:NewNextTimer(30.2, 258381, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)
|
|
|
|
|
----Friendly
|
|
|
|
|
local timerChainShotCD = mod:NewNextTimer(15.3, 272902, nil, nil, nil, 5)
|
|
|
|
|
|
|
|
|
|
local function scanCaptains(self, isPull, delay)
|
|
|
|
|
local foundOne, foundTwo, foundThree
|
|
|
|
|
for i = 1, 3 do
|
|
|
|
|
local unitID = "boss"..i
|
|
|
|
|
if UnitExists(unitID) then
|
|
|
|
|
local cid = self:GetUnitCreatureId(unitID)
|
|
|
|
|
local bossGUID = UnitGUID(unitID)
|
|
|
|
|
if not UnitIsFriend("player", unitID) then
|
|
|
|
|
if not foundOne then foundOne = cid
|
|
|
|
|
elseif not foundTwo then foundTwo = cid
|
|
|
|
|
else foundThree = cid end
|
|
|
|
|
--Set hostile timers
|
|
|
|
|
if isPull then--Only do on pull, if recovery, these will be synced when vb table sent
|
|
|
|
|
if cid == 126845 then--Jolly
|
|
|
|
|
timerCuttingSurgeCD:Start(4.1-delay, bossGUID)
|
|
|
|
|
timerWhirlpoolofBladesCD:Start(9.8-delay, bossGUID)
|
|
|
|
|
if self.Options.RangeFrame then
|
|
|
|
|
DBM.RangeCheck:Show(5)
|
|
|
|
|
end
|
|
|
|
|
elseif cid == 126847 then--Raoul
|
|
|
|
|
timerBarrelSmashCD:Start(5-delay, bossGUID)
|
|
|
|
|
timerBlackoutBarrelCD:Start(16.9-delay, bossGUID)
|
|
|
|
|
else--Eudora
|
|
|
|
|
timerGrapeShotCD:Start(7.3-delay, bossGUID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else--Friendly
|
|
|
|
|
--Set friendly Timers
|
|
|
|
|
if isPull then--Only do on pull, if recovery, these will be synced when vb table sent
|
|
|
|
|
if cid == 126845 then--Jolly
|
|
|
|
|
if not self:IsMythicPlus() then--On M+ he uses Trade Wind's Vigor 1 second into pull
|
|
|
|
|
timerLuckySevensCD:Start(9.8-delay, bossGUID)
|
|
|
|
|
end
|
|
|
|
|
elseif cid == 126847 then--Raoul
|
|
|
|
|
timerTappedKegCD:Start(12.2-delay, bossGUID)
|
|
|
|
|
else--Eudora
|
|
|
|
|
timerChainShotCD:Start(4.2-delay, bossGUID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if foundTwo then
|
|
|
|
|
if foundThree then
|
|
|
|
|
self:SetCreatureID(foundOne, foundTwo, foundThree)
|
|
|
|
|
else
|
|
|
|
|
self:SetCreatureID(foundOne, foundTwo)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:PowderShotTarget(targetname)
|
|
|
|
|
if not targetname then return end
|
|
|
|
|
if targetname == UnitName("player") then
|
|
|
|
|
specWarnPowderShot:Show()
|
|
|
|
|
specWarnPowderShot:Play("targetyou")
|
|
|
|
|
else
|
|
|
|
|
warnPowderShot:Show(targetname)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:OnCombatStart(delay)
|
|
|
|
|
if not self:IsNormal() then
|
|
|
|
|
timerTendingBarCD:Start(8-delay)
|
|
|
|
|
end
|
|
|
|
|
self:Schedule(1, scanCaptains, self, true, delay)--1 second delay to give IEEU time to populate boss unitIDs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:OnCombatEnd()
|
|
|
|
|
if self.Options.RangeFrame then
|
|
|
|
|
DBM.RangeCheck:Hide()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:OnTimerRecovery()
|
|
|
|
|
scanCaptains(self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 258338 then
|
|
|
|
|
specWarnBlackoutBarrel:Show()
|
|
|
|
|
specWarnBlackoutBarrel:Play("changetarget")
|
|
|
|
|
timerBlackoutBarrelCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 256589 then
|
|
|
|
|
specWarnBarrelSmash:Show()
|
|
|
|
|
specWarnBarrelSmash:Play("justrun")
|
|
|
|
|
timerBarrelSmashCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 257117 then
|
|
|
|
|
warnLuckySevens:Show()
|
|
|
|
|
timerLuckySevensCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 281329 then
|
|
|
|
|
|
|
|
|
|
timerTradeWindsVigorCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 267522 then
|
|
|
|
|
specWarnCuttingSurge:Show()
|
|
|
|
|
specWarnCuttingSurge:Play("chargemove")
|
|
|
|
|
timerCuttingSurgeCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 272884 then
|
|
|
|
|
warnTappedKeg:Show()
|
|
|
|
|
timerTappedKegCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 267533 then
|
|
|
|
|
specWarnWhirlpoolofBlades:Show()
|
|
|
|
|
specWarnWhirlpoolofBlades:Play("watchstep")
|
|
|
|
|
timerWhirlpoolofBladesCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 272902 then
|
|
|
|
|
warnChainShot:Show()
|
|
|
|
|
timerChainShotCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 265088 or spellId == 264608 or spellId == 265168 then
|
|
|
|
|
if spellId == 265168 then
|
|
|
|
|
warnCausticBrew:Show()
|
|
|
|
|
elseif spellId == 265088 then
|
|
|
|
|
warnGoodBrew:Show(L.critBrew)
|
|
|
|
|
else--264608
|
|
|
|
|
warnGoodBrew:Show(L.hasteBrew)
|
|
|
|
|
end
|
|
|
|
|
timerTendingBarCD:Start()
|
|
|
|
|
elseif spellId == 256979 and self:IsMythic() then
|
|
|
|
|
self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "PowderShotTarget", 0.1, 16, true, nil, nil, nil, true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 258381 then
|
|
|
|
|
specWarnGrapeShot:Show()
|
|
|
|
|
specWarnGrapeShot:Play("stilldanger")
|
|
|
|
|
timerGrapeShotCD:Start(nil, args.sourceGUID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if (spellId == 265085 or spellId == 265056) and self:AntiSpam(3, 2) then
|
|
|
|
|
local unitId = self:GetUnitIdFromGUID(args.destGUID, true)
|
|
|
|
|
if unitId and UnitIsEnemy("player", unitId) then
|
|
|
|
|
specWarnBrewOnBoss:Show(args.destName)
|
|
|
|
|
specWarnBrewOnBoss:Play("moveboss")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 278467 and self:AntiSpam(3, 2) then
|
|
|
|
|
local unitId = self:GetUnitIdFromGUID(args.destGUID, true)
|
|
|
|
|
if unitId and UnitIsEnemy("player", unitId) then
|
|
|
|
|
warnCausticBrewOnBoss:Show(args.destName)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
|
|
|
if spellId == 272397 and destGUID == UnitGUID("player") and self:AntiSpam(2, 1) and not self:IsTank() 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 == 126845 then--Captain Jolly
|
|
|
|
|
timerCuttingSurgeCD:Stop(args.destGUID)
|
|
|
|
|
timerWhirlpoolofBladesCD:Stop(args.destGUID)
|
|
|
|
|
timerLuckySevensCD:Stop(args.destGUID)
|
|
|
|
|
timerTradeWindsVigorCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 126847 then--Captain Raoul
|
|
|
|
|
timerBarrelSmashCD:Stop(args.destGUID)
|
|
|
|
|
timerBlackoutBarrelCD:Stop(args.destGUID)
|
|
|
|
|
timerTappedKegCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 126848 then--Captain Eudora
|
|
|
|
|
timerGrapeShotCD:Stop(args.destGUID)
|
|
|
|
|
timerChainShotCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 133219 then--Rummy Mancomb (You bastard, you killed Rummy!)
|
|
|
|
|
timerTendingBarCD:Stop()
|
|
|
|
|
end
|
|
|
|
|
end
|