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.

186 lines
5.4 KiB

--------------------------------------------------------------------------------
-- TODO List:
-- - Do we need warnings for the add spells?
-- - Mythic Abilities
--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Domatrax", 1677, 1904)
if not mod then return end
mod:RegisterEnableMob(
118884, -- Aegis of Aggramar
118804 -- Domatrax
)
mod.engageId = 2053
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.custom_on_autotalk = "Autotalk"
L.custom_on_autotalk_desc = "Instantly selects the Aegis of Aggramar's gossip option to start the Domatrax encounter."
L.missing_aegis = "You're not standing in Aegis" -- Aegis is a short name for Aegis of Aggramar
L.aegis_healing = "Aegis: Reduced Healing Done"
L.aegis_damage = "Aegis: Reduced Damage Done"
end
--------------------------------------------------------------------------------
-- Locals
--
local felPortalGuardianCollector = {}
local felPortalGuardiansCounter = 1
local isCastingChaoticEnergy = false
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
"custom_on_autotalk", -- Aegis of Aggramar
238410, -- Aegis of Aggramar
236543, -- Felsoul Cleave
234107, -- Chaotic Energy
-15076, -- Fel Portal Guardian
241622, -- Approaching Doom
},{
["custom_on_autotalk"] = "general",
[236543] = -15011,
[241622] = "mythic",
}
end
function mod:OnBossEnable()
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
self:Log("SPELL_CAST_START", "FelsoulCleave", 236543)
self:Log("SPELL_CAST_START", "ChaoticEnergy", 234107)
self:Log("SPELL_CAST_SUCCESS", "ChaoticEnergySuccess", 234107)
self:RegisterEvent("GOSSIP_SHOW")
self:Log("SPELL_AURA_APPLIED", "AegisApplied", 238410)
self:Log("SPELL_AURA_REMOVED", "AegisRemoved", 238410)
end
function mod:OnEngage()
isCastingChaoticEnergy = false
if self:Mythic() then
felPortalGuardiansCounter = 1
felPortalGuardianCollector = {}
self:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT")
end
self:CDBar(236543, 8.3) -- Felsoul Cleave
self:CDBar(234107, 32.5) -- Chaotic Energy
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
if spellId == 235822 or spellId == 235862 then -- Start Wave 1 + 2
self:MessageOld(-15076, "red", "alarm", CL.incoming:format(self:SpellName(-15076)))
end
end
function mod:FelsoulCleave(args)
self:MessageOld(args.spellId, "yellow", "alert")
self:CDBar(args.spellId, 18.5)
end
do
local aegisCheck, isOnMe = nil, false
local function periodicCheckForAegisOfAggramar(self)
if isOnMe then
self:MessageOld(238410, "blue", "alert", self:Healer() and L.aegis_healing or L.aegis_damage)
aegisCheck = self:ScheduleTimer(periodicCheckForAegisOfAggramar, 1.5, self)
end
end
local function checkForLackOfAegis(self)
if not isOnMe and self:MobId(self:UnitGUID("boss2")) == 118884 then -- make sure the Aegis is not depleted
self:MessageOld(238410, "orange", "warning", L.missing_aegis)
end
end
function mod:ChaoticEnergy(args)
if aegisCheck then
self:CancelTimer(aegisCheck)
aegisCheck = nil
end
isCastingChaoticEnergy = true
self:MessageOld(args.spellId, "orange", "warning")
self:CDBar(args.spellId, 37.6)
self:CastBar(args.spellId, 5)
-- give a warning if the player is not in the Aegis during the last 2 seconds of the cast:
self:ScheduleTimer(checkForLackOfAegis, 3, self)
end
function mod:ChaoticEnergySuccess()
isCastingChaoticEnergy = false
aegisCheck = self:ScheduleTimer(periodicCheckForAegisOfAggramar, 1, self)
end
function mod:AegisApplied(args)
if self:Me(args.destGUID) then
isOnMe = true
if not isCastingChaoticEnergy then
periodicCheckForAegisOfAggramar(self)
end
end
end
function mod:AegisRemoved(args)
if self:Me(args.destGUID) then
isOnMe = false
if aegisCheck then
self:CancelTimer(aegisCheck)
aegisCheck = nil
end
end
end
end
function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()
local felPortalGuardians = {}
for i = 1, 5 do
local guid = self:UnitGUID(("boss%d"):format(i))
if guid then
local mobId = self:MobId(guid)
if mobId == 118834 then -- Fel Portal Guardian
if not felPortalGuardianCollector[guid] then
-- New Fel Portal Guardian
felPortalGuardianCollector[guid] = felPortalGuardiansCounter
self:CDBar(241622, 20, CL.cast:format(CL.count:format(self:SpellName(241622), felPortalGuardiansCounter)))
felPortalGuardiansCounter = felPortalGuardiansCounter + 1
end
felPortalGuardians[guid] = true
end
end
end
for guid,_ in pairs(felPortalGuardianCollector) do
if not felPortalGuardians[guid] then
-- Fel Portal Guardian Died
self:StopBar(CL.cast:format(CL.count:format(self:SpellName(241622), felPortalGuardianCollector[guid])))
felPortalGuardianCollector[guid] = nil
end
end
end
-- Aegis of Aggramar
function mod:GOSSIP_SHOW()
if self:GetOption("custom_on_autotalk") and self:MobId(self:UnitGUID("npc")) == 118884 then
if self:GetGossipOptions() then
self:SelectGossipOption(1, true) -- auto confirm it
end
end
end