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.

295 lines
11 KiB

4 years ago
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Dausegne, the Fallen Oracle", 2481, 2459)
if not mod then return end
mod:RegisterEnableMob(181224) -- Dausegne
mod:SetEncounterID(2540)
mod:SetRespawnTime(30)
--------------------------------------------------------------------------------
-- Locals
--
local barrageCount = 1
local coreCount = 1
local arcCount = 1
local haloCount = 1
local haloTimer = nil
local teleportCount = 1
local nextTeleport = 0
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.staggering_barrage = "Barrage" -- Staggering Barrage
L.obliteration_arc = "Arc" -- Obliteration Arc
L.disintergration_halo = "Rings" -- Disintegration Halo
L.rings_x = "Rings x%d"
L.rings_enrage = "Rings (Enrage)"
L.ring_count = "Ring (%d/%d)"
L.custom_on_ring_timers = "Individual Halo Timers"
L.custom_on_ring_timers_desc = "Disintegration Halo triggers a set of rings, this will show bars for when each of the rings starts moving. Uses settings from Disintegration Halo."
L.custom_on_ring_timers_icon = 363200
4 years ago
L.absorb_text = "%s (%.0f%%)"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
361966, -- Infused Strikes
{361018, "ICON", "SAY_COUNTDOWN", "SAY"}, -- Staggering Barrage
359483, -- Domination Core
361225, -- Encroaching Dominion
361513, -- Obliteration Arc
363200, -- Disintegration Halo
"custom_on_ring_timers",
4 years ago
361630, -- Teleport
{361651, "INFOBOX"}, -- Siphoned Barrier
365418, -- Total Dominion
},nil,{
[361018] = L.staggering_barrage, -- Staggering Barrage (Barrage)
[359483] = CL.add, -- Domination Core (Add)
4 years ago
[361513] = L.obliteration_arc, -- Obliteration Arc (Arc)
[363200] = L.disintergration_halo, -- Disintegration Halo (Rings)
}
end
function mod:OnBossEnable()
self:Log("SPELL_AURA_APPLIED", "InfusedStrikesApplied", 361966)
self:Log("SPELL_AURA_APPLIED_DOSE", "InfusedStrikesApplied", 361966)
self:Log("SPELL_AURA_REMOVED", "InfusedStrikesRemoved", 361966)
self:Log("SPELL_AURA_APPLIED", "StaggeringBarrageApplied", 361018)
self:Log("SPELL_AURA_REMOVED", "StaggeringBarrageRemoved", 361018)
self:Log("SPELL_CAST_START", "DominationCore", 359483)
self:Log("SPELL_CAST_START", "ObliterationArc", 361513)
self:Log("SPELL_CAST_SUCCESS", "DisintegrationHaloSuccess", 362805)
4 years ago
self:Log("SPELL_CAST_START", "Teleport", 361630)
self:Log("SPELL_AURA_APPLIED", "SiphonedBarrierApplied", 361651)
self:Log("SPELL_AURA_REMOVED", "SiphonedBarrierRemoved", 361651)
self:Log("SPELL_CAST_START", "TotalDominion", 365418)
self:Log("SPELL_AURA_APPLIED", "GroundDamage", 361225) -- Encroaching Dominion
self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 361225)
self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 361225)
end
function mod:OnEngage()
barrageCount = 1
coreCount = 1
arcCount = 1
haloCount = 1
teleportCount = 1
nextTeleport = GetTime() + (self:Easy() and 80 or 72.8)
self:SetStage(1)
self:Bar(359483, self:Easy() and 7 or 6.5, CL.count:format(CL.add, coreCount)) -- Domination Core
self:Bar(363200, self:Easy() and 5.5 or 5, CL.count:format(L.rings_x:format(teleportCount), haloCount)) -- Disintegration Halo (emote at 5, ring at ~13)
self:Bar(361513, self:Easy() and 16.5 or 15, CL.count:format(L.obliteration_arc, arcCount)) -- Obliteration Arc
self:Bar(361018, self:Easy() and 32 or 29, CL.count:format(L.staggering_barrage, barrageCount)) -- Staggering Barrage
self:Bar(361630, self:Easy() and 80 or 72.8, CL.count:format(self:SpellName(361630), teleportCount)) -- Teleport
4 years ago
end
--------------------------------------------------------------------------------
-- Event Handlers
--
4 years ago
do
local tankTimers = {}
function mod:InfusedStrikesApplied(args)
self:CancelTimer(tankTimers[args.destName])
self:StopBar(CL.bomb, args.destName)
if self:Tank() then
local amount = args.amount or 1
if amount % 2 == 0 and amount > 8 then -- XXX Finetune
self:NewStackMessage(args.spellId, "purple", args.destName, amount, 5)
if amount > 15 and not self:Tanking("boss1") then
self:PlaySound(args.spellId, "alarm")
end
4 years ago
end
end
4 years ago
tankTimers[args.destName] = self:ScheduleTimer("TargetBar", 10, args.spellId, 10, args.destName, CL.bomb)
4 years ago
end
4 years ago
function mod:InfusedStrikesRemoved(args)
self:StopBar(CL.bomb, args.destName)
self:CancelTimer(tankTimers[args.destName])
end
4 years ago
end
function mod:StaggeringBarrageApplied(args)
self:TargetMessage(args.spellId, "orange", args.destName, CL.count:format(L.staggering_barrage, barrageCount))
if self:Me(args.destGUID) then
self:PlaySound(args.spellId, "warning")
self:Yell(args.spellId, L.staggering_barrage)
self:YellCountdown(args.spellId, 8)
else
self:PlaySound(args.spellId, "alert", nil, args.destName)
4 years ago
end
self:SecondaryIcon(args.spellId, args.destName)
barrageCount = barrageCount + 1
local cd = self:Easy() and 38.8 or 35
4 years ago
if barrageCount < 4 and nextTeleport > GetTime() + cd then -- 3 per rotation, except first
self:Bar(361018, cd, CL.count:format(L.staggering_barrage, barrageCount))
end
end
function mod:StaggeringBarrageRemoved(args)
if self:Me(args.destGUID) then
self:CancelYellCountdown(args.spellId)
end
self:SecondaryIcon(args.spellId, nil)
end
function mod:DominationCore(args)
self:Message(args.spellId, "yellow", CL.incoming:format(CL.count:format(CL.add, coreCount)))
4 years ago
self:PlaySound(args.spellId, "long")
coreCount = coreCount + 1
local cd = self:Easy() and (coreCount == 2 and 37.2 or 40.5) or (coreCount == 2 and 33.5 or 36.5)
4 years ago
if coreCount < 4 and nextTeleport > GetTime() + cd then -- 3 per rotation, except first
self:Bar(args.spellId, cd, CL.count:format(CL.add, coreCount))
4 years ago
end
end
function mod:ObliterationArc(args)
self:Message(args.spellId, "yellow", CL.count:format(L.obliteration_arc, arcCount))
self:PlaySound(args.spellId, "alert")
arcCount = arcCount + 1
local cd = self:Easy() and 38.8 or 35
4 years ago
if arcCount < 4 and nextTeleport > GetTime() + cd then -- 3 per rotation, except first
self:Bar(args.spellId, cd, CL.count:format(L.obliteration_arc, arcCount))
end
end
do
local ringCount = 1
function mod:DisintegrationHalo()
if ringCount == 1 then
if haloCount == 4 then
4 years ago
self:Message(363200, "orange", L.rings_enrage)
4 years ago
else
self:Message(363200, "orange", CL.count:format(L.rings_x:format(teleportCount), haloCount-1))
end
self:PlaySound(363200, "long")
end
if ringCount < teleportCount and haloCount < 3 then -- skip enrage rings
4 years ago
ringCount = ringCount + 1
self:CDBar(363200, 5.5, L.ring_count:format(ringCount, teleportCount))
haloTimer = self:ScheduleTimer("DisintegrationHalo", 5.5)
end
end
function mod:DisintegrationHaloSuccess(args)
self:StopBar(CL.count:format(L.rings_x:format(teleportCount), haloCount))
self:Message(363200, "orange", CL.soon:format(CL.count:format(L.rings_x:format(teleportCount), haloCount)))
self:PlaySound(363200, "info")
haloCount = haloCount + 1
ringCount = 1
if teleportCount > 1 and haloCount < 3 then -- 2 per rotation, except first
self:Bar(363200, self:Easy() and 77.8 or 70, CL.count:format(L.rings_x:format(teleportCount), haloCount))
elseif teleportCount == 4 and haloCount == 3 then -- enrage, shorter cd, then triggers infinite rings
--self:Bar(363200, 35, CL.count:format(L.rings_enrage, haloCount)) -- Don't need to show do we?
end
if self:GetOption("custom_on_ring_timers") then
self:Bar(363200, 8.5, L.ring_count:format(ringCount, teleportCount))
haloTimer = self:ScheduleTimer("DisintegrationHalo", 8.5)
4 years ago
end
end
end
function mod:Teleport(args)
-- clean up anything we messed up
self:StopBar(CL.count:format(L.rings_x:format(teleportCount), haloCount)) -- Disintegration Halo
self:StopBar(CL.count:format(CL.add, coreCount)) -- Domination Core
4 years ago
self:StopBar(CL.count:format(L.obliteration_arc, arcCount)) -- Obliteration Arc
self:StopBar(CL.count:format(L.staggering_barrage, barrageCount)) -- Staggering Barrage
self:StopBar(CL.count:format(args.spellName, teleportCount)) -- Teleport
self:CancelTimer(haloTimer)
for i = 2, teleportCount do
self:StopBar(L.ring_count:format(i, teleportCount))
end
self:Message(args.spellId, "cyan", CL.count:format(args.spellName, teleportCount))
self:PlaySound(args.spellId, "info")
teleportCount = teleportCount + 1
end
do
local timer, maxAbsorb = nil, 0
local appliedTime = 0
local function updateInfoBox(self)
local absorb = UnitGetTotalAbsorbs("boss1")
local absorbPercentage = absorb / maxAbsorb
self:SetInfoBar(361651, 1, absorbPercentage)
self:SetInfo(361651, 2, L.absorb_text:format(self:AbbreviateNumber(absorb), absorbPercentage * 100))
end
function mod:SiphonedBarrierApplied(args)
if self:CheckOption(args.spellId, "INFOBOX") then
self:OpenInfo(args.spellId, args.spellName)
self:SetInfoBar(args.spellId, 1, 1)
self:SetInfo(args.spellId, 1, _G.ABSORB)
maxAbsorb = args.amount
timer = self:ScheduleRepeatingTimer(updateInfoBox, 0.1, self)
end
appliedTime = args.time
end
function mod:SiphonedBarrierRemoved(args)
self:CloseInfo(args.spellId)
if timer then
self:CancelTimer(timer)
timer = nil
end
self:SetStage(self:GetStage() + 1)
self:Message(args.spellId, "green", CL.removed_after:format(args.spellName, args.time - appliedTime))
4 years ago
self:PlaySound(args.spellId, "info")
barrageCount = 1
coreCount = 1
arcCount = 1
haloCount = 1
self:Bar(363200, self:Easy() and 7.5 or 7, CL.count:format(L.rings_x:format(teleportCount), haloCount)) -- Disintegration Halo
self:Bar(359483, self:Easy() and 9.3 or 8.5, CL.count:format(CL.add, coreCount)) -- Domination Core
self:Bar(361513, self:Easy() and 18.7 or 17, CL.count:format(L.obliteration_arc, arcCount)) -- Obliteration Arc
self:Bar(361018, self:Easy() and 34.3 or 31, CL.count:format(L.staggering_barrage, barrageCount)) -- Staggering Barrage
4 years ago
nextTeleport = GetTime() + (self:Easy() and 121 or 110.2)
4 years ago
if teleportCount < 4 then -- Only 3 teleports before berserk
self:Bar(361630, self:Easy() and 121 or 110.2, CL.count:format(self:SpellName(361630), teleportCount)) -- Teleport
4 years ago
else
self:Bar(365418, (self:Easy() and 121 or 110.2)) -- Total Domination
4 years ago
end
end
end
function mod:TotalDominion(args)
self:Message(args.spellId, "red")
self:PlaySound(args.spellId, "warning")
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