Update to 5.21 Sunwell (#6)
* 5.20 * Update to 5.21 --------- Co-authored-by: Szyler <Szyler@Szyler.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
local mod = DBM:NewMod("Arynyes", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25837)
|
||||
mod:SetUsedIcons()
|
||||
|
||||
mod:RegisterCombat("yell", L.GauntletPull)
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_CAST_START",
|
||||
"SPELL_CAST_SUCCESS",
|
||||
"CHAT_MSG_MONSTER_YELL",
|
||||
"CHAT_MSG_MONSTER_EMOTE",
|
||||
"CHAT_MSG_RAID_BOSS_EMOTE",
|
||||
"CHAT_MSG_MONSTER_SAY",
|
||||
"CHAT_MSG_RAID_WARNING"
|
||||
)
|
||||
|
||||
|
||||
-- Vengeful Smite 2145868 (Spell_Damage) [after Imp Bullwark]
|
||||
-- Vengeful Retaliation 2145870 (Spell_cast_start) [start: 15 sec, 30 sec freq, 1 sec charge, 8 sec duration]
|
||||
-- Impenetrable Bullwark 2145867 (Spell_cast_success) [start: 5 sec, 30 sec freq, 5 sec duration]
|
||||
-- Judgement of Vengeance 2145874 (Spell_cast_start) [start: 25 sec, 30 sec freq, 1 sec cast]
|
||||
|
||||
local timerImpBullwark = mod:NewNextTimer(30, 2145867)
|
||||
local channelImpBullwark = mod:NewCastTimer(5, 2145867)
|
||||
local specWarnImpBullwark = mod:NewSpecialWarning("High Commander Arynyes is channeling Impenetrable Bullwark!", 2145867,3)
|
||||
|
||||
local timerVengeSmite = mod:NewNextTimer(30,2145868)
|
||||
local warnVengeSmite = mod:NewSpellAnnounce(2145868, 2)
|
||||
|
||||
local timerVengefulRetal = mod:NewNextTimer(30, 2145870)
|
||||
local castVengefulRetal = mod:NewCastTimer(1, 2145870)
|
||||
local channelVengefulRetal = mod:NewCastTimer(8, 2145870)
|
||||
local warnVengefulRetal = mod:NewSpellAnnounce(2145870, 2)
|
||||
|
||||
local timerJudgement = mod:NewNextTimer(30, 2145874)
|
||||
local castJudgement = mod:NewCastTimer(1, 2145874)
|
||||
local warnJudgement = mod:NewSpellAnnounce(2145874, 2)
|
||||
|
||||
local berserkTimer = mod:NewBerserkTimer(600)
|
||||
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
self.vb.phase = 1
|
||||
berserkTimer:Start(-delay)
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_SUCCESS(args)
|
||||
if args.sourceName == "High Commander Arynyes" and args:IsSpellID(2145867) then
|
||||
channelImpBullwark:Start()
|
||||
timerVengeSmite:Schedule(5)
|
||||
specWarnImpBullwark:Show()
|
||||
warnVengeSmite:Schedule(5)
|
||||
timerImpBullwark:Start()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args.sourceName == "High Commander Arynyes" and args:IsSpellID(2145870, 2145872) then
|
||||
castVengefulRetal:Start()
|
||||
channelVengefulRetal:Schedule(1)
|
||||
warnVengefulRetal:Show()
|
||||
timerVengefulRetal:Start()
|
||||
elseif args.sourceName == "High Commander Arynyes" and args:IsSpellID(2145874, 2145875, 2145876, 2145877) then
|
||||
castJudgement:Start()
|
||||
warnJudgement:Show()
|
||||
timerJudgement:Start()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
||||
if msg == L.ArynPull or msg:find(L.ArynPull) then
|
||||
self.vb.phase = 2
|
||||
timerImpBullwark:Start(5)
|
||||
timerVengeSmite:Start(10)
|
||||
timerVengefulRetal:Start(15)
|
||||
timerJudgement:Start(25)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:OnCombatEnd()
|
||||
timerImpBullwark:Cancel()
|
||||
timerVengeSmite:Cancel()
|
||||
timerVengefulRetal:Cancel()
|
||||
timerJudgement:Cancel()
|
||||
end
|
||||
@@ -0,0 +1,195 @@
|
||||
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.
|
||||
]]--
|
||||
@@ -0,0 +1,20 @@
|
||||
## Interface: 30300
|
||||
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Sunwell|r
|
||||
## LoadOnDemand: 1
|
||||
## RequiredDeps: DBM-Core, DBM-BurningCrusade
|
||||
## SavedVariablesPerCharacter: DBMSunwell_SavedVars, DBMSunwell_SavedStats
|
||||
## X-DBM-Mod: 1
|
||||
## X-DBM-Mod-Category: BC
|
||||
## X-DBM-Mod-Name: Sunwell Plateau
|
||||
## X-DBM-Tab-Sort: 307
|
||||
## X-DBM-Mod-LoadZone: Sunwell Plateau
|
||||
MapSizes.lua
|
||||
localization.en.lua
|
||||
Kalecgos.lua
|
||||
KalecgosFrame.lua
|
||||
Brutallus.lua
|
||||
Felmyst.lua
|
||||
EredarTwins.lua
|
||||
M'uru.lua
|
||||
Kil'jaeden.lua
|
||||
Arynyes.lua
|
||||
@@ -0,0 +1,291 @@
|
||||
local mod = DBM:NewMod("Twins", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25165, 25166)
|
||||
mod:SetUsedIcons(7, 8)
|
||||
|
||||
mod:RegisterCombat("combat")
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_AURA_APPLIED",
|
||||
"SPELL_AURA_APPLIED_DOSE",
|
||||
"SPELL_CAST_START",
|
||||
"CHAT_MSG_MONSTER_YELL",
|
||||
"CHAT_MSG_MONSTER_EMOTE",
|
||||
"CHAT_MSG_RAID_BOSS_EMOTE",
|
||||
"CHAT_MSG_MONSTER_SAY",
|
||||
"CHAT_MSG_RAID_WARNING",
|
||||
"UNIT_HEALTH"
|
||||
)
|
||||
|
||||
mod:SetBossHealthInfo(
|
||||
25165, L.Sacrolash,
|
||||
25166, L.Alythess
|
||||
)
|
||||
|
||||
--phase 1
|
||||
local timerDance = mod:NewTimer(15,"Fire Dance/Dawn Runner", 2145929)
|
||||
local timerTwinFade = mod:NewTimer(10, "The strongest Twin remains", 148477)
|
||||
|
||||
-- Alythess Phase
|
||||
local warnSolarBurn = mod:NewSpecialWarningStack(2145905, nil, 4) -- 2145905, 2145906 spell_aura_applied
|
||||
local timerFlingAlyth = mod:NewTargetTimer(1, 2145916)
|
||||
local warnFireDance = mod:NewSpellAnnounce(2145928, 3) -- 2145928
|
||||
local timerFireDance = mod:NewNextTimer(30, 2145928)
|
||||
|
||||
-- Sacrolash abilities in Aly phase
|
||||
local timerCrescentMoonKick = mod:NewTargetTimer(2, 2146019)
|
||||
--local warnLunarFlare = mod:NewAnnounce(,2146007, 3) -- 2145907, 2145908
|
||||
local warnCrushingShadow = mod:NewSpellAnnounce(2146029, 3) -- 2146030 spell_Cast_start
|
||||
local timerCrushingShadow = mod:NewNextTimer(29,2146029)
|
||||
|
||||
-- Sacrolash Phase
|
||||
local warnLunarBurn = mod:NewAnnounce("WarnLunarStacks", 2, 2146005)
|
||||
local warnFling = mod:NewTargetAnnounce(2146016, 3) -- 2146017 spell_Cast_start 40s CD, Unless pushed back
|
||||
local timerFlingSacro = mod:NewTargetTimer(1, 2146016)
|
||||
local warnDawnRunner = mod:NewSpellAnnounce(2146027, 3)
|
||||
local timerDawnRunner = mod:NewNextTimer(30, 2146027)
|
||||
|
||||
-- Alythess abilities in Sacro phase
|
||||
local timerRisingSunKick = mod:NewTargetTimer(2, 2145919)
|
||||
--local warnSolarFlare = mod:NewSpellAnnounce(2145907, 3) -- 2145907, 2145908
|
||||
local warnFlashBurn = mod:NewSpellAnnounce(2145929, 3) -- 2145929, 2145930, 2145931 spell_Cast_start
|
||||
local timerFlashBurn = mod:NewNextTimer(29, 2145929)
|
||||
|
||||
-- Sacro'lythess
|
||||
local warnDawnDancer = mod:NewSpellAnnounce(2145927)
|
||||
local timerDawnDancer = mod:NewNextTimer(30, 2145927)
|
||||
-- everything else
|
||||
local timerSacroTankCombo = mod:NewTimer(30, "Sacrolash Tank combination", 2146016)
|
||||
local timerAlythTankCombo = mod:NewTimer(30, "Alythess Tank combination", 2145916)
|
||||
local timerCrashCombination = mod:NewTimer(4, "Falling Star and Crashing Moon", 2145922)
|
||||
local warnCrashCombination = mod:NewAnnounce("Falling Star and Crashing Moon", 2145922)
|
||||
local timerCutCombination = mod:NewTimer(5, "Crescent Moon and Rising Sun Cut", 2146025)
|
||||
local warnCutCombination = mod:NewAnnounce("Crescent Moon and Rising Sun Cut", 2146025)
|
||||
|
||||
local timerRoleReversal = mod:NewTimer(5, "Role Reversal RP", 992179)
|
||||
local timerTagTeam = mod:NewTimer(5, "Both Twins are emerging", 992179)
|
||||
local timerTwinsMerge = mod:NewTimer(5, "The Twins are merging", 992179)
|
||||
local berserkTimer = mod:NewBerserkTimer(600)
|
||||
|
||||
local sacroPath = false
|
||||
local alythPath = false
|
||||
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
self.vb.phase = 1
|
||||
sacroPath = false
|
||||
alythPath = false
|
||||
timerDance:Start(-delay)
|
||||
timerTwinFade:Start(-delay)
|
||||
berserkTimer:Start(-delay)
|
||||
end
|
||||
|
||||
|
||||
function mod:SPELL_AURA_APPLIED(args)
|
||||
if args:IsSpellID(2145905) and args:IsPlayer() then
|
||||
if args.amount then
|
||||
warnSolarBurn:Show(args.amount)
|
||||
end
|
||||
elseif args:IsSpellID(2146005) and args:IsPlayer() then
|
||||
if args.amount and (args.amount == 4 or args.amount >= 8) then
|
||||
warnLunarBurn:Show(args.spellName, args.amount or 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||||
|
||||
function mod:CancelTimers()
|
||||
timerDance:Cancel()
|
||||
timerAlythTankCombo:Cancel()
|
||||
timerSacroTankCombo:Cancel()
|
||||
timerFireDance:Cancel()
|
||||
timerDawnRunner:Cancel()
|
||||
timerCrushingShadow:Cancel()
|
||||
timerFlashBurn:Cancel()
|
||||
self:UnscheduleMethod("FireDance")
|
||||
self:UnscheduleMethod("DawnRunner")
|
||||
end
|
||||
|
||||
function mod:FireDance()
|
||||
self:UnscheduleMethod("FireDance")
|
||||
warnFireDance:Show()
|
||||
timerFireDance:Start()
|
||||
self:ScheduleMethod(31,"FireDance")
|
||||
end
|
||||
|
||||
function mod:DawnRunner()
|
||||
self:UnscheduleMethod("DawnRunner")
|
||||
warnDawnRunner:Show()
|
||||
timerDawnRunner:Start()
|
||||
self:ScheduleMethod(31, "DawnRunner")
|
||||
end
|
||||
|
||||
function mod:DawnDancer()
|
||||
self:UnscheduleMethod("DawnDancer")
|
||||
warnDawnDancer:Show()
|
||||
timerDawnDancer:Start()
|
||||
self:ScheduleMethod(31,"DawnDancer")
|
||||
end
|
||||
|
||||
function mod:SacroPath()
|
||||
timerSacroTankCombo:Start(30)
|
||||
timerDawnRunner:Start(5)
|
||||
timerFireDance:Start(15)
|
||||
self:ScheduleMethod(5,"DawnRunner")
|
||||
self:ScheduleMethod(15,"FireDance")
|
||||
end
|
||||
|
||||
function mod:AlythPath()
|
||||
timerAlythTankCombo:Start(30)
|
||||
timerDawnRunner:Start(15)
|
||||
timerFireDance:Start(5)
|
||||
self:ScheduleMethod(15,"DawnRunner")
|
||||
self:ScheduleMethod(5,"FireDance")
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args:IsSpellID(2146016) and args.sourceName == "Lady Sacrolash" and self.vb.phase <= 3 then
|
||||
local sacroTarget = mod:GetBossTarget(25165)
|
||||
warnFling:Show(sacroTarget)
|
||||
timerFlingSacro:Start(sacroTarget)
|
||||
timerRisingSunKick:Start(sacroTarget)
|
||||
timerCrashCombination:Start(sacroTarget)
|
||||
warnCrashCombination:Schedule(4)
|
||||
timerCutCombination:Start(sacroTarget)
|
||||
warnCutCombination:Schedule(5)
|
||||
timerSacroTankCombo:Start()
|
||||
if timerDawnRunner:GetTime() > 24 then
|
||||
timerDawnRunner:Update(0,6)
|
||||
self:UnscheduleMethod("DawnRunner")
|
||||
self:ScheduleMethod(6,"DawnRunner")
|
||||
end
|
||||
elseif args:IsSpellID(2145916) and args.sourceName == "Grand Warlock Alythess" and self.vb.phase <= 3 then
|
||||
local alythTarget = mod:GetBossTarget(25166)
|
||||
timerFlingAlyth:Start(alythTarget)
|
||||
timerCrescentMoonKick:Start(alythTarget)
|
||||
timerCrashCombination:Start(alythTarget)
|
||||
warnCrashCombination:Schedule(4)
|
||||
timerCutCombination:Start(alythTarget)
|
||||
warnCutCombination:Schedule(5)
|
||||
timerAlythTankCombo:Start()
|
||||
if timerFireDance:GetTime() > 24 then
|
||||
timerFireDance:Update(0,6)
|
||||
self:UnscheduleMethod("FireDance")
|
||||
self:ScheduleMethod(6,"FireDance")
|
||||
|
||||
end
|
||||
elseif args:IsSpellID(2145929, 2145930, 2145931, 2145932) then
|
||||
warnFlashBurn:Show()
|
||||
timerFlashBurn:Start()
|
||||
elseif args:IsSpellID(2146029, 2146030, 2146031, 2146032) then
|
||||
warnCrushingShadow:Show()
|
||||
timerCrushingShadow:Start()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
||||
if msg == L.TwinsPull or msg:find(L.TwinsPull) then
|
||||
timerDance:Start()
|
||||
|
||||
elseif msg == L.SacroPhase or msg:find(L.SacroPhase) then
|
||||
self:ScheduleMethod(0, "CancelTimers")
|
||||
timerSacroTankCombo:Start(30)
|
||||
timerDawnRunner:Start(5)
|
||||
self:ScheduleMethod(5, "DawnRunner")
|
||||
if self.vb.phase == 1 then
|
||||
self.vb.phase = 2
|
||||
sacroPath = true
|
||||
end
|
||||
elseif msg == L.AlythPhase or msg:find(L.AlythPhase) then
|
||||
self:ScheduleMethod(0, "CancelTimers")
|
||||
timerAlythTankCombo:Start()
|
||||
timerFireDance:Start()
|
||||
self:ScheduleMethod(5, "FireDance")
|
||||
if self.vb.phase == 1 then
|
||||
self.vb.phase = 2
|
||||
alythPath = true
|
||||
end
|
||||
elseif self.vb.phase == 4 and DBM:AntiSpam(5, 1) and (msg == L.SacroCombo or msg:find(L.SacroCombo) or msg == L.AlythCombo or msg:find(L.AlythCombo)) then
|
||||
if msg == L.SacroCombo or msg:find(L.SacroCombo) then
|
||||
local sacroTarget = mod:GetBossTarget(25165)
|
||||
timerRisingSunKick:Start(sacroTarget)
|
||||
timerCrashCombination:Start(sacroTarget)
|
||||
warnCrashCombination:Schedule(4)
|
||||
timerCutCombination:Start(sacroTarget)
|
||||
warnCutCombination:Schedule(5)
|
||||
timerSacroTankCombo:Start()
|
||||
if timerDawnRunner:GetTime() > 24 then
|
||||
timerDawnRunner:Update(0,6)
|
||||
self:UnscheduleMethod("DawnRunner")
|
||||
self:ScheduleMethod(6,"DawnRunner")
|
||||
end
|
||||
if timerFireDance:GetTime() > 24 then
|
||||
timerFireDance:Update(0,6)
|
||||
self:UnscheduleMethod("FireDance")
|
||||
self:ScheduleMethod(6,"FireDance")
|
||||
end
|
||||
elseif msg == L.AlythCombo or msg:find(L.AlythCombo) then
|
||||
local alythTarget = mod:GetBossTarget(25166)
|
||||
timerFlingAlyth:Start(alythTarget)
|
||||
timerCrescentMoonKick:Start(alythTarget)
|
||||
timerCrashCombination:Start(alythTarget)
|
||||
warnCrashCombination:Schedule(4)
|
||||
timerCutCombination:Start(alythTarget)
|
||||
warnCutCombination:Schedule(5)
|
||||
timerAlythTankCombo:Start()
|
||||
if timerFireDance:GetTime() > 24 then
|
||||
timerFireDance:Update(0,6)
|
||||
self:UnscheduleMethod("FireDance")
|
||||
self:ScheduleMethod(6,"FireDance")
|
||||
end
|
||||
if timerDawnRunner:GetTime() > 24 then
|
||||
timerDawnRunner:Update(0,6)
|
||||
self:UnscheduleMethod("DawnRunner")
|
||||
self:ScheduleMethod(6,"DawnRunner")
|
||||
end
|
||||
end
|
||||
elseif msg == L.SacroAbsorb or msg:find(L.SacroAbsorb) or msg == L.AlythAbsorb or msg:find(L.AlythAbsorb) then
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
self.vb.phase = 5
|
||||
timerTwinsMerge:Start()
|
||||
elseif msg == L.TwinsMerge or msg:find(L.TwinsMerge) then
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
timerDawnDancer:Start()
|
||||
self:ScheduleMethod(5,"DawnDancer")
|
||||
end
|
||||
end
|
||||
|
||||
function mod:UNIT_HEALTH(uId)
|
||||
local cid = self:GetUnitCreatureId(uId)
|
||||
if cid == 25165 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 2 then
|
||||
--Sacrolash
|
||||
self.vb.phase = 3
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
timerRoleReversal:Start()
|
||||
elseif cid == 25166 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 2 then
|
||||
--Alythess
|
||||
self.vb.phase = 3
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
timerRoleReversal:Start()
|
||||
elseif cid == 25165 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 3 and alythPath == true then
|
||||
self.vb.phase = 4
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
timerTagTeam:Start()
|
||||
self:ScheduleMethod(5,"AlythPath")
|
||||
elseif cid == 25166 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.50 and self.vb.phase == 3 and sacroPath == true then
|
||||
self.vb.phase = 4
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
timerTagTeam:Start()
|
||||
self:ScheduleMethod(5,"SacroPath")
|
||||
end
|
||||
end
|
||||
|
||||
function mod:OnCombatEnd()
|
||||
self:ScheduleMethod(0,"CancelTimers")
|
||||
if self.Options.RangeFrame then
|
||||
DBM.RangeCheck:Hide()
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,150 @@
|
||||
local mod = DBM:NewMod("Felmyst", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25038)
|
||||
|
||||
mod:RegisterCombat("combat")
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_AURA_APPLIED",
|
||||
"SPELL_CAST_START",
|
||||
"SPELL_CAST_SUCCESS",
|
||||
"SPELL_SUMMON",
|
||||
"RAID_BOSS_EMOTE",
|
||||
"CHAT_MSG_MONSTER_YELL",
|
||||
"CHAT_MSG_RAID_BOSS_EMOTE",
|
||||
"CHAT_MSG_MONSTER_EMOTE",
|
||||
"CHAT_MSG_RAID_WARNING",
|
||||
"CHAT_MSG_MONSTER_SAY"
|
||||
)
|
||||
|
||||
|
||||
local warnCastCorrosion = mod:NewSpellAnnounce(2145808, 2) -- 2145808, 2145809, 21458010 spell_cast_start
|
||||
local timerNextCorrosion = mod:NewNextTimer(45, 2145808) -- 2145808, 2145809, 21458010 spell_cast_start
|
||||
local timerCastCorrosion = mod:NewCastTimer(5, 2145808) -- 2145808, 2145809, 21458010 spell_cast_start
|
||||
-- local warnCorrosion = mod:NewTargetAnnounce(2145808, 2) -- 2145808, 2145809, 21458010 spell_aura_applied
|
||||
|
||||
local warnCastAcidicBreath = mod:NewSpellAnnounce(2145801, 2) -- 2145801, 2145802, 2145803, SPELL_CAST_START
|
||||
local timerNextAcidicBreath = mod:NewNextTimer(22, 2145801) -- 2145801, 2145802, 2145803, SPELL_CAST_START
|
||||
local timerAcidicBreath = mod:NewCastTimer(5, 2145801) -- 2145801, 2145802, 2145803, SPELL_CAST_START
|
||||
-- local warnAcidicBreath = mod:NewTargetAnnounce(2145801, 2) -- 2145801, 2145802, 2145803, SPELL_CAST_START
|
||||
|
||||
local warnCastNecroticBreath = mod:NewSpellAnnounce(2145801, 2) -- 2145817, 2145818, 2145819, 2145820, 2145821, 12 seconds after Acidic spell_cast_start
|
||||
local timerNextNecroticBreath = mod:NewNextTimer(12, 2145801) -- 2145817, 2145818, 2145819, 2145820, 2145821, 12 seconds after Acidic spell_cast_start
|
||||
-- local warnNecroticBreath = mod:NewTargetAnnounce(2145801, 2) -- 2145817, 2145818, 2145819, 2145820, 2145821, 12 seconds after Acidic spell_cast_start
|
||||
|
||||
local warnCastFreezingBreath = mod:NewSpellAnnounce(2145822, 2) -- 2145822, 2145823, 2145824, 2145825 12 seconds after Acidic spell_cast_start
|
||||
local timerNextFreezingBreath = mod:NewNextTimer(12, 2145822) -- 2145822, 2145823, 2145824, 2145825, 12 seconds after Acidic spell_cast_start
|
||||
local timerCastFreezingBreath = mod:NewCastTimer(15, 2145835) -- 2145835, spell_cast_start of inhale
|
||||
-- local warnFreezingBreath = mod:NewTargetAnnounce(2145822, 2) -- 2145822, 2145823, 2145824, 2145825, 12 seconds after Acidic spell_cast_start
|
||||
|
||||
local warnCastInhale = mod:NewSpellAnnounce(2145833, 2) -- 2145833, spell_cast_start
|
||||
local timerNextInhale = mod:NewNextTimer(17, 2145833) -- 2145833, spell_cast_start
|
||||
|
||||
local timerNextNecroticDeluge = mod:NewNextTimer(5, 2145835) -- 2145835, spell_cast_start
|
||||
local timerCastNecroticDeluge = mod:NewCastTimer(15, 2145835) -- 2145835, spell_cast_start of inhale
|
||||
|
||||
local warnArcaneDetention = mod:NewSpellAnnounce(2145834, 2) -- 2145834 spell_cast_start
|
||||
local timerNextArcaneDetention = mod:NewNextTimer(20, 2145834) -- 2145834 spell_cast_start
|
||||
local timerTargetArcaneDetention = mod:NewTargetTimer(10, 2145834) -- 2145834 spell_cast_start
|
||||
|
||||
local warnTailSweep = mod:NewSpellAnnounce(2145806, 2) -- 2145806 spell_cast_success
|
||||
local warnNextTailSweep = mod:NewNextTimer(10, 2145806) -- 2145806 spell_cast_success 1 sec after Corrosion
|
||||
|
||||
local timerBreath = mod:NewCDTimer(20, 45717)
|
||||
local warnBreath = mod:NewSpellAnnounce(45717, 4)
|
||||
local warnPhase = mod:NewAnnounce("WarnPhase", 1, 31550)
|
||||
|
||||
local timerPhase = mod:NewTimer(60, "TimerPhase", 31550)
|
||||
local berserkTimer = mod:NewBerserkTimer(720)
|
||||
|
||||
|
||||
local breathCounter = 0
|
||||
|
||||
function mod:Groundphase()
|
||||
breathCounter = 0
|
||||
warnPhase:Show(L.Ground)
|
||||
timerNextCorrosion:Start(2)
|
||||
warnNextTailSweep:Start(9)
|
||||
timerNextArcaneDetention:Start(12)
|
||||
-- timerPhase:Start(60, L.Air)
|
||||
end
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
breathCounter = 0
|
||||
timerNextCorrosion:Start(15-delay)
|
||||
warnNextTailSweep:Start(29-delay)
|
||||
berserkTimer:Start(-delay)
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_SUCCESS(args)
|
||||
if args:IsSpellID(2145808, 2145809, 21458010) then
|
||||
warnTailSweep:Show()
|
||||
-- warnNextTailSweep:Start()
|
||||
end
|
||||
end
|
||||
|
||||
-- function mod:SPELL_SUMMON(args)
|
||||
-- if args.spellId == 45392 then
|
||||
-- warnVapor:Show(args.sourceName)
|
||||
-- if args.sourceName == UnitName("player") then
|
||||
-- specWarnVapor:Show()
|
||||
-- end
|
||||
-- if self.Options.VaporIcon then
|
||||
-- self:SetIcon(args.sourceName, 8, 10)
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args:IsSpellID(2145808, 2145809, 2145810) then
|
||||
warnCastCorrosion:Show()
|
||||
timerNextCorrosion:Start()
|
||||
timerCastCorrosion:Start()
|
||||
-- warnCorrosion:Show()
|
||||
-- elseif args:IsSpellID(2145833) then
|
||||
-- timerNextInhale:Start()
|
||||
elseif args:IsSpellID(2145834) then
|
||||
warnArcaneDetention:Show()
|
||||
-- timerNextArcaneDetention:Start()
|
||||
timerTargetArcaneDetention:Start(args.destName)
|
||||
elseif args:IsSpellID(2145801, 2145802, 2145803) then
|
||||
warnCastAcidicBreath:Show()
|
||||
timerAcidicBreath:Start()
|
||||
timerNextAcidicBreath:Start()
|
||||
elseif args:IsSpellID(2145833) then
|
||||
breathCounter = breathCounter + 1
|
||||
warnCastInhale:Show()
|
||||
if breathCounter < 3 then
|
||||
timerNextInhale:Start(nil, breathCounter+1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:necroticBreath()
|
||||
timerCastNecroticDeluge:Start()
|
||||
end
|
||||
|
||||
function mod:frostBreath()
|
||||
timerCastFreezingBreath:Start()
|
||||
end
|
||||
|
||||
function mod:CHAT_MSG_MONSTER_EMOTE(msg)
|
||||
if msg == L.AirPhase or msg:find(L.AirPhase)
|
||||
or msg == L.AirPhase2 or msg:find(L.AirPhase2) then
|
||||
breathCounter = 0
|
||||
timerBreath:Start(42, 1)
|
||||
timerNextNecroticBreath:Start(12)
|
||||
self:ScheduleMethod(12, "necroticBreath")
|
||||
timerNextFreezingBreath:Start(27)
|
||||
self:ScheduleMethod(27, "frostBreath")
|
||||
|
||||
timerPhase:Start(110, L.Ground)
|
||||
self:ScheduleMethod(110, "Groundphase")
|
||||
end
|
||||
end
|
||||
mod.CHAT_MSG_MONSTER_YELL = mod.CHAT_MSG_MONSTER_EMOTE
|
||||
mod.CHAT_MSG_RAID_BOSS_EMOTE = mod.CHAT_MSG_MONSTER_EMOTE
|
||||
mod.CHAT_MSG_MONSTER_SAY = mod.CHAT_MSG_MONSTER_EMOTE
|
||||
mod.CHAT_MSG_RAID_WARNING = mod.CHAT_MSG_MONSTER_EMOTE
|
||||
@@ -0,0 +1,159 @@
|
||||
local mod = DBM:NewMod("Kalecgos", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(24850)
|
||||
|
||||
mod:RegisterCombat("combat")
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_CAST_START",
|
||||
"SPELL_CAST_SUCCESS",
|
||||
"SPELL_AURA_APPLIED",
|
||||
"SPELL_AURA_APPLIED_DOSE",
|
||||
"UNIT_DIED"
|
||||
)
|
||||
|
||||
local warnPortal = mod:NewAnnounce("WarnPortal", 4, 46021)
|
||||
|
||||
local specWarnBuffet = mod:NewSpecialWarningStack(2145512, nil, 10) -- 2145512, 2145513 SPELL_AURA_APPLIED
|
||||
local timerNextBuffet = mod:NewNextTimer(8, 2145512) -- 2145512, 2145513 SPELL_AURA_APPLIED
|
||||
|
||||
local timerBreathCast = mod:NewCastTimer(2, 2145511) -- 2145509, 2145510, 2145511 SPELL_CAST_START
|
||||
local timerNextBreath = mod:NewNextTimer(20, 2145511) -- 2145509, 2145510, 2145511 SPELL_CAST_START
|
||||
|
||||
local timerSpectralBlast = mod:NewCastTimer(4, 2145504) -- 2145503, 2145504 SPELL_CAST_START
|
||||
local timerNextSpectralBlast = mod:NewNextTimer(25, 2145504) -- 2145503, 2145504 SPELL_CAST_START
|
||||
local timerTargetSpectralBlast = mod:NewTargetTimer(4, 2145504) -- 2145503, 2145504 SPELL_CAST_START
|
||||
local warnSpectralBlastYOU = mod:NewSpecialWarningYou(2145504, 4) -- 2145503, 2145504 SPELL_CAST_START
|
||||
|
||||
local timerNextTailSweep = mod:NewNextTimer(30, 2145506) -- 2145506 Spell_cast_success
|
||||
|
||||
local warnDescentIntoMadness = mod:NewSpecialWarningStack(2145501, nil, 5) -- 22145501 SPELL_AURA_APPLIED
|
||||
|
||||
local warnCastMindWipe = mod:NewSpellAnnounce(2145524, 2) -- 2145524 SPELL_CAST_START
|
||||
local warnStackMindWipe = mod:NewSpecialWarningStack(2145524, nil, 4) -- 2145524 SPELL_CAST_START
|
||||
local timerCastMindWipe = mod:NewCastTimer(2, 2145524) -- 2145524 SPELL_CAST_START
|
||||
local timerNextMindWipe = mod:NewNextTimer(25, 2145524) -- 2145524 SPELL_CAST_START
|
||||
|
||||
local warnCorruptorsTouch = mod:NewSpellAnnounce(2145523, 2) -- 2145523 SPELL_AURA_APPLIED
|
||||
local timerNextCorruptorsTouch = mod:NewNextTimer(20, 2145523) -- 2145523 SPELL_AURA_APPLIED
|
||||
|
||||
local berserkTimer = mod:NewBerserkTimer(600)
|
||||
|
||||
mod:AddBoolOption("HealthFrame", true)
|
||||
mod:AddBoolOption("RangeFrame", true)
|
||||
mod:AddBoolOption("ShowFrame", true)
|
||||
-- mod:AddBoolOption("FrameLocked", false)
|
||||
-- mod:AddBoolOption("FrameClassColor", true, nil, function()
|
||||
-- mod:UpdateColors()
|
||||
-- end)
|
||||
-- mod:AddBoolOption("FrameUpwards", false, nil, function()
|
||||
-- mod:ChangeFrameOrientation()
|
||||
-- end)
|
||||
-- mod:AddEditboxOption("FramePoint", "CENTER")
|
||||
-- mod:AddEditboxOption("FrameX", 150)
|
||||
-- mod:AddEditboxOption("FrameY", -50)
|
||||
|
||||
local portCount = 1
|
||||
|
||||
function mod:TargetSpectralBlast()
|
||||
local target = nil
|
||||
target = mod:GetBossTarget(24850)
|
||||
if target == UnitName("player") then
|
||||
warnSpectralBlastYOU:Show()
|
||||
end
|
||||
timerTargetSpectralBlast:Start(target)
|
||||
end
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
portCount = 1
|
||||
|
||||
timerNextSpectralBlast:Start(8-delay)
|
||||
timerNextBuffet:Start(10-delay)
|
||||
timerNextBreath:Start(15-delay)
|
||||
timerNextTailSweep:Start(21-delay)
|
||||
berserkTimer:Start(-delay)
|
||||
|
||||
-- if self.Options.ShowFrame then
|
||||
-- self:CreateFrame()
|
||||
-- end
|
||||
if self.Options.RangeFrame then
|
||||
DBM.RangeCheck:Show()
|
||||
end
|
||||
if self.Options.HealthFrame then
|
||||
DBM.BossHealth:Clear()
|
||||
DBM.BossHealth:AddBoss(24850, L.name)
|
||||
DBM.BossHealth:AddBoss(24892, L.Demon)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:OnCombatEnd()
|
||||
-- self:DestroyFrame()
|
||||
DBM.RangeCheck:Hide()
|
||||
end
|
||||
|
||||
function mod:SPELL_AURA_APPLIED(args)
|
||||
if args:IsSpellID(2145512, 2145513) and args.amount and args.amount >= 3 then
|
||||
if args.destName == UnitName("Player") then
|
||||
specWarnBuffet:Show(args.amount or 1)
|
||||
end
|
||||
timerNextBuffet:Start()
|
||||
elseif args:IsSpellID(2145501, 2145502) and args.amount and args.amount >= 10 and args.amount % 5 == 0 then
|
||||
warnDescentIntoMadness:Show(args.amount or 1)
|
||||
elseif args:IsSpellID(2145524) then
|
||||
if args.destName == UnitName("Player") then
|
||||
warnStackMindWipe:Show(args.amount or 1)
|
||||
end
|
||||
warnStackMindWipe:Show(args.destName)
|
||||
elseif args:IsSpellID(2145523) then
|
||||
warnCorruptorsTouch:Show()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args:IsSpellID(2145509, 2145510, 2145511) then
|
||||
timerBreathCast:Start()
|
||||
timerNextBreath:Start()
|
||||
elseif args:IsSpellID(2145503, 2145504) then
|
||||
timerSpectralBlast:Start()
|
||||
timerNextSpectralBlast:Start()
|
||||
self:ScheduleMethod(0.2, "TargetSpectralBlast")
|
||||
elseif args:IsSpellID(2145524) then
|
||||
warnCastMindWipe:Show()
|
||||
timerCastMindWipe:Start()
|
||||
timerNextMindWipe:Start()
|
||||
elseif args:IsSpellID(2145523) then
|
||||
timerNextCorruptorsTouch:Start()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_SUCCESS(args)
|
||||
if args:IsSpellID(2145506) then
|
||||
timerNextTailSweep:Start()
|
||||
end
|
||||
end
|
||||
|
||||
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||||
|
||||
|
||||
function mod:UNIT_DIED(args)
|
||||
if self:GetCIDFromGUID(args.destGUID) == 24892 then
|
||||
DBM:EndCombat(self)
|
||||
end
|
||||
-- if bit.band(args.destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0 then
|
||||
-- local grp
|
||||
-- if GetNumRaidMembers() > 0 then
|
||||
-- for i = 1, GetNumRaidMembers() do
|
||||
-- local name, _, subgroup = GetRaidRosterInfo(i)
|
||||
-- if name == args.destName then
|
||||
-- grp = subgroup
|
||||
-- break
|
||||
-- end
|
||||
-- end
|
||||
-- else
|
||||
-- grp = 0
|
||||
-- end
|
||||
-- self:RemoveEntry(("%s (%d)"):format(args.destName, grp or 0))
|
||||
-- end
|
||||
end
|
||||
@@ -0,0 +1,401 @@
|
||||
local mod = DBM:NewMod("Kil", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25657, 25588, 25696, 25315)
|
||||
mod:SetUsedIcons(4, 5, 6, 7, 8)
|
||||
mod:RegisterCombat("combat")
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_AURA_APPLIED",
|
||||
"SPELL_AURA_APPLIED_DOSE",
|
||||
"SPELL_AURA_REMOVED",
|
||||
"SPELL_CAST_START",
|
||||
"SPELL_CAST_SUCCESS",
|
||||
"SPELL_INTERRUPT",
|
||||
"CHAT_MSG_MONSTER_YELL",
|
||||
"CHAT_MSG_MONSTER_SAY",
|
||||
"UNIT_HEALTH",
|
||||
"UNIT_DIED"
|
||||
)
|
||||
--Phase 1
|
||||
-- Apolyon
|
||||
local warnSoulbomb = mod:NewTargetAnnounce(2146682, 2)
|
||||
local YellSoulbomb = mod:NewFadesYell(2146682)
|
||||
local timerTargetSoulbomb = mod:NewTargetTimer(10, 2146682)
|
||||
local timerNextSoulbomb = mod:NewNextTimer(10, 2146682)
|
||||
|
||||
local warnSoulrend = mod:NewSpellAnnounce(2146680, 2) -- 2146680 Spell_cast_Start
|
||||
local timerNextSoulRend = mod:NewNextTimer(30, 2146680) -- 2146680 Spell_cast_Start (20 yard radius)
|
||||
local timerCastSoulRend = mod:NewCastTimer(3, 2146680) -- 2146680 Spell_cast_Start
|
||||
|
||||
-- Agamath
|
||||
-- local warnRagingBlow = mod:NewSpellAnnounce(2146684, 3)
|
||||
local timerNextRagingBlow = mod:NewNextTimer(10, 2146684)
|
||||
|
||||
local warnFelRage = mod:NewTargetAnnounce(2146688, 2)
|
||||
local timerFelRage = mod:NewTargetTimer(5, 2146688)
|
||||
|
||||
-- Archonisus
|
||||
local warnSummonWildImps = mod:NewSpellAnnounce(2146676, 3) -- 2146676 Spell_cast_Start
|
||||
local timerNextSummonWildImps = mod:NewNextTimer(31, 2146676) -- 2146676 Spell_cast_Start
|
||||
local timerCastImplosion = mod:NewCastTimer(31, 2146691)
|
||||
local warnImplosion = mod:NewSpellAnnounce(2146691, 3) -- Spell_Damage 2146691
|
||||
|
||||
local warnSpecYouConflag = mod:NewSpecialWarningYou(2146673)
|
||||
local warnTargetConflag = mod:NewTargetAnnounce(2146673, 3)
|
||||
local timerTargetConflag = mod:NewTargetTimer(2.85, 2146673)
|
||||
|
||||
-- make warnings and timers for these, and make the trigger in their respective functions
|
||||
-- Change all args.spellID into args:IsSpellID() with comma separated for the spellIDs
|
||||
|
||||
local berserkTimer = mod:NewBerserkTimer(900)
|
||||
local warnPhaseSoon = mod:NewAnnounce("WarnPhaseSoon", 2, nil)
|
||||
local warnPhase = mod:NewAnnounce("WarnPhase", 2, nil)
|
||||
|
||||
-- overall KJ
|
||||
-- KJ timers
|
||||
local timerEmerge = mod:NewTimer(18,"Kil'Jaeden is emerging", nil)
|
||||
|
||||
local timerTargetLegionLightning = mod:NewTargetTimer(2.85, 2146510) -- 2146510, 2146511 Spell_cast_start
|
||||
local warnTargetLegionLightning = mod:NewTargetAnnounce(2146510, 2) -- 2146510, 2146511 Spell_cast_start
|
||||
local warnSpecYouLegionLightning = mod:NewSpecialWarningYou(2146510) -- 2146510, 2146511 Spell_cast_start
|
||||
|
||||
local timerNextFireBloom = mod:NewNextTimer(30, 2146523) -- 2146523, 2146524, 2146525, 2146526 Spell_cast_start
|
||||
local timerCastFireBloom = mod:NewCastTimer(1.4, 2146523)
|
||||
local timerTargetFireBloom = mod:NewTargetTimer(15, 2146524) -- 2146523, 2146524, 2146525, 2146526 Spell_cast_start
|
||||
local specwarnFireBloom = mod:NewSpecialWarningYou(2146524)
|
||||
local warnFireBloomTargets = mod:NewTargetAnnounce(2146524, 2)
|
||||
local yellFireBloom = mod:NewFadesYell(2146524)
|
||||
|
||||
local warnReflections = mod:NewSpellAnnounce(2146538, 3) -- 2146522 Spell_cast_start
|
||||
local timerNextReflections = mod:NewNextTimer(60, 2146538) -- 2146522 Spell_cast_start
|
||||
|
||||
local timerNextWorldBreaker = mod:NewNextTimer(30, 2146515) -- 2146519, 2146520 Spell_cast_start
|
||||
local warnWorldBreaker = mod:NewSpellAnnounce(2146515, 1) -- 2146519, 2146520 Spell_cast_start
|
||||
local timerWorldBreaker = mod:NewTimer(1.4, "TimerWorldBreaker", 2146515)
|
||||
|
||||
-- Events
|
||||
local timerNextMiniEvent = mod:NewTimer(60, "Next random Mini-Event", nil)
|
||||
|
||||
local warnDarkness = mod:NewSpellAnnounce(2146540, 3) -- 2146540, 2146541, 2146542 Spell_cast_start
|
||||
local timerNextDarkness = mod:NewNextTimer(55, 2146540) -- 2146540, 2146541, 2146542 Spell_cast_start
|
||||
local timerCastDarkness = mod:NewCastTimer(9, 2146540)
|
||||
|
||||
local timerDragonOrb = mod:NewTimer(60, "Dragon Orb active in", nil)
|
||||
local warnDragonOrb = mod:NewAnnounce("Dragon Orb activated!", 3, nil)
|
||||
|
||||
-- Phase 2
|
||||
local timerCastAllConsuming = mod:NewCastTimer(2, 2146521) -- 2146521 Spell_cast_start
|
||||
local timerDurAllConsuming = mod:NewTimer(85, "The All Consuming Darkness duration", 2146521)
|
||||
local specWarnConsumingDarkness = mod:NewSpecialWarningMove(2146554, 2)
|
||||
|
||||
local timerCastAnnihilate = mod:NewCastTimer(4, 2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
||||
local warnAnnihilate = mod:NewSpellAnnounce(2146555, 2) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
||||
local timerChannelAnnihilate = mod:NewTimer(50, "Annihilate duration",2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
||||
local timerNextAnnihilate = mod:NewNextTimer(96, 2146555) -- 2146555, 2146556, 2146557, 2146560 Spell_cast_start
|
||||
|
||||
-- phase 3
|
||||
local warnObliterate = mod:NewSpellAnnounce(2146575, 3) -- 2146575, 2146576, 2146578 Spell_cast_start
|
||||
local timerCastObliterate = mod:NewCastTimer(4, 2146575) -- 2146575, 2146576, 2146578 Spell_cast_start
|
||||
local timerObliterateEvent = mod:NewTimer(54, "Obliterate Event duration", 2146575)
|
||||
local warnObliterateCount = mod:NewAnnounce("%s Obliterate remaining", 2146575)
|
||||
|
||||
-- phase 4
|
||||
local warnArmageddon = mod:NewSpellAnnounce(2146581, 3)
|
||||
local timerCastArmageddon = mod:NewCastTimer(2, 2146581)
|
||||
local timerChannelArmageddon = mod:NewTimer(50, "Armageddon duration", 2146581)
|
||||
local timerCastFirestorm = mod:NewCastTimer(4, 2146585)
|
||||
|
||||
-- Everything else
|
||||
local fireBloomTargets = {}
|
||||
local fireBloomIcon = 6
|
||||
local obliterateCount
|
||||
local worldbreaker
|
||||
local longObliterateDone = false
|
||||
|
||||
self.vb.phase = 1
|
||||
|
||||
-- Need to add: timerTargetBlueFight (Dragon form, 1 minute, 2146650) [not in combatlog]
|
||||
-- seperate triggers for Main Event and Mini Event? [yes]
|
||||
-- Correct timers after transition [p2 and p3 timers working] -- fix p4 and p5 [yes]
|
||||
-- some kind of self.vb.phase == 6 for next Darkness cast (after mini-events or after last orb)
|
||||
-- Orb timer into each phase [yes]
|
||||
-- add special warning if you walk into the All Consuming Darkness [yes]
|
||||
|
||||
local function WarnFireBloomTargets()
|
||||
warnFireBloomTargets:Show(table.concat(fireBloomTargets, "<, >"))
|
||||
table.wipe(fireBloomTargets)
|
||||
end
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
self.vb.phase = 1
|
||||
timerNextSoulbomb:Start(5-delay)
|
||||
timerNextSoulRend:Start(20-delay)
|
||||
obliterateCount = 0
|
||||
worldbreaker = 0
|
||||
longObliterateDone = false
|
||||
end
|
||||
|
||||
local function CancelTimers()
|
||||
timerNextWorldBreaker:Cancel()
|
||||
timerNextFireBloom:Cancel()
|
||||
timerNextReflections:Cancel()
|
||||
timerNextDarkness:Cancel()
|
||||
timerNextMiniEvent:Cancel()
|
||||
end
|
||||
|
||||
function mod:LegionLightningTarget()
|
||||
local target = nil
|
||||
target = mod:GetBossTarget(25315)
|
||||
if target == UnitName("player") then
|
||||
warnSpecYouLegionLightning:Show()
|
||||
else
|
||||
warnTargetLegionLightning:Show(target)
|
||||
end
|
||||
timerTargetLegionLightning:Start(target)
|
||||
self:SetIcon(target, 8, 3)
|
||||
end
|
||||
|
||||
function mod:ConflagTarget()
|
||||
local conflagTarget = nil
|
||||
conflagTarget = mod:GetBossTarget(25696)
|
||||
if conflagTarget == UnitName("player") then
|
||||
warnSpecYouConflag:Show()
|
||||
else
|
||||
warnTargetConflag:Show(conflagTarget)
|
||||
end
|
||||
timerTargetConflag:Start(conflagTarget)
|
||||
self:SetIcon(conflagTarget, 8, 3)
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if self.vb.phase == 1 then
|
||||
if args:IsSpellID(2146680) then
|
||||
warnSoulrend:Show()
|
||||
timerNextSoulRend:Start()
|
||||
timerCastSoulRend:Start()
|
||||
elseif args:IsSpellID(2146684) then
|
||||
-- warnRagingBlow:Show()
|
||||
timerNextRagingBlow:Start()
|
||||
elseif args:IsSpellID(2146673) then
|
||||
self:ScheduleMethod(0.15,"ConflagTarget");
|
||||
elseif args:IsSpellID(2146676) then
|
||||
warnSummonWildImps:Show()
|
||||
timerNextSummonWildImps:Start()
|
||||
timerCastImplosion:Start()
|
||||
warnImplosion:Schedule(27)
|
||||
end
|
||||
elseif self.vb.phase >= 2 and args.sourceName == "Kil'jaeden" then
|
||||
if args:IsSpellID(2146509) then
|
||||
self:ScheduleMethod(0.15,"LegionLightningTarget");
|
||||
elseif args:IsSpellID(2146515, 2146516) and args.sourceName =="Kil'jaeden" then
|
||||
if worldbreaker == 0 then
|
||||
timerWorldBreaker:Start("Knockup")
|
||||
timerNextWorldBreaker:Start()
|
||||
worldbreaker = 1
|
||||
else
|
||||
timerWorldBreaker:Start("Knockback")
|
||||
worldbreaker = 0
|
||||
end
|
||||
warnWorldBreaker:Show()
|
||||
elseif args:IsSpellID(2146538) then
|
||||
warnReflections:Show()
|
||||
if self.vb.phase == 2 then
|
||||
timerNextReflections:Start(60)
|
||||
elseif self.vb.phase == 6 and DBM:AntiSPam(15, 1) then
|
||||
timerNextMiniEvent:Start()
|
||||
timerNextDarkness:Start(20)
|
||||
else
|
||||
timerNextMiniEvent:Start()
|
||||
end
|
||||
elseif args:IsSpellID(2146523) then
|
||||
timerNextFireBloom:Start()
|
||||
timerCastFireBloom:Start()
|
||||
elseif args:IsSpellID(2146555) then
|
||||
timerChannelAnnihilate:Schedule(4)
|
||||
timerNextDarkness:Schedule(45, 20)
|
||||
timerNextFireBloom:Schedule(50, 28)
|
||||
timerNextWorldBreaker:Schedule(50, 35)
|
||||
timerNextMiniEvent:Schedule(50,48)
|
||||
timerDragonOrb:Start(59)
|
||||
elseif args:IsSpellID(2146560) then
|
||||
timerCastAnnihilate:Start()
|
||||
warnAnnihilate:Show()
|
||||
timerChannelAnnihilate:Schedule(4, 11)
|
||||
timerNextMiniEvent:Start(60)
|
||||
if self.vb.phase == 6 and DBM:AntiSPam(15, 2) then
|
||||
timerNextDarkness:Start(20)
|
||||
end
|
||||
elseif args:IsSpellID(2146521) then
|
||||
timerCastAllConsuming:Start()
|
||||
elseif args:IsSpellID(2146540) then
|
||||
warnDarkness:Show()
|
||||
timerCastDarkness:Start()
|
||||
elseif args:IsSpellID(2146575) then
|
||||
warnObliterate:Show()
|
||||
timerCastObliterate:Start()
|
||||
longObliterateDone = false
|
||||
elseif args:IsSpellID(2146576) then
|
||||
timerCastObliterate:Start()
|
||||
if not longObliterateDone and obliterateCount < 9 then
|
||||
warnObliterateCount:Show(10 - obliterateCount)
|
||||
obliterateCount = obliterateCount + 1
|
||||
elseif not longObliterateDone and obliterateCount == 9 then
|
||||
warnObliterateCount:Show(1)
|
||||
obliterateCount = 0
|
||||
longObliterateDone = true
|
||||
elseif longObliterateDone and obliterateCount < 3 then
|
||||
warnObliterateCount:Show(3 - obliterateCount)
|
||||
obliterateCount = obliterateCount + 1
|
||||
elseif longObliterateDone and obliterateCount == 2 then
|
||||
warnObliterateCount:Show(1)
|
||||
obliterateCount = 0
|
||||
end
|
||||
if self.vb.phase == 6 and DBM:AntiSpam(15, 3) then
|
||||
timerNextDarkness:Start(20)
|
||||
end
|
||||
elseif args:IsSpellID(2146581) then
|
||||
warnArmageddon:Show()
|
||||
timerCastArmageddon:Start()
|
||||
timerChannelArmageddon:Schedule(2)
|
||||
timerNextDarkness:Schedule(45,15)
|
||||
timerNextFireBloom:Schedule(50,15)
|
||||
timerNextWorldBreaker:Schedule(50,20)
|
||||
elseif args:IsSpellID(2146590) then
|
||||
warnArmageddon:Show()
|
||||
timerCastArmageddon:Start()
|
||||
timerChannelArmageddon:Schedule(2, 10)
|
||||
timerNextMiniEvent:Start()
|
||||
if self.vb.phase == 6 and DBM:AntiSpam(15, 4) then
|
||||
timerNextDarkness:Start(20)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_INTERRUPT(args)
|
||||
if (args.extraSpellId == 2146673 or args.spellId == 2146673) and args.destName == "Archonisus" then
|
||||
-- warnSpecYouConflag:Hide()
|
||||
-- warnTargetConflag:Hide()
|
||||
timerTargetConflag:Cancel()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_AURA_APPLIED(args)
|
||||
if self.vb.phase == 1 then
|
||||
if args:IsSpellID(2146688) then
|
||||
warnFelRage:Show(args.destName)
|
||||
timerFelRage:Start(args.destName)
|
||||
elseif args:IsSpellID(2146681) then
|
||||
if args:IsPlayer() then
|
||||
YellSoulbomb:Countdown(10, 3)
|
||||
end
|
||||
warnSoulbomb:Show(args.destName)
|
||||
timerNextSoulbomb:Start()
|
||||
timerTargetSoulbomb:Start(args.destName)
|
||||
end
|
||||
else
|
||||
if args:IsSpellID(2146524) and args.sourceName == "Kil'jaeden" then
|
||||
fireBloomTargets[#fireBloomTargets + 1] = args.destName
|
||||
if args:IsPlayer() then
|
||||
specwarnFireBloom:Show()
|
||||
yellFireBloom:Countdown(15,3)
|
||||
end
|
||||
timerTargetFireBloom:Start(args.destName)
|
||||
self:SetIcon(args.destName, fireBloomIcon, 60)
|
||||
fireBloomIcon = fireBloomIcon - 1
|
||||
self:Unschedule(WarnFireBloomTargets)
|
||||
self:Schedule(0.2, WarnFireBloomTargets)
|
||||
elseif args:IsSpellID(2146554) and args:IsPlayer() and DBM:AntiSpam(5, 5) then
|
||||
specWarnConsumingDarkness:Show()
|
||||
end
|
||||
end
|
||||
end
|
||||
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||||
|
||||
function mod:SPELL_AURA_REMOVED(args)
|
||||
if args:IsSpellID() and args.sourceName == "Kil'jaeden" then
|
||||
self:SetIcon(args.destName, 0)
|
||||
fireBloomIcon = fireBloomIcon + 1
|
||||
end
|
||||
end
|
||||
|
||||
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
||||
if msg == L.Phase2KJ or msg:find(L.Phase2KJ) then
|
||||
self.vb.phase = 2
|
||||
warnPhase:Show(2)
|
||||
berserkTimer:Start()
|
||||
timerEmerge:Start()
|
||||
timerNextFireBloom:Start(28)
|
||||
timerNextWorldBreaker:Start(33)
|
||||
timerNextReflections:Start(43)
|
||||
elseif msg == L.Phase3KJ or msg:find(L.Phase3KJ) then
|
||||
self.vb.phase = 3
|
||||
warnPhase:Show(3)
|
||||
self:Schedule(0, CancelTimers)
|
||||
timerCastAllConsuming:Start()
|
||||
timerNextAnnihilate:Start(28)
|
||||
timerDurAllConsuming:Schedule(3)
|
||||
elseif msg == L.Phase4KJ or msg:find(L.Phase4KJ) then
|
||||
self.vb.phase = 4
|
||||
warnPhase:Show(4)
|
||||
self:Schedule(0, CancelTimers)
|
||||
timerObliterateEvent:Start(45)
|
||||
timerNextDarkness:Schedule(45,10)
|
||||
timerNextFireBloom:Schedule(45, 24)
|
||||
timerNextWorldBreaker:Schedule(45, 29)
|
||||
timerNextMiniEvent:Schedule(45, 43)
|
||||
timerDragonOrb:Start(51)
|
||||
elseif msg == L.Phase5KJ or msg:find(L.Phase5KJ) then
|
||||
self.vb.phase = 5
|
||||
warnPhase:Show(5)
|
||||
self:Schedule(0, CancelTimers)
|
||||
timerNextDarkness:Schedule(45,19)
|
||||
timerCastFirestorm:Schedule(54, 24)
|
||||
timerNextWorldBreaker:Schedule(54, 29)
|
||||
timerNextMiniEvent:Schedule(54,44)
|
||||
timerDragonOrb:Start(59)
|
||||
elseif msg == L.Phase6KJ or msg:find(L.Phase6KJ) then
|
||||
self.vb.phase = 6
|
||||
warnPhase:Show(6)
|
||||
self:Schedule(0, CancelTimers)
|
||||
timerDragonOrb:Start(20)
|
||||
timerNextDarkness:Start(25)
|
||||
timerNextFireBloom:Start(39)
|
||||
timerNextWorldBreaker:Start(44)
|
||||
timerNextMiniEvent:Start(59)
|
||||
elseif msg == L.OrbYell1 or msg:find(L.OrbYell1) or
|
||||
msg == L.OrbYell2 or msg:find(L.OrbYell2) or
|
||||
msg == L.OrbYell3 or msg:find(L.OrbYell3) or
|
||||
msg == L.OrbYell4 or msg:find(L.OrbYell4) then
|
||||
warnDragonOrb:Show()
|
||||
end
|
||||
end
|
||||
mod.CHAT_MSG_MONSTER_SAY = mod.CHAT_MSG_MONSTER_YELL
|
||||
|
||||
function mod:UNIT_HEALTH(unit)
|
||||
if self:GetUnitCreatureId(unit) == 25315 then
|
||||
local health = DBM_UnitHealthPercent(unit)
|
||||
if health <= 84 and self.vb.phase == 2 and DBM:AntiSpam(35, 6) then
|
||||
warnPhaseSoon:Show(3)
|
||||
elseif health <= 64 and self.vb.phase == 3 and DBM:AntiSpam(35, 6) then
|
||||
warnPhaseSoon:Show(4)
|
||||
elseif health <= 44 and self.vb.phase == 4 and DBM:AntiSpam(35, 6) then
|
||||
warnPhaseSoon:Show(5)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:UNIT_DIED(args)
|
||||
local cid = self:GetCIDFromGUID(args.destGUID)
|
||||
if cid == 25588 then --
|
||||
timerNextSoulbomb:Stop()
|
||||
timerNextSoulRend:Stop()
|
||||
elseif cid == 25657 then -- Agamath
|
||||
timerNextRagingBlow:Stop()
|
||||
timerFelRage:Stop()
|
||||
elseif cid == 25696 then -- Archonisus
|
||||
timerNextSummonWildImps:Stop()
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,165 @@
|
||||
local mod = DBM:NewMod("Muru", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25741)--25741 Muru, 25840 Entropius
|
||||
|
||||
mod:RegisterCombat("combat")
|
||||
|
||||
mod:RegisterEvents(
|
||||
"SPELL_AURA_APPLIED",
|
||||
"SPELL_CAST_START",
|
||||
"UNIT_DIED",
|
||||
"UNIT_HEALTH"
|
||||
)
|
||||
|
||||
|
||||
local warnVoidSpike = mod:NewSpellAnnounce(2146314, 2)
|
||||
local warnDarkness = mod:NewSpecialWarningYou(2146301, 4)
|
||||
local timerDarkness = mod:NewNextTimer(0, 2146301)
|
||||
--local warnVoidRift = mod:NewAnnounce("WarnVoidRift", 4, 2146310)
|
||||
--local timerVoidRift = mod:NewNextTimer(60, 2146310)
|
||||
local warnVoidSentinel = mod:NewSpellAnnounce(2146312, 2)
|
||||
local timerVoidSentinel = mod:NewNextTimer(60, 2146312)
|
||||
local SpecWarnVoidSpawn = mod:NewSpellAnnounce(2146330, 2)--("WarnVoidSpawn", 4, 2146330)
|
||||
local warnDarkFiend = mod:NewSpellAnnounce(2146320, 2)--("WarnFiend", 2, 2146320)
|
||||
local timerDarkFiend = mod:NewNextTimer(60, 2146320)
|
||||
local warnVoidCutter = mod:NewSpellAnnounce(2146303, 2)--("WarnVoidCutter", 2, 2146303)
|
||||
local timerVoidCutterSpawn = mod:NewNextTimer(64, 2146303)
|
||||
--local timerVoidCutterActive = mod:NewNextTimer(64, 2146303)
|
||||
local timerVCutterDuration = mod:NewTimer(30, "Void Cutter duration", 2146303)
|
||||
|
||||
local warnPhase2 = mod:NewPhaseAnnounce(2)
|
||||
local warnBlackHole = mod:NewSpellAnnounce(2146370, 3)
|
||||
local timerBlackHole = mod:NewNextTimer(30, 2146370)
|
||||
|
||||
local berserkTimer = mod:NewBerserkTimer(600)
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
self.vb.phase = 1
|
||||
timerVoidSentinel:Start(10-delay)
|
||||
timerVoidCutterSpawn:Start(20-delay)
|
||||
timerVCutterDuration:Schedule(23-delay)
|
||||
timerDarkFiend:Start(30-delay)
|
||||
berserkTimer:Start(-delay)
|
||||
end
|
||||
|
||||
function mod:SPELL_AURA_APPLIED(args)
|
||||
if args:IsSpellID(2146314) then
|
||||
if args:IsPlayer() then
|
||||
warnDarkness:Show()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args:IsSpellID(2146322) and DBM:AntiSpam() then
|
||||
warnDarkFiend:Show()
|
||||
timerDarkFiend:Start(60)
|
||||
|
||||
timerVoidCutterSpawn:Start(55)
|
||||
timerVCutterDuration:Schedule(58)
|
||||
warnVoidCutter:Schedule(55)
|
||||
|
||||
if self.vb.phase == 1 then
|
||||
warnVoidSentinel:Schedule(40)
|
||||
timerVoidSentinel:Start(40)
|
||||
end
|
||||
elseif args:IsSpellID(2146314) then
|
||||
warnVoidSpike:Show()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:UNIT_HEALTH(unit)
|
||||
if mod:GetUnitCreatureId(unit) == 25741 and self.vb.phase == 1 then
|
||||
local hp = (math.max(0,UnitHealth(unit)) / math.max(1, UnitHealthMax(unit))) * 100
|
||||
if hp <= 50 then
|
||||
self.vb.phase = 2
|
||||
warnPhase2:Show()
|
||||
timerDarkFiend:Cancel()
|
||||
timerVoidCutterSpawn:Cancel()
|
||||
timerVoidSentinel:Cancel()
|
||||
timerBlackHole:Start(25)
|
||||
timerDarkFiend:Start(15)
|
||||
timerVoidCutterSpawn:Start(20)
|
||||
timerVCutterDuration:Schedule(23)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
Timers
|
||||
Portals + Sentinal 10 seconds after pull, then every 60 seconds while in Phase 1
|
||||
Void Cutter 20 seconds after pull, then 55 seconds, then every 60 seconds. Spawns, becomes active after 5 seconds, then is active for 30 seconds. Visible for 35 seconds total.
|
||||
Darkness + Dark Fiends 30 seconds after pull, then every 60 seconds
|
||||
Black Hole 23 seconds after Entropius spawns, then every 20 seconds
|
||||
|
||||
Note
|
||||
Timers for Portals stop when Muru hits 50%
|
||||
Timers for Void Cutters and Dark Fiends are not affected by phase transition
|
||||
When timers would happen at the same time, one is pushed to be earlier by 1 second. Appears that Cutter is the main spell that gets pushed.
|
||||
]]--
|
||||
|
||||
--[[
|
||||
local function phase2()
|
||||
warnPhase2:Show()
|
||||
warned_phase2 = true
|
||||
mod:UnscheduleMethod("HumanSpawn")
|
||||
mod:UnscheduleMethod("VoidSpawn")
|
||||
timerBlackHoleCD:Start(15)
|
||||
if mod.Options.HealthFrame then
|
||||
DBM.BossHealth:Clear()
|
||||
DBM.BossHealth:AddBoss(25840, L.Entropius)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:VoidSpawn()
|
||||
warnVoid:Show(voidCount)
|
||||
voidCount = voidCount + 1
|
||||
timerVoid:Start(nil, voidCount)
|
||||
specWarnVW:Schedule(25)
|
||||
self:ScheduleMethod(30, "VoidSpawn")
|
||||
end
|
||||
|
||||
function mod:OnCombatStart(delay)
|
||||
self.vb.phase = 1
|
||||
voidCount = 1
|
||||
warned_phase2 = false
|
||||
timerHuman:Start(10-delay, humanCount)
|
||||
timerVoid:Start(36.5-delay, voidCount)
|
||||
specWarnVW:Schedule(31.5)
|
||||
timerNextDarkness:Start(47-delay)
|
||||
specWarnDarknessSoon:Schedule(42)
|
||||
self:ScheduleMethod(10, "HumanSpawn")
|
||||
self:ScheduleMethod(36.5, "VoidSpawn")
|
||||
berserkTimer:Start(-delay)
|
||||
end
|
||||
|
||||
function mod:SPELL_SUMMON(args)
|
||||
if args.spellId == 46268 then
|
||||
warnFiend:Show()
|
||||
elseif args.spellId == 46282 and DBM:AntiSpam(2, 1) then
|
||||
warnBlackHole:Show()
|
||||
specWarnBH:Show()
|
||||
timerBlackHoleCD:Start()
|
||||
timerSingularity:Start()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:UNIT_DIED(args)
|
||||
if self:GetCIDFromGUID(args.destGUID) == 25840 then
|
||||
DBM:EndCombat(self)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:UNIT_HEALTH(uId)
|
||||
if not warned_phase2 and self:GetUnitCreatureId(uId) == 25840 and UnitHealth(uId) / UnitHealthMax(uId) > 0.9 and self.vb.phase == 1 then
|
||||
warned_phase2 = true
|
||||
timerNextDarkness:Cancel()
|
||||
timerHuman:Cancel()
|
||||
timerVoid:Cancel()
|
||||
specWarnDarknessSoon:Cancel()
|
||||
phase2()
|
||||
end
|
||||
end
|
||||
]]--
|
||||
@@ -0,0 +1,2 @@
|
||||
DBM:RegisterMapSize("SunwellPlateau", 0, 995.6, 664.2)
|
||||
DBM:RegisterMapSize("SunwellPlateau", 1, 465.0, 310.0)
|
||||
@@ -0,0 +1,72 @@
|
||||
local mod = DBM:NewMod("Trash", "DBM-Sunwell")
|
||||
local L = mod:GetLocalizedStrings()
|
||||
|
||||
mod:SetRevision(("$Revision: 5021 $"):sub(12, -3))
|
||||
mod:SetCreatureID(25507)
|
||||
mod:RegisterCombat("combat", 25507)
|
||||
|
||||
mod:RegisterEventsInCombat(
|
||||
"SPELL_CAST_START"
|
||||
)
|
||||
|
||||
-- Fel Chain Lightning (2145224)
|
||||
-- Chain Lightning (2145227)
|
||||
-- Electro-Magnetic Pulse (2145228)
|
||||
|
||||
local castChainLightning = mod:NewCastTimer(4, 2145227)
|
||||
local warnChainLightning = mod:NewTargetAnnounce(4, 2145227)
|
||||
local specWarnChainLightning = mod:NewSpecialWarningYou(2145227)
|
||||
local timerChainLightning = mod:NewCDTimer(10, 2145227)
|
||||
|
||||
local castFelLightning = mod:NewCastTimer(4, 2145224)
|
||||
local warnFelLightning = mod:NewTargetAnnounce(4, 2145224)
|
||||
local specWarnFelLightning = mod:NewSpecialWarningYou(2145224)
|
||||
local timerFelLightning = mod:NewCDTimer(10, 2145224)
|
||||
|
||||
local castEMP = mod:NewCastTimer(6, 2145228)
|
||||
local warnEMP = mod:NewSpellAnnounce(2145228)
|
||||
local timerEMP = mod:NewNextTimer(45, 2145228)
|
||||
|
||||
function mod:ChainLightning()
|
||||
local targetCL = mod:GetBossTarget(25507)
|
||||
if targetCL == UnitName("player") then
|
||||
specWarnChainLightning:Show()
|
||||
SendChatMessage("Chain Lightning on "..UnitName("PLAYER").."!", "Say")
|
||||
else
|
||||
warnChainLightning:Show(targetCL)
|
||||
end
|
||||
castChainLightning:Start()
|
||||
self:SetIcon(targetCL, 6, 4)
|
||||
end
|
||||
|
||||
function mod:FelLightning()
|
||||
local targetFL = mod:GetBossTarget(25507)
|
||||
if targetFL == UnitName("player") then
|
||||
specWarnFelLightning:Show()
|
||||
SendChatMessage("Chain Lightning on "..UnitName("PLAYER").."!", "Say")
|
||||
else
|
||||
warnFelLightning:Show(targetFL)
|
||||
end
|
||||
castFelLightning:Start()
|
||||
self:SetIcon(targetFL, 6, 4)
|
||||
end
|
||||
|
||||
function mod:SPELL_CAST_START(args)
|
||||
if args:IsSpellID(2145224) and args.sourceName == "Sunwell Protector" then
|
||||
self:ScheduleMethod(0.2, "FelLightning")
|
||||
timerFelLightning:Start()
|
||||
elseif args:IsSpellID(2145227) and args.sourceName == "Sunwell Protector" then
|
||||
self:ScheduleMethod(0.2, "ChainLightning")
|
||||
timerChainLightning:Start()
|
||||
elseif args:IsSpellID(2145228) and args.sourceName == "Sunwell Protector" then
|
||||
castEMP:Start()
|
||||
warnEMP:Show()
|
||||
timerEMP:Start()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:onCombatEnd()
|
||||
timerEMP:Cancel()
|
||||
timerChainLightning:Cancel()
|
||||
timerFelLightning:Cancel()
|
||||
end
|
||||
@@ -0,0 +1,244 @@
|
||||
local L
|
||||
|
||||
---------------
|
||||
-- Kalecgos --
|
||||
---------------
|
||||
L = DBM:GetModLocalization("Kalecgos")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Kalecgos"
|
||||
}
|
||||
|
||||
L:SetWarningLocalization{
|
||||
WarnPortal = "Portal #%d : >%s< (Group %d)",
|
||||
SpecWarnWildMagic = "Wild Magic - %s!"
|
||||
}
|
||||
|
||||
L:SetOptionLocalization{
|
||||
WarnPortal = "Show warning for $spell:46021 target",
|
||||
SpecWarnWildMagic = "Show special warning for Wild Magic",
|
||||
ShowFrame = "Show Spectral Realm frame" ,
|
||||
FrameClassColor = "Use class colors in Spectral Realm frame",
|
||||
FrameUpwards = "Expand Spectral Realm frame upwards",
|
||||
FrameLocked = "Set Spectral Realm frame not movable",
|
||||
RangeFrame = "Show range check frame"
|
||||
}
|
||||
|
||||
L:SetMiscLocalization{
|
||||
Demon = "Sathrovarr the Corruptor",
|
||||
Heal = "Healing + 100%",
|
||||
Haste = "Spell Haste + 100%",
|
||||
Hit = "Melee Hit - 50%",
|
||||
Crit = "Crit Damage + 100%",
|
||||
Aggro = "AGGRO + 100%",
|
||||
Mana = "Cost Reduce 50%",
|
||||
FrameTitle = "Spectral Realm",
|
||||
FrameLock = "Frame Lock",
|
||||
FrameClassColor = "Use Class Colors",
|
||||
FrameOrientation = "Expand upwards",
|
||||
FrameHide = "Hide Frame",
|
||||
FrameClose = "Close"
|
||||
}
|
||||
|
||||
----------------
|
||||
-- Brutallus --
|
||||
----------------
|
||||
L = DBM:GetModLocalization("Brutallus")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Brutallus"
|
||||
}
|
||||
L:SetOptionLocalization{
|
||||
-- felFireYellOpt = "Yell when you are affected by $spell:2145719"
|
||||
}
|
||||
L:SetMiscLocalization{
|
||||
BrutPull = "Ah, more lambs to the slaughter!",
|
||||
-- felFireYellYell = "$spell:2145719 on "..UnitName("PLAYER").."!"
|
||||
}
|
||||
|
||||
--------------
|
||||
-- Felmyst --
|
||||
--------------
|
||||
L = DBM:GetModLocalization("Felmyst")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Felmyst"
|
||||
}
|
||||
|
||||
L:SetWarningLocalization{
|
||||
WarnPhase = "%s Phase"
|
||||
}
|
||||
|
||||
L:SetTimerLocalization{
|
||||
TimerPhase = "Next %s Phase"
|
||||
}
|
||||
|
||||
L:SetOptionLocalization{
|
||||
WarnPhase = "Show warning for next phase",
|
||||
TimerPhase = "Show time for next phase",
|
||||
VaporIcon = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(45392),
|
||||
EncapsIcon = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(45665)
|
||||
}
|
||||
|
||||
L:SetMiscLocalization{
|
||||
Air = "Air",
|
||||
Ground = "Ground",
|
||||
AirPhase = "I am stronger than ever before!",
|
||||
Breath = "%s takes a deep breath."
|
||||
}
|
||||
|
||||
--------------
|
||||
-- High Commander Arynyes --
|
||||
--------------
|
||||
L = DBM:GetModLocalization("Arynyes")
|
||||
|
||||
L:SetGeneralLocalization({
|
||||
name = "High Commander Arynyes"
|
||||
})
|
||||
|
||||
L:SetWarningLocalization({
|
||||
|
||||
})
|
||||
|
||||
L:SetTimerLocalization({
|
||||
|
||||
})
|
||||
|
||||
L:SetOptionLocalization({
|
||||
|
||||
})
|
||||
|
||||
L:SetMiscLocalization({
|
||||
GauntletPull = "Man the cannons, summoners; bring forth the imps!",
|
||||
ArynPull = "I will not fail!"
|
||||
})
|
||||
|
||||
-----------------------
|
||||
-- The Eredar Twins --
|
||||
-----------------------
|
||||
L = DBM:GetModLocalization("Twins")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Eredar Twins"
|
||||
}
|
||||
|
||||
L:SetWarningLocalization{
|
||||
WarnLunarStacks = "%s stacks: (%d)",--(args.spellName, args.destName, args.amount or 1)
|
||||
WarnSolarStacks = "%s stacks: (%d)"
|
||||
}
|
||||
|
||||
L:SetTimerLocalization{
|
||||
}
|
||||
|
||||
L:SetOptionLocalization{
|
||||
NovaIcon = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(45329),
|
||||
ConflagIcon = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(45333),
|
||||
RangeFrame = "Show range check frame"
|
||||
}
|
||||
|
||||
L:SetMiscLocalization({
|
||||
Nova = "directs Shadow Nova at (.+)%.",
|
||||
Conflag = "directs Conflagration at (.+)%.",
|
||||
Sacrolash = "Lady Sacrolash",
|
||||
Alythess = "Grand Warlock Alythess",
|
||||
Sacrolythess = "Sacro'lythess",
|
||||
TwinsPull = "Your luck has run its course!",
|
||||
SacroAbsorb = "Alythess! Your fire burns within me!",
|
||||
AlythAbsorb = "Sacrolash!",
|
||||
AlythPhase = "Fires consume.",
|
||||
SacroPhase = "Shadows engulf.",
|
||||
SacroCombo = "Fire to the aid of shadow!",
|
||||
AlythCombo = "Shadow to the aid of fire!",
|
||||
TwinsMerge = "Edir harach!"
|
||||
})
|
||||
|
||||
------------
|
||||
-- M'uru --
|
||||
------------
|
||||
L = DBM:GetModLocalization("Muru")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "M'uru"
|
||||
}
|
||||
|
||||
L:SetWarningLocalization{
|
||||
WarnHuman = "Humanoids (%d)",
|
||||
WarnVoid = "Void Sentinel (%d)",
|
||||
WarnFiend = "Dark Fiend spawned"
|
||||
}
|
||||
|
||||
L:SetTimerLocalization{
|
||||
TimerHuman = "Next Humanoids (%s)",
|
||||
TimerVoid = "Next Void (%s)",
|
||||
TimerPhase = "Entropius"
|
||||
}
|
||||
|
||||
L:SetOptionLocalization{
|
||||
WarnHuman = "Show warning for Humanoids",
|
||||
WarnVoid = "Show warning for Void Sentinels",
|
||||
WarnFiend = "Show warning for Fiends in phase 2",
|
||||
TimerHuman = "Show timer for Humanoids",
|
||||
TimerVoid = "Show timer for Void Sentinels",
|
||||
TimerPhase = "Show time for Phase 2 transition"
|
||||
}
|
||||
|
||||
L:SetMiscLocalization{
|
||||
Entropius = "Entropius"
|
||||
}
|
||||
|
||||
----------------
|
||||
-- Kil'jeden --
|
||||
----------------
|
||||
L = DBM:GetModLocalization("Kil")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Kil'jaeden"
|
||||
}
|
||||
|
||||
L:SetWarningLocalization{
|
||||
-- WarnPhaseSoon = "Next Phase at %s percent health",
|
||||
WarnDarkOrb = "Dark Orbs Spawned",
|
||||
WarnBlueOrb = "Dragon Orb activated",
|
||||
SpecWarnDarkOrb = "Dark Orbs Spawned!",
|
||||
SpecWarnBlueOrb = "Dragon Orbs Activated!",
|
||||
WarnPhaseSoon = "Phase %s soon",
|
||||
WarnPhase = "Phase %s"
|
||||
}
|
||||
|
||||
L:SetTimerLocalization{
|
||||
TimerBlueOrb = "Dragon Orbs activate",
|
||||
TimerWorldBreaker = "World Breaker: %s"
|
||||
}
|
||||
|
||||
L:SetOptionLocalization{
|
||||
WarnDarkOrb = "Show warning for Dark Orbs",
|
||||
WarnBlueOrb = "Show warning for Dragon Orbs",
|
||||
SpecWarnDarkOrb = "Show special warning for Dark Orbs",
|
||||
SpecWarnBlueOrb = "Show special warning for Dragon Orbs",
|
||||
TimerBlueOrb = "Show timer for Dragon Orbs activate"
|
||||
}
|
||||
|
||||
L:SetMiscLocalization{
|
||||
Phase2KJ = "The expendable have perished. So be it! Now I shall succeed where Sargeras could not! I will bleed this wretched world and secure my place as the true master of the Burning Legion! The end has come! Let the unravelling of this world commence!",
|
||||
Phase3KJ = "Another step toward destruction!",
|
||||
Phase4KJ = "I will not be denied! This world shall fall!",
|
||||
Phase5KJ = "Do not harbor false hope! You cannot win!",
|
||||
Phase6KJ = "Kalec... Kalec?",
|
||||
OrbYell1 = "I will channel my powers into the orbs! Be ready!",
|
||||
OrbYell2 = "I have empowered another orb! Use it quickly!",
|
||||
OrbYell3 = "Another orb is ready! Make haste!",
|
||||
OrbYell4 = "I have channeled all I can! The power is in your hands!"
|
||||
}
|
||||
|
||||
----------------
|
||||
-- Trash --
|
||||
----------------
|
||||
L = DBM:GetModLocalization("Trash")
|
||||
|
||||
L:SetGeneralLocalization{
|
||||
name = "Trash"
|
||||
}
|
||||
|
||||
L:SetMiscLocalization{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user