diff --git a/.pkgmeta b/.pkgmeta
index ac1169215..6576058b3 100644
--- a/.pkgmeta
+++ b/.pkgmeta
@@ -24,6 +24,7 @@ move-folders:
BigWigs/Plugins: BigWigs_Plugins
BigWigs/NerubarPalace: BigWigs_NerubarPalace
BigWigs/KhazAlgar: BigWigs_KhazAlgar
+ BigWigs/LiberationOfUndermine: BigWigs_LiberationOfUndermine
ignore:
- .luacheckrc
diff --git a/LiberationOfUndermine/Bandit.lua b/LiberationOfUndermine/Bandit.lua
new file mode 100644
index 000000000..ebb1e02b1
--- /dev/null
+++ b/LiberationOfUndermine/Bandit.lua
@@ -0,0 +1,52 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("The One-Armed Bandit", 2769, 2644)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3014)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ "stages",
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+
+end
+
+function mod:OnEngage()
+ self:Message("stages", "yellow", "Dummy Message", false)
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/BigWigs_LiberationOfUndermine_Mainline.toc b/LiberationOfUndermine/BigWigs_LiberationOfUndermine_Mainline.toc
new file mode 100644
index 000000000..f7163c206
--- /dev/null
+++ b/LiberationOfUndermine/BigWigs_LiberationOfUndermine_Mainline.toc
@@ -0,0 +1,34 @@
+## Interface: 110005, 110007, 110002
+
+## Title: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-deDE: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-esES: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-esMX: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-frFR: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-itIT: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-koKR: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-ptBR: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-ruRU: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-zhCN: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Title-zhTW: BigWigs [|cffeda55fLiberation of Undermine|r]
+## Notes: BigWigs Liberation of Undermine Modules
+## Notes-deDE: BigWigs Liberation of Undermine Module
+## Notes-esES: BigWigs Liberation of Undermine Modules
+## Notes-esMX: BigWigs Liberation of Undermine Modules
+## Notes-frFR: BigWigs Liberation of Undermine Modules
+## Notes-itIT: BigWigs Liberation of Undermine Modules
+## Notes-koKR: BigWigs Liberation of Undermine Modules
+## Notes-ptBR: BigWigs Liberation of Undermine Modules
+## Notes-ruRU: BigWigs Liberation of Undermine Modules
+## Notes-zhCN: BigWigs Liberation of Undermine Modules
+## Notes-zhTW: BigWigs Liberation of Undermine Modules
+## IconTexture: Interface\AddOns\BigWigs\Media\Icons\minimap_raid.tga
+## Version: @project-version@
+
+## LoadOnDemand: 1
+## Dependencies: BigWigs
+
+## X-Category: Raid
+## X-BigWigs-LoadOn-InstanceId: 2769
+
+modules.xml
diff --git a/LiberationOfUndermine/Cauldron.lua b/LiberationOfUndermine/Cauldron.lua
new file mode 100644
index 000000000..d35cf9a22
--- /dev/null
+++ b/LiberationOfUndermine/Cauldron.lua
@@ -0,0 +1,248 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Cauldron of Carnage", 2769, 2640)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3010)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ 465833, -- Colossal Clash
+ -- 463800, -- Zapbolt
+ -- 465446, -- Fiery Wave
+ 471660, -- Raised Guard
+ 471557, -- King of Carnage
+ -- Flarendo the Furious
+ 472222, -- Blistering Spite
+ 473650, -- Scrapbomb
+ {1213690, "SAY_COUNTDOWN"}, -- Molten Phlegm
+ 1214039, -- Molten Pool
+ -- 465446, -- Fiery Waves
+ {472231, "SAY"}, -- Blastburn Roarcannon
+ 1214190, -- Eruption Stomp
+ -- Torq the Tempest
+ 472223, -- Galvanized Spite
+ 473951, -- Static Charge
+ -- 473983, -- Static Discharge
+ 463840, -- Thunderdrum Salvo
+ 1213994, -- Voltaic Image
+ 463925, -- Lingering Electricity
+ 466178, -- Lightning Bash
+ -- 1217933, -- Overload Burst
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(1214009, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+ self:Log("SPELL_CAST_SUCCESS", "ColossalClash", 465833)
+ self:Log("SPELL_AURA_APPLIED", "RaisedGuardApplied", 471660)
+ self:Log("SPELL_AURA_APPLIED", "KingOfCarnageApplied", 471557)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "KingOfCarnageApplied", 471557)
+
+ -- Flarendo the Furious
+ self:Log("SPELL_AURA_APPLIED", "BlisteringSpiteApplied", 472222)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "BlisteringSpiteApplied", 472222)
+ self:Log("SPELL_CAST_START", "Scrapbomb", 473650)
+ self:Log("SPELL_AURA_APPLIED", "MoltenPhlegmApplied", 1213690)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "MoltenPhlegmApplied", 1213690) -- XXX Stacks or refreshes?
+ self:Log("SPELL_AURA_APPLIED", "BlastburnRoarcannonApplied", 472231)
+ self:Log("SPELL_CAST_START", "EruptionStomp", 1214190)
+
+ -- Torq the Tempest
+ self:Log("SPELL_AURA_APPLIED", "GalvanizedSpiteApplied", 472223)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "GalvanizedSpiteApplied", 472223)
+ self:Log("SPELL_AURA_APPLIED", "StaticChargeApplied", 473951)
+ self:Log("SPELL_CAST_START", "ThunderdrumSalvo", 463840)
+ self:Log("SPELL_AURA_APPLIED", "ThunderdrumSalvoApplied", 463840)
+ self:Log("SPELL_CAST_SUCCESS", "VoltaicImage", 1213994)
+ self:Log("SPELL_AURA_APPLIED", "VoltaicImageFixateApplied", 1214009)
+ self:Log("SPELL_CAST_START", "LightningBash", 466178)
+
+ self:Log("SPELL_AURA_APPLIED", "GroundDamage", 1214039, 463925) -- Molten Pool, Lingering Electricity
+ self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 1214039, 463925)
+ self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 1214039, 463925)
+end
+
+function mod:OnEngage()
+ -- self:Bar(473650, 20) -- Scrapbomb
+ -- self:Bar(465833, 90) -- Colossal Clash
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
+
+function mod:ColossalClash(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "long") -- 20s clash
+ -- self:Bar(args.spellId, 110)
+end
+
+do
+ local prev = 0
+ function mod:RaisedGuardApplied(args)
+ if args.time - prev > 2 then
+ prev = args.time
+ self:Message(args.spellId)
+ self:PlaySound(args.spellId, "warning")
+ end
+ end
+end
+
+function mod:KingOfCarnageApplied(args)
+ local amount = args.amount or 1
+ self:StackMessage(args.spellId, "cyan", args.destName, amount, 1)
+ self:PlaySound(args.spellId, "info")
+ self:Bar(args.spellId, 10, CL.count:format(args.spellName, amount + 1))
+end
+
+-- Flarendo the Furious
+function mod:BlisteringSpiteApplied(args)
+ if self:Me(args.destGUID) then
+ local amount = args.amount or 1
+ local tooHigh = 15 -- XXX finetune
+ if amount % 2 == 1 or amount >= tooHigh then
+ self:StackMessage(args.spellId, "blue", args.destName, amount, tooHigh)
+ if amount >= tooHigh then
+ self:PlaySound(args.spellId, "alarm") -- too many stacks
+ end
+ end
+ end
+end
+
+function mod:Scrapbomb(args)
+ self:Message(args.spellId, "orange")
+ self:PlaySound(args.spellId, "alert") -- soak bombs
+ -- self:Bar(args.spellId, 110)
+end
+
+function mod:MoltenPhlegmApplied(args)
+ if self:Me(args.destGUID) then
+ self:StopSayCountdown(args.spellId) -- restart
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "alarm")
+ self:SayCountdown(args.spellId, 30)
+ end
+end
+
+do
+ local prev = 0
+ function mod:BlastburnRoarcannonApplied(args)
+ if args.time - prev > 2 then -- 3 targets in Mythic
+ prev = args.time
+ self:Message(args.spellId, "yellow")
+ -- self:Bar(args.spellId, 30)
+ end
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "alarm")
+ self:Say(args.spellId, nil, nil, "Blastburn Roarcannon")
+ end
+ end
+end
+
+function mod:EruptionStomp(args)
+ self:Message(args.spellId, "purple")
+ local unit = self:UnitTokenFromGUID(args.sourceGUID)
+ if unit and self:Tanking(unit) then
+ self:PlaySound(args.spellId, "alarm") -- defensive
+ end
+ -- self:Bar(args.spellId, 30)
+end
+
+-- Torq the Tempest
+
+function mod:GalvanizedSpiteApplied(args)
+ if self:Me(args.destGUID) then
+ local amount = args.amount or 1
+ local tooHigh = 15 -- XXX finetune
+ if amount % 2 == 1 or amount >= tooHigh then
+ self:StackMessage(args.spellId, "blue", args.destName, amount, tooHigh)
+ if amount >= tooHigh then
+ self:PlaySound(args.spellId, "alarm") -- too many stacks
+ end
+ end
+ end
+end
+
+function mod:StaticChargeApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "info") -- watch steps
+ -- XXX track charge and warn when high?
+ end
+end
+
+function mod:ThunderdrumSalvo(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "alert")
+ -- self:Bar(args.spellId, 30)
+end
+
+function mod:ThunderdrumSalvoApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "alarm")
+ -- XXX Say / Countdown?
+ end
+end
+
+function mod:VoltaicImage(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "alert")
+ -- self:Bar(args.spellId, 30)
+end
+
+function mod:VoltaicImageFixateApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(1213994, nil, CL.fixate)
+ self:PlaySound(1213994, "alarm")
+ end
+end
+
+function mod:LightningBash(args)
+ self:Message(args.spellId, "purple")
+ local unit = self:UnitTokenFromGUID(args.sourceGUID)
+ if unit and self:Tanking(unit) then
+ self:PlaySound(args.spellId, "alarm") -- defensive
+ end
+ -- self:Bar(args.spellId, 30)
+end
+
+do
+ local prev = 0
+ function mod:GroundDamage(args)
+ if self:Me(args.destGUID) and args.time - prev > 2 then
+ prev = args.time
+ self:PlaySound(args.spellId, "underyou")
+ self:PersonalMessage(args.spellId, "underyou")
+ end
+ end
+end
diff --git a/LiberationOfUndermine/Gallywix.lua b/LiberationOfUndermine/Gallywix.lua
new file mode 100644
index 000000000..bcf7056b4
--- /dev/null
+++ b/LiberationOfUndermine/Gallywix.lua
@@ -0,0 +1,52 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Chrome King Gallywix", 2769, 2646)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3016)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ "stages",
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+
+end
+
+function mod:OnEngage()
+ self:Message("stages", "yellow", "Dummy Message", false)
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/Locales/deDE.lua b/LiberationOfUndermine/Locales/deDE.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/deDE.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/esES.lua b/LiberationOfUndermine/Locales/esES.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/esES.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/esMX.lua b/LiberationOfUndermine/Locales/esMX.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/esMX.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/frFR.lua b/LiberationOfUndermine/Locales/frFR.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/frFR.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/itIT.lua b/LiberationOfUndermine/Locales/itIT.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/itIT.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/koKR.lua b/LiberationOfUndermine/Locales/koKR.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/koKR.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/locales.xml b/LiberationOfUndermine/Locales/locales.xml
new file mode 100644
index 000000000..3283f7800
--- /dev/null
+++ b/LiberationOfUndermine/Locales/locales.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiberationOfUndermine/Locales/ptBR.lua b/LiberationOfUndermine/Locales/ptBR.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/ptBR.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/ruRU.lua b/LiberationOfUndermine/Locales/ruRU.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/ruRU.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/zhCN.lua b/LiberationOfUndermine/Locales/zhCN.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/zhCN.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Locales/zhTW.lua b/LiberationOfUndermine/Locales/zhTW.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Locales/zhTW.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Lockenstock.lua b/LiberationOfUndermine/Lockenstock.lua
new file mode 100644
index 000000000..84662cf16
--- /dev/null
+++ b/LiberationOfUndermine/Lockenstock.lua
@@ -0,0 +1,52 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Sprocketmonger Lockenstock", 2769, 2653)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3013)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ "stages",
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+
+end
+
+function mod:OnEngage()
+ self:Message("stages", "yellow", "Dummy Message", false)
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/MugZee.lua b/LiberationOfUndermine/MugZee.lua
new file mode 100644
index 000000000..819eae42e
--- /dev/null
+++ b/LiberationOfUndermine/MugZee.lua
@@ -0,0 +1,52 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Mug'Zee, Heads of Security", 2769, 2645)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3015)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ "stages",
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+
+end
+
+function mod:OnEngage()
+ self:Message("stages", "yellow", "Dummy Message", false)
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/Options/Colors.lua b/LiberationOfUndermine/Options/Colors.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Options/Colors.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Options/Sounds.lua b/LiberationOfUndermine/Options/Sounds.lua
new file mode 100644
index 000000000..1a06bd53b
--- /dev/null
+++ b/LiberationOfUndermine/Options/Sounds.lua
@@ -0,0 +1 @@
+-- Nice
diff --git a/LiberationOfUndermine/Options/options.xml b/LiberationOfUndermine/Options/options.xml
new file mode 100644
index 000000000..5374e7587
--- /dev/null
+++ b/LiberationOfUndermine/Options/options.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/LiberationOfUndermine/Rik.lua b/LiberationOfUndermine/Rik.lua
new file mode 100644
index 000000000..92d098f2b
--- /dev/null
+++ b/LiberationOfUndermine/Rik.lua
@@ -0,0 +1,52 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Rik Reverb", 2769, 2641)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3011)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ "stages",
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+
+end
+
+function mod:OnEngage()
+ self:Message("stages", "yellow", "Dummy Message", false)
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/Stix.lua b/LiberationOfUndermine/Stix.lua
new file mode 100644
index 000000000..b888351a0
--- /dev/null
+++ b/LiberationOfUndermine/Stix.lua
@@ -0,0 +1,206 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Stix Bunkjunker", 2769, 2642)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3012)
+mod:SetRespawnTime(30)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+-- local L = mod:GetLocale()
+-- if L then
+-- end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ 464399, -- Electromagnetic Sorting
+ 461536, -- Rolling Rubbish
+ -- 465741, -- Garbage Dump XXX Can we warn how much health someone removed? for fun.
+ -- 1217685, -- Messed Up
+ -- 465611, -- Rolled! XXX Warn who rolled over you?
+ 464854, -- Garbage Pile
+ -- 464865, -- Discarded Doomsplosive XXX Warn when spawned, and when absorbed?
+ 1217975, -- Doomsploded
+ -- 465747, -- Muffled Doomsplosion
+ -- Territorial Bombshell XXX Warn how many are up and left to destroy/kill?
+ 466849, -- Cleanup Crew XXX Fix tooltip if used?
+ -- Scrapmaster
+ 1219384, -- Scrap Rockets
+ -- 466742, -- Dumpster Dive
+ -- Junkyard Hyena
+ 466748, -- Infected Bite
+ 464149, -- Incinerator
+ {472893, "SAY"}, -- Incineration
+ 464248, -- Hot Garbage
+ 1218343, -- Toxic Fumes
+ 464112, -- Demolish
+ -- 1217954, -- Meltdown XXX is this an cooldown ability or it's auto attack?
+ 467117, -- Overdrive
+ -- 467149, -- Overcharged Bolt
+ 467135, -- Trash Compactor
+ -- 473227, -- Maximum Output
+ },{ -- Sections
+
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+ self:Log("SPELL_CAST_START", "ElectromagneticSorting", 464399)
+ self:Log("SPELL_AURA_APPLIED", "RollingRubbish", 461536)
+ self:Log("SPELL_AURA_APPLIED", "Doomsploded", 1217975)
+ self:Log("SPELL_CAST_SUCCESS", "CleanupCrew", 466849)
+ self:Log("SPELL_CAST_SUCCESS", "ScrapRockets", 1219384)
+ self:Log("SPELL_AURA_APPLIED", "InfectedBiteApplied", 466748)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "InfectedBiteApplied", 466748)
+ self:Log("SPELL_CAST_SUCCESS", "Incinerator", 464149)
+ self:Log("SPELL_AURA_APPLIED", "IncinerationApplied", 472893)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "ToxicFumesApplied", 1218343)
+ self:Log("SPELL_CAST_START", "Demolish", 464112)
+ self:Log("SPELL_AURA_APPLIED", "DemolishApplied", 464112)
+ self:Log("SPELL_CAST_START", "Overdrive", 467117)
+ self:Log("SPELL_CAST_SUCCESS", "TrashCompactor", 467135)
+
+ self:Log("SPELL_AURA_APPLIED", "GroundDamage", 464854, 464248) -- Garbage Pile, Hot Garbage
+ self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 464854, 464248)
+ self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 464854, 464248)
+end
+
+function mod:OnEngage()
+ -- self:Bar(464399, 10) -- Electromagnetic Sorting
+ -- self:Bar(466849, 20) -- Cleanup Crew
+ -- self:Bar(464149, 30) -- Incinerator
+ -- self:Bar(464112, 40) -- Demolish
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
+
+function mod:ElectromagneticSorting(args)
+ self:Message(args.spellId, "orange")
+ self:PlaySound(args.spellId, "long") -- damage and garbage over 5 seconds
+ -- self:Bar(args.spellId, 10)
+end
+
+function mod:RollingRubbish(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "info") -- you're rubbish
+ end
+end
+
+do
+ local prev = 0
+ function mod:Doomsploded(args)
+ if args.time - prev > 2 then
+ prev = args.time
+ self:Message(args.spellId, "red")
+ self:PlaySound(args.spellId, "warning")
+ end
+ end
+end
+
+function mod:CleanupCrew(args)
+ self:Message(args.spellId, "cyan")
+ self:PlaySound(args.spellId, "info") -- adds inc
+ -- self:Bar(args.spellId, 10)
+end
+
+function mod:ScrapRockets(args)
+ local canDo, ready = self:Interrupter(args.sourceGUID)
+ if canDo and ready then
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "alarm")
+ end
+end
+
+function mod:InfectedBiteApplied(args)
+ if self:Me(args.destGUID) then
+ local amount = args.amount or 1
+ if amount % 2 == 1 then
+ self:StackMessage(args.spellId, "blue", args.destName, amount, 1)
+ self:PlaySound(args.spellId, "alarm")
+ end
+ end
+end
+
+function mod:Incinerator(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "alert") -- debuffs inc
+ -- self:Bar(args.spellId, 10)
+end
+
+function mod:IncinerationApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "alarm") -- watch surrouding
+ self:Say(args.spellId, nil, nil, "Incineration")
+ end
+end
+
+function mod:ToxicFumesApplied(args)
+ if self:Me(args.destGUID) then
+ local amount = args.amount or 1
+ if amount % 2 == 1 then
+ self:StackMessage(args.spellId, "blue", args.destName, amount, 6)
+ if amount > 5 then
+ self:PlaySound(args.spellId, "alarm")
+ end
+ end
+ end
+end
+
+function mod:Demolish(args)
+ self:Message(args.spellId, "purple")
+ self:PlaySound(args.spellId, "info")
+ -- self:Bar(args.spellId, 25)
+end
+
+function mod:DemolishApplied(args)
+ self:StackMessage(args.spellId, "purple", args.destName, args.amount, 1)
+ if self:Me(args.destGUID) then
+ self:PlaySound(args.spellId, "alarm") -- On you
+ end
+end
+
+function mod:Overdrive(args)
+ self:Message(args.spellId, "cyan")
+ self:PlaySound(args.spellId, "long") -- final stage inc
+ -- self:Bar(args.spellId, 10)
+end
+
+function mod:TrashCompactor(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "warning") -- watch drop location
+end
+
+do
+ local prev = 0
+ function mod:GroundDamage(args)
+ if self:Me(args.destGUID) and args.time - prev > 2 then
+ prev = args.time
+ self:PlaySound(args.spellId, "underyou")
+ self:PersonalMessage(args.spellId, "underyou")
+ end
+ end
+end
diff --git a/LiberationOfUndermine/Trash.lua b/LiberationOfUndermine/Trash.lua
new file mode 100644
index 000000000..9270fbe49
--- /dev/null
+++ b/LiberationOfUndermine/Trash.lua
@@ -0,0 +1,41 @@
+
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Liberation of Undermine Trash", 2769)
+if not mod then return end
+mod.displayName = CL.trash
+mod:RegisterEnableMob(
+
+)
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+local L = mod:GetLocale()
+--if L then
+
+--end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+
+ }, {
+
+ }
+end
+
+function mod:OnBossEnable()
+
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
diff --git a/LiberationOfUndermine/Vexie.lua b/LiberationOfUndermine/Vexie.lua
new file mode 100644
index 000000000..b9066b995
--- /dev/null
+++ b/LiberationOfUndermine/Vexie.lua
@@ -0,0 +1,206 @@
+if not BigWigsLoader.isTestBuild then return end
+--------------------------------------------------------------------------------
+-- Module Declaration
+--
+
+local mod, CL = BigWigs:NewBoss("Vexie and the Geargrinders", 2769, 2639)
+if not mod then return end
+-- mod:RegisterEnableMob(0)
+mod:SetEncounterID(3009)
+mod:SetPrivateAuraSounds({
+ 459669, -- Spew Oil
+})
+mod:SetRespawnTime(30)
+mod:SetStage(1)
+
+--------------------------------------------------------------------------------
+-- Locals
+--
+
+--------------------------------------------------------------------------------
+-- Localization
+--
+
+local L = mod:GetLocale()
+if L then
+ L.plating_removed = "%d Protective Plating left!"
+end
+
+--------------------------------------------------------------------------------
+-- Initialization
+--
+
+function mod:GetOptions()
+ return {
+ -- Stage One: Fury Road
+ 466615, -- Protective Plating
+ 471403, -- Unrelenting CAR-nage
+ 459943, -- Call Bikers
+ -- 459453, -- Blaze of Glory
+ -- 460625, -- Burning Shrapnel
+ -- 459994, -- Hot Wheels
+ 459678, -- Spew Oil
+ 459683, -- Oil Slick
+ {468216, "SAY", "SAY_COUNTDOWN"}, -- Incendiary Fire
+ 459974, -- Bomb Voyage!
+ 465865, -- Tank Buster
+ -- 468147, -- Exhaust Fumes -- XXX Seperate timer for dps/healers?
+ -- Stage Two: Pit Stop
+ -- 460603, -- Mechanical Breakdown
+ 460116, -- Tune-Up
+ -- 473636, -- High Maintenance
+ -- 460153, -- Repair
+ },{ -- Sections
+ [466615] = CL.stage:format(1),
+ [460116] = CL.stage:format(2),
+ },{ -- Renames
+
+ }
+end
+
+function mod:OnRegister()
+ --self:SetSpellRename(999999, CL.renameMe) -- Spell (Rename)
+end
+
+function mod:OnBossEnable()
+ self:Log("SPELL_AURA_REMOVED_DOSE", "ProtectivePlatingRemoved", 466615)
+ self:Log("SPELL_CAST_START", "UnrelentingCARnage", 471403)
+ self:Log("SPELL_CAST_START", "CallBikers", 459943)
+ self:Log("SPELL_CAST_START", "SpewOil", 459671)
+ self:Log("SPELL_AURA_APPLIED", "SpewOilApplied", 459678) -- DOT after getting hit
+ self:Log("SPELL_CAST_SUCCESS", "IncendiaryFireSuccess", 468207)
+ self:Log("SPELL_AURA_APPLIED", "IncendiaryFireApplied", 468216, 468486) -- Targetting debuff
+ self:Log("SPELL_CAST_START", "BombVoyage", 459974)
+ self:Log("SPELL_AURA_APPLIED", "BombVoyageApplied", 459978) -- DOT after getting hit
+ self:Log("SPELL_CAST_START", "TankBuster", 459627)
+ self:Log("SPELL_AURA_APPLIED", "TankBusterApplied", 465865)
+ self:Log("SPELL_AURA_APPLIED_DOSE", "TankBusterApplied", 465865)
+ self:Log("SPELL_AURA_APPLIED", "TuneUpApplied", 460116)
+ self:Log("SPELL_AURA_REMOVED", "TuneUpRemoved", 460116)
+
+ self:Log("SPELL_AURA_APPLIED", "GroundDamage", 459683) -- Oil Slick
+ self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 459683)
+ self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 459683)
+end
+
+function mod:OnEngage()
+ self:SetStage(1)
+ -- self:Bar(471403, 120) -- Unrelenting CAR-nage
+ -- self:Bar(459943, 5) -- Call Bikers
+ -- self:Bar(459678, 10) -- Spew Oil
+ -- self:Bar(468216, 15) -- Incendiary Fire
+ -- self:Bar(459974, 20) -- Bomb Voyage
+ -- self:Bar(459627, 25) -- Tank Buster
+end
+
+--------------------------------------------------------------------------------
+-- Event Handlers
+--
+
+function mod:ProtectivePlatingRemoved(args)
+ local platingsLeft = args.amount or 0
+ if platingsLeft < 4 or platingsLeft % 2 == 0 then
+ self:Message(args.spellId, "cyan", L.plating_removed:format(platingsLeft))
+ if platingsLeft < 4 then
+ self:PlaySound(args.spellId, "info") -- breaking soon
+ end
+ end
+end
+
+function mod:UnrelentingCARnage(args)
+ self:Message(args.spellId, "red")
+ self:PlaySound(args.spellId, "warning") -- big damage inc
+end
+
+function mod:CallBikers(args)
+ self:Message(args.spellId, "yellow")
+ self:PlaySound(args.spellId, "alert") -- adds incoming
+end
+
+function mod:SpewOil(args)
+ self:Message(459678, "yellow", CL.incoming:format(args.spellName))
+ -- self:PlaySound(459678, "alert") -- Private aura for targeted players
+ -- self:Bar(459678, 10)
+end
+
+function mod:SpewOilApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(args.spellId)
+ self:PlaySound(args.spellId, "alarm")
+ end
+end
+
+function mod:IncendiaryFireSuccess(args)
+ -- self:Bar(468216, 10)
+end
+
+function mod:IncendiaryFireApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(468216)
+ self:Say(468216, nil, nil, "Incendiary Fire")
+ local duration = args.spellId == 468216 and 6 or 4 -- XXX Check what's used, there's a second 4s debuff. expecting 6s.
+ self:SayCountdown(468216, duration)
+ end
+end
+
+function mod:BombVoyage(args)
+ self:Message(args.spellId, "orange")
+ -- self:Bar(args.spellId, 10)
+end
+
+function mod:BombVoyageApplied(args)
+ if self:Me(args.destGUID) then
+ self:PersonalMessage(459974)
+ self:PlaySound(459974, "alarm")
+ end
+end
+
+function mod:TankBuster()
+ self:Message(465865, "purple")
+ self:PlaySound(465865, "info")
+ -- self:Bar(465865, 25)
+end
+
+function mod:TankBusterApplied(args)
+ self:StackMessage(args.spellId, "purple", args.destName, args.amount, 1)
+ if self:Me(args.destGUID) then
+ self:PlaySound(args.spellId, "alarm") -- On you
+ end
+end
+
+function mod:TuneUpApplied(args)
+ self:StopBar(471403) -- Unrelenting CAR-nage
+ self:StopBar(459943) -- Call Bikers
+ self:StopBar(459678) -- Spew Oil
+ self:StopBar(468216) -- Incendiary Fire
+ self:StopBar(459974) -- Bomb Voyage
+ self:StopBar(459627) -- Tank Buster
+ self:SetStage(2)
+
+ self:Message(args.spellId, "green")
+ self:PlaySound(args.spellId, "long")
+ self:Bar(args.spellId, 45)
+end
+
+function mod:TuneUpRemoved(args) -- XXX Back to stage 1?
+ self:StopBar(args.spellId)
+
+ self:SetStage(1)
+ -- self:Bar(471403, 120) -- Unrelenting CAR-nage
+ -- self:Bar(459943, 5) -- Call Bikers
+ -- self:Bar(459678, 10) -- Spew Oil
+ -- self:Bar(468216, 15) -- Incendiary Fire
+ -- self:Bar(459974, 20) -- Bomb Voyage
+ -- self:Bar(459627, 25) -- Tank Buster
+end
+
+do
+ local prev = 0
+ function mod:GroundDamage(args)
+ if self:Me(args.destGUID) and args.time - prev > 2 then
+ prev = args.time
+ self:PlaySound(args.spellId, "underyou")
+ self:PersonalMessage(args.spellId, "underyou")
+ end
+ end
+end
diff --git a/LiberationOfUndermine/modules.xml b/LiberationOfUndermine/modules.xml
new file mode 100644
index 000000000..5535b3a47
--- /dev/null
+++ b/LiberationOfUndermine/modules.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Loader.lua b/Loader.lua
index 3a7d4c7cb..0d13dcc02 100644
--- a/Loader.lua
+++ b/Loader.lua
@@ -352,6 +352,7 @@ do
--[[ BigWigs: The War Within ]]--
[-2274] = tww, -- Khaz Algar (Fake Menu)
[2657] = tww, -- Nerub'ar Palace
+ [2769] = tww, -- Liberation of Undermine
--[[ LittleWigs: Classic ]]--
[33] = not (public.isVanilla or public.isTBC or public.isWrath) and lw_cata or nil, -- Shadowfang Keep
diff --git a/bosses.xml b/bosses.xml
index 8edc30d9d..4c6a02ba1 100644
--- a/bosses.xml
+++ b/bosses.xml
@@ -3,5 +3,6 @@
+