Files
Szyler 82a9ac0937 Update to 5.21 Sunwell (#6)
* 5.20

* Update to 5.21

---------

Co-authored-by: Szyler <Szyler@Szyler.com>
2024-09-30 20:09:41 -07:00

196 lines
6.4 KiB
Lua

local mod = DBM:NewMod("Brutallus", "DBM-Sunwell")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
mod:SetCreatureID(24882)
mod:RegisterCombat("combat")
mod:RegisterCombat("yell", L.BrutPull)
mod.disableHealthCombat = true
mod:RegisterEvents(
"SPELL_CAST_START",
"CHAT_MSG_MONSTER_YELL",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"UNIT_DIED"
)
local warnMeteorSlash = mod:NewSpellAnnounce(2145705, 2) -- 2145704, 2145705, 2145707, 2145708
local warnMeteorSlashStack = mod:NewSpecialWarningStack(2145705, nil, 3) -- 2145704, 2145705, 2145707, 2145708
local timerNextMeteorSlash = mod:NewNextTimer(10, 2145705) -- 2145704, 2145705, 2145707, 2145708
-- 10%, 10%, 13%, 15%, 15%.
local warnTrample = mod:NewSpellAnnounce(2145709, 3) -- 2145709, 2145710, 2145711 spell_aura_applied
local warnTrampleSoon = mod:NewSoonAnnounce(2145709, 3) -- 2145709, 2145710, 2145711 spell_aura_applied
local timerNextTrample = mod:NewNextTimer(30, 2145709) -- 2145709, 2145710, 2145711 spell_aura_applied
local timerCastTrample = mod:NewCastTimer(1, 2145709) -- 2145709, 2145710, 2145711 spell_aura_applied
local timerTargetTrample = mod:NewTargetTimer(9, 2145709) -- 2145709 spell_aura_applied
local warnFelfireBreath = mod:NewSpellAnnounce(2145717, 2) -- 2145717, 2145718, Spell_cast_start
local timerNextFelfireBreath = mod:NewNextTimer(60, 2145717) -- 2145717, 2145718, Spell_cast_start
local yellFelFire = mod:NewFadesYell(2145719) -- 2145719, 2145720, 2145721 spell_aura_applied
local specwarnFelfireBurn = mod:NewSpecialWarningYou(2145719) -- 2145719, 2145720, 2145721 spell_aura_applied
local warnFelfireTargets = mod:NewTargetAnnounce(2145719, 3) -- 2145719, 2145720, 2145721 spell_aura_applied
local timerFelFireBurn = mod:NewTimer(5, "Felfire Burn turns volatile in:", 2145719)
local timerFelFireBurnYou = mod:NewTimer(5, "%s: Felfire Burn spreads in:", 2145719)
local timerTargetFelFireBurn = mod:NewTargetTimer(60, 2145719) -- 2145719, 2145720, 2145721 spell_aura_applied
local timerExcitement = mod:NewBuffActiveTimer(50, 2145703) -- 2145703 Aura_applied Spell_aura_removed
local excitementStage = 0
local oldhasExcitement = 0
local hasExcitement = false
local hp = 100
local prevHP = 100
local hpAtEnd = 0
local oldTime = 0
local currTime = 0
local timeElapsed = 0
local timeToEnd = 0
local felfireTargets = {}
local felfireIcon = 7
mod:AddBoolOption("RangeFrame", true)
mod:AddBoolOption("felFireYellOpt", true)
local function WarnFelfireTargets()
warnFelfireTargets:Show(table.concat(felfireTargets, "<, >"))
table.wipe(felfireTargets)
-- felfireIcon = 7
end
function mod:OnCombatStart(delay)
if self.Options.RangeFrame then
DBM.RangeCheck:Show()
end
self.vb.phase = 1
felfireIcon = 7
hasExcitement = false
excitementStage = 0
oldhasExcitement = 0
hp = 100
prevHP = 100
timerNextMeteorSlash:Start(10-delay)
timerNextFelfireBreath:Start(45-delay)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2145705, 2145706, 2145707, 2145708) then
if args.destName == UnitName("Player") and args.amount and args.amount > 2 then
warnMeteorSlashStack:Show(args.amount or 1)
end
elseif args:IsSpellID(2145709) then --only main target
timerTargetTrample:Start(args.destName)
elseif args:IsSpellID(2145703) then
hasExcitement = true
timerExcitement:Start(args.destName)
excitementStage = excitementStage + 1
elseif args:IsSpellID(2145719, 2145720, 2145721, 2145721) then
felfireTargets[#felfireTargets + 1] = args.destName
if args:IsPlayer() then
specwarnFelfireBurn:Show()
timerFelFireBurnYou:Start(args.destName)
if self.Options.felFireYellOpt then
-- SendChatMessage(L.felFireYell, "YELL")
yellFelFire:Countdown(60,6)
end
end
timerTargetFelFireBurn:Start(args.destName)
self:SetIcon(args.destName, felfireIcon, 60)
if felfireIcon < 1 or felfireIcon > 7 then
felfireIcon = 7
end
felfireIcon = felfireIcon - 1
self:Unschedule(WarnFelfireTargets)
self:Schedule(0.2, WarnFelfireTargets)
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(2145703) then
hasExcitement = false
timerExcitement:Stop()
timerNextTrample:Stop()
warnTrample:Schedule(1)
timerCastTrample:Schedule(1)
timerNextMeteorSlash:Stop()
timerNextMeteorSlash:Start(13)
elseif args:IsSpellID(2145719, 2145720, 2145721, 2145721) then
self:SetIcon(args.destName, 0)
felfireIcon = felfireIcon + 1
-- for i, name in ipairs(felfireTargets) do
-- if name == args.destName then
-- table.remove(felfireTargets, i)
-- end
-- end
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2145705, 2145706, 2145707, 2145708) then
warnMeteorSlash:Show()
timerNextMeteorSlash:Start()
if timerTargetTrample:GetTime() > 0 then
timerTargetTrample:AddTime(2)
end
-- elseif args:IsSpellID(2145709, 2145710, 2145711) then
-- timerNextTrample:Start()
elseif args:IsSpellID(2145717) and args.sourceName == "Brutallus" then
timerNextFelfireBreath:Start()
warnFelfireBreath:Show()
timerFelFireBurn:Schedule(1)
end
end
function mod:OnCombatEnd()
timerNextTrample:Stop()
end
function mod:UNIT_HEALTH(unit)
if (mod:GetUnitCreatureId(unit) == 24882) and hasExcitement then
hp = math.ceil((math.max(0,UnitHealth(unit)) / math.max(1, UnitHealthMax(unit))) * 100)
if excitementStage ~= oldhasExcitement then
oldhasExcitement = excitementStage
hpAtEnd = hp - (excitementStage + 8)
prevHP = hp
currTime = GetTime()
elseif hp ~= prevHP and hp > hpAtEnd then
prevHP = math.ceil((math.max(0,UnitHealth(unit)) / math.max(1, UnitHealthMax(unit))) * 100)
oldTime = currTime
currTime = GetTime()
timeElapsed = currTime - oldTime
timeToEnd = timeElapsed * (hp - hpAtEnd)
if timeToEnd < 5 and timeToEnd > 0 then
warnTrampleSoon:Show()
end
timerNextTrample:Start(timeToEnd+1)
end
end
end
--[[
Timers
Meteor Slash 10 seconds after pull. Happens twice, once 10 seconds after the other. Rotation is approx Pull, 10s, 10s, 14s, 10s, 20s, 10s, 20s, 10s, etc. The 20 seconds are random, between 17 seconds and 23 seconds.
Trample 23 seconds after pull, then every 60 seconds
Felfire Breath 45 seconds after pull, then every 60 seconds
Notes
Meteor slash timer is fucked. The 20 second timer is very approximate, and ranges from 17 to 23 seconds.
]]--