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