local mod = DBM : NewMod ( 2399 , " DBM-Party-Shadowlands " , 5 , 1186 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240106080507 " )
mod : SetCreatureID ( 162059 , 163077 ) --162059 Kin-Tara, 163077 Azules
mod : SetEncounterID ( 2357 )
mod : SetBossHPInfoToHighest ( )
mod : SetUsedIcons ( 1 )
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 320966 327481 317623 324368 " ,
" SPELL_CAST_SUCCESS 323636 " ,
" SPELL_AURA_APPLIED 323828 " ,
" SPELL_PERIODIC_DAMAGE 317626 " ,
" SPELL_PERIODIC_MISSED 317626 " ,
" UNIT_DIED " ,
" CHAT_MSG_MONSTER_YELL " ,
" CHAT_MSG_RAID_BOSS_EMOTE "
-- "UNIT_SPELLCAST_SUCCEEDED boss1 boss2"
)
--TODO, Verify new and improved flight detection
--TODO, the entire enrage mechanic seems to be gone? All logs havev bosses die together and none of enraged abilities ever used
--[[
( ability.id = 321009 or ability.id = 320966 or ability.id = 317623 ) and type = " begincast "
or ability.id = 323636 and type = " cast "
or ability.id = 323828 or ability.id = 331249
or ( target.id = 162059 or target.id = 163077 or target.id = 174212 ) and type = " death "
or ( ability.id = 324368 or ability.id = 317661 ) and type = " begincast "
--]]
--Kin-Tara
local KinTara = DBM : EJ_GetSectionInfo ( 21637 )
mod : AddTimerLine ( KinTara )
local warnChargedSpear = mod : NewTargetNoFilterAnnounce ( 321009 , 4 )
local specWarnOverheadSlash = mod : NewSpecialWarningDefensive ( 320966 , nil , nil , nil , 1 , 2 )
local specWarnDarkLance = mod : NewSpecialWarningInterrupt ( 327481 , " HasInterrupt " , nil , nil , 1 , 2 )
local specWarnChargedSpear = mod : NewSpecialWarningMoveAway ( 321009 , nil , nil , nil , 1 , 2 )
local yellChargedSpear = mod : NewYell ( 321009 )
local timerOverheadSlashCD = mod : NewCDTimer ( 6.3 , 320966 , nil , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON ) --6.3-11
local timerFlightCD = mod : NewCDTimer ( 145 , 313606 , nil , nil , nil , 6 )
local timerChargedSpearCD = mod : NewCDTimer ( 15.8 , 321009 , nil , nil , nil , 3 , nil , DBM_COMMON_L.DEADLY_ICON )
--Azules
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21639 ) )
local specBarrage = mod : NewSpecialWarningDodge ( 324368 , nil , nil , nil , 2 , 6 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 317626 , nil , nil , nil , 1 , 8 )
local timerInsidiousVenomCD = mod : NewCDTimer ( 11.4 , 317661 , nil , nil , nil , 2 )
local timerMawTouchedVenomCD = mod : NewCDTimer ( 15.8 , 317655 , nil , nil , nil , 3 )
mod.vb . Enraged = false
mod.vb . flightActive = false
mod.vb . spearCount = 0
function mod : OnCombatStart ( delay )
self.vb . Enraged = false
self.vb . spearCount = 0
self.vb . flightActive = false
--Kin-Tara
timerOverheadSlashCD : Start ( 8.3 - delay )
timerFlightCD : Start ( 30.5 - delay )
end
function mod : OnCombatEnd ( )
self : UnregisterShortTermEvents ( )
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 320966 then
if self.vb . flightActive then
self.vb . flightActive = false
self : UnregisterShortTermEvents ( )
end
if self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnOverheadSlash : Show ( ) --Will be moved to fire earlier with timers
specWarnOverheadSlash : Play ( " defensive " )
end
timerOverheadSlashCD : Start ( )
elseif spellId == 327481 then
if self.vb . flightActive then
self.vb . flightActive = false
self : UnregisterShortTermEvents ( )
end
if self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnDarkLance : Show ( args.sourceName )
specWarnDarkLance : Play ( " kickcast " )
end
-- elseif spellId == 317623 then
-- timerMawTouchedVenomCD:Start()
elseif spellId == 324368 and self : AntiSpam ( 6 , 1 ) then
specBarrage : Show ( )
specBarrage : Play ( " watchorb " )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 323636 then
timerInsidiousVenomCD : Start ( )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 323828 and not self.vb . Enraged then
self.vb . Enraged = true --Enraged will fire again when 2nd one dies, even though it's a win, don't want to fire alerts/timers on combat end
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 163077 or cid == 174212 then --Azules/Azoras
timerInsidiousVenomCD : Start ( 3 )
timerMawTouchedVenomCD : Start ( 8.4 )
elseif cid == 162059 then --Kin-Tara
self.vb . spearCount = 0
timerChargedSpearCD : Stop ( )
timerOverheadSlashCD : Stop ( )
timerOverheadSlashCD : Start ( 4.5 )
timerChargedSpearCD : Start ( 8 , 1 )
end
end
end
--Yell possibly using bosses name possible, or yell using string, and on mythic and above deep connection can be used foor flight detection
--"<246.11 02:57:42> [CHAT_MSG_MONSTER_YELL] Your doom takes flight!#Kin-Tara###Kin-Tara##0#0##0#251#nil#0#false#false#false#false", -- [2110]
--"<227.02 19:43:08> [CLEU] SPELL_AURA_REMOVED#Creature-0-2085-2285-7016-163077-000026CDCA#Azules#Creature-0-2085-2285-7016-162059-000026CDCA#Kin-Tara#331249#Deep Connection#DEBUFF#nil", -- [2470]
--"<227.24 19:43:08> [CHAT_MSG_MONSTER_YELL] Fear the skies!#Kin-Tara###Kin-Tara##0#0##0#67#nil#0#false#false#false#false", -- [2475]
function mod : CHAT_MSG_MONSTER_YELL ( msg , _ , _ , _ , targetname )
if targetname == KinTara then --I believe only time she target herself in a yell is flight yell
-- if msg == L.Flight or msg:find(L.Flight) or msg == L.Flight2 or msg:find(L.Flight2) then--Backup solution ready to apply if more data reveals she can yell at herself other times
-- self:SendSync("Flight")
self.vb . flightActive = true
self.vb . spearCount = 0
timerOverheadSlashCD : Stop ( )
timerChargedSpearCD : Stop ( )
timerChargedSpearCD : Start ( 3.6 , 1 )
--Only reliable way to detect air phase ending on non mythic
--Mythic can use Deep Connection but this mod has to encompass normal/heroic as well
self : RegisterShortTermEvents (
" UNIT_POWER_UPDATE boss1 "
)
end
end
--[[
function mod : OnSync ( msg )
if not self : IsInCombat ( ) then return end
if msg == " Flight " then
self.vb . flightActive = true
self.vb . spearCount = 0
timerOverheadSlashCD : Stop ( )
timerChargedSpearCD : Stop ( )
timerChargedSpearCD : Start ( 3.6 , 1 )
--Only reliable way to detect air phase ending on non mythic
--Mythic can use Deep Connection but this mod has to encompass normal/heroic as well
self : RegisterShortTermEvents (
" UNIT_POWER_UPDATE boss1 "
)
end
end
--]]
function mod : CHAT_MSG_RAID_BOSS_EMOTE ( msg , _ , _ , _ , target )
if msg : find ( " spell:321009 " ) then
self.vb . spearCount = self.vb . spearCount + 1
if self.vb . flightActive then
if self.vb . spearCount == 1 then
timerChargedSpearCD : Start ( 11 , 2 )
elseif self.vb . Enraged then --Boss will still cast it when landing
timerChargedSpearCD : Start ( 46.1 , 1 )
end
else --Casting it when on ground because enraged
timerChargedSpearCD : Start ( 23.1 , self.vb . spearCount + 1 )
end
local targetname = DBM : GetUnitFullName ( target )
if targetname then
if targetname == UnitName ( " player " ) then
specWarnChargedSpear : Show ( )
specWarnChargedSpear : Play ( " runout " )
yellChargedSpear : Yell ( )
else
warnChargedSpear : Show ( targetname )
end
end
end
end
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 317626 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 == 163077 or cid == 174212 then --Azules/Azoras
timerInsidiousVenomCD : Stop ( )
timerMawTouchedVenomCD : Stop ( )
elseif cid == 162059 then --Kin-Tara
timerOverheadSlashCD : Stop ( )
timerFlightCD : Stop ( )
timerChargedSpearCD : Stop ( )
end
end
--[[
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 321088 then --Charged Spear
-- timerChargedSpearCD:Start()
end
end
--]]
function mod : UNIT_POWER_UPDATE ( )
local bossPower = UnitPower ( " boss1 " ) --Get Boss Power
if self.vb . flightActive and bossPower == 0 then --Boss does a hard energy reset to 0 when she lands (flight phase ends)
self.vb . flightActive = false
self : UnregisterShortTermEvents ( )
timerOverheadSlashCD : Start ( 7.2 )
timerFlightCD : Start ( 30.4 )
end
end