local mod = DBM : NewMod ( 1489 , " DBM-Party-Legion " , 4 , 721 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240714045506 " )
mod : SetCreatureID ( 95676 )
mod : SetEncounterID ( 1809 )
mod : SetHotfixNoticeRev ( 20230306000000 )
mod : SetMinSyncRevision ( 20221228000000 )
mod.sendMainBossGUID = true
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 198072 198263 198077 198750 " ,
" SPELL_CAST_SUCCESS 197961 " ,
" SPELL_AURA_APPLIED 197963 197964 197965 197966 197967 " ,
" UNIT_SPELLCAST_SUCCEEDED boss1 "
)
mod : RegisterEvents (
" CHAT_MSG_MONSTER_YELL "
)
--http://legion.wowhead.com/icons/name:boss_odunrunes_
--["198263-Radiant Tempest"] = "pull:8.0, 72.0, 40.0", huh?
--[[
( ability.id = 198072 or ability.id = 198263 or ability.id = 198077 ) and type = " begincast "
or ability.id = 197961 and type = " cast "
or type = " dungeonencounterstart " or type = " dungeonencounterend "
or ability.id = 198750 and type = " begincast "
--]]
--TODO, does boss still have old random tempest timers system from legion or are 10.0.2 changes universal?
local warnSpear = mod : NewSpellAnnounce ( 198072 , 2 ) --Target not available so no target warning.
local specWarnTempest = mod : NewSpecialWarningRunCount ( 198263 , nil , nil , nil , 4 , 2 )
local specWarnShatterSpears = mod : NewSpecialWarningDodge ( 198077 , nil , nil , nil , 2 , 2 )
local specWarnRunicBrand = mod : NewSpecialWarningMoveTo ( 197961 , nil , nil , nil , 2 , 6 )
local specWarnAdd = mod : NewSpecialWarningSwitch ( 201221 , " -Healer " , nil , nil , 1 , 2 )
local specWarnSurge = mod : NewSpecialWarningInterrupt ( 198750 , " HasInterrupt " , nil , nil , 1 , 2 )
local timerRP = mod : NewCombatTimer ( 28.5 )
--local timerSpearCD = mod:NewCDTimer(8, 198077, nil, nil, nil, 3)--More data needed
local timerTempestCD = mod : NewCDCountTimer ( 56 , 198263 , nil , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON ) --More data needed
local timerShatterSpearsCD = mod : NewCDTimer ( 56 , 198077 , nil , nil , nil , 2 )
local timerRunicBrandCD = mod : NewCDCountTimer ( 56 , 197961 , nil , nil , nil , 3 )
local timerAddCD = mod : NewCDTimer ( 54 , 201221 , nil , nil , nil , 1 , 201215 ) --54-58
mod : AddDropdownOption ( " RuneBehavior " , { " Icon " , " Entrance " , " Minimap " , " Generic " } , " Generic " , " misc " , nil , 197961 )
--Boss has (at least) three timer modes, cannot determine which one on pull so on fly figuring out is used
local oldTempestTimers = {
[ 1 ] = { 8 , 56 , 72 } ,
[ 2 ] = { 16 , 48 , 64 } , --If such a beast exists, it'll look like this based on theory. This sequence is COPMLETE guesswork
[ 3 ] = { 24 , 40 , 56 } ,
[ 4 ] = { 32 , 32 , 48 } , --32 and 48 are guessed based on theory
}
--local oldbrandTimers = {44, 56}
mod.vb . temptestMode = 1
mod.vb . tempestCount = 0
mod.vb . brandCount = 0
--Should run at 10, 18, 26, and 34
--[[
local function tempestDelayed ( self )
if self.vb . tempestCount == 0 then
DBM : AddMsg ( L.tempestModeMessage : format ( self.vb . temptestMode ) )
self.vb . temptestMode = self.vb . temptestMode + 1
self : Schedule ( 8 , tempestDelayed , self )
timerTempestCD : Start ( 6 , 1 )
else
return
end
end
--]]
function mod : OnCombatStart ( delay )
self.vb . temptestMode = 1
self.vb . tempestCount = 0
self.vb . brandCount = 0
-- timerSpearCD:Start(-delay)
timerTempestCD : Start ( 24 - delay , 1 )
-- self:Schedule(10, tempestDelayed, self, 1)
timerShatterSpearsCD : Start ( 40 - delay )
timerRunicBrandCD : Start ( 45.9 - delay , 1 )
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 198072 then
warnSpear : Show ( )
elseif spellId == 198263 then
self.vb . tempestCount = self.vb . tempestCount + 1
specWarnTempest : Show ( self.vb . tempestCount )
specWarnTempest : Play ( " runout " )
timerTempestCD : Start ( 55 , self.vb . tempestCount + 1 )
-- timerSpearCD:Start(12)
-- local timers = tempestTimers[self.vb.temptestMode]
-- if timers then
-- local nextCast = self.vb.tempestCount+1
-- if timers[nextCast] then
-- timerTempestCD:Start(timers[nextCast], nextCast)
-- end
-- end
elseif spellId == 198077 then
specWarnShatterSpears : Show ( )
specWarnShatterSpears : Play ( " watchorb " )
timerShatterSpearsCD : Start ( )
elseif spellId == 198750 and self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnSurge : Show ( args.sourceName )
specWarnSurge : Play ( " kickcast " )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
if args.spellId == 197961 then
self.vb . brandCount = self.vb . brandCount + 1
-- timerSpearCD:Start(18)
local nextCount = self.vb . brandCount + 1
-- local timer = brandTimers[nextCount]
-- if timer then
timerRunicBrandCD : Start ( nil , nextCount )
-- end
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 197963 and args : IsPlayer ( ) then --Purple K (NE)
specWarnRunicBrand : Show ( " |TInterface \\ Icons \\ Boss_OdunRunes_Purple.blp:12:12|tNE|TInterface \\ Icons \\ Boss_OdunRunes_Purple.blp:12:12|t " )
if self.Options . RuneBehavior == " Entrance " then
specWarnRunicBrand : Play ( " frontleft " )
elseif self.Options . RuneBehavior == " Icon " then
specWarnRunicBrand : Play ( " mm3 " ) --Purple Diamond
elseif self.Options . RuneBehavior == " Minimap " then
specWarnRunicBrand : Play ( " frontright " )
else
specWarnRunicBrand : Play ( " targetyou " )
end
elseif spellId == 197964 and args : IsPlayer ( ) then --Orange N (SE)
specWarnRunicBrand : Show ( " |TInterface \\ Icons \\ Boss_OdunRunes_Orange.blp:12:12|tSE|TInterface \\ Icons \\ Boss_OdunRunes_Orange.blp:12:12|t " )
if self.Options . RuneBehavior == " Entrance " then
specWarnRunicBrand : Play ( " backleft " )
elseif self.Options . RuneBehavior == " Icon " then
specWarnRunicBrand : Play ( " mm2 " ) --Orange Circle
elseif self.Options . RuneBehavior == " Minimap " then
specWarnRunicBrand : Play ( " backright " )
else
specWarnRunicBrand : Play ( " targetyou " )
end
elseif spellId == 197965 and args : IsPlayer ( ) then --Yellow H (SW)
specWarnRunicBrand : Show ( " |TInterface \\ Icons \\ Boss_OdunRunes_Yellow.blp:12:12|tSW|TInterface \\ Icons \\ Boss_OdunRunes_Yellow.blp:12:12|t " )
if self.Options . RuneBehavior == " Entrance " then
specWarnRunicBrand : Play ( " backright " )
elseif self.Options . RuneBehavior == " Icon " then
specWarnRunicBrand : Play ( " mm1 " ) --Yellow Star
elseif self.Options . RuneBehavior == " Minimap " then
specWarnRunicBrand : Play ( " backleft " )
else
specWarnRunicBrand : Play ( " targetyou " )
end
elseif spellId == 197966 and args : IsPlayer ( ) then --Blue fishies (NW)
specWarnRunicBrand : Show ( " |TInterface \\ Icons \\ Boss_OdunRunes_Blue.blp:12:12|tNW|TInterface \\ Icons \\ Boss_OdunRunes_Blue.blp:12:12|t " )
if self.Options . RuneBehavior == " Entrance " then
specWarnRunicBrand : Play ( " frontright " )
elseif self.Options . RuneBehavior == " Icon " then
specWarnRunicBrand : Play ( " mm6 " ) --Blue Square
elseif self.Options . RuneBehavior == " Minimap " then
specWarnRunicBrand : Play ( " frontleft " )
else
specWarnRunicBrand : Play ( " targetyou " )
end
elseif spellId == 197967 and args : IsPlayer ( ) then --Green box (N)
specWarnRunicBrand : Show ( " |TInterface \\ Icons \\ Boss_OdunRunes_Green.blp:12:12|tN|TInterface \\ Icons \\ Boss_OdunRunes_Green.blp:12:12|t " )
if self.Options . RuneBehavior == " Entrance " then
specWarnRunicBrand : Play ( " frontcenter " )
elseif self.Options . RuneBehavior == " Icon " then
specWarnRunicBrand : Play ( " mm4 " ) --Green Triangle
elseif self.Options . RuneBehavior == " Minimap " then
specWarnRunicBrand : Play ( " frontcenter " )
else
specWarnRunicBrand : Play ( " targetyou " )
end
end
end
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 198396 then
warnSpear : Show ( )
elseif spellId == 201221 then --Summon Stormforged
specWarnAdd : Show ( )
specWarnAdd : Play ( " killmob " )
timerAddCD : Start ( )
end
end
--"<1368.18 21:44:20> [CHAT_MSG_MONSTER_YELL] Most impressive! I never thought I would meet anyone who could match the Valarjar's strength... and yet here you stand.#Odyn###Odyn##0#0##0#1600#nil#0#false#false#false#false", -- [6314]
--About 3 seconds to trigger gossip, since RP is for when gossip becomes available
--"<1399.95 21:44:52> [DBM_Debug] StartCombat called by : ENCOUNTER_START. LastInstanceMapID is 1477#nil", -- [6329]
function mod : CHAT_MSG_MONSTER_YELL ( msg )
if ( msg == L.OdynRP or msg : find ( L.OdynRP ) ) then
self : SendSync ( " OdynRP " ) --Syncing to help unlocalized clients
end
end
function mod : OnSync ( msg , targetname )
if msg == " OdynRP " and self : AntiSpam ( 10 , 2 ) then
timerRP : Start ( )
end
end