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
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
|
|
|