Skip to content

Commit

Permalink
WoD/TheEverbloom/Xeritac: Staging, Descend, Venomous Sting, Gaseous V…
Browse files Browse the repository at this point in the history
…olley, fix add spawn alerts, timer updates
  • Loading branch information
ntowle committed Oct 28, 2023
1 parent bc9f908 commit e21703c
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 46 deletions.
10 changes: 7 additions & 3 deletions WoD/TheEverbloom/Options/Colors.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@ BigWigs:AddColors("Ancient Protectors", {
})

BigWigs:AddColors("Xeri'tac", {
[-10502] = "yellow",
[-10502] = "cyan",
[-10492] = "yellow",
[169233] = "red",
[169248] = "orange",
[169248] = "yellow",
[169376] = "red",
[169382] = "orange",
[172643] = "orange",
[173080] = "blue",
["stages"] = {"cyan","red"},
["stages"] = "cyan",
})

BigWigs:AddColors("Archmage Sol", {
Expand Down
7 changes: 5 additions & 2 deletions WoD/TheEverbloom/Options/Sounds.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@ BigWigs:AddSounds("Ancient Protectors", {

BigWigs:AddSounds("Xeri'tac", {
[-10502] = "info",
[169233] = "info",
[169233] = "alert",
[169248] = "warning",
[169376] = "alert",
[169382] = "alarm",
[172643] = "alarm",
[173080] = "alarm",
["stages"] = "info",
["stages"] = "long",
})

BigWigs:AddSounds("Archmage Sol", {
Expand Down
185 changes: 144 additions & 41 deletions WoD/TheEverbloom/Xeritac.lua
Original file line number Diff line number Diff line change
@@ -1,94 +1,197 @@

local isTenDotTwo = select(4, GetBuildInfo()) >= 100200 -- XXX delete when 10.2 is live everywhere
--------------------------------------------------------------------------------
-- Module Declaration
--

local mod, CL = BigWigs:NewBoss("Xeri'tac", 1279, 1209)
if not mod then return end
mod:RegisterEnableMob(84550)
mod.engageId = 1752
mod.respawnTime = 20
mod:RegisterEnableMob(84550) -- Xeri'tac
mod:SetEncounterID(1752)
mod:SetRespawnTime(isTenDotTwo and 30 or 20) -- XXX 30s when 10.2 is live everywhere
mod:SetStage(1)

--------------------------------------------------------------------------------
-- Locals
--

local deaths = 0
local spiderAddDeaths = 0

--------------------------------------------------------------------------------
-- Initialization
--

function mod:GetOptions()
return {
-- Pale One
-10502,
"stages",
-- Stage One: The Venomous Brood
172643, -- Descend
-- Stage Two: The Spider Matriarch
169376, -- Venomous Sting
169382, -- Gaseous Volley
169248, -- Consume
-- Venom-Crazed Pale One
-10502, -- Venom-Crazed Pale One
169233, -- Inhale
-- Spiderlings
-10492,
-- Toxic Spiderling
-10492, -- Toxic Spiderling
-- Gorged Bursters
173080, -- Fixate
"stages",
}, {
[172643] = -10506, -- Stage One: The Venomous Brood
[169248] = -10507, -- Stage Two: Spider Matriarch
[-10502] = -10502, -- Venom-Crazed Pale One
[-10492] = -10492, -- Toxic Spiderling
[173080] = -10691, -- Gorged Bursters
}
end

function mod:OnBossEnable()
-- Stages
self:Death("SpiderDeath", 84552, 86547) -- Toxic Spiderling, Venom Sprayer
self:RegisterUnitEvent("UNIT_TARGETABLE_CHANGED", nil, "boss1")

-- Stage One: The Venomous Brood
self:Log("SPELL_CAST_START", "Descend", 172643)

-- Stage Two: Spider Matriarch
self:Log("SPELL_CAST_START", "VenomousSting", 169376)
self:Log("SPELL_CAST_START", "GaseousVolley", 169382)
self:Log("SPELL_CAST_START", "Consume", 169248)

-- Venom-Crazed Pale One
self:Log("SPELL_CAST_SUCCESS", "EncounterSpawn", 181113)
self:Log("SPELL_CAST_START", "Inhale", 169233)
self:Log("SPELL_AURA_APPLIED", "Fixate", 173080)

self:RegisterUnitEvent("UNIT_TARGETABLE_CHANGED", nil, "boss1")
self:Death("SpiderlingDeath", 84552)
-- Toxic Spiderling
self:Log("SPELL_CAST_SUCCESS", "ToxicBlood", 169218)

-- Gorged Bursters
self:Log("SPELL_AURA_APPLIED", "Fixate", 173080)
end

function mod:OnEngage()
deaths = 0
self:Bar(-10502, 20, CL.next_add, "spell_festergutgas")
self:ScheduleTimer("AddSpawn", 20)
self:Bar(-10492, 30, 155139, "spell_yorsahj_bloodboil_green") -- 155139 = Spiders
self:ScheduleTimer("SpidersSpawn", 30)
spiderAddDeaths = 0
self:SetStage(1)
self:CDBar(172643, 8.6) -- Descend
self:Bar(-10502, 19.6, CL.spawning:format(self:SpellName(-10502)), "spell_festergutgas") -- Venom-Crazed Pale One
if not isTenDotTwo then
self:ScheduleTimer("AddSpawn", 19.6) -- XXX delete when 10.2 is live everywhere
end
if self:Normal() then
-- Normal is 40s or when you kill the last set, whichever comes first
self:Bar(-10492, 40, CL.spawning:format(self:SpellName(-10492)), "ability_hunter_pet_spider") -- Toxic Spiderling
else
-- Heroic, Mythic are 30s fixed timer
self:Bar(-10492, 30, CL.spawning:format(self:SpellName(-10492)), "ability_hunter_pet_spider") -- Toxic Spiderling
end
end

--------------------------------------------------------------------------------
-- Event Handlers
--

function mod:SpiderlingDeath()
deaths = deaths + 1
if deaths < 9 then
self:MessageOld("stages", "cyan", nil, CL.add_killed:format(deaths, 8), false)
-- Stages

function mod:SpiderDeath()
-- Toxic Spiderling (84552) and Venom Sprayer (86547) deaths count
-- the Heroic+ Gorged Burster (86552) does not count
spiderAddDeaths = spiderAddDeaths + 1
if spiderAddDeaths < 8 then
self:Message("stages", "cyan", CL.add_killed:format(spiderAddDeaths, 8), false)
end
end

function mod:SpidersSpawn()
--self:MessageOld(-10492, "yellow", nil, 155139, false) -- 155139 = Spiders
self:Bar(-10492, 30, 155139, "spell_yorsahj_bloodboil_green") -- 155139 = Spiders
self:ScheduleTimer("SpidersSpawn", 30)
function mod:UNIT_TARGETABLE_CHANGED(_, unit)
if self:GetStage() == 1 and UnitCanAttack("player", unit) then
self:SetStage(2)
self:Message("stages", "cyan", CL.incoming:format(self.displayName), "inv_misc_monsterspidercarapace_01")
self:PlaySound("stages", "long")
self:StopBar(172643) -- Descend
self:StopBar(CL.spawning:format(self:SpellName(-10492))) -- Toxic Spiderling
end
end

function mod:Fixate(args)
if self:Me(args.destGUID) then
self:MessageOld(173080, "blue", "alarm", CL.you:format(args.spellName))
end
-- Stage One: The Venomous Brood

function mod:Descend(args)
self:Message(args.spellId, "orange")
self:PlaySound(args.spellId, "alarm")
self:CDBar(args.spellId, 13.0)
end

function mod:AddSpawn()
self:MessageOld(-10502, "yellow", "info", CL.add_spawned, false)
self:Bar(-10502, 30, CL.next_add, "spell_festergutgas")
self:ScheduleTimer("AddSpawn", 30)
-- Stage Two: Spider Matriarch

function mod:VenomousSting(args)
self:Message(args.spellId, "red", CL.casting:format(args.spellName))
self:PlaySound(args.spellId, "alert")
self:CDBar(args.spellId, 31.6)
end

function mod:GaseousVolley(args)
self:Message(args.spellId, "orange")
self:PlaySound(args.spellId, "alarm")
self:CDBar(args.spellId, 24.0)
end

function mod:Consume(args)
self:MessageOld(args.spellId, "orange", "warning")
self:Bar(args.spellId, 10)
self:Message(args.spellId, "yellow")
self:PlaySound(args.spellId, "warning")
self:CDBar(args.spellId, 31.6)
end

function mod:Inhale(args)
self:MessageOld(args.spellId, "red", "info")
-- Venom-Crazed Pale One

function mod:EncounterSpawn()
self:Message(-10502, "cyan", CL.spawned:format(self:SpellName(-10502)), "spell_festergutgas") -- Venom-Crazed Pale One
self:PlaySound(-10502, "info")
self:Bar(-10502, 30, CL.spawning:format(self:SpellName(-10502)), "spell_festergutgas")
end

function mod:UNIT_TARGETABLE_CHANGED(_, unit)
if UnitCanAttack("player", unit) then
self:MessageOld("stages", "red", "info", CL.incoming:format(self.displayName), "inv_misc_monsterspidercarapace_01")
function mod:AddSpawn() -- XXX delete when 10.2 is live everywhere
self:EncounterSpawn()
self:ScheduleTimer("AddSpawn", 30)
end

do
local prev = 0
function mod:Inhale(args)
-- the add can interrupt its own cast if there are multiple clouds nearby
local t = args.time
if t - prev > 2 then
prev = t
self:Message(args.spellId, "red")
self:PlaySound(args.spellId, "alert")
end
end
end

-- Toxic Spiderling

do
local prev = 0
function mod:ToxicBlood(args)
local t = args.time
-- throttle because 2 adds spawn at once in Normal, 3 in Heroic/Mythic.
-- each adds casts this on spawn
if t - prev > 5 then
prev = t
self:Message(-10492, "yellow", CL.spawned:format(self:SpellName(-10492)), "ability_hunter_pet_spider") -- Toxic Spiderling
if self:Normal() then
-- Normal is 40s or when you kill the last set, whichever comes first
self:Bar(-10492, 40, CL.spawning:format(self:SpellName(-10492)), "ability_hunter_pet_spider") -- Toxic Spiderling
else
-- Heroic, Mythic are 30s fixed timer
self:Bar(-10492, 30, CL.spawning:format(self:SpellName(-10492)), "ability_hunter_pet_spider") -- Toxic Spiderling
end
end
end
end

-- Gorged Bursters

function mod:Fixate(args)
if self:Me(args.destGUID) then
self:PersonalMessage(args.spellId)
self:PlaySound(args.spellId, "alarm", nil, args.destName)
end
end

0 comments on commit e21703c

Please sign in to comment.