local mod = DBM:NewMod(2355, "DBM-Party-BfA", 11, 1178) local L = mod:GetLocalizedStrings() mod:SetRevision("20230117063410") mod:SetCreatureID(150190) mod:SetEncounterID(2291) mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 295536 295939", "SPELL_CAST_SUCCESS 302274 303885 301351 303553 301177 302279", "SPELL_AURA_APPLIED 296080 302274 303885 303252", "SPELL_AURA_REMOVED 296080 303885", "UNIT_DIED" ) --TODO, can tank dodge wreck? --TODO, additional warnings/timers for platform stuff? --TODO, Verify/update non hard mode timers --TODO, need log that lets HK lift off and MK1 or MK2 to start a new cycle of all abilities at least once --[[ (ability.id = 295536 or ability.id = 295939) and type = "begincast" or (ability.id = 302274 or ability.id = 303885 or ability.id = 301351 or ability.id = 302279 or ability.id = 301177) and type = "cast" or (target.id = 150295 or target.id = 155760) and type = "death" or type = "dungeonencounterstart" or type = "dungeonencounterend" --]] --Stage 1 mod:AddTimerLine(DBM:EJ_GetSectionInfo(20037)) local warnReinforcementRelay = mod:NewSpellAnnounce(301351, 2) local warnFulminatingZap = mod:NewTargetNoFilterAnnounce(302274, 2, nil, "Healer") local specWarnCannonBlast = mod:NewSpecialWarningDodge(295536, nil, nil, nil, 2, 2) local specWarnWreck = mod:NewSpecialWarningDefensive(302279, "Tank", nil, nil, 1, 2) local specWarnFulminatingBurst = mod:NewSpecialWarningMoveTo(303885, nil, nil, nil, 1, 2) local yellFulminatingBurst = mod:NewYell(303885, nil, nil, nil, "YELL") local yellFulminatingBurstFades = mod:NewShortFadesYell(303885, nil, nil, nil, "YELL") --local timerCannonBlastCD = mod:NewCDTimer(7.7, 295536, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--7.7-13.4 variation, useless timer local timerReinforcementRelayCD = mod:NewCDTimer(32.8, 301351, nil, nil, nil, 1) local timerWreckCD = mod:NewCDTimer(24.3, 302279, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) --local timerFulminatingZapCD = mod:NewCDTimer(17.0, 302274, nil, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)--Assumed local timerFulminatingBurstCD = mod:NewCDTimer(17.0, 303885, nil, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)--Hard Mode --Stage 2 mod:AddTimerLine(DBM:EJ_GetSectionInfo(20039)) local warnHaywire = mod:NewTargetNoFilterAnnounce(296080, 1) local specWarnAnnihilationRay = mod:NewSpecialWarningSpell(295939, nil, nil, nil, 2, 2) local specWarnAntiTresField = mod:NewSpecialWarningMoveTo(303252, nil, nil, nil, 1, 2) local yellAntiTresField = mod:NewYell(303252) local timerHaywire = mod:NewBuffActiveTimer(30, 296080, nil, nil, nil, 6) --local timerHowlingFearCD = mod:NewCDTimer(13.4, 257791, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) mod:AddNamePlateOption("NPAuraOnWalkieShockie", 296522, false) mod.vb.hard = false local unitTracked = {} --[[ local function checkHardMode(self) local found = false for i = 1, 5 do local unitID = "boss"..i if UnitExists(unitID) then local cid = self:GetUnitCreatureId(unitID) if cid == 150295 then--MK1 found = true timerFulminatingZapCD:Start(7.4)--SUCCESS--Assumed timerWreckCD:Start(14.7)--Assumed timerReinforcementRelayCD:Start(18.8)--Assumed elseif cid == 155760 then--MK2 (hard mode) found = true self.vb.hard = true timerFulminatingBurstCD:Start(7.4)--SUCCESS--VERIFIED timerWreckCD:Start(14.7)--VERIFIED timerReinforcementRelayCD:Start(18.8)--VERIFIED end end end if not found then DBM:AddMsg("checkHardMode failed, tell DBM author") end end --]] function mod:OnCombatStart(delay) self.vb.hard = false -- self:Schedule(2-delay, checkHardMode, self) -- timerFulminatingZapCD:Start(9.2)--SUCCESS timerWreckCD:Start(15) timerReinforcementRelayCD:Start(20.8) table.wipe(unitTracked) if self.Options.NPAuraOnWalkieShockie then DBM:FireEvent("BossMod_EnableHostileNameplates") self:RegisterOnUpdateHandler(function() for i = 1, 40 do local UnitID = "nameplate"..i local GUID = UnitGUID(UnitID) local cid = self:GetCIDFromGUID(GUID) if cid == 155645 or cid == 152703 then--Walkie Shockie X1 and X2 local unitPower = UnitPower(UnitID) if not unitTracked[GUID] then unitTracked[GUID] = "None" end if (unitPower > 90) then if unitTracked[GUID] ~= "Green" then unitTracked[GUID] = "Green" DBM.Nameplate:Show(true, GUID, 276299, 463281) end elseif (unitPower > 60) then if unitTracked[GUID] ~= "Yellow" then unitTracked[GUID] = "Yellow" DBM.Nameplate:Hide(true, GUID, 276299, 463281) DBM.Nameplate:Show(true, GUID, 276299, 460954) end elseif (unitPower > 30) then if unitTracked[GUID] ~= "Red" then unitTracked[GUID] = "Red" DBM.Nameplate:Hide(true, GUID, 276299, 460954) DBM.Nameplate:Show(true, GUID, 276299, 463282) end elseif (unitPower > 10) then if unitTracked[GUID] ~= "Critical" then unitTracked[GUID] = "Critical" DBM.Nameplate:Hide(true, GUID, 276299, 463282) DBM.Nameplate:Show(true, GUID, 276299, 237521) end end end end end, 1) end end function mod:OnCombatEnd() table.wipe(unitTracked) if self.Options.NPAuraOnWalkieShockie then DBM.Nameplate:Hide(true, nil, nil, nil, true, true) end end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 295536 then specWarnCannonBlast:Show() specWarnCannonBlast:Play("farfromline") elseif spellId == 295939 then specWarnAnnihilationRay:Show() specWarnAnnihilationRay:Play("phasechange") end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 302274 then -- timerFulminatingZapCD:Start() elseif spellId == 303885 then timerFulminatingBurstCD:Start() elseif spellId == 301351 or spellId == 303553 then--Regular, Hard warnReinforcementRelay:Show() timerReinforcementRelayCD:Start() elseif spellId == 302279 then specWarnWreck:Show() specWarnWreck:Play("defensive") timerWreckCD:Start() elseif spellId == 301177 then--Lift Off (haywire ended, return to stage 1) --TODO, need a log that didn't one phase him, might be harder to come by these days --[[if self.vb.hard then timerFulminatingBurstCD:Start(8.4)--SUCCESS--Assumed timerWreckCD:Start(15.7)--Assumed timerReinforcementRelayCD:Start(19.8)--Assumed else timerFulminatingZapCD:Start(8.4)--SUCCESS--Assumed timerWreckCD:Start(15.7)--Assumed timerReinforcementRelayCD:Start(19.8)--Assumed end--]] -- timerFulminatingZapCD:Start(16.7)--SUCCESS timerWreckCD:Start(22.5)--Assumed timerReinforcementRelayCD:Start(29.1) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 296080 then warnHaywire:Show(args.destName) timerHaywire:Start() elseif spellId == 302274 then warnFulminatingZap:Show(args.destName) elseif spellId == 303885 then if args:IsPlayer() then specWarnFulminatingBurst:Show(DBM_COMMON_L.ALLY) yellFulminatingBurst:Yell() yellFulminatingBurstFades:Countdown(spellId) else specWarnFulminatingBurst:Show(args.destName) end specWarnFulminatingBurst:Play("gathershare") elseif spellId == 303252 then if args:IsPlayer() then specWarnAntiTresField:Show(DBM_COMMON_L.ALLY) yellAntiTresField:Yell() else specWarnAntiTresField:Show(args.destName) end specWarnAntiTresField:Play("gathershare") end end function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 296080 then--Haywire timerHaywire:Stop() elseif spellId == 303885 then if args:IsPlayer() then yellFulminatingBurstFades:Cancel() end end end function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 150295 or cid == 155760 then--tank-buster-mk1/tank-buster-mk2 timerWreckCD:Stop() timerReinforcementRelayCD:Stop() -- timerFulminatingZapCD:Stop() timerFulminatingBurstCD:Stop() end end