local mod = DBM : NewMod ( 2454 , " DBM-Party-Shadowlands " , 9 , 1194 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240428124541 " )
mod : SetCreatureID ( 176556 , 176555 , 176705 )
mod : SetEncounterID ( 2441 )
mod : SetUsedIcons ( 1 )
mod : SetHotfixNoticeRev ( 20220405000000 )
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 349663 349797 349987 349934 349954 350086 350101 " ,
" SPELL_CAST_SUCCESS 181089 " ,
" SPELL_AURA_APPLIED 349627 349933 349954 350037 " ,
" SPELL_AURA_REMOVED 349627 349933 " ,
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED",
" UNIT_DIED " ,
" RAID_BOSS_WHISPER " ,
" CHAT_MSG_MONSTER_SAY "
)
--TODO, find way of detecting hard mode timers
--[[
( ability.id = 349663 or ability.id = 349797 or ability.id = 349987 or ability.id = 349934 or ability.id = 349954 or ability.id = 350086 or ability.id = 350101 ) and type = " begincast "
or ability.id = 181089 and type = " cast "
or ability.id = 350037 and type = " applybuff "
or target.id = 176556 and type = " death "
or type = " dungeonencounterstart " or type = " dungeonencounterend "
--]]
--General
--local specWarnGTFO = mod:NewSpecialWarningGTFO(320366, nil, nil, nil, 1, 8)
--Alcruux
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 23159 ) )
local warnGluttony = mod : NewTargetNoFilterAnnounce ( 349627 , 2 )
local specWarnGluttony = mod : NewSpecialWarningYou ( 349627 , nil , nil , nil , 1 , 2 )
local yellGluttony = mod : NewYell ( 349627 )
local yellGluttonyFades = mod : NewShortFadesYell ( 349627 )
local specWarnGripofHunger = mod : NewSpecialWarningRun ( 349663 , nil , nil , nil , 4 , 2 )
local specWarnGrandConsumption = mod : NewSpecialWarningDodge ( 349663 , nil , nil , nil , 2 , 2 )
local timerGripofHungerCD = mod : NewCDTimer ( 23 , 349663 , nil , nil , nil , 2 ) --23-30
local timerGrandconsumptionCD = mod : NewCDTimer ( 30.3 , 349797 , nil , nil , nil , 3 )
mod : AddSetIconOption ( " SetIconOnGluttony " , 349627 , true , 0 , { 1 } )
--Achillite
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 23231 ) )
local specWarnVentingProtocol = mod : NewSpecialWarningDodge ( 349987 , nil , nil , nil , 2 , 2 )
local specWarnPurificationProtocol = mod : NewSpecialWarningDispel ( 349954 , " RemoveMagic " , nil , nil , 1 , 2 )
local timerAchilliteCD = mod : NewNextTimer ( 23 , - 23231 , nil , nil , nil , 1 , " 132349 " )
local timerVentingProtocolCD = mod : NewCDTimer ( 26.6 , 349987 , nil , nil , nil , 3 )
local timerFlagellationProtocolCD = mod : NewCDTimer ( 23 , 349934 , nil , nil , nil , 3 )
local timerPurificationProtocolCD = mod : NewCDTimer ( 18.2 , 320200 , nil , nil , nil , 3 , nil , DBM_COMMON_L.MAGIC_ICON )
mod : AddInfoFrameOption ( 349934 , true )
--Venza Goldfuse
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 23241 ) )
local specWarnWhirlingAnnihilation = mod : NewSpecialWarningRun ( 350086 , nil , nil , nil , 4 , 2 )
local specWarnChainsofDamnation = mod : NewSpecialWarningSwitch ( 350101 , " -Healer " , nil , nil , 1 , 2 )
local yellChainsofDamnation = mod : NewYell ( 350101 , nil , nil , nil , " YELL " )
local timerVenzaCD = mod : NewNextTimer ( 23 , - 23241 , nil , nil , nil , 1 , " 132349 " )
local timerWhirlingAnnihilationCD = mod : NewCDTimer ( 30.3 , 350086 , nil , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerChainsofDamnationCD = mod : NewCDCountTimer ( 30.3 , 350101 , nil , nil , nil , 1 )
local activeBossGUIDS = { }
mod.vb . chainsCast = 0
function mod : OnCombatStart ( delay )
--Alcruux timers
timerGripofHungerCD : Start ( 11.8 - delay )
timerGrandconsumptionCD : Start ( 24.2 - delay )
--if hardmode stuff then
--timerAchilliteCD:Start(28-delay)
--timerVenzaCD:Start(65-delay)
--end
end
function mod : OnCombatEnd ( )
table.wipe ( activeBossGUIDS )
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 349663 then
specWarnGripofHunger : Show ( )
specWarnGripofHunger : Play ( " justrun " )
timerGripofHungerCD : Start ( )
elseif spellId == 349797 then
specWarnGrandConsumption : Show ( )
specWarnGrandConsumption : Play ( " watchorb " )
timerGrandconsumptionCD : Start ( )
elseif spellId == 349987 then
specWarnVentingProtocol : Show ( )
specWarnVentingProtocol : Play ( " watchorb " )
timerVentingProtocolCD : Start ( )
elseif spellId == 349934 then
timerFlagellationProtocolCD : Start ( )
elseif spellId == 349954 then
timerPurificationProtocolCD : Start ( )
elseif spellId == 350086 then
specWarnWhirlingAnnihilation : Show ( )
specWarnWhirlingAnnihilation : Play ( " justrun " )
specWarnWhirlingAnnihilation : ScheduleVoice ( 1 , " keepmove " )
timerWhirlingAnnihilationCD : Start ( )
elseif spellId == 350101 then
self.vb . chainsCast = self.vb . chainsCast + 1
specWarnChainsofDamnation : Show ( )
specWarnChainsofDamnation : Play ( " targetchange " )
timerChainsofDamnationCD : Start ( self.vb . chainsCast == 1 and 21.8 or 30.3 , self.vb . chainsCast + 1 )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 181089 then
local cid = self : GetCIDFromGUID ( args.sourceGUID )
if cid == 176555 then --Achillite
timerPurificationProtocolCD : Start ( 4.7 )
timerFlagellationProtocolCD : Start ( 14.5 )
timerVentingProtocolCD : Start ( 21.7 )
elseif cid == 176705 then --Venza Gldfuse
self.vb . chainsCast = 0
timerChainsofDamnationCD : Start ( 4.8 , 1 )
timerWhirlingAnnihilationCD : Start ( 16.9 )
end
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 349627 then
if args : IsPlayer ( ) then
specWarnGluttony : Show ( )
specWarnGluttony : Play ( " targetyou " )
yellGluttony : Yell ( )
yellGluttonyFades : Countdown ( spellId )
else
warnGluttony : Show ( args.destName )
end
if self.Options . SetIconOnGluttony then
self : SetIcon ( args.destName , 1 )
end
elseif spellId == 349933 then
if self.Options . InfoFrame then
local bossUnitID = self : GetUnitIdFromGUID ( args.destGUID )
DBM.InfoFrame : SetHeader ( args.spellName )
DBM.InfoFrame : Show ( 2 , " enemyabsorb " , nil , args.amount , bossUnitID )
end
elseif spellId == 349954 then
specWarnPurificationProtocol : CombinedShow ( 0.3 , args.destName )
specWarnPurificationProtocol : ScheduleVoice ( 0.3 , " helpdispel " )
elseif spellId == 350037 then --Achillite "dying" (doesn't fire UNIT_DIED)
timerVentingProtocolCD : Stop ( )
timerFlagellationProtocolCD : Stop ( )
timerPurificationProtocolCD : Stop ( )
end
end
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 349627 then
if args : IsPlayer ( ) then
yellGluttonyFades : Cancel ( )
end
if self.Options . SetIconOnGluttony then
self : SetIcon ( args.destName , 0 )
end
elseif spellId == 349933 then
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
end
end
--[[
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 320366 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 2 , 2 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 176556 then --Alcruux
timerGripofHungerCD : Stop ( )
timerGrandconsumptionCD : Stop ( )
end
end
function mod : RAID_BOSS_WHISPER ( msg )
if msg : find ( " 350101 " ) then
yellChainsofDamnation : Yell ( )
end
end
function mod : CHAT_MSG_MONSTER_SAY ( msg , npc , _ , _ , target )
--"<457.34 22:32:38> [CHAT_MSG_MONSTER_SAY] Are rampaging beasts ruining your day? We have the solution!#Xy'noc###Omegal##0#0##0#1027#nil#0#false#false#false#false", -- [6130]
--"<480.65 22:33:01> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args:#boss1#true#true#true#Achillite#Creature-0-4228-2441-29407-176555-00002A9633#elite#1982340#bo
--"<481.86 22:33:02> [CLEU] SPELL_CAST_SUCCESS#Creature-0-4228-2441-29407-176555-00002A9633#Achillite##nil#181089#Encounter Event#nil#nil", -- [6420]
if ( msg == L.AchilliteRPTrigger or msg : find ( L.AchilliteRPTrigger ) ) and self : LatencyCheck ( ) then
self : SendSync ( " AchilliteRP " )
--"<506.68 22:33:27> [CHAT_MSG_MONSTER_SAY] Now's my chance! That axe is mine!#Venza Goldfuse###Omegal##0#0##0#1039#nil#0#false#false#false#false", -- [6741]
--"<530.43 22:33:51> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args:#boss1#true#true#true#Achillite#Creature-0-4228-2441-29407-176555-00002A9633#elite#43829#boss2#true#true#true#Venza Goldfuse#Creature-0-4228-2441-29407-176705-00002A
--"<530.43 22:33:51> [CLEU] SPELL_CAST_SUCCESS#Creature-0-4228-2441-29407-176705-00002A9633#Venza Goldfuse##nil#181089#Encounter Event#nil#nil", -- [7113]
elseif ( msg == L.VenzaRPTrigger or msg : find ( L.VenzaRPTrigger ) ) and self : LatencyCheck ( ) then
self : SendSync ( " VenzaRP " )
end
end
function mod : OnSync ( msg , targetname )
if not self : IsInCombat ( ) then return end
if msg == " AchilliteRP " then
timerAchilliteCD : Start ( 23.3 )
elseif msg == " VenzaRP " then
timerVenzaCD : Start ( 23.7 )
end
end