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.
268 lines
8.4 KiB
268 lines
8.4 KiB
|
|
-- GLOBALS: BigWigsKrosusFirstBeamWasLeft, print
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Module Declaration
|
|
--
|
|
|
|
local mod, CL = BigWigs:NewBoss("Krosus", 1530, 1713)
|
|
if not mod then return end
|
|
mod:RegisterEnableMob(101002)
|
|
mod.engageId = 1842
|
|
mod.respawnTime = 30
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Locals
|
|
--
|
|
|
|
local normalTimers = { -- and LFR Timers
|
|
-- Fel Beam (spell id is the right one), _cast_success
|
|
[205370] = {9.5, 15, 30, 30, 23, 27, 30, 44, 14, 16, 14, 16, 22, 60},
|
|
|
|
-- Orb of Destruction, _aura_applied
|
|
[205344] = {70, 40, 60, 25, 60, 37, 15, 15, 30},
|
|
|
|
-- Burning Pitch, _cast_start
|
|
[205420] = {38, 102, 85, 90},
|
|
}
|
|
|
|
local heroicTimers = {
|
|
-- Fel Beam (spell id is the right one), _cast_success
|
|
[205370] = {11, 29, 30, 45, 16, 16, 14, 16, 27, 55, 26, 5, 21, 5, 12, 12, 5, 13},
|
|
|
|
-- Orb of Destruction, _aura_applied
|
|
[205344] = {20, 60, 23, 62, 27, 25, 15, 15, 15, 30, 55},
|
|
|
|
-- Burning Pitch, _cast_start
|
|
[205420] = {50, 85, 90, 94},
|
|
}
|
|
|
|
local mythicTimers = {
|
|
-- Fel Beam (spell id is the right one), _cast_success, didnt have enough logs to make sure they are all .0
|
|
[205370] = {9.0, 16.0, 16.0, 16.0, 14.0, 16.0, 27.0, 55.0, 26.0, 4.8, 21.3, 4.8, 12.3, 12.0, 4.8, 13.3, 19.0, 4.8, 25.3, 4.8, 25.3, 4.8},
|
|
|
|
-- Orb of Destruction, _aura_applied
|
|
[205344] = {13, 62, 27, 25, 15, 15, 15, 30, 55, 38, 30, 12, 18},
|
|
|
|
-- Burning Pitch, _cast_start
|
|
[205420] = {45, 90, 94, 78},
|
|
}
|
|
|
|
local beamCount = 1
|
|
local orbCount = 1
|
|
local burningPitchCount = 1
|
|
local slamCount = 1
|
|
local timers = mod:Mythic() and mythicTimers or mod:Heroic() and heroicTimers or normalTimers
|
|
local firstBeamLeft = true
|
|
local receivedBeamCom = nil
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Localization
|
|
--
|
|
|
|
local L = mod:GetLocale()
|
|
if L then
|
|
L.leftBeam = "Left Beam"
|
|
L.rightBeam = "Right Beam"
|
|
|
|
L.goRight = "> GO RIGHT >"
|
|
L.goLeft = "< GO LEFT <"
|
|
|
|
L.smashingBridge = "Smashing Bridge"
|
|
L.smashingBridge_desc = "Slams which break the bridge. You can use this option to emphasize or enable countdown."
|
|
L.smashingBridge_icon = 205862
|
|
|
|
L.removedFromYou = "%s removed from you" -- "Searing Brand removed from YOU!"
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Initialization
|
|
--
|
|
|
|
function mod:GetOptions()
|
|
return {
|
|
{206677, "TANK"}, -- Searing Brand
|
|
205370, -- Fel Beam
|
|
{205344, "SAY", "FLASH"}, -- Orb of Destruction
|
|
205862, -- Slam
|
|
"smashingBridge",
|
|
205420, -- Burning Pitch
|
|
208203, -- Isolated Rage
|
|
"berserk",
|
|
}
|
|
end
|
|
|
|
function mod:OnBossEnable()
|
|
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
|
|
self:Log("SPELL_AURA_APPLIED", "SearingBrand", 206677)
|
|
self:Log("SPELL_AURA_APPLIED_DOSE", "SearingBrand", 206677)
|
|
self:Log("SPELL_AURA_REMOVED", "SearingBrandRemoved", 206677)
|
|
self:Log("SPELL_CAST_START", "FelBeamCast", 205370)
|
|
self:Log("SPELL_CAST_SUCCESS", "FelBeamSuccess", 205370)
|
|
self:Log("SPELL_AURA_APPLIED", "OrbOfDescructionApplied", 205344)
|
|
self:Log("SPELL_CAST_START", "SlamCast", 205862)
|
|
self:Log("SPELL_CAST_SUCCESS", "SlamSuccess", 205862)
|
|
self:Log("SPELL_CAST_START", "BurningPitchCast", 205420)
|
|
self:RegisterMessage("BigWigs_BossComm")
|
|
end
|
|
|
|
function mod:OnEngage()
|
|
beamCount = 1
|
|
orbCount = 1
|
|
burningPitchCount = 1
|
|
slamCount = 1
|
|
receivedBeamCom = nil
|
|
timers = self:Mythic() and mythicTimers or self:Heroic() and heroicTimers or normalTimers
|
|
|
|
self:Bar(205862, self:LFR() and 35 or 33, CL.count:format(self:SpellName(205862), slamCount))
|
|
self:Bar("smashingBridge", self:LFR() and 95 or 93, CL.count:format(L.smashingBridge, 1), L.smashingBridge_icon)
|
|
local firstBeam = timers[205370][beamCount]
|
|
self:Bar(205370, firstBeam, CL.count:format(self:SpellName(221153), beamCount)) -- "Beam"
|
|
self:Bar(205370, timers[205370][beamCount+1] + firstBeam, CL.count:format(self:SpellName(221153), beamCount+1)) -- "Beam"
|
|
self:Bar(205344, timers[205344][orbCount], CL.count:format(self:SpellName(205344), orbCount))
|
|
self:Bar(205420, timers[205420][burningPitchCount], CL.count:format(self:SpellName(205420), burningPitchCount))
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Event Handlers
|
|
--
|
|
|
|
local function getBeamText(count)
|
|
if receivedBeamCom then
|
|
if count % 2 == 1 then
|
|
return " " .. (firstBeamLeft and L.goRight or L.goLeft)
|
|
else
|
|
return " " .. (firstBeamLeft and L.goLeft or L.goRight)
|
|
end
|
|
end
|
|
return ""
|
|
end
|
|
|
|
do
|
|
local prev = 0
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
|
|
if spellId == 208203 then -- Isolated Rage
|
|
local t = GetTime()
|
|
if t-prev > 2.5 then
|
|
prev = t
|
|
self:MessageOld(spellId, "red", "alert")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SearingBrand(args)
|
|
local amount = args.amount or 1
|
|
if amount % 2 == 1 or amount > 3 then -- 1, 3, 4, 5, 6, 7, 8, ... < this is hc, might need to change for others
|
|
self:StackMessage(args.spellId, args.destName, amount, "orange")
|
|
end
|
|
end
|
|
|
|
function mod:SearingBrandRemoved(args)
|
|
if self:Me(args.destGUID) then
|
|
self:MessageOld(args.spellId, "orange", "warning", L.removedFromYou:format(args.spellName))
|
|
end
|
|
end
|
|
|
|
function mod:FelBeamCast(args)
|
|
self:MessageOld(args.spellId, "yellow", "info", args.spellName)
|
|
end
|
|
|
|
do
|
|
local spellName = mod:SpellName(221153) -- "Beam"
|
|
function mod:FelBeamSuccess(args)
|
|
beamCount = beamCount + 1
|
|
local t = timers[args.spellId][beamCount]
|
|
if t then
|
|
local text = CL.count:format(spellName, beamCount) .. getBeamText(beamCount)
|
|
self:Bar(args.spellId, t, text)
|
|
|
|
-- Additional timer to plan movement ahead
|
|
local t2 = timers[args.spellId][beamCount+1]
|
|
if t2 then
|
|
local text = CL.count:format(spellName, beamCount+1) .. getBeamText(beamCount+1)
|
|
self:Bar(args.spellId, t+t2, text)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OrbOfDescructionApplied(args)
|
|
self:TargetMessageOld(args.spellId, args.destName, "orange", "warning", CL.count:format(args.spellName, orbCount), nil, self:Ranged())
|
|
self:TargetBar(args.spellId, 5, args.destName, 230932, args.spellId) -- Orb
|
|
if self:Me(args.destGUID) then
|
|
self:Flash(args.spellId)
|
|
self:Say(args.spellId)
|
|
end
|
|
orbCount = orbCount + 1
|
|
local t = timers[args.spellId][orbCount]
|
|
if t then
|
|
self:Bar(args.spellId, t, CL.count:format(args.spellName, orbCount))
|
|
end
|
|
end
|
|
|
|
function mod:SlamCast(args)
|
|
if slamCount % 3 == 0 then
|
|
self:MessageOld("smashingBridge", "red", "alert", CL.casting:format(CL.count:format(args.spellName, slamCount)) .. " - "..L.smashingBridge, L.smashingBridge_icon)
|
|
else
|
|
self:MessageOld(args.spellId, "red", "alert", CL.casting:format(CL.count:format(args.spellName, slamCount)))
|
|
end
|
|
end
|
|
|
|
function mod:SlamSuccess(args)
|
|
self:MessageOld(args.spellId, "red", nil)
|
|
if slamCount % 3 == 0 and slamCount < 10 then
|
|
self:Bar("smashingBridge", 90, CL.count:format(L.smashingBridge, slamCount/3 + 1), L.smashingBridge_icon)
|
|
end
|
|
slamCount = slamCount + 1
|
|
if slamCount % 3 ~= 0 and slamCount < 12 then -- would mirror the smashing bridge bar otherwise
|
|
self:Bar(args.spellId, 30, CL.count:format(args.spellName, slamCount))
|
|
end
|
|
end
|
|
|
|
function mod:BurningPitchCast(args)
|
|
self:MessageOld(args.spellId, "yellow", "info")
|
|
burningPitchCount = burningPitchCount + 1
|
|
local t = timers[args.spellId][burningPitchCount]
|
|
if t then
|
|
self:Bar(args.spellId, t, CL.count:format(args.spellName, burningPitchCount))
|
|
end
|
|
end
|
|
|
|
local function fixBars(self)
|
|
-- Next Beam
|
|
local nextBeamText = CL.count:format(self:SpellName(221153), beamCount)
|
|
local nextBeamTime = self:BarTimeLeft(nextBeamText)
|
|
if nextBeamTime > 0 then
|
|
self:StopBar(nextBeamText)
|
|
self:Bar(205370, nextBeamTime, nextBeamText .. getBeamText(beamCount))
|
|
end
|
|
|
|
-- Next Beam + 1
|
|
local nextBeamText2 = CL.count:format(self:SpellName(221153), beamCount+1)
|
|
local nextBeamTime2 = self:BarTimeLeft(nextBeamText2)
|
|
if nextBeamTime2 > 0 then
|
|
self:StopBar(nextBeamText2)
|
|
self:Bar(205370, nextBeamTime2, nextBeamText2 .. getBeamText(beamCount+1))
|
|
end
|
|
end
|
|
|
|
function mod:BigWigs_BossComm(_, msg)
|
|
if msg == "firstBeamWasLeft" then
|
|
receivedBeamCom = true
|
|
firstBeamLeft = true
|
|
fixBars(mod)
|
|
elseif msg == "firstBeamWasRight" then
|
|
receivedBeamCom = true
|
|
firstBeamLeft = false
|
|
fixBars(mod)
|
|
end
|
|
end
|
|
|
|
function BigWigsKrosusFirstBeamWasLeft(wasLeft)
|
|
if wasLeft then
|
|
mod:Sync("firstBeamWasLeft")
|
|
else
|
|
mod:Sync("firstBeamWasRight")
|
|
end
|
|
end
|
|
|