|
|
|
|
local mod = DBM:NewMod("TheRookeryTrash", "DBM-Party-WarWithin", 3)
|
|
|
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
|
|
|
|
|
|
mod:SetRevision("20240820080631")
|
|
|
|
|
--mod:SetModelID(47785)
|
|
|
|
|
mod.isTrashMod = true
|
|
|
|
|
mod.isTrashModBossFightAllowed = true
|
|
|
|
|
|
|
|
|
|
mod:RegisterEvents(
|
|
|
|
|
"SPELL_CAST_START 426893 450628 427323 427404 430013 427616 430754 423979 430805 430812 432959",
|
|
|
|
|
"SPELL_CAST_SUCCESS 427260 430805 432959 426893 450628 427323 427404 430013 427616 430754 430179 423979 430812",
|
|
|
|
|
"SPELL_INTERRUPT",
|
|
|
|
|
"SPELL_AURA_APPLIED 430179 427260",
|
|
|
|
|
-- "SPELL_AURA_APPLIED_DOSE",
|
|
|
|
|
-- "SPELL_AURA_REMOVED",
|
|
|
|
|
"UNIT_DIED"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
--TODO, more spells probably
|
|
|
|
|
--[[
|
|
|
|
|
(ability.id = 426893 or ability.id = 450628 or ability.id = 427323 or ability.id = 427404 or ability.id = 430013 or ability.id = 427616 or ability.id = 430754 or ability.id = 423979 or ability.id = 430179 or ability.id = 430805 or ability.id = 430812 or ability.id = 432959) and (type = "begincast" or type = "cast")
|
|
|
|
|
or ability.id = 427260 and type = "cast"
|
|
|
|
|
or stoppedAbility.id = 430805 or stoppedAbility.id = 432959
|
|
|
|
|
--]]
|
|
|
|
|
local warnEntropyShield = mod:NewCastAnnounce(450628, 3)
|
|
|
|
|
local warnEnergizedBarrage = mod:NewCastAnnounce(427616, 3, nil, nil, "Tank")--Only warn tank by default since tank should aim it away from anyone else
|
|
|
|
|
local warnVoidShell = mod:NewCastAnnounce(430754, 3, nil, nil, nil, nil, nil, 3)
|
|
|
|
|
local warnAttractingShadows = mod:NewCastAnnounce(430812, 3, nil, nil, nil, nil, nil, 12)
|
|
|
|
|
|
|
|
|
|
local specWarnBoundingVoid = mod:NewSpecialWarningDodge(426893, nil, nil, nil, 1, 2)
|
|
|
|
|
local specWarnChargedBombardment = mod:NewSpecialWarningDodge(427323, nil, nil, nil, 1, 2)
|
|
|
|
|
local specWarnLocalizedStorm = mod:NewSpecialWarningSpell(427404, nil, nil, nil, 1, 2)--Maybe change to Break LOS alert, needs more testing
|
|
|
|
|
local specWarnThunderstrike = mod:NewSpecialWarningDodge(430013, nil, nil, nil, 1, 2)
|
|
|
|
|
local specWarnImplosion = mod:NewSpecialWarningMoveAway(423979, nil, nil, nil, 1, 2)
|
|
|
|
|
local yellImplosion = mod:NewShortYell(423979)
|
|
|
|
|
local specWarnSeepingCorruption = mod:NewSpecialWarningMoveAway(430179, nil, nil, nil, 1, 2)
|
|
|
|
|
local yellSeepingCorruption = mod:NewShortYell(430179)
|
|
|
|
|
local specWarnSeepingCorruptionDispel = mod:NewSpecialWarningDispel(430179, "RemoveCurse", nil, nil, 1, 2)
|
|
|
|
|
local specWarnEnrageRook = mod:NewSpecialWarningDispel(427260, "RemoveEnrage", nil, nil, 1, 2)
|
|
|
|
|
local specWarnArcingVoid = mod:NewSpecialWarningInterrupt(430805, "HasInterrupt", nil, nil, 1, 2)
|
|
|
|
|
local specWarnVoidVolley = mod:NewSpecialWarningInterrupt(432959, "HasInterrupt", nil, nil, 1, 2)
|
|
|
|
|
|
|
|
|
|
--Almost all timers probably wrong now, but can't use public WCL to fix this since all logs short
|
|
|
|
|
--Also, all of them were moved to success preemtively but if stops actually DO put any of these on CD, then the preemtive move actually broke timer
|
|
|
|
|
local timerBoundingVoidCD = mod:NewCDNPTimer(10.1, 426893, nil, nil, nil, 3)
|
|
|
|
|
local timerEntropyShieldCD = mod:NewCDNPTimer(25.2, 450628, nil, nil, nil, 5)--Single cast instance, poor sample
|
|
|
|
|
local timerChargedBombardmentCD = mod:NewCDNPTimer(17.6, 427323, nil, nil, nil, 3)
|
|
|
|
|
local timerLocalizedStormCD = mod:NewCDNPTimer(25.9, 427404, nil, nil, nil, 2)
|
|
|
|
|
local timerThunderstrikeCD = mod:NewCDNPTimer(15.1, 430013, nil, nil, nil, 3)
|
|
|
|
|
local timerEnergizedBarrageCD = mod:NewCDNPTimer(20, 427616, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
|
|
|
local timerEnrageRookCD = mod:NewCDNPTimer(15, 427260, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)--17-2 due to waiting for success
|
|
|
|
|
local timerVoidShellCD = mod:NewCDNPTimer(18.7, 430754, nil, nil, nil, 5)
|
|
|
|
|
local timerSeepingCorruptionCD = mod:NewCDNPTimer(25.2, 430179, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)
|
|
|
|
|
local timerImplosionCD = mod:NewCDNPTimer(15.5, 423979, nil, nil, nil, 3)
|
|
|
|
|
local timerArcingVoidCD = mod:NewCDNPTimer(13.5, 430805, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
|
|
|
local timerVoidVolleyCD = mod:NewCDNPTimer(15.6, 432959, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
|
|
|
local timerAttractingShadowsCD = mod:NewCDNPTimer(20.2, 430812, nil, nil, nil, 2)
|
|
|
|
|
|
|
|
|
|
--local playerName = UnitName("player")
|
|
|
|
|
|
|
|
|
|
--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc, 7 off interrupt
|
|
|
|
|
|
|
|
|
|
--[[
|
|
|
|
|
function mod:CLTarget(targetname)
|
|
|
|
|
if not targetname then return end
|
|
|
|
|
if targetname == UnitName("player") then
|
|
|
|
|
if self:AntiSpam(4, 5) then
|
|
|
|
|
specWarnChainLightning:Show()
|
|
|
|
|
specWarnChainLightning:Play("runout")
|
|
|
|
|
end
|
|
|
|
|
yellChainLightning:Yell()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if not self:IsValidWarning(args.sourceGUID) then return end
|
|
|
|
|
if spellId == 426893 then
|
|
|
|
|
if self:AntiSpam(3, 2) then
|
|
|
|
|
specWarnBoundingVoid:Show()
|
|
|
|
|
specWarnBoundingVoid:Play("watchorb")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 427323 then
|
|
|
|
|
if self:AntiSpam(3, 2) then
|
|
|
|
|
specWarnChargedBombardment:Show()
|
|
|
|
|
specWarnChargedBombardment:Play("chargemove")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 450628 then
|
|
|
|
|
warnEntropyShield:Show()
|
|
|
|
|
elseif spellId == 427404 then
|
|
|
|
|
if self:AntiSpam(3, 4) then
|
|
|
|
|
specWarnLocalizedStorm:Show()
|
|
|
|
|
specWarnLocalizedStorm:Play("aesoon")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 430013 then
|
|
|
|
|
if self:AntiSpam(3, 2) then
|
|
|
|
|
specWarnThunderstrike:Show()
|
|
|
|
|
specWarnThunderstrike:Play("chargemove")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 427616 then
|
|
|
|
|
if self:AntiSpam(3, 5) then
|
|
|
|
|
warnEnergizedBarrage:Show()
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 430754 then
|
|
|
|
|
if self:AntiSpam(4, 6) then
|
|
|
|
|
warnVoidShell:Show()
|
|
|
|
|
warnVoidShell:Play("crowdcontrol")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 423979 then
|
|
|
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
|
|
|
specWarnImplosion:Show()
|
|
|
|
|
specWarnImplosion:Play("range5")
|
|
|
|
|
yellImplosion:Yell()
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 430805 then
|
|
|
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
|
|
|
specWarnArcingVoid:Show(args.sourceName)
|
|
|
|
|
specWarnArcingVoid:Play("kickcast")
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 432959 then
|
|
|
|
|
--if self.Options.SpecWarn430805interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
|
|
|
specWarnVoidVolley:Show(args.sourceName)
|
|
|
|
|
specWarnVoidVolley:Play("kickcast")
|
|
|
|
|
--elseif self:AntiSpam(3, 7) then
|
|
|
|
|
-- warnTempest:Show()
|
|
|
|
|
--end
|
|
|
|
|
elseif spellId == 430812 then
|
|
|
|
|
warnAttractingShadows:Show()
|
|
|
|
|
warnAttractingShadows:Play("pullin")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if not self:IsValidWarning(args.sourceGUID) then return end
|
|
|
|
|
if spellId == 427260 then--Doesn't go on CD until cast, so using stuns to stop it causes recast
|
|
|
|
|
timerEnrageRookCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 430805 then
|
|
|
|
|
timerArcingVoidCD:Start(13.5, args.sourceGUID)
|
|
|
|
|
elseif spellId == 432959 then
|
|
|
|
|
timerVoidVolleyCD:Start(15.6, args.sourceGUID)
|
|
|
|
|
elseif spellId == 426893 then
|
|
|
|
|
timerBoundingVoidCD:Start(10.1, args.sourceGUID)
|
|
|
|
|
elseif spellId == 450628 then
|
|
|
|
|
timerEntropyShieldCD:Start(25.2, args.sourceGUID)
|
|
|
|
|
elseif spellId == 427323 then
|
|
|
|
|
timerChargedBombardmentCD:Start(17.6, args.sourceGUID)
|
|
|
|
|
elseif spellId == 427404 then
|
|
|
|
|
timerLocalizedStormCD:Start(25.9, args.sourceGUID)
|
|
|
|
|
elseif spellId == 430013 then
|
|
|
|
|
timerThunderstrikeCD:Start(15.1, args.sourceGUID)
|
|
|
|
|
elseif spellId == 427616 then
|
|
|
|
|
timerEnergizedBarrageCD:Start(20, args.sourceGUID)
|
|
|
|
|
elseif spellId == 430754 then
|
|
|
|
|
timerVoidShellCD:Start(18.7, args.sourceGUID)
|
|
|
|
|
elseif spellId == 430179 then
|
|
|
|
|
timerSeepingCorruptionCD:Start(25.2, args.sourceGUID)
|
|
|
|
|
elseif spellId == 423979 then
|
|
|
|
|
timerImplosionCD:Start(nil, args.sourceGUID)
|
|
|
|
|
elseif spellId == 430812 then
|
|
|
|
|
timerAttractingShadowsCD:Start(20.2, args.sourceGUID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_INTERRUPT(args)
|
|
|
|
|
if not self.Options.Enabled then return end
|
|
|
|
|
local spellId = args.extraSpellId
|
|
|
|
|
if spellId == 430805 then
|
|
|
|
|
timerArcingVoidCD:Start(13.5, args.sourceGUID)
|
|
|
|
|
elseif spellId == 432959 then
|
|
|
|
|
timerVoidVolleyCD:Start(15.6, args.sourceGUID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
|
|
|
if not self.Options.Enabled then return end
|
|
|
|
|
local spellId = args.spellId
|
|
|
|
|
if spellId == 430179 then
|
|
|
|
|
--Always prio dispel over runout, even if on self cause can just dispel self
|
|
|
|
|
if self.Options.SpecWarn430179dispel and self:CheckDispelFilter("curse") then
|
|
|
|
|
specWarnSeepingCorruptionDispel:Show(args.destName)
|
|
|
|
|
specWarnSeepingCorruptionDispel:Play("helpdispel")
|
|
|
|
|
--Still do yell
|
|
|
|
|
if args:IsPlayer() then
|
|
|
|
|
yellSeepingCorruption:Yell()
|
|
|
|
|
end
|
|
|
|
|
elseif args:IsPlayer() then
|
|
|
|
|
specWarnSeepingCorruption:Show()
|
|
|
|
|
specWarnSeepingCorruption:Play("runout")
|
|
|
|
|
yellSeepingCorruption:Yell()
|
|
|
|
|
end
|
|
|
|
|
elseif spellId == 427260 then
|
|
|
|
|
specWarnEnrageRook:Show(args.destName)
|
|
|
|
|
specWarnEnrageRook:Play("enrage")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
|
|
|
|
|
|
function mod:UNIT_DIED(args)
|
|
|
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
|
|
|
if cid == 209801 then--Quartermaster Koratite
|
|
|
|
|
timerBoundingVoidCD:Stop(args.destGUID)
|
|
|
|
|
timerEntropyShieldCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 212786 then--Cursed Stormrider
|
|
|
|
|
timerChargedBombardmentCD:Stop(args.destGUID)
|
|
|
|
|
timerLocalizedStormCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 207186 then--Unruly Stormrook
|
|
|
|
|
timerThunderstrikeCD:Stop(args.destGUID)
|
|
|
|
|
timerEnergizedBarrageCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 214439 then--Corrupted Oracle
|
|
|
|
|
timerVoidShellCD:Stop(args.destGUID)
|
|
|
|
|
timerSeepingCorruptionCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 214419 then--Corrupted Rookguard
|
|
|
|
|
timerImplosionCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 207199 then--Cursed Rook Tender
|
|
|
|
|
timerEnrageRookCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 214421 then--Corrupted Thunderer
|
|
|
|
|
timerArcingVoidCD:Stop(args.destGUID)
|
|
|
|
|
timerAttractingShadowsCD:Stop(args.destGUID)
|
|
|
|
|
elseif cid == 212793 then--Void Asscendant
|
|
|
|
|
timerVoidVolleyCD:Stop()
|
|
|
|
|
end
|
|
|
|
|
end
|