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.
303 lines
11 KiB
303 lines
11 KiB
|
5 years ago
|
--------------------------------------------------------------------------------
|
||
|
|
-- Module Declaration
|
||
|
|
--
|
||
|
|
|
||
|
|
local mod, CL = BigWigs:NewBoss("Sludgefist", 2296, 2394)
|
||
|
|
if not mod then return end
|
||
|
|
mod:RegisterEnableMob(164407) -- Sludgefist
|
||
|
|
mod:SetEncounterID(2399)
|
||
|
|
mod:SetRespawnTime(30)
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Locals
|
||
|
|
--
|
||
|
|
local destructiveStompCount = 1
|
||
|
|
local colossalRoarCount = 1
|
||
|
|
local chainLinkCount = 1
|
||
|
|
local hatefullGazeCount = 1
|
||
|
|
local chainSlamCount = 1
|
||
|
|
local seismicShiftCount = 1
|
||
|
|
local chainLinksApplied = 0
|
||
|
|
local fallingRubbleCount = 1
|
||
|
|
|
||
|
|
local timers = {
|
||
|
|
[332318] = {18.5, 25.1, 42.6, 25.5, 42.5, 25.5, 45, 22.5, 45.0, 23.1, 41.4}, -- Destructive Stomp
|
||
|
|
[332687] = {0.0, 36.7, 31.3, 36.4, 31.8, 36.3, 31.5, 36.4, 31.8, 36.3, 31.5, 36.3}, -- Colossal Roar
|
||
|
|
[340817] = {18.5, 25.1, 30.6, 11.9, 25.5, 30.2, 12.3, 25.5, 30.2, 12.3, 25.5, 30.2, 12.3, 25.5, 29}, -- Seismic Shift
|
||
|
|
[341193] = {13.0, 70.9, 70.5, 70.5, 70.5} -- Falling Rubble
|
||
|
|
}
|
||
|
|
|
||
|
|
local prevHp = 0
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Localization
|
||
|
|
--
|
||
|
|
|
||
|
|
local L = mod:GetLocale()
|
||
|
|
if L then
|
||
|
|
L.stomp_shift = "Stomp & Shift" -- Destructive Stomp + Seismic Shift
|
||
|
|
|
||
|
|
L.fun_info = "Damage Info"
|
||
|
|
L.fun_info_desc = "Display a message showing how much health the boss lost during Destructive Impact."
|
||
|
|
L.fun_info_icon = "petbattle_health-down"
|
||
|
|
|
||
|
|
L.health_lost = "Sludgefist went down %.1f%%!"
|
||
|
|
end
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Initialization
|
||
|
|
--
|
||
|
|
|
||
|
|
function mod:GetOptions()
|
||
|
|
return {
|
||
|
|
{331209, "SAY", "SAY_COUNTDOWN", "ME_ONLY_EMPHASIZE"}, -- Hateful Gaze
|
||
|
|
331314, -- Destructive Impact
|
||
|
|
"fun_info",
|
||
|
|
{335293, "ME_ONLY_EMPHASIZE"}, -- Chain Link
|
||
|
|
332318, -- Destructive Stomp
|
||
|
|
341193, -- Falling Rubble
|
||
|
|
335361, -- Stonequake
|
||
|
|
332687, -- Colossal Roar
|
||
|
|
{335470, "SAY", "SAY_COUNTDOWN", "ICON"}, -- Chain Slam
|
||
|
|
341102, -- Fractured Boulder
|
||
|
|
340817, -- Seismic Shift
|
||
|
|
341250, -- Gruesome Rage
|
||
|
|
},{
|
||
|
|
[331209] = "general",
|
||
|
|
[341102] = "mythic",
|
||
|
|
},{
|
||
|
|
[335293] = CL.link, -- Chain Link (Link)
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnBossEnable()
|
||
|
|
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "HatefulGazeApplied", 331209)
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "HatefulGazeRemoved", 331209)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "DestructiveImpactApplied", 331314)
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "DestructiveImpactRemoved", 331314)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "ChainThemApplied", 342420, 342419) -- Pre chain debuff
|
||
|
|
self:Log("SPELL_CAST_START", "DestructiveStomp", 332318)
|
||
|
|
self:Log("SPELL_CAST_SUCCESS", "ColossalRoar", 332687)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "ChainSlamApplied", 335470)
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "ChainSlamRemoved", 335470)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "GruesomeRageApplied", 341250)
|
||
|
|
|
||
|
|
-- Mythic
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "SeismicShiftApplied", 340817)
|
||
|
|
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "GroundDamage", 335361) -- Stonequake
|
||
|
|
self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 335361)
|
||
|
|
self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 335361)
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnEngage()
|
||
|
|
destructiveStompCount = 1
|
||
|
|
colossalRoarCount = 1
|
||
|
|
chainLinkCount = 1
|
||
|
|
hatefullGazeCount = 1
|
||
|
|
chainSlamCount = 1
|
||
|
|
seismicShiftCount = 1
|
||
|
|
chainLinksApplied = 0
|
||
|
|
fallingRubbleCount = 1
|
||
|
|
prevHp = 0
|
||
|
|
|
||
|
|
self:Bar(335293, 5, CL.count:format(self:SpellName(335293), chainLinkCount)) -- Chain Link
|
||
|
|
if not self:Easy() then
|
||
|
|
self:Bar(335470, 29.1, CL.count:format(self:SpellName(335470), chainSlamCount)) -- Chain Slam
|
||
|
|
end
|
||
|
|
if self:Tank() then
|
||
|
|
self:Bar(331209, 52.5, CL.count:format(self:SpellName(331209), hatefullGazeCount)) -- Hateful Gaze
|
||
|
|
else
|
||
|
|
self:CDBar(331314, self:Mythic() and 58.5 or 60.5, CL.count:format(self:SpellName(331314), hatefullGazeCount)) -- Destructive Impact
|
||
|
|
end
|
||
|
|
if self:Mythic() then
|
||
|
|
self:CDBar(340817, timers[340817][seismicShiftCount], CL.count:format(L.stomp_shift, seismicShiftCount)) -- Seismic Shift
|
||
|
|
else
|
||
|
|
self:Bar(332318, timers[332318][destructiveStompCount], CL.count:format(self:SpellName(332318), destructiveStompCount)) -- Destructive Stomp
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Event Handlers
|
||
|
|
--
|
||
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
|
||
|
|
if spellId == 341193 then -- Falling Rubble // or spellId == 341103
|
||
|
|
local spellName = self:SpellName(341193)
|
||
|
|
if fallingRubbleCount >= 2 then -- First two dont spawn anything?
|
||
|
|
self:StopBar(CL.count:format(spellName, fallingRubbleCount-2))
|
||
|
|
if fallingRubbleCount ~= 2 then -- skip message
|
||
|
|
self:Message(341193, "yellow", CL.count:format(spellName, fallingRubbleCount-2))
|
||
|
|
self:PlaySound(341193, "long")
|
||
|
|
end
|
||
|
|
self:CDBar(341193, 70.5, CL.count:format(spellName, fallingRubbleCount-1))
|
||
|
|
end
|
||
|
|
fallingRubbleCount = fallingRubbleCount + 1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:HatefulGazeApplied(args)
|
||
|
|
self:StopBar(CL.count:format(args.spellName, hatefullGazeCount))
|
||
|
|
self:TargetMessage(args.spellId, "yellow", args.destName, CL.count:format(args.spellName, hatefullGazeCount))
|
||
|
|
local duration = self:Mythic() and 4 or 6
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:PlaySound(args.spellId, "warning")
|
||
|
|
self:Say(args.spellId)
|
||
|
|
self:SayCountdown(args.spellId, duration)
|
||
|
|
end
|
||
|
|
if self:Tank() then
|
||
|
|
self:TargetBar(args.spellId, duration, args.destName, CL.count:format(args.spellName, hatefullGazeCount))
|
||
|
|
else
|
||
|
|
self:CDBar(331314, duration, CL.count:format(self:SpellName(331314), hatefullGazeCount)) -- Destructive Impact
|
||
|
|
end
|
||
|
|
hatefullGazeCount = hatefullGazeCount + 1
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:HatefulGazeRemoved(args)
|
||
|
|
self:StopBar(CL.count:format(args.spellName, hatefullGazeCount-1), args.destName)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:CancelSayCountdown(args.spellId)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:DestructiveImpactApplied(args)
|
||
|
|
self:Message(args.spellId, "red", CL.on:format(args.spellName, args.destName))
|
||
|
|
self:PlaySound(args.spellId, "info")
|
||
|
|
self:Bar(args.spellId, 12)
|
||
|
|
-- Adjust timers to improve them on a long charge
|
||
|
|
self:Bar(332687, 12, CL.count:format(self:SpellName(332687), colossalRoarCount)) -- Collosal Roar Timer Adjustment
|
||
|
|
if self:Mythic() then
|
||
|
|
self:Bar(341102, 3.5, CL.casting:format(self:SpellName(341102)), 341102) -- Fractured Boulder
|
||
|
|
end
|
||
|
|
local unit = self:GetBossId(args.destGUID)
|
||
|
|
if unit then
|
||
|
|
prevHp = self:GetHealth(unit)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:DestructiveImpactRemoved(args)
|
||
|
|
chainLinksApplied = 0
|
||
|
|
if self:Tank() then
|
||
|
|
self:Bar(331209, 52.5, CL.count:format(self:SpellName(331209), hatefullGazeCount)) -- Hateful Gaze
|
||
|
|
else
|
||
|
|
self:CDBar(331314, self:Mythic() and 58.5 or 60.5, CL.count:format(self:SpellName(331314), hatefullGazeCount)) -- Destructive Impact
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Update timers to be more exact
|
||
|
|
if self:Mythic() then
|
||
|
|
self:Bar(340817, 5.65, CL.count:format(self:SpellName(340817), seismicShiftCount)) -- Seismic Shift
|
||
|
|
else
|
||
|
|
self:Bar(332318, 18.5, CL.count:format(self:SpellName(332318), destructiveStompCount)) -- Destructive Stomp
|
||
|
|
end
|
||
|
|
if not self:Easy() then
|
||
|
|
self:Bar(335470, 29, CL.count:format(self:SpellName(335470), chainSlamCount)) -- Chain Slam
|
||
|
|
end
|
||
|
|
if fallingRubbleCount > 2 then -- First 2 dont trigger rubble, update bars after that
|
||
|
|
self:CDBar(341193, 12.5, CL.count:format(self:SpellName(341193), fallingRubbleCount-2)) -- Count is -2 since we ++ the counter even for those that dont trigger rubble
|
||
|
|
end
|
||
|
|
local unit = self:GetBossId(args.destGUID)
|
||
|
|
if unit and prevHp ~= 0 then
|
||
|
|
local percentHealthLost = self:GetHealth(unit) - prevHp
|
||
|
|
self:Message("fun_info", "green", L.health_lost:format(percentHealthLost), "petbattle_health-down")
|
||
|
|
prevHp = 0
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local playerList = mod:NewTargetList()
|
||
|
|
function mod:ChainThemApplied(args)
|
||
|
|
chainLinksApplied = chainLinksApplied + 1
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
local partner = args.sourceName
|
||
|
|
self:PersonalMessage(335293, false, CL.link_with:format(self:ColorName(partner)))
|
||
|
|
self:PlaySound(335293, "warning")
|
||
|
|
end
|
||
|
|
if chainLinksApplied == 1 then
|
||
|
|
self:StopBar(CL.count:format(CL.count:format(self:SpellName(335293), chainLinkCount)))
|
||
|
|
if not self:Mythic() then -- Everyone is chained on Mythic
|
||
|
|
self:Message(335293, "yellow", CL.count:format(self:SpellName(335293), chainLinkCount))
|
||
|
|
end
|
||
|
|
chainLinkCount = chainLinkCount + 1
|
||
|
|
self:CDBar(335293, 69, CL.count:format(self:SpellName(335293), chainLinkCount))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:DestructiveStomp(args)
|
||
|
|
self:StopBar(CL.count:format(args.spellName, destructiveStompCount))
|
||
|
|
self:Message(args.spellId, "orange", CL.count:format(args.spellName, destructiveStompCount))
|
||
|
|
self:PlaySound(args.spellId, "long")
|
||
|
|
self:CastBar(args.spellId, 4, CL.count:format(args.spellName, destructiveStompCount))
|
||
|
|
destructiveStompCount = destructiveStompCount + 1
|
||
|
|
if not self:Mythic() then -- Merged with Seismic Shift in Mythic
|
||
|
|
self:Bar(args.spellId, timers[args.spellId][destructiveStompCount], CL.count:format(args.spellName, destructiveStompCount))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ColossalRoar(args)
|
||
|
|
self:StopBar(CL.count:format(args.spellName, colossalRoarCount))
|
||
|
|
self:Message(args.spellId, "yellow", CL.count:format(args.spellName, colossalRoarCount))
|
||
|
|
self:PlaySound(args.spellId, "info")
|
||
|
|
colossalRoarCount = colossalRoarCount + 1
|
||
|
|
self:Bar(args.spellId, timers[args.spellId][colossalRoarCount], CL.count:format(args.spellName, colossalRoarCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ChainSlamApplied(args)
|
||
|
|
self:StopBar(CL.count:format(args.spellName, chainSlamCount))
|
||
|
|
self:TargetMessage(args.spellId, "yellow", args.destName, CL.count:format(args.spellName, chainSlamCount))
|
||
|
|
self:PrimaryIcon(args.spellId, args.destName)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:Yell(args.spellId)
|
||
|
|
self:YellCountdown(args.spellId, 4)
|
||
|
|
self:PlaySound(args.spellId, "warning")
|
||
|
|
end
|
||
|
|
chainSlamCount = chainSlamCount + 1
|
||
|
|
self:Bar(args.spellId, 69, CL.count:format(args.spellName, chainSlamCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ChainSlamRemoved(args)
|
||
|
|
self:PrimaryIcon(args.spellId)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:CancelYellCountdown(args.spellId)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:GruesomeRageApplied(args)
|
||
|
|
self:Message(args.spellId, "yellow")
|
||
|
|
self:PlaySound(args.spellId, "alert")
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local prev = 0
|
||
|
|
function mod:GroundDamage(args)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
local t = args.time
|
||
|
|
if t-prev > 2 then
|
||
|
|
prev = t
|
||
|
|
self:PlaySound(args.spellId, "underyou")
|
||
|
|
self:PersonalMessage(args.spellId, "underyou")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Mythic
|
||
|
|
do
|
||
|
|
local prev = 0
|
||
|
|
function mod:SeismicShiftApplied(args)
|
||
|
|
local t = args.time
|
||
|
|
if t-prev > 2 then
|
||
|
|
prev = t
|
||
|
|
self:StopBar(CL.count:format(args.spellName, seismicShiftCount))
|
||
|
|
self:Message(args.spellId, "yellow", CL.count:format(args.spellName, seismicShiftCount))
|
||
|
|
self:PlaySound(args.spellId, "long")
|
||
|
|
seismicShiftCount = seismicShiftCount + 1
|
||
|
|
if seismicShiftCount % 3 == 0 then -- 3, 6, 9, 12: No stomp with these
|
||
|
|
self:CDBar(args.spellId, timers[args.spellId][seismicShiftCount], CL.count:format(args.spellName, seismicShiftCount))
|
||
|
|
else
|
||
|
|
self:CDBar(args.spellId, timers[args.spellId][seismicShiftCount], CL.count:format(L.stomp_shift, seismicShiftCount))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|