82a9ac0937
* 5.20 * Update to 5.21 --------- Co-authored-by: Szyler <Szyler@Szyler.com>
196 lines
6.4 KiB
Lua
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.
|
|
]]--
|