diff --git a/WoD/TheEverbloom/Options/Colors.lua b/WoD/TheEverbloom/Options/Colors.lua index 7bb9fc1d9..e41a2d4d9 100644 --- a/WoD/TheEverbloom/Options/Colors.lua +++ b/WoD/TheEverbloom/Options/Colors.lua @@ -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", { diff --git a/WoD/TheEverbloom/Options/Sounds.lua b/WoD/TheEverbloom/Options/Sounds.lua index 6b27d12fe..510ec8874 100644 --- a/WoD/TheEverbloom/Options/Sounds.lua +++ b/WoD/TheEverbloom/Options/Sounds.lua @@ -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", { diff --git a/WoD/TheEverbloom/Xeritac.lua b/WoD/TheEverbloom/Xeritac.lua index bed8cacbd..a6713fcdd 100644 --- a/WoD/TheEverbloom/Xeritac.lua +++ b/WoD/TheEverbloom/Xeritac.lua @@ -1,19 +1,20 @@ - +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 @@ -21,74 +22,176 @@ local deaths = 0 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