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.

164 lines
6.5 KiB

local mod = DBM:NewMod(2430, "DBM-Shadowlands", nil, 1192)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20211125075428")
mod:SetCreatureID(167524)
mod:SetEncounterID(2411)
mod:SetUsedIcons(8)
mod:SetReCombatTime(20)
mod:EnableWBEngageSync()--Enable syncing engage in outdoors
--mod:SetMinSyncRevision(11969)
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 327274 327280 327262",
"SPELL_CAST_SUCCESS 327256 327255 339278",
"SPELL_AURA_APPLIED 327255 339278",
"SPELL_AURA_APPLIED_DOSE 327255",
"SPELL_AURA_REMOVED 327280",
"CHAT_MSG_RAID_BOSS_EMOTE"
)
--TODO, verify swap stacks count for Mark, don't know it's CD so can't assess yet
--TODO, verify and adjust target scan for Charged Anima Blast
--TOODO, range of Charged Anima Blast is unknown
local warnVentAnima = mod:NewSpellAnnounce(327256, 3)
local warnMarkofPenitence = mod:NewStackAnnounce(327255, 2, nil, "Tank")
local warnLysoniasCall = mod:NewTargetAnnounce(339278, 3)
local warnChargedAnimaBlast = mod:NewTargetNoFilterAnnounce(327262, 4)
local specWarnUnleashedAnima = mod:NewSpecialWarningDodge(327274, nil, nil, nil, 2, 2)
local specWarnMarkofPenitence = mod:NewSpecialWarningStack(327255, nil, 3, nil, nil, 1, 6)
local specWarnMarkofPenitenceTaunt = mod:NewSpecialWarningTaunt(327255, nil, nil, nil, 1, 2)
local specWarnLysoniasCall = mod:NewSpecialWarningYou(339278, nil, nil, nil, 1, 2)
local specWarnChargedAnimaBlast = mod:NewSpecialWarningMoveAway(327262, nil, nil, nil, 3, 2)
local specWarnChargedAnimaBlastNear = mod:NewSpecialWarningClose(327262, nil, nil, nil, 3, 2)
local timerVentAnimaCD = mod:NewAITimer(11.6, 327256, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)
local timerUnleashedAnimaCD = mod:NewAITimer(82.0, 327274, nil, nil, nil, 3)
local timerRechargeAnima = mod:NewBuffActiveTimer(30, 327274, nil, nil, nil, 6)
local timerMarkofPenitenceCD = mod:NewAITimer(82.0, 327255, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerLysoniasCallCD = mod:NewAITimer(82.0, 339278, nil, nil, nil, 3)
local timerChargedAnimaBlastCD = mod:NewAITimer(82.0, 327262, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 5)
mod:AddRangeFrameOption(10, 327262)--TODO, update range if it's too big or too small
mod:AddSetIconOption("SetIconOnAnimaBlast", 327262, true, false, {8})
function mod:OnCombatStart(delay, yellTriggered)
if yellTriggered then
--timerVentAnimaCD:Start(1-delay)
--timerUnleashedAnimaCD:Start(1-delay)
--timerMarkofPenitenceCD:Start(1-delay)
--timerLysoniasCallCD:Start(1-delay)--Iffy, this might be something boss actually does during recharge
--timerChargedAnimaBlastCD:Start(1-delay)
end
if self.Options.RangeFrame then
DBM.RangeCheck:Show(10)
end
end
function mod:OnCombatEnd()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 327274 then
specWarnUnleashedAnima:Show()
specWarnUnleashedAnima:Play("watchstep")
timerUnleashedAnimaCD:Start()
elseif spellId == 327280 then--Recharge Anima
timerVentAnimaCD:Stop()
timerUnleashedAnimaCD:Stop()
timerMarkofPenitenceCD:Stop()
timerLysoniasCallCD:Stop()--Iffy, this might be something boss actually does during recharge
timerChargedAnimaBlastCD:Stop()
timerRechargeAnima:Start()
elseif spellId == 327262 then
timerChargedAnimaBlastCD:Start()
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 327256 then
warnVentAnima:Show()
timerVentAnimaCD:Start()
elseif spellId == 327255 then
timerMarkofPenitenceCD:Start()
elseif spellId == 339278 then
timerLysoniasCallCD:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 327255 then
local amount = args.amount or 1
if amount >= 3 then
if args:IsPlayer() then
specWarnMarkofPenitence:Show(amount)
specWarnMarkofPenitence:Play("stackhigh")
else
local _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
local remaining
if expireTime then
remaining = expireTime-GetTime()
end
if not UnitIsDeadOrGhost("player") and (not remaining or remaining and remaining < 12.7) then--TODO, input valid CD here
specWarnMarkofPenitenceTaunt:Show(args.destName)
specWarnMarkofPenitenceTaunt:Play("tauntboss")
else
warnMarkofPenitence:Show(args.destName, amount)
end
end
else
warnMarkofPenitence:Show(args.destName, amount)
end
elseif spellId == 339278 then
if args:IsPlayer() then
specWarnLysoniasCall:Show()
specWarnLysoniasCall:Play("targetyou")
else
warnLysoniasCall:CombinedShow(0.5, args.destName)--TODO, verify it's more than one target
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 327280 then--Recharge Anima
--Reactivate timers
timerVentAnimaCD:Start(2)
timerUnleashedAnimaCD:Start(2)
timerMarkofPenitenceCD:Start(2)
timerLysoniasCallCD:Start(2)--Iffy, this might be something boss actually does during recharge
timerChargedAnimaBlastCD:Start(2)
end
end
--"<54.60 11:04:21> [UNIT_SPELLCAST_START] Valinor(Zulrager) - Charged Anima Blast - 4s [[nameplate6:Cast-3-3883-2222-64-327262-0000EF4805:327262]]", -- [5166]
--"<54.61 11:04:21> [CLEU] SPELL_CAST_START#Creature-0-3883-2222-64-167524-00006F44AB#Valinor##nil#327262#Charged Anima Blast#nil#nil", -- [5168]
--"<54.72 11:04:21> [UNIT_TARGET] nameplate6#Valinor#Target: Disclaimz#TargetOfTarget: Valinor", -- [5175]
--"<54.96 11:04:21> [CHAT_MSG_RAID_BOSS_EMOTE] |TInterface\\Icons\\Spell_AnimaBastion_Beam.blp:20|t Valinor targets Disclaimz with a |cFFFF0000|Hspell:327262|h[Charged Anima Blast]|h|r!#Valinor###
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)
if msg:find("spell:327262") then
local targetname = DBM:GetUnitFullName(target) or target--For people not in group, GetUnitFullName fails so need to at least use blizz provided target as backup
if targetname == UnitName("player") then
specWarnChargedAnimaBlast:Show()
specWarnChargedAnimaBlast:Play("runout")
elseif self:CheckNearby(8, targetname) then
specWarnChargedAnimaBlastNear:Show(targetname)
specWarnChargedAnimaBlastNear:Play("runaway")
else
warnChargedAnimaBlast:Show(targetname)
end
if self.Options.SetIconOnAnimaBlast then
self:SetIcon(targetname, 8, 5)--Icon clears 1 second after blast
end
end
end