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.

257 lines
7.5 KiB

--------------------------------------------------------------------------------
-- TODO List:
-- - Lick timers for lfr, normal, hc
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Guarm-TrialOfValor", 1648, 1830)
if not mod then return end
mod:RegisterEnableMob(114323)
mod.engageId = 1962
mod.respawnTime = 15
--------------------------------------------------------------------------------
-- Locals
--
local breathCounter = 0
local fangCounter = 0
local leapCounter = 0
local foamCount = 1
local phaseStartTime = 0
local lickTimer = {14.1, 22.7, 26.3, 33.7, 43.3, 95.8, 99.4, 106.8, 116.5, 171.9, 175.4, 182.6, 192.6}
local foamTargets = {}
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.lick = "Lick"
L.lick_desc = "Show bars for the different licks." -- For translators: short names of 228248, 228253, 228228
end
--------------------------------------------------------------------------------
-- Initialization
--
local foamMarker = mod:AddMarkerOption(false, "player", 1, -14535, 1, 2, 3)
function mod:GetOptions()
return {
--[[ General ]]--
"berserk",
{228248, "SAY", "FLASH"}, -- Frost Lick
{228253, "SAY", "FLASH"}, -- Shadow Lick
{228228, "SAY", "FLASH"}, -- Flame Lick
{228187, "FLASH"}, -- Guardian's Breath
227514, -- Flashing Fangs
227816, -- Headlong Charge
227883, -- Roaring Leap
--[[ Mythic ]]--
"lick", -- Lick
-14535, -- Volatile Foam
foamMarker,
{228810, "SAY", "FLASH"}, -- Briney Volatile Foam
{228744, "SAY", "FLASH"}, -- Flaming Volatile Foam
{228818, "SAY", "FLASH"}, -- Shadowy Volatile Foam
},{
["berserk"] = "general",
["lick"] = "mythic",
}
end
function mod:OnBossEnable()
self:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT", "CheckBossStatus")
self:Log("SPELL_AURA_APPLIED", "FrostLick", 228248)
self:Log("SPELL_AURA_APPLIED", "ShadowLick", 228253)
self:Log("SPELL_AURA_APPLIED", "FlameLick", 228228)
self:Log("SPELL_CAST_START", "FlashingFangs", 227514)
self:Log("SPELL_CAST_SUCCESS", "HeadlongCharge", 227816)
self:Log("SPELL_CAST_SUCCESS", "RoaringLeap", 227883)
self:Log("SPELL_CAST_SUCCESS", "VolatileFoam", 228824)
self:Log("SPELL_AURA_APPLIED", "BrineyFoam", 228810)
self:Log("SPELL_AURA_APPLIED", "FlamingFoam", 228744)
self:Log("SPELL_AURA_APPLIED", "ShadowyFoam", 228818)
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
end
function mod:OnEngage()
breathCounter = 0
fangCounter = 0
leapCounter = 0
foamCount = 1
phaseStartTime = GetTime()
foamTargets = {}
self:Berserk(self:Mythic() and 244 or self:Normal() and 360 or self:LFR() and 420 or 300)
self:Bar(227514, 6) -- Flashing Fangs
self:Bar(228187, 14.5) -- Guardian's Breath
self:Bar(227883, 48.5) -- Roaring Leap
self:Bar(227816, 57) -- Headlong Charge
if self:Mythic() then
self:Bar(-14535, 10.9, CL.count:format(self:SpellName(-14535), foamCount), 228810)
self:StartLickTimer(1)
end
end
function mod:OnBossDisable()
if self:GetOption(foamMarker) then
for i = 1, #foamTargets do
self:CustomIcon(false, foamTargets[i])
foamTargets[i] = nil
end
end
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
if spellId == 228187 then -- Guardian's Breath (starts casting)
breathCounter = breathCounter + 1
self:Bar(spellId, (breathCounter % 2 == 0 and 51) or 20.7, CL.count:format(self:SpellName(spellId), breathCounter+1))
self:MessageOld(spellId, "yellow", "warning")
self:CastBar(spellId, 5)
self:Flash(spellId)
end
end
do
local list = mod:NewTargetList()
function mod:FrostLick(args)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
end
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.4, args.spellId, list, "orange", "alarm", nil, nil, self:Dispeller("magic"))
end
end
end
do
local list = mod:NewTargetList()
function mod:ShadowLick(args)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
end
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.4, args.spellId, list, "orange", "alarm")
end
end
end
do
local list = mod:NewTargetList()
function mod:FlameLick(args)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
end
list[#list+1] = args.destName
if #list == 1 then
self:ScheduleTimer("TargetMessageOld", 0.4, args.spellId, list, "orange", "alarm")
end
end
end
function mod:FlashingFangs(args)
fangCounter = fangCounter + 1
self:MessageOld(args.spellId, "yellow", nil, CL.casting:format(args.spellName))
self:CDBar(args.spellId, fangCounter == 1 and 23 or fangCounter % 2 == 0 and 52 or 20)
end
function mod:HeadlongCharge(args)
self:MessageOld(args.spellId, "red", "long")
self:Bar(args.spellId, 75.2)
self:CastBar(args.spellId, 7)
self:Bar(228187, 30, CL.count:format(self:SpellName(228187), breathCounter+1)) -- Correct Guardian's Breath timer
if self:Mythic() then
self:Bar(-14535, 29.1, CL.count:format(self:SpellName(-14535), foamCount), 228810) -- Volatile Foam
end
end
function mod:RoaringLeap(args)
leapCounter = leapCounter + 1
self:MessageOld(args.spellId, "orange", "info")
if leapCounter % 2 == 0 then
self:CDBar(227514, 11.2) -- Adjust Flashing Fangs timer
self:Bar(args.spellId, 53.2)
else
self:Bar(args.spellId, 21.8)
end
end
function mod:VolatileFoam()
foamCount = foamCount + 1
local t = foamCount == 2 and 19.4 or foamCount % 3 == 1 and 17 or foamCount % 3 == 2 and 15 or 42
self:Bar(-14535, t, CL.count:format(self:SpellName(-14535), foamCount), 228810)
end
do
local function markFoam(self, destName)
if self:GetOption(foamMarker) then
local c = #foamTargets+1
foamTargets[c] = destName
self:CustomIcon(false, destName, c)
if c == 1 then
self:ScheduleTimer("OnBossDisable", 10)
end
end
end
function mod:BrineyFoam(args)
markFoam(self, args.destName)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "cyan", "alarm", CL.you:format(args.spellName))
self:Say(args.spellId, ("{rt6} %s {rt6}"):format(args.spellName))
self:Flash(args.spellId)
end
end
function mod:FlamingFoam(args)
markFoam(self, args.destName)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "red", "alert", CL.you:format(args.spellName))
self:Say(args.spellId, ("{rt7} %s {rt7}"):format(args.spellName))
self:Flash(args.spellId)
end
end
function mod:ShadowyFoam(args)
markFoam(self, args.destName)
if self:Me(args.destGUID) then
self:MessageOld(args.spellId, "yellow", "warning", CL.you:format(args.spellName)) -- purple message would be appropriate
self:Say(args.spellId, ("{rt3} %s {rt3}"):format(args.spellName))
self:Flash(args.spellId)
end
end
end
function mod:StartLickTimer(count)
local data = self:Mythic() and lickTimer
local info = data and data[count]
if not info then
-- all out of lick data
return
end
local length = floor(info - (GetTime() - phaseStartTime))
self:CDBar("lick", length, CL.count:format(L.lick, count), 228253)
self:ScheduleTimer("StartLickTimer", length, count + 1)
end