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.
385 lines
12 KiB
385 lines
12 KiB
|
5 years ago
|
--------------------------------------------------------------------------------
|
||
|
|
-- Module Declaration
|
||
|
|
--
|
||
|
|
|
||
|
|
local mod, CL = BigWigs:NewBoss("Huntsman Altimor", 2296, 2429)
|
||
|
|
if not mod then return end
|
||
|
|
mod:RegisterEnableMob(
|
||
|
|
165066, -- Huntsman Altimor
|
||
|
|
165067, -- Margore
|
||
|
|
169457, -- Bargast
|
||
|
|
169458) -- Hecutis
|
||
|
|
mod:SetEncounterID(2418)
|
||
|
|
mod:SetRespawnTime(30)
|
||
|
|
mod:SetStage(1)
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Locals
|
||
|
|
--
|
||
|
|
|
||
|
|
local sinseekerCount = 1
|
||
|
|
local viciousLungeCount = 1
|
||
|
|
local ripSoulCount = 1
|
||
|
|
local shadesOfBargastCount = 1
|
||
|
|
local petrifyingHowlCount = 1
|
||
|
|
local mobCollector = {}
|
||
|
|
local lungeTarget = nil
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Localization
|
||
|
|
--
|
||
|
|
|
||
|
|
local L = mod:GetLocale()
|
||
|
|
if L then
|
||
|
|
L.killed = "%s Killed"
|
||
|
|
end
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Initialization
|
||
|
|
--
|
||
|
|
|
||
|
|
local sinseekerMarker = mod:AddMarkerOption(false, "player", 1, 335114, 1, 2, 3) -- Sinseeker
|
||
|
|
local shadesofBargastMarker = mod:AddMarkerOption(false, "npc", 4, 334757, 4, 5) -- Shades of Bargast
|
||
|
|
function mod:GetOptions()
|
||
|
|
return {
|
||
|
|
"stages",
|
||
|
|
--[[ Huntsman Altimor ]]--
|
||
|
|
{335114, "SAY", "SAY_COUNTDOWN", "FLASH", "ME_ONLY_EMPHASIZE"}, -- Sinseeker
|
||
|
|
sinseekerMarker,
|
||
|
|
334404, -- Spreadshot
|
||
|
|
|
||
|
|
--[[ Margore ]]--
|
||
|
|
{334971, "TANK"}, -- Jagged Claws
|
||
|
|
{334945, "SAY", "SAY_COUNTDOWN", "ICON"}, -- Vicious Lunge
|
||
|
|
|
||
|
|
--[[ Bargast ]]--
|
||
|
|
{334797, "TANK_HEALER"}, -- Rip Soul
|
||
|
|
334884, -- Devour Soul
|
||
|
|
334757, -- Shades of Bargast
|
||
|
|
shadesofBargastMarker,
|
||
|
|
-- 334708, -- Deathly Roar
|
||
|
|
|
||
|
|
--[[ Hecutis ]]--
|
||
|
|
{334860, "TANK_HEALER"}, -- Crushing Stone
|
||
|
|
{334852, "SAY", "SAY_COUNTDOWN", "FLASH"}, -- Petrifying Howl
|
||
|
|
334893, -- Stone Shards
|
||
|
|
},{
|
||
|
|
[335114] = -22309, -- Huntsman Altimor
|
||
|
|
[334971] = -22312, -- Margore
|
||
|
|
[334797] = -22311, -- Bargast
|
||
|
|
[334860] = -22310, -- Hecutis
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnBossEnable()
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "HuntsmansBondApplied", 334504)
|
||
|
|
|
||
|
|
--[[ Huntsman Altimor ]]--
|
||
|
|
self:Log("SPELL_CAST_START", "Sinseeker", 335114)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "HuntsmansMarkApplied", 335111, 335112, 335113) -- Targets 1 -> 2 -> 3
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "HuntsmansMarkRemoved", 335111, 335112, 335113)
|
||
|
|
self:Log("SPELL_CAST_START", "Spreadshot", 334404)
|
||
|
|
|
||
|
|
--[[ Margore ]]--
|
||
|
|
self:Log("SPELL_CAST_SUCCESS", "JaggedClaws", 334971)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "JaggedClawsApplied", 334971)
|
||
|
|
self:Log("SPELL_AURA_APPLIED_DOSE", "JaggedClawsApplied", 334971)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "ViciousLungeApplied", 334945)
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "ViciousLungeRemoved", 334945)
|
||
|
|
self:Death("MargoreDeath", 165067)
|
||
|
|
|
||
|
|
--[[ Bargast ]]--
|
||
|
|
self:Log("SPELL_CAST_START", "RipSoulStart", 334797)
|
||
|
|
self:Log("SPELL_CAST_SUCCESS", "RipSoul", 334797)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "DevourSoul", 334884)
|
||
|
|
self:Log("SPELL_AURA_APPLIED_DOSE", "DevourSoul", 334884)
|
||
|
|
self:Log("SPELL_CAST_START", "ShadesOfBargast", 334757)
|
||
|
|
-- self:Log("SPELL_CAST_START", "DeathlyRoar", 334708)
|
||
|
|
-- self:Death("ShadeOfBargastDeath", 171557)
|
||
|
|
self:Death("BargastDeath", 169457)
|
||
|
|
|
||
|
|
--[[ Hecutis ]]--
|
||
|
|
self:Log("SPELL_AURA_APPLIED_DOSE", "CrushingStone", 334860)
|
||
|
|
self:Log("SPELL_CAST_SUCCESS", "PetrifyingHowl", 334852)
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "PetrifyingHowlApplied", 334852)
|
||
|
|
self:Log("SPELL_AURA_REMOVED", "PetrifyingHowlRemoved", 334852)
|
||
|
|
self:Death("HecutisDeath", 169458)
|
||
|
|
|
||
|
|
self:Log("SPELL_AURA_APPLIED", "GroundDamage", 334893) -- Stone Shards
|
||
|
|
self:Log("SPELL_PERIODIC_DAMAGE", "GroundDamage", 334893)
|
||
|
|
self:Log("SPELL_PERIODIC_MISSED", "GroundDamage", 334893)
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnEngage()
|
||
|
|
sinseekerCount = 1
|
||
|
|
viciousLungeCount = 1
|
||
|
|
ripSoulCount = 1
|
||
|
|
shadesOfBargastCount = 1
|
||
|
|
petrifyingHowlCount = 1
|
||
|
|
mobCollector = {}
|
||
|
|
lungeTarget = nil
|
||
|
|
self:SetStage(1)
|
||
|
|
|
||
|
|
self:Bar(334404, 6.5) -- Spreadshot
|
||
|
|
self:Bar(334971, 10) -- Jagged Claws
|
||
|
|
self:Bar(334945, 23.5, CL.count:format(self:SpellName(334945), viciousLungeCount)) -- Vicious Lunge
|
||
|
|
self:Bar(335114, 28.5, CL.count:format(self:SpellName(335114), sinseekerCount)) -- Sinseeker
|
||
|
|
end
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
-- Event Handlers
|
||
|
|
--
|
||
|
|
|
||
|
|
function mod:HuntsmansBondApplied(args)
|
||
|
|
if self:MobId(args.sourceGUID) == 169457 then -- Bargast
|
||
|
|
ripSoulCount = 1
|
||
|
|
shadesOfBargastCount = 1
|
||
|
|
self:SetStage(2)
|
||
|
|
|
||
|
|
self:Bar(334797, 9.5, CL.count:format(self:SpellName(334797), ripSoulCount)) -- Rip Soul
|
||
|
|
self:Bar(334757, 17.5, CL.count:format(self:SpellName(334757), shadesOfBargastCount)) -- Shades Of Bargast
|
||
|
|
elseif self:MobId(args.sourceGUID) == 169458 then -- Hecutis
|
||
|
|
petrifyingHowlCount = 1
|
||
|
|
self:SetStage(3)
|
||
|
|
|
||
|
|
self:Bar(334852, 16.2, CL.count:format(self:SpellName(334852), petrifyingHowlCount)) -- Petrifying Howl
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[ Huntsman Altimor ]]--
|
||
|
|
|
||
|
|
do
|
||
|
|
local playerList = {}
|
||
|
|
local timers = {60, 60, 60, 24}
|
||
|
|
function mod:Sinseeker(args)
|
||
|
|
playerList = {}
|
||
|
|
self:StopBar(CL.count:format(args.spellName, sinseekerCount))
|
||
|
|
self:Message(args.spellId, "orange", CL.casting:format(CL.count:format(args.spellName, sinseekerCount)))
|
||
|
|
sinseekerCount = sinseekerCount + 1
|
||
|
|
local cd = timers[self:GetStage()]
|
||
|
|
self:Bar(args.spellId, cd, CL.count:format(args.spellName, sinseekerCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:HuntsmansMarkApplied(args)
|
||
|
|
local count = #playerList+1
|
||
|
|
playerList[count] = args.destName
|
||
|
|
playerList[args.destName] = count -- Set raid marker
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:Say(335114, CL.count_rticon:format(self:SpellName(335114), count, count))
|
||
|
|
self:SayCountdown(335114, 5.7, count) -- _applied to damage, varys with distance
|
||
|
|
self:PlaySound(335114, "warning")
|
||
|
|
self:Flash(335114)
|
||
|
|
end
|
||
|
|
self:CustomIcon(sinseekerMarker, args.destName, count)
|
||
|
|
self:NewTargetsMessage(335114, "orange", playerList, 3, CL.count:format(self:SpellName(335114), sinseekerCount-1), nil, 2) -- Debuffs are very delayed
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:HuntsmansMarkRemoved(args)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:CancelSayCountdown(335114)
|
||
|
|
end
|
||
|
|
|
||
|
|
self:CustomIcon(sinseekerMarker, args.destName)
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:Spreadshot(args)
|
||
|
|
self:Message(args.spellId, "yellow")
|
||
|
|
self:PlaySound(args.spellId, "alert")
|
||
|
|
if self:GetStage() < 4 then -- spams in p4 every few seconds
|
||
|
|
self:Bar(args.spellId, 12.2)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[ Margore ]]--
|
||
|
|
|
||
|
|
function mod:JaggedClaws(args)
|
||
|
|
self:CDBar(args.spellId, 20) -- _SUCCESS to _START
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:JaggedClawsApplied(args)
|
||
|
|
local amount = args.amount or 1
|
||
|
|
self:NewStackMessage(args.spellId, "purple", args.destName, amount, 2)
|
||
|
|
if amount > 1 then
|
||
|
|
self:PlaySound(args.spellId, "warning")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ViciousLungeApplied(args)
|
||
|
|
lungeTarget = args.destGUID
|
||
|
|
self:TargetMessage(args.spellId, "orange", args.destName, CL.count:format(args.spellName, viciousLungeCount))
|
||
|
|
self:PrimaryIcon(args.spellId, args.destName)
|
||
|
|
if self:Me(lungeTarget) then
|
||
|
|
self:PlaySound(args.spellId, "warning")
|
||
|
|
self:Yell(args.spellId)
|
||
|
|
self:YellCountdown(args.spellId, 6)
|
||
|
|
end
|
||
|
|
viciousLungeCount = viciousLungeCount + 1
|
||
|
|
self:Bar(args.spellId, 25, CL.count:format(args.spellName, viciousLungeCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ViciousLungeRemoved(args)
|
||
|
|
lungeTarget = nil
|
||
|
|
self:PrimaryIcon(args.spellId)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:CancelYellCountdown(args.spellId)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:MargoreDeath()
|
||
|
|
if lungeTarget then -- Vicious Lunge
|
||
|
|
self:PrimaryIcon(334945)
|
||
|
|
if self:Me(lungeTarget) then
|
||
|
|
self:CancelYellCountdown(334945)
|
||
|
|
self:Yell(334945, CL.cancelled:format(self:SpellName(334945)), true)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
self:Message("stages", "cyan", L.killed:format(self:SpellName(-22312)), false) -- Margore
|
||
|
|
|
||
|
|
self:StopBar(334971) -- Jagged Claws
|
||
|
|
self:StopBar(CL.count:format(self:SpellName(334945), viciousLungeCount)) -- Vicious Lunge
|
||
|
|
|
||
|
|
self:Bar("stages", 6, -22311, 334797) -- Bargast, Rip Soul icon
|
||
|
|
self:Bar(335114, 38.5, CL.count:format(self:SpellName(335114), sinseekerCount)) -- Sinseeker
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[ Bargast ]]--
|
||
|
|
|
||
|
|
function mod:RipSoulStart(args)
|
||
|
|
self:Message(args.spellId, "red", CL.casting:format(CL.count:format(args.spellName, ripSoulCount)))
|
||
|
|
self:PlaySound(args.spellId, "alert")
|
||
|
|
self:CastBar(args.spellId, 2.5, CL.count:format(args.spellName, ripSoulCount))
|
||
|
|
ripSoulCount = ripSoulCount + 1
|
||
|
|
self:Bar(args.spellId, 31, CL.count:format(args.spellName, ripSoulCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:RipSoul(args)
|
||
|
|
if self:Healer() then
|
||
|
|
self:Message(args.spellId, "green", CL.spawned:format(args.spellName)) -- probably need a better name
|
||
|
|
self:PlaySound(args.spellId, "info")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:DevourSoul(args)
|
||
|
|
self:Message(args.spellId, "orange")
|
||
|
|
self:PlaySound(args.spellId, "alarm")
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local shadesofBargastMarked = 0
|
||
|
|
function mod:ShadesofBargastMarking(event, unit, guid)
|
||
|
|
if self:MobId(guid) == 171557 and not mobCollector[guid] then
|
||
|
|
shadesofBargastMarked = shadesofBargastMarked + 1
|
||
|
|
self:CustomIcon(shadesofBargastMarker, unit, shadesofBargastMarked+3)
|
||
|
|
mobCollector[guid] = true
|
||
|
|
if shadesofBargastMarked == 2 then
|
||
|
|
self:UnregisterTargetEvents()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:ShadesOfBargast(args)
|
||
|
|
self:Message(args.spellId, "green", CL.incoming:format(CL.count:format(args.spellName, shadesOfBargastCount)))
|
||
|
|
self:PlaySound(args.spellId, "long")
|
||
|
|
shadesOfBargastCount = shadesOfBargastCount + 1
|
||
|
|
self:Bar(args.spellId, 61, CL.count:format(args.spellName, shadesOfBargastCount))
|
||
|
|
if self:GetOption(shadesofBargastMarker) then
|
||
|
|
shadesofBargastMarked = 0
|
||
|
|
self:RegisterTargetEvents("ShadesofBargastMarking")
|
||
|
|
self:ScheduleTimer("UnregisterTargetEvents", 10)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- do
|
||
|
|
-- local prev = 0
|
||
|
|
-- function mod:DeathlyRoar(args)
|
||
|
|
-- local t = args.time
|
||
|
|
-- if t-prev > 10 then
|
||
|
|
-- prev = t
|
||
|
|
-- self:Message(args.spellId, "red")
|
||
|
|
-- self:PlaySound(args.spellId, "info")
|
||
|
|
-- self:CastBar(args.spellId, 6)
|
||
|
|
-- self:Bar(args.spellId, 36.5)
|
||
|
|
-- end
|
||
|
|
-- end
|
||
|
|
-- end
|
||
|
|
|
||
|
|
-- function mod:ShadeOfBargastDeath(args)
|
||
|
|
-- self:StopBar(CL.cast:format(self:SpellName(334708)))
|
||
|
|
-- end
|
||
|
|
|
||
|
|
function mod:BargastDeath()
|
||
|
|
self:Message("stages", "cyan", L.killed:format(self:SpellName(-22311)), false) -- Bargast
|
||
|
|
|
||
|
|
self:StopBar(CL.count:format(self:SpellName(334797), ripSoulCount)) -- Rip Soul
|
||
|
|
self:StopBar(CL.count:format(self:SpellName(334757), shadesOfBargastCount)) -- Shades Of Bargast
|
||
|
|
|
||
|
|
self:Bar("stages", 6, -22310, 334852) -- Hecutis, Petrifying Howl icon
|
||
|
|
self:Bar(335114, 34, CL.count:format(self:SpellName(335114), sinseekerCount)) -- Sinseeker
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[ Hecutis ]]--
|
||
|
|
|
||
|
|
function mod:CrushingStone(args)
|
||
|
|
local amount = args.amount
|
||
|
|
if amount > 2 and amount < 9 then
|
||
|
|
self:NewStackMessage(args.spellId, "purple", args.destName, amount, amount)
|
||
|
|
self:PlaySound(args.spellId, "info")
|
||
|
|
else
|
||
|
|
self:NewStackMessage(args.spellId, "purple", args.destName, amount, 100)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local playerList = {}
|
||
|
|
function mod:PetrifyingHowl(args)
|
||
|
|
playerList = {}
|
||
|
|
petrifyingHowlCount = petrifyingHowlCount + 1
|
||
|
|
self:Bar(args.spellId, self:Mythic() and 30 or 20.5, CL.count:format(args.spellName, petrifyingHowlCount))
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:PetrifyingHowlApplied(args)
|
||
|
|
playerList[#playerList+1] = args.destName
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:PlaySound(args.spellId, "warning")
|
||
|
|
self:Say(args.spellId)
|
||
|
|
self:SayCountdown(args.spellId, 8)
|
||
|
|
self:Flash(args.spellId)
|
||
|
|
self:TargetBar(args.spellId, 8, args.destName)
|
||
|
|
end
|
||
|
|
self:NewTargetsMessage(args.spellId, "orange", playerList, 3, CL.count:format(args.spellName, petrifyingHowlCount-1), nil, 1) -- Travel time on debuffs?
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:PetrifyingHowlRemoved(args)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
self:CancelSayCountdown(args.spellId)
|
||
|
|
self:StopBar(args.spellId, args.destName)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:HecutisDeath()
|
||
|
|
self:Message("stages", "cyan", L.killed:format(self:SpellName(-22310)), false) -- Hecutis
|
||
|
|
|
||
|
|
self:StopBar(CL.count:format(self:SpellName(334852), petrifyingHowlCount)) -- Petrifying Howl
|
||
|
|
|
||
|
|
self:SetStage(4)
|
||
|
|
self:Bar(335114, 6.5, CL.count:format(self:SpellName(335114), sinseekerCount)) -- Sinseeker
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local prev = 0
|
||
|
|
function mod:GroundDamage(args)
|
||
|
|
if self:Me(args.destGUID) then
|
||
|
|
local t = args.time
|
||
|
|
if t-prev > 2 then
|
||
|
|
prev = t
|
||
|
|
self:PlaySound(args.spellId, "underyou")
|
||
|
|
self:PersonalMessage(args.spellId, "underyou")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|