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.

366 lines
12 KiB

local mod = DBM:NewMod(1830, "DBM-TrialofValor", nil, 861)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20220116041824")
mod:SetCreatureID(114323)
mod:SetEncounterID(1962)
mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(15651)
mod.respawnTime = 15
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 227514",
"SPELL_CAST_SUCCESS 227883 227816 228824",
"SPELL_AURA_APPLIED 228744 228794 228810 228811 228818 228819 232173 228228 228253 228248",
"SPELL_AURA_REMOVED 228744 228794 228810 228811 228818 228819",
"UNIT_SPELLCAST_SUCCEEDED boss1"
)
--(ability.id = 228247 or ability.id = 228251 or ability.id = 228227) and type = "cast"
local warnOffLeash = mod:NewSpellAnnounce(228201, 2, 129417)
local warnFangs = mod:NewCountAnnounce(227514, 2)
local warnShadowLick = mod:NewTargetAnnounce(228253, 2, nil, "Healer")
local warnFrostLick = mod:NewTargetAnnounce(228248, 3)
local specWarnBreath = mod:NewSpecialWarningCount(228187, nil, nil, nil, 1, 2)
local specWarnLeap = mod:NewSpecialWarningCount(227883, nil, nil, nil, 2)
local specWarnCharge = mod:NewSpecialWarningDodge(227816, nil, nil, nil, 2, 2)
local specWarnBerserk = mod:NewSpecialWarningSpell(227883, nil, nil, nil, 3)
local specWarnFlameLick = mod:NewSpecialWarningMoveAway(228228, nil, nil, nil, 1, 2)
local yellFlameLick = mod:NewYell(228228, nil, false, 2)
local specWarnShadowLick = mod:NewSpecialWarningYou(228253, false, nil, nil, 1)--Not sure warning player is helpful
local yellShadowLick = mod:NewYell(228253, nil, false, 2)
local specWarnFrostLick = mod:NewSpecialWarningYou(228248, false, nil, nil, 1)--Warning player they are stunned probably somewhat useful. Still can't do much about it.
local yellFrostLick = mod:NewYell(228248, nil, false, 2)
local specWarnFrostLickDispel = mod:NewSpecialWarningDispel(228248, "Healer", nil, nil, 1, 2)
--Mythic
local specWarnFlamingFoam = mod:NewSpecialWarningYou(228744, nil, nil, nil, 1)--228794 jump id
local yellFlameFoam = mod:NewPosYell(228744, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)
local specWarnBrineyFoam = mod:NewSpecialWarningYou(228810, nil, nil, nil, 1)--228811 jump id
local yellBrineyFoam = mod:NewPosYell(228810, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)
local specWarnShadowyFoam = mod:NewSpecialWarningYou(228818, nil, nil, nil, 1)
local yellShadowyFoam = mod:NewPosYell(228818, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)
--local timerLickCD = mod:NewCDCountTimer(45, "ej14463", nil, nil, nil, 3, 228228)
local timerLeashCD = mod:NewNextTimer(45, 228201, nil, nil, nil, 6, 129417)
local timerLeash = mod:NewBuffActiveTimer(30, 228201, nil, nil, nil, 6)
local timerFangsCD = mod:NewCDCountTimer(20.5, 227514, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, 2, 4)--20.5-23
local timerBreathCD = mod:NewCDCountTimer(20.5, 228187, nil, nil, nil, 5, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 4)
local timerLeapCD = mod:NewCDCountTimer(22, 227883, nil, nil, nil, 3)
local timerChargeCD = mod:NewCDTimer(10.9, 227816, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)
mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12)
local timerVolatileFoamCD = mod:NewCDCountTimer(15.4, 228824, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON)
local berserkTimer = mod:NewBerserkTimer(300)
mod:AddSetIconOption("SetIconOnFoam", "ej14535", true)
mod:AddBoolOption("YellActualRaidIcon", false)
mod:AddBoolOption("FilterSameColor", true)
mod:AddInfoFrameOption(228824, true)
mod:AddRangeFrameOption(5, 228824)
mod.vb.fangCast = 0
mod.vb.breathCast = 0
mod.vb.leapCast = 0
mod.vb.foamCast = 0
mod.vb.YellRealIcons = false
--Ugly way to do it, vs a local table, but this ensures that if icon setter disconnects, it doesn't get messed up
mod.vb.one = "None"
mod.vb.two = "None"
mod.vb.three = "None"
local updateInfoFrame
local fireFoam, frostFoam, shadowFoam = DBM:GetSpellInfo(228744), DBM:GetSpellInfo(228810), DBM:GetSpellInfo(228818)
local fireDebuff, frostDebuff, shadowDebuff = DBM:GetSpellInfo(227539), DBM:GetSpellInfo(227566), DBM:GetSpellInfo(227570)
do
local lines = {}
updateInfoFrame = function()
table.wipe(lines)
for uId in DBM:GetGroupMembers() do
if DBM:UnitDebuff(uId, fireFoam) then
if mod.Options.FilterSameColor and DBM:UnitDebuff(uId, fireDebuff) then
--Do nothing
else
lines[UnitName(uId)] = "|cffff0000"..STRING_SCHOOL_FIRE.."|r"
end
elseif DBM:UnitDebuff(uId, frostFoam) then
if mod.Options.FilterSameColor and DBM:UnitDebuff(uId, frostDebuff) then
--Do nothing
else
lines[UnitName(uId)] = "|cff0000ff"..STRING_SCHOOL_FROST.."|r"
end
elseif DBM:UnitDebuff(uId, shadowFoam) then
if mod.Options.FilterSameColor and DBM:UnitDebuff(uId, shadowDebuff) then
--Do nothing
else
lines[UnitName(uId)] = "|cFF9932CD"..STRING_SCHOOL_SHADOW.."|r"
end
end
end
return lines
end
end
local function delayedSync(self)
self:SendSync("YellActualRaidIcon")
end
function mod:OnCombatStart(delay)
self.vb.fangCast = 0
self.vb.breathCast = 0
self.vb.leapCast = 0
--All other combat start timers started by Helyatosis
if not self:IsLFR() then
if self:IsMythic() then
self.vb.one = "None"
self.vb.two = "None"
self.vb.three = "None"
self.vb.foamCast = 0
self.vb.YellRealIcons = false
--timerLickCD:Start(12.4, 1)
berserkTimer:Start(240-delay)
if self.Options.InfoFrame then
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(228824))
DBM.InfoFrame:Show(5, "function", updateInfoFrame, false, true)
end
if UnitIsGroupLeader("player") then
if self.Options.YellActualRaidIcon then
self:Schedule(5, delayedSync, self)--Delayed to ensure it's not sent at same time as someone elses OnCombatStart firing and setting YellRealIcons back to false
end
end
else
berserkTimer:Start(-delay)
end
if self.Options.RangeFrame then
DBM.RangeCheck:Show(5)
end
else
berserkTimer:Start(420-delay)
end
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 == 227514 then
self.vb.fangCast = self.vb.fangCast + 1
warnFangs:Show(self.vb.fangCast)
if self.vb.fangCast == 1 then
timerFangsCD:Start(nil, 2)
end
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 227883 then
self.vb.leapCast = self.vb.leapCast + 1
specWarnLeap:Show(self.vb.leapCast)
if self.vb.leapCast == 1 then
timerLeapCD:Start(nil, 2)
end
elseif spellId == 227816 then
specWarnCharge:Show()
specWarnCharge:Play("chargemove")
elseif spellId == 228824 then
self.vb.foamCast = self.vb.foamCast + 1
if self.vb.foamCast < 3 then
timerVolatileFoamCD:Start(nil, self.vb.foamCast+1)
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if (spellId == 228744 or spellId == 228794 or spellId == 228810 or spellId == 228811 or spellId == 228818 or spellId == 228819) and args:IsDestTypePlayer() then
local icon = 0
local uId = DBM:GetRaidUnitId(args.destName)
local currentIcon = GetRaidTargetIndex(uId) or 0
if currentIcon == 0 then--Only if player doesn't already have a debuff
if self.vb.one == "None" then
self.vb.one = args.destName
icon = 1
elseif self.vb.two == "None" then
self.vb.two = args.destName
icon = 2
elseif self.vb.three == "None" then
self.vb.three = args.destName
icon = 3
end
end
if spellId == 228744 or spellId == 228794 then
if self.Options.FilterSameColor and DBM:UnitDebuff(uId, fireDebuff) then
if icon == 1 then
self.vb.one = "None"
elseif icon == 2 then
self.vb.two = "None"
elseif icon == 3 then
self.vb.three = "None"
end
return
end
if args:IsPlayer() then
specWarnFlamingFoam:Show()
if self.vb.YellRealIcons then
if icon ~= 0 then
yellFlameFoam:Yell(icon, args.spellName, icon)
end
else
yellFlameFoam:Yell(7, args.spellName, 7)
end
end
if self.Options.SetIconOnFoam and icon ~= 0 then
self:SetIcon(args.destName, icon)
end
elseif spellId == 228810 or spellId == 228811 then
if self.Options.FilterSameColor and DBM:UnitDebuff(uId, frostDebuff) then
if icon == 1 then
self.vb.one = "None"
elseif icon == 2 then
self.vb.two = "None"
elseif icon == 3 then
self.vb.three = "None"
end
return
end
if args:IsPlayer() then
specWarnBrineyFoam:Show()
if self.vb.YellRealIcons then
if icon ~= 0 then
yellBrineyFoam:Yell(icon, args.spellName, icon)
end
else
yellBrineyFoam:Yell(6, args.spellName, 6)
end
end
if self.Options.SetIconOnFoam and icon ~= 0 then
self:SetIcon(args.destName, icon)
end
elseif spellId == 228818 or spellId == 228819 then
if self.Options.FilterSameColor and DBM:UnitDebuff(uId, shadowDebuff) then
if icon == 1 then
self.vb.one = "None"
elseif icon == 2 then
self.vb.two = "None"
elseif icon == 3 then
self.vb.three = "None"
end
return
end
if args:IsPlayer() then
specWarnShadowyFoam:Show()
if self.vb.YellRealIcons then
if icon ~= 0 then
yellShadowyFoam:Yell(icon, args.spellName, icon)
end
else
yellShadowyFoam:Yell(3, args.spellName, 3)
end
end
if self.Options.SetIconOnFoam and icon ~= 0 then
self:SetIcon(args.destName, icon)
end
end
elseif spellId == 232173 then--Berserk
timerLeapCD:Stop()
timerChargeCD:Stop()
specWarnBerserk:Show()
elseif spellId == 228228 then
if args:IsPlayer() then
specWarnFlameLick:Show()
specWarnFlameLick:Play("runout")
yellFlameLick:Yell()
end
elseif spellId == 228253 then
warnShadowLick:CombinedShow(0.3, args.destName)
if args:IsPlayer() then
specWarnShadowLick:Show()
yellShadowLick:Yell()
end
elseif spellId == 228248 then
if self.Options.specwarn228248dispel then
specWarnFrostLickDispel:CombinedShow(0.3, args.destName)
if self:AntiSpam(3, 1) then
specWarnFrostLickDispel:Play("helpdispel")
end
else
warnFrostLick:CombinedShow(0.3, args.destName)
end
if args:IsPlayer() then
specWarnFrostLick:Show()
yellFrostLick:Yell()
end
end
end
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if (spellId == 228744 or spellId == 228794 or spellId == 228810 or spellId == 228811 or spellId == 228818 or spellId == 228819) and args:IsDestTypePlayer() then
local uId = DBM:GetRaidUnitId(args.destName)
if self.Options.SetIconOnFoam and not (DBM:UnitDebuff(uId, fireFoam) or DBM:UnitDebuff(uId, frostFoam) or DBM:UnitDebuff(uId, shadowFoam)) then
if args.destName == self.vb.one then
self.vb.one = "None"
elseif args.destName == self.vb.two then
self.vb.two = "None"
elseif args.destName == self.vb.three then
self.vb.three = "None"
end
self:SetIcon(args.destName, 0)
end
end
end
--[[
Might be inversed depending on perspective.
227658: Fiery left, Salty middle, Dark right
227660: Fiery left, Dark middle, Salty right
227666: Salty left, Fiery middle, Dark right
227667: Salty left, Dark middle, Fiery right
227669: Dark left, Fiery middle, Salty right
227673: Dark left, Salty middle, Fiery right
--]]
--Better to just assume things aren't in cobmat log anymore, then switch if they actually are.
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 227573 then--Guardian's Breath (pre cast used for all 6 versions of breath. Not a bad guess for my drycode huh? :) )
self.vb.breathCast = self.vb.breathCast + 1
specWarnBreath:Show(self.vb.breathCast)
specWarnBreath:Play("breathsoon")
if self.vb.breathCast == 1 then
timerBreathCD:Start(nil, 2)
end
elseif spellId == 228201 then--Off the Leash
self.vb.leapCast = 0
warnOffLeash:Show()
timerLeash:Start()
--self:Schedule(30, cancelLeash, self)
timerChargeCD:Start()
elseif spellId == 231561 then--Helyatosis (off the leash ending)
self.vb.fangCast = 0
self.vb.breathCast = 0
timerFangsCD:Start(4, 1)
timerLeashCD:Start()--45
timerBreathCD:Start(11, 1)--11-14
if self:IsMythic() then
self.vb.foamCast = 0
timerVolatileFoamCD:Start(10, 1)
end
end
end
function mod:OnSync(msg)
if msg == "YellActualRaidIcon" then
DBM:Debug("YellRealIcons = true", 2)
self.vb.YellRealIcons = true
end
end