-------------------------------------------------------------------------------- -- Module Declaration -- local mod, CL = BigWigs:NewBoss("Soulrender Dormazain", 2450, 2445) if not mod then return end mod:RegisterEnableMob(175727, 175728) -- Soulrender Dormazain, Garrosh Hellscream mod:SetEncounterID(2434) mod:SetRespawnTime(30) -------------------------------------------------------------------------------- -- Locals -- local timers = { [350411] = {80.5, 162, 132.5, 65.0, 61, 60, 90, 64.5, 60, 63.5}, -- Hellscream _START [350615] = {28.5, 162.5, 60, 97, 60, 100, 60, 101, 60, 97.5}, -- Call Mawsworn _START [350217] = {12, 45.5, 45.5, 69.8, 43.9, 44.1, 68, 45.5, 45.5, 60, 45.5, 45.5, 80, 45.5, 45.5, 69.5}, -- Torment [350422] = {10.7, 33, 33, 41, 56, 33, 33, 37}, -- Ruinblade _START (4/5 vary by a few seconds) } local brandCount = 1 local callMawswornCount = 1 local ruinbladeCount = 1 local hellscreamCount = 1 local chainCount = 3 local encoreOfTormentCount = 1 local tormentCount = 1 -------------------------------------------------------------------------------- -- Localization -- local L = mod:GetLocale() if L then L.custom_off_nameplate_defiance = "Defiance Nameplate Icon" L.custom_off_nameplate_defiance_desc = "Show an icon on the nameplate of Mawsworn that have Defiance.\n\nRequires the use of Enemy Nameplates and a supported nameplate addon (KuiNameplates, Plater)." L.custom_off_nameplate_defiance_icon = 351773 L.custom_off_nameplate_tormented = "Tormented Nameplate Icon" L.custom_off_nameplate_tormented_desc = "Show an icon on the nameplate of Mawsworn that have Tormented.\n\nRequires the use of Enemy Nameplates and a supported nameplate addon (KuiNameplates, Plater)." L.custom_off_nameplate_tormented_icon = 350649 L.cones = "Cones" -- Torment L.dance = "Dance" -- Tormented Eruptions L.brands = "Brands" -- Brand of Torment L.brand = "Brand" -- Single Brand of Torment L.spike = "Spike" -- Short for Agonizing Spike L.chains = "Chains" -- Hellscream L.chain = "Chain" -- Soul Manacles L.souls = "Souls" -- Rendered Soul L.chains_remaining = "%d Chains remaining" L.all_broken = "All Chains broken" end -------------------------------------------------------------------------------- -- Initialization -- local brandOfTormentMarker = mod:AddMarkerOption(false, "player", 1, 350647, 1, 2) -- Brand of Torment local agonizerMarker = mod:AddMarkerOption(false, "npc", 8, -23289, 8, 7, 6, 5) -- Mawsworn Agonizer function mod:GetOptions() return { 350217, -- Torment 349985, -- Tormented Eruptions {350647, "SAY", "SAY_COUNTDOWN", "ME_ONLY_EMPHASIZE"}, -- Brand of Torment brandOfTormentMarker, "custom_off_nameplate_tormented", {350422, "TANK"}, -- Ruinblade 350615, -- Call Mawsworn agonizerMarker, 351779, -- Agonizing Spike 350650, -- Defiance "custom_off_nameplate_defiance", 350411, -- Hellscream 354231, -- Soul Manacles 351229, -- Rendered Soul },{ },{ [350217] = L.cones, -- Torment (Cones) [349985] = L.dance, -- Tormented Eruptions (Dance) [350647] = L.brands, -- Brand of Torment (Brands) [350615] = CL.adds, -- Call Mawsworn (Adds) [351779] = L.spike, -- Agonizing Spike (Spike) [350411] = L.chains, -- Hellscream (Chains) [354231] = L.chain, -- Soul Manacles (Chain) [351229] = L.souls, -- Rendered Soul (Souls) } end function mod:OnBossEnable() self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "boss2") -- for Pain -- self:Log("SPELL_CAST_SUCCESS", "Pain", 350766) -- Alternative for Torment self:Log("SPELL_CAST_SUCCESS", "TormentedEruptions", 349985) self:Log("SPELL_CAST_SUCCESS", "BrandOfTorment", 350648) self:Log("SPELL_AURA_APPLIED", "BrandOfTormentApplied", 350647) self:Log("SPELL_AURA_REMOVED", "BrandOfTormentRemoved", 350647) self:Log("SPELL_AURA_APPLIED", "TormentedApplied", 350649) self:Log("SPELL_AURA_REMOVED", "TormentedRemoved", 350649) self:Log("SPELL_CAST_SUCCESS", "Ruinblade", 350422) self:Log("SPELL_AURA_APPLIED", "RuinbladeApplied", 350422) self:Log("SPELL_AURA_APPLIED_DOSE", "RuinbladeApplied", 350422) self:Log("SPELL_CAST_START", "CallMawsworn", 350615) self:Log("SPELL_SUMMON", "AgonizerSpawn", 346459, 351351) -- Heroic, Mythic self:Log("SPELL_CAST_START", "AgonizingSpike", 351779) self:Log("SPELL_AURA_APPLIED", "GarroshDefianceApplied", 350650) -- Buff they get when reaching Garrosh, not from the Overlord self:Log("SPELL_AURA_APPLIED", "DefianceApplied", 351773) -- Overlord buff self:Log("SPELL_AURA_REMOVED", "DefianceRemoved", 351773) self:Log("SPELL_CAST_START", "Hellscream", 350411) self:Log("SPELL_AURA_REMOVED_DOSE", "WarmongersShacklesRemovedDose", 350415) self:Log("SPELL_AURA_REMOVED", "WarmongersShacklesRemoved", 350415) self:Log("SPELL_AURA_APPLIED", "SoulManacles", 354231) -- XXX Ground damage for Vessel and Cones if self:GetOption("custom_off_nameplate_defiance") or self:GetOption("custom_off_nameplate_tormented") then self:ShowPlates() end end function mod:OnEngage() callMawswornCount = 1 ruinbladeCount = 1 hellscreamCount = 1 encoreOfTormentCount = 1 tormentCount = 1 brandCount = 1 self:Bar(350422, 10.7) -- Ruinblade self:Bar(350217, 12, CL.count:format(L.cones, tormentCount)) -- Torment self:Bar(350615, 30.3, CL.count:format(CL.adds, callMawswornCount)) -- Call Mawsworn self:Bar(350647, 30.7, CL.count:format(L.brands, brandCount)) -- Brand of Torment self:Bar(350411, 81.1, CL.count:format(L.chains, hellscreamCount)) -- Hellscream self:Bar(349985, 131.5, CL.count:format(L.dance, encoreOfTormentCount)) -- Tormented Eruptions end function mod:OnBossDisable() if self:GetOption("custom_off_nameplate_defiance") or self:GetOption("custom_off_nameplate_tormented") then self:HidePlates() end end -------------------------------------------------------------------------------- -- Event Handlers -- do local prev = 0 function mod:RenderedSoul() local t = GetTime() if t-prev > 10 then self:Bar(351229, 5, CL.count:format(L.souls, 1)) self:ScheduleTimer("Message", 5, 351229, "yellow", CL.count:format(L.souls, 1)) self:ScheduleTimer("Bar", 5, 351229, 5, CL.count:format(L.souls, 2)) self:ScheduleTimer("Message", 10, 351229, "yellow", CL.count:format(L.souls, 2)) else -- Queue up more local remaining = 10-(t-prev) self:ScheduleTimer("Bar", remaining, 351229, 5, CL.count:format(L.souls, 3)) self:ScheduleTimer("Message", remaining+5, 351229, "yellow", CL.count:format(L.souls, 3)) self:ScheduleTimer("Bar", remaining+5, 351229, 5, CL.count:format(L.souls, 4)) self:ScheduleTimer("Message", remaining+10, 351229, "yellow", CL.count:format(L.souls, 4)) end prev = GetTime() end end -- XXX Did this use to have a SPELL_CAST_SUCCESS? Wishful thinking? function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId) if spellId == 350766 then self:Pain() end end function mod:Pain(args) -- Boss casting Torment on Garrosh self:Message(350217, "yellow", CL.count:format(L.cones, tormentCount)) tormentCount = tormentCount + 1 self:Bar(350217, timers[350217][tormentCount], CL.count:format(L.cones, tormentCount)) self:RenderedSoul() end function mod:TormentedEruptions(args) self:Message(args.spellId, "cyan", CL.count:format(L.dance, encoreOfTormentCount)) self:PlaySound(args.spellId, "alert") encoreOfTormentCount = encoreOfTormentCount + 1 self:Bar(args.spellId, 161.1, CL.count:format(L.dance, encoreOfTormentCount)) -- XXX Schedule cast bars for each cone / use remaining events on retail brandCount = 1 self:Bar(350647, 33.09, CL.count:format(L.brands, brandCount)) end do local playerList = {} function mod:BrandOfTorment(args) playerList = {} brandCount = brandCount + 1 if brandCount < 7 then -- breaks during dance self:Bar(350647, 15.7, CL.count:format(L.brands, brandCount)) end end function mod:BrandOfTormentApplied(args) local count = #playerList+1 playerList[count] = args.destName playerList[args.destName] = count -- Set raid marker if self:Me(args.destGUID) then self:Say(args.spellId, CL.count:format(L.brand, brandCount-1)) self:PlaySound(args.spellId, "warning") self:SayCountdown(args.spellId, 15) end self:NewTargetsMessage(args.spellId, "orange", playerList, nil, CL.count:format(L.brand, brandCount-1)) self:CustomIcon(brandOfTormentMarker, args.destName, count) end function mod:BrandOfTormentRemoved(args) if self:Me(args.destGUID) then self:CancelSayCountdown(args.spellId) end self:CustomIcon(brandOfTormentMarker, args.destName) end end function mod:TormentedApplied(args) if self:GetOption("custom_off_nameplate_tormented") then self:AddPlateIcon(args.spellId, args.sourceGUID) end end function mod:TormentedRemoved(args) if self:GetOption("custom_off_nameplate_tormented") then self:RemovePlateIcon(args.spellId, args.sourceGUID) end end function mod:Ruinblade(args) ruinbladeCount = ruinbladeCount + 1 self:Bar(args.spellId, timers[args.spellId][ruinbladeCount] or 33) end function mod:RuinbladeApplied(args) local amount = args.amount or 1 self:NewStackMessage(args.spellId, "purple", args.destName, amount) self:PlaySound(args.spellId, "alarm") end do local agonizersMarked = 0 local agonizersSpawned = 0 local agonizerTracker = {} function mod:AgonizerMarking(event, unit, guid) if self:MobId(guid) == 177594 and agonizerTracker[guid] then -- Mawsworn Agonizer agonizersMarked = agonizersMarked + 1 self:CustomIcon(agonizerMarker, unit, agonizerTracker[guid]) -- 8, 7, 6, 5 if agonizersMarked == 4 then -- All 4 marked self:UnregisterTargetEvents() end end end function mod:AgonizerSpawn(args) agonizersSpawned = agonizersSpawned + 1 agonizerTracker[args.destGUID] = 9-agonizersSpawned -- icon 8, 7, 6... etc end function mod:CallMawsworn(args) self:Message(args.spellId, "yellow", CL.count:format(CL.adds, callMawswornCount)) self:PlaySound(args.spellId, "info") callMawswornCount = callMawswornCount + 1 self:Bar(args.spellId, timers[args.spellId][callMawswornCount], CL.count:format(CL.adds, callMawswornCount)) if self:GetOption(agonizerMarker) then agonizersSpawned = 0 agonizersMarked = 0 agonizerTracker = {} self:RegisterTargetEvents("AgonizerMarking") self:ScheduleTimer("UnregisterTargetEvents", 20) end end end function mod:AgonizingSpike(args) local canDo, ready = self:Interrupter(args.sourceGUID) if canDo then self:Message(args.spellId, "yellow") if ready then self:PlaySound(args.spellId, "alert") end end end function mod:DefianceApplied(args) if self:GetOption("custom_off_nameplate_defiance") then self:AddPlateIcon(args.spellId, args.sourceGUID) end end function mod:DefianceRemoved(args) if self:GetOption("custom_off_nameplate_defiance") then self:RemovePlateIcon(args.spellId, args.sourceGUID) end end do local prev = 0 function mod:GarroshDefianceApplied(args) local t = args.time if t-prev > 2 then prev = t self:TargetMessage(args.spellId, "orange", args.destName) end end end function mod:Hellscream(args) chainCount = 3 self:Message(args.spellId, "red", L.chains) self:PlaySound(args.spellId, "long") self:CastBar(args.spellId, self:Mythic() and 25 or 35, L.chains) hellscreamCount = hellscreamCount + 1 self:Bar(args.spellId, timers[args.spellId][hellscreamCount], CL.count:format(L.chains, hellscreamCount)) self:RenderedSoul() end function mod:WarmongersShacklesRemovedDose() chainCount = chainCount - 1 self:Message(350411, "green", L.chains_remaining:format(chainCount)) end function mod:WarmongersShacklesRemoved() self:Message(350411, "green", CL.interrupted:format(L.chains)) self:StopBar(CL.cast:format(L.chains)) end function mod:SoulManacles(args) if self:Me(args.destGUID) then self:PersonalMessage(args.spellId, L.chain) self:PlaySound(args.spellId, "info") end end