5.17 + Hyjal from Szyler's Discord

This commit is contained in:
andrew6180
2023-11-25 17:31:26 -07:00
parent 5b3b160e21
commit 00255736e5
33 changed files with 4031 additions and 1185 deletions
+33 -20
View File
@@ -8,20 +8,21 @@ mod:EnableModel()
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_CAST_START",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"UNIT_DIED"
)
-----LOCUST SWARM-----
local prewarnLocust = mod:NewSoonAnnounce(28785, 2)
local warnLocust = mod:NewCastAnnounce(28785, 3)
local timerLocust = mod:NewNextTimer(90, 28785)
local specWarnLocust = mod:NewSpecialWarningSpell(28785)
local timerLocustRemaining = mod:NewBuffActiveTimer(16, 28785)
local prewarnLocust = mod:NewSoonAnnounce(2123004, 2)
local warnLocust = mod:NewCastAnnounce(2123004, 3)
local timerLocust = mod:NewNextTimer(90, 2123004)
local specWarnLocust = mod:NewSpecialWarningSpell(2123004)
local timerLocustRemaining = mod:NewBuffActiveTimer(17, 2123004)
-----DARK GAZE-----
local specWarnDarkGaze = mod:NewSpecialWarningYou(1003011)
-----IMPALE------
local timerImpale = mod:NewCDTimer(10, 28783)
local warnImpale = mod:NewTargetAnnounce(28783, 2)
local timerImpale = mod:NewCDTimer(15, 2123001)
local warnImpale = mod:NewTargetAnnounce(2123001, 2)
-----MISC-----
local berserkTimer = mod:NewBerserkTimer(600)
@@ -32,10 +33,11 @@ function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
timerLocust:Start(-delay)
prewarnLocust:Schedule(85-delay)
timerImpale:Start(10-delay)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1003011) then
if args:IsSpellID(1003011) then
if args:IsPlayer() then
specWarnDarkGaze:Show();
SendChatMessage(L.YellDarkGaze, "YELL")
@@ -44,12 +46,14 @@ function mod:SPELL_AURA_APPLIED(args)
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(28785) then
if args:IsSpellID(2123003) then
timerLocust:Start()
specWarnLocust:Show()
prewarnLocust:Schedule(85)
timerLocustRemaining:Schedule(3)
elseif args:IsSpellID(28783) then
timerImpale:Stop()
timerImpale:Start(30)
elseif args:IsSpellID(2123001) then
timerImpale:Start()
tankName = mod:GetBossTarget(15956)
self:ScheduleMethod(0.1, "anubImpale")
@@ -57,18 +61,27 @@ function mod:SPELL_CAST_START(args)
end
function mod:anubImpale()
local target = mod:GetBossTarget(15956)
if target then
local target = mod:GetBossTarget(15956) or mod:GetBossTarget(26614)
if target ~= tankName then
warnImpale:Show(target)
if target == UnitName("player") then
end
elseif target == tankName then
self:ScheduleMethod(0.1, "anubImpale")
end
local targetShade = mod:GetBossTarget(1003012)
if targetShade then
warnImpale:Show(targetShade)
if targetShade == UnitName("player") then
end
end
function mod:OnCombatEnd()
timerLocust:Stop()
warnLocust:Cancel()
timerImpale:Stop()
warnImpale:Cancel()
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15956 or cid == 26614 then
timerLocust:Stop()
warnLocust:Cancel()
timerImpale:Stop()
warnImpale:Cancel()
end
end
+42 -14
View File
@@ -9,15 +9,19 @@ mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_PERIODIC_DAMAGE",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"UNIT_DIED",
"SPELL_AURA_REFRESH"
)
-----ENRAGE-----
-- local warnEnrageSoon = mod:NewSoonAnnounce(28798, 3)
-----Frenzy-----
-- local warnFrenzyNow = mod:NewSpellAnnounce(28798, 4)
local timerFrenzy = mod:NewNextTimer(60, 28798)
local warnFrenzy = mod:NewAnnounce(L.FaerlinaFrenzy, 2, 28798)
local timerSadism = mod:NewNextTimer(30, 2123101)
local timerBloodBath = mod:NewBuffActiveTimer(45, 2123102)
local warnBloodBathSoon = mod:NewAnnounce("Faerlina is getting hungry for blood!", 2, 2123102)
local warnSadism = mod:NewSpellAnnounce(2123101, 3)
-----EMBRACE-----
local warnEmbraceActive = mod:NewSpellAnnounce(28732, 1)
local timerEmbrace = mod:NewBuffActiveTimer(20, 28732)
@@ -36,7 +40,7 @@ local berserkTimer = mod:NewBerserkTimer(600)
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
timerFrenzy:Start(-delay)
timerSadism:Start(60-delay)
-- timer = 60
-- timerEnrage:Start(timer - delay)
-- warnEnrageSoon:Schedule(timer - 5 - delay)
@@ -62,10 +66,14 @@ end
-- end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(28798, 54100) then
warnFrenzy:Show(args.spellName, args.destName, args.amount or 1)
timerFrenzy:Start()
elseif args:IsSpellID(1003054) then
if args:IsSpellID(2123101) then
warnSadism:Show(args.spellName, args.destName, args.amount or 1)
timerSadism:Start(30)
elseif args:IsSpellID(2123102) then
timerSadism:Stop()
timerBloodBath:Start()
warnBloodBathSoon:Schedule(40)
elseif args:IsSpellID(2123107,2123108,2123109,2123110) then
if args:IsPlayer() then
specWarnRainOfFire:Show();
end
@@ -82,15 +90,24 @@ function mod:SPELL_AURA_APPLIED(args)
end
end
function mod:SPELL_AURA_REFRESH(args)
if args:IsSpellID(2123102) then
timerSadism:Stop()
timerBloodBath:Start()
warnBloodBathSoon:Cancel()
warnBloodBathSoon:Schedule(40)
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(28798, 54100) then
warnFrenzy:Show(args.spellName, args.destName, args.amount or 1)
timerFrenzy:Start()
elseif args:IsSpellID(1003054) then
if args:IsSpellID(2123101) then
warnSadism:Show(args.spellName, args.destName, args.amount or 1)
timerSadism:Start()
elseif args:IsSpellID(2123107,2123108,2123109,2123110) then
if args:IsPlayer() then
specWarnRainOfFire:Show();
end
elseif args:IsSpellID(869762, 350284) then
elseif args:IsSpellID(2123115,2123116,2123117,2123118) then
if args:IsPlayer() then
specWarnPoisonPool:Show();
end
@@ -104,9 +121,20 @@ function mod:SPELL_AURA_APPLIED_DOSE(args)
end
function mod:SPELL_PERIODIC_DAMAGE(args)
if args:IsSpellID(350286) then
if args:IsSpellID(2123107,2123108,2123109,2123110) then
if args:IsPlayer() then
specWarnRainOfFire:Show()
end
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15956 or cid == 26615 then
timerSadism:Stop()
end
end
function mod:OnCombatEnd()
timerSadism:Stop()
end
+76 -34
View File
@@ -11,74 +11,116 @@ mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"PLAYER_ALIVE",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_HEALTH"
"UNIT_HEALTH",
"UNIT_DIED"
)
-----Necrotic Poison-----
local timerNecrotic = mod:NewNextTimer(60, 28798)
local warnNecrotic = mod:NewAnnounce(L.MaexxnaNecrotic, 2, 28798)
local warnNecrotic = mod:NewAnnounce("%s on >%s< (%d)",3 ,2123201)
local specWarnNecrotic = mod:NewSpecialWarningStack(2123201, 3)
----DIGESTIVE ACID----
local warnDigestive = mod:NewAnnounce("%s on >%s< (%d)",3 ,2123202)
local specWarnDigestive = mod:NewSpecialWarningStack(2123202, 1)
-----WEB WRAP-----
local warnWebWrap = mod:NewTargetAnnounce(28622, 2)
local timerWebWrap = mod:NewNextTimer(40, 28622)
local warnWebWrap = mod:NewTargetAnnounce(2123211, 2)
local timerWebWrap = mod:NewNextTimer(40, 2123211)
-----WEB SPRAY-----
local warnWebSpraySoon = mod:NewSoonAnnounce(29484, 1)
local warnWebSprayNow = mod:NewSpellAnnounce(29484, 3)
local timerWebSpray = mod:NewNextTimer(40, 29484)
local warnWebSpraySoon = mod:NewSoonAnnounce(2123206, 1)
local warnWebSprayNow = mod:NewSpecialWarningSpell(2123206, 3)
local timerWebSpray = mod:NewNextTimer(50, 2123206)
local timerWebStunSoon = mod:NewTimer(4,"Stun incoming!", 2123210)
local timerWebStun = mod:NewTimer(4, "WRAPPED!", 2123210)
-----SPIDERLINGS-----
local timerSpider = mod:NewNextTimer(16, 43134)
local timerSpider = mod:NewNextTimer(16, 43134)
-----SOFT ENRAGE-----
local warnSoftEnrageSoon = mod:NewSpellAnnounce(54123, 3)
local warnSoftEnrageNow = mod:NewSoonAnnounce(54123, 2)
local maexxnaHealth
local warnSoftEnrageSoon = mod:NewSpellAnnounce(54123, 3)
local warnSoftEnrageNow = mod:NewSoonAnnounce(54123, 2)
local phase
local webSpam = 0
local necroticSpam = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
webSpam = 0
necroticSpam = 0
warnWebSpraySoon:Schedule(35 - delay)
timerWebSpray:Start(40 - delay)
timerWebWrap:Start(20-delay)
timerSpider:Start(8 - delay)
self:ScheduleMethod(8-delay, "Spiders")
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg:find(L.Spiderlings) then
timer = 16
timerSpider:Start(timer)
end
-- "Kel'Thuzad strikes!"
function mod:Spiders()
timerSpider:Start()
self:ScheduleMethod(16, "Spiders")
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(28622) then -- Web Wrap
if args:IsSpellID(2123201) then
warnNecrotic:Show(args.spellName, args.destName, args.amount or 1)
elseif args:IsSpellID(2123206, 2123207, 2123208, 2123209) and DBM:AntiSpam() then
warnWebSprayNow:Show()
timerWebStunSoon:Start()
timerWebSpray:Start()
elseif args:IsSpellID(2123211,2123212,2123216,2123217) and (GetTime() - webSpam) > 5 then -- Web Wrap
webSpam = GetTime()
warnWebWrap:Show(args.destName)
timerWebWrap:Start()
if args.destName == UnitName("player") then
SendChatMessage(L.YellWebWrap, "YELL")
end
elseif args:IsSpellID(29484, 54125, 350287) then -- Web Spray
timer = 40
warnWebSprayNow:Show()
warnWebSpraySoon:Schedule(timer-5)
timerWebSpray:Start(timer)
elseif args:IsSpellID(28776) then
warnNecrotic:Show(args.spellName, args.destName, args.amount or 1)
timerNecrotic:Start()
elseif args:IsSpellID(2123210) then
timerWebStun:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(28776) then
warnNecrotic:Show(args.spellName, args.destName, args.amount or 1)
if args:IsSpellID(2123201) then
if args:IsPlayer() and args.amount >= 1 and (GetTime() - necroticSpam) > 5 then
necroticSpam = GetTime()
specWarnNecrotic:Show(args.amount)
elseif args:IsPlayer() == false and args.amount >= 5 and (GetTime() - necroticSpam) > 5 then
necroticSpam = GetTime()
warnNecrotic:Show(args.spellName, args.destName, args.amount or 1)
end
end
if args:IsSpellID(2123202) then
if args:IsPlayer() and args.amount >= 1 then
specWarnDigestive:Show(args.amount)
elseif args:IsPlayer() == false and args.amount >= 4 and args.amount <=10 then
warnDigestive:Show(args.spellName, args.destName, args.amount or 1)
end
end
end
function mod:UNIT_HEALTH(args)
maexxnaHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if maexxnaHealth < 25 and phase == 1 then
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 15952 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and phase == 1 then
phase = 2
warnSoftEnrageSoon:Show()
elseif maexxnaHealth < 20 and phase == 2 then
elseif self:GetUnitCreatureId(uId) == 15952 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.20 and phase == 2 then
phase = 3
warnSoftEnrageNow:Show()
end
end
function mod:OnCombatEnd()
timerWebSpray:Stop()
warnWebSpraySoon:Cancel()
timerSpider:Stop()
timerWebWrap:Stop()
self:UnscheduleMethod("Spiders")
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15952 or cid == 26616 then
timerWebSpray:Stop()
warnWebSpraySoon:Cancel()
timerSpider:Stop()
timerWebWrap:Stop()
self:UnscheduleMethod("Spiders")
end
end
+70 -10
View File
@@ -7,15 +7,26 @@ mod:RegisterCombat("combat")
mod:EnableModel()
mod:RegisterEvents(
"SPELL_DAMAGE",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"UNIT_DIED"
)
-----DECIMATE-----
local warnDecimateSoon = mod:NewSoonAnnounce(54426, 2)
local warnDecimateNow = mod:NewSpellAnnounce(54426, 3)
local timerDecimate = mod:NewNextTimer(120, 54426)
local warnDecimateSoon = mod:NewSoonAnnounce(2122905, 2)
local warnDecimateNow = mod:NewSpellAnnounce(2122905, 2)
local timerDecimate = mod:NewNextTimer(120, 2122905)
local timerFeedFrenzy = mod:NewTimer(30, "Gluth is in a Frenzy", 2122923)
-------MOOD--------
local warnHungry = mod:NewAnnounce("Gluth is Hungry", 2, 2122903, nil, "Show a warning when Gluth gets hungry")
local specWarnAngry = mod:NewSpecialWarning("%s on >%s< (%d)", 2, 2122904)
local warnViciousStacks = mod:NewAnnounce("%s on >%s< (%d)", 2, 2122901)
local SpecWarnVicStacks = mod:NewSpecialWarningStack(2122901, 2)
-----MISC-----
local enrageTimer = mod:NewBerserkTimer(480)
local enrageTimer = mod:NewBerserkTimer(480)
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
@@ -24,12 +35,61 @@ function mod:OnCombatStart(delay)
warnDecimateSoon:Schedule(115 - delay)
end
local decimateSpam = 0
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(28375) and (GetTime() - decimateSpam) > 20 then
decimateSpam = GetTime()
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(2122905)then
warnDecimateNow:Show()
timerDecimate:Start()
warnDecimateSoon:Schedule(115)
end
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(2122901) then
if args:IsPlayer() then
SpecWarnVicStacks:Show(args.amount)
else
warnViciousStacks:Show(args.spellName, args.destName, args.amount or 1)
end
end
if args:IsSpellID(2122904) then
if args.amount >=1 then
specWarnAngry:Show(args.spellName, args.destName, args.amount or 1)
end
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2122901) then
if args:IsPlayer() then
SpecWarnVicStacks:Show(args.amount or 1)
else
warnViciousStacks:Show(args.spellName, args.destName, args.amount or 1)
end
end
if args:IsSpellID(2122904) then
specWarnAngry:Show(args.spellName, args.destName, args.amount or 1)
end
if args:IsSpellID(2122903) then
warnHungry:Show()
end
if args:IsSpellID(2122923) and (args.destName == "Gluth") then
timerFeedFrenzy:Start()
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15932 or cid == 26628 then
timerDecimate:Stop()
end
end
function mod:OnCombatEnd()
timerDecimate:Stop()
end
--Vicious Strike debuff 2122901 || Feeding Frenzy 2122923
--DBM_MOROES_GARROTE = "%s on >%s< (%d)" --(args.spellName, args.destName, args.amount or 1)
--local warningGarrote = mod:NewAnnounce(DBM_GLUTH_VICIOUS_BITE, 3, 37066)
--warningGarrote:Show(args.spellName, args.destName, args.amount or 1)
--L:SetWarningLocalization{
+64 -50
View File
@@ -11,28 +11,26 @@ mod:RegisterEvents(
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"SPELL_CAST_SUCCESS",
"UNIT_DIED",
"PLAYER_ALIVE"
)
-----MUTATING INJECTION-----
local warnInjection = mod:NewTargetAnnounce(28169, 2)
local specWarnInjection = mod:NewSpecialWarningYou(28169)
local timerInjection = mod:NewTargetTimer(10, 28169)
local warnInjection = mod:NewTargetAnnounce(28169, 2)
local specWarnInjection = mod:NewSpecialWarningYou(2122807)
local timerInjection = mod:NewTargetTimer(10, 2122807)
local timerNextInjection = mod:NewNextTimer(15, 2122807)
-----POISON CLOUD-----
local timerCloud = mod:NewNextTimer(15, 28240)
local warnCloud = mod:NewSpellAnnounce(28240, 2)
local prewarnCloud = mod:NewSoonAnnounce(28240, 3)
local specWarnPoison1 = mod:NewSpecialWarningMove(28241, true, nil, true)
local specWarnPoison2 = mod:NewSpecialWarningMove(28158, true, nil, true)
local timerPoisonCloud = mod:NewNextTimer(8, 2122812)
local warnCloud = mod:NewSpellAnnounce(2122812, 2)
local specWarnPoison1 = mod:NewSpecialWarningMove(2122812, true, nil, true)
-----VIVIFYING TOXIN-----
local timerToxin = mod:NewNextTimer(45, 79012)
local warnToxin = mod:NewSpellAnnounce(79012, 2)
local prewarnToxin = mod:NewSoonAnnounce(79012, 3)
local timerStitchedGiant = mod:NewTimer(60, "Stitched Giant", 79012)
-----SLIME SPRAY-----
local timerSpray = mod:NewCDTimer(15, 28157)
local warnSpray = mod:NewSpellAnnounce(28157, 2)
local timerSpray = mod:NewCDTimer(20, 2122818)
local warnSpray = mod:NewSpellAnnounce(2122818, 2)
-----MISC-----
local enrageTimer = mod:NewBerserkTimer(480)
local enrageTimer = mod:NewBerserkTimer(480)
mod:AddBoolOption("SetIconOnInjectionTarget", true)
local mutateIcons = {}
@@ -41,15 +39,15 @@ function mod:OnCombatStart(delay)
table.wipe(mutateIcons)
enrageTimer:Start(-delay)
-----Poison Cloud-----
timerCloud:Start(15-delay)
warnCloud:Schedule(15-delay)
prewarnCloud:Schedule(10-delay)
timerPoisonCloud:Start(10-delay)
self:ScheduleMethod(10-delay,"PoisonCloud")
-----Vivifying Toxin-----
timerToxin:Start(10-delay)
warnToxin:Schedule(10-delay)
prewarnToxin:Schedule(5-delay)
timerStitchedGiant:Start(20-delay)
self:ScheduleMethod(20-delay, "StitchedGiant")
-----Slime Spray-----
timerSpray:Start(15-delay)
timerSpray:Start(25-delay)
----Injection----
timerNextInjection:Start(10-delay)
end
local function addIcon()
@@ -70,41 +68,35 @@ local function removeIcon(target)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(28169) then
warnInjection:Show(args.destName)
timerInjection:Start(args.destName)
if args:IsSpellID(2122807) then
if args:IsPlayer() then
specWarnInjection:Show()
else
warnInjection:Show(args.destName)
end
timerInjection:Start(args.destName)
timerNextInjection:Start()
if self.Options.SetIconOnInjectionTarget then
table.insert(mutateIcons, args.destName)
addIcon()
end
elseif args:IsSpellID(28241) then
elseif args:IsSpellID(2122812,2122813,2122814) then
if args:IsPlayer() then
specWarnPoison1:Show()
end
elseif args:IsSpellID(28158) then
if args:IsPlayer() then
specwarnPoison2:Show()
end
end
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(28241) then
if args:IsSpellID(2122812,2122813,2122814) then
if args:IsPlayer() then
specWarnPoison1:Show()
end
elseif args:IsSpellID(28158) then
if args:IsPlayer() then
specwarnPoison2:Show()
end
end
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(28169) then
if args:IsSpellID(2122807) then
timerInjection:Cancel(args.destName)--Cancel timer if someone is dumb and dispels it.
if self.Options.SetIconOnInjectionTarget then
removeIcon(args.destName)
@@ -113,19 +105,41 @@ function mod:SPELL_AURA_REMOVED(args)
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(28240) then
timer = 15
timerCloud:Start(timer)
warnCloud:Schedule(timer)
prewarnCloud:Schedule(timer-5)
elseif args:IsSpellID(79012) then
timer = 42.5
timerToxin:Start(timer)
warnToxin:Schedule(timer)
prewarnToxin:Schedule(timer-5)
elseif args:IsSpellID(28157, 196884) then
timer = 15
timerSpray:Start(timer)
if args:IsSpellID(2122818) then
timerSpray:Start()
warnSpray:Show()
end
end
function mod:PoisonCloud()
timerPoisonCloud:Stop()
timerPoisonCloud:Start()
warnCloud:Show()
self:ScheduleMethod(8,"PoisonCloud")
end
function mod:StitchedGiant()
timerStitchedGiant:Stop()
timerStitchedGiant:Start()
self:ScheduleMethod(60,"StitchedGiant")
end
--if args:IsSpellID(28240) then
-- timer = 15
-- timerCloud:Start(timer)
-- warnCloud:Schedule(timer)
-- prewarnCloud:Schedule(timer-5)
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15931 or cid == 26627 then
timerInjection:Stop()
timerSpray:Stop()
timerNextInjection:Stop()
end
end
function mod:OnCombatEnd()
timerInjection:Stop()
timerSpray:Stop()
timerNextInjection:Stop()
end
+64 -8
View File
@@ -9,15 +9,29 @@ mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_DAMAGE",
"SPELL_MISSED",
"UNIT_DIED",
"PLAYER_ALIVE"
)
mod:AddBoolOption("WarningHateful", false, "announce")
mod:AddBoolOption("SetIconOnGastricTarget", true)
local mutateIcons = {}
local MT
-----GASTRIC AFFLICTION-----
local specWarnGastric = mod:NewSpecialWarningYou(1003086)
local warnGastric = mod:NewTargetAnnounce(2122517, 2)
local timerGastric = mod:NewNextTimer(20,2122517)
local timerGastricSelf = mod:NewTargetTimer(15,2122517)
-----MISC-----
local enrageTimer = mod:NewBerserkTimer(360)
local timerAchieve = mod:NewAchievementTimer(180, 1857, "TimerSpeedKill")
local enrageTimer = mod:NewBerserkTimer(360)
local timerAchieve = mod:NewAchievementTimer(180, 1857, "TimerSpeedKill")
----TOY-----
local specWarnNotFavToy = mod:NewSpecialWarningYou(2122516)
local timerNotFavToy = mod:NewTargetTimer(20,2122516)
local specWarnFavToy = mod:NewSpecialWarningYou(2122515)
local timerFavToy = mod:NewTargetTimer(20,2122515)
-----BOSS FUNCTIONS-----
local function announceStrike(target, damage)
@@ -27,25 +41,67 @@ end
function mod:OnCombatStart(delay)
enrageTimer:Start(-delay)
timerAchieve:Start(-delay)
timerGastric:Start(15-delay)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1003086) then
if args:IsSpellID(2122517,2122518,2122519,2122520) then
if args:IsPlayer() then
timer = 5
specWarnGastric:Show(timer);
specWarnGastric:Show();
else
warnGastric:Show(args.destName)
end
end
end
timerGastricSelf:Start(args.destName)
self:SetIcon(args.destName, 8, 15)
timerGastric:Start()
end
if args:IsSpellID(2122516) then
if args:IsPlayer() then
specWarnNotFavToy:Show(args.destName)
timerNotFavToy:Start(args.destName)
end
MT = args.destName
end
if args:IsSpellID(2122515) then
if args:IsPlayer() then
specWarnFavToy:Show(args.destName)
timerFavToy:Start(args.destName)
end
end
end
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(28308, 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then
announceStrike(args.destName, args.amount or 0)
end
if args:IsSpellID(2122505) and (args.destName == MT) then
timerNotFavToy:Stop()
timerNotFavToy:Start(MT)
end
end
function mod:SPELL_MISSED(args)
if args:IsSpellID(28308, 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then
announceStrike(args.destName, getglobal("ACTION_SPELL_MISSED_"..(args.missType)) or "")
end
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(2122517,2122518,2122519,2122520) then
timerGastricSelf:Cancel(args.destName)--Cancel timer if someone is dumb and dispels it.
self:SetIcon(args.destName, 0)
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16028 or cid == 26626 then
timerGastric:Stop()
timerGastricSelf:Stop()
end
end
function mod:OnCombatEnd()
timerGastric:Stop()
timerGastricSelf:Stop()
end
+260 -134
View File
@@ -7,112 +7,78 @@ mod:RegisterCombat("yell", L.Yell)
mod:EnableModel()
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_AURA",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"UNIT_DIED"
)
-----POLARITY SHIFT-----
local timerShiftCast = mod:NewCastTimer(3, 28089)
local timerNextShift = mod:NewNextTimer(30, 28089)
local warnShiftCasting = mod:NewCastAnnounce(28089, 3)
local timerShiftCast = mod:NewCastTimer(4, 2124201)
local timerNextShift = mod:NewNextTimer(34, 2124201)
local warnShiftCasting = mod:NewCastAnnounce(2124201, 2)
local specWarnNegative = mod:NewSpecialWarningMove(2124203, 2)
local specWarnPositive = mod:NewSpecialWarningMove(2124202, 2)
local warnMagnetic = mod:NewAnnounce("Magnetic Reversal", 2, 2124245, nil, "Show warning for Magnetic Reversal")
local timerMagnetic = mod:NewTimer(16, "Magnetic Reversal duration", 2124245)
local warnTankOvercharged = mod:NewTargetAnnounce(2124222, 2)
local specWarnTankOvercharged = mod:NewSpecialWarningYou(2124222, 2)
-----THROW-----
local warnThrow = mod:NewSpellAnnounce(28338, 2)
local warnThrowSoon = mod:NewSoonAnnounce(28338, 1)
local timerThrow = mod:NewNextTimer(20.6, 28338)
local warnThrow = mod:NewSpellAnnounce(2124244, 2)
local warnThrowSoon = mod:NewSoonAnnounce(2124244, 2)
local timerThrow = mod:NewNextTimer(20.6, 2124244)
-----MISC-----
local warnChargeChanged = mod:NewSpecialWarning("WarningChargeChanged")
local warnChargeNotChanged = mod:NewSpecialWarning("WarningChargeNotChanged", false)
local enrageTimer = mod:NewBerserkTimer(365)
mod:AddBoolOption("ArrowsEnabled", false, "Arrows")
mod:AddBoolOption("ArrowsRightLeft", false, "Arrows")
mod:AddBoolOption("ArrowsInverse", false, "Arrows")
mod:AddBoolOption("HealthFrame", true)
mod:SetBossHealthInfo(
15930, L.Boss1,
15929, L.Boss2
15930, L.Boss1,
15929, L.Boss2
)
local currentCharge
local phase2
local down = 0
local i = 7
-- Polarity shift (2124201)
-- Overcharged (2124222)
-- Magnetic Reversal (2124245)
--TEST REALM--
local negativePolarity = CreateFrame("Frame", nil, UIParent)
negativePolarity:Hide()
local negativeTexture = negativePolarity:CreateTexture(nil, "BACKGROUND")
negativeTexture:SetTexture("Interface\\Icons\\Spell_ChargeNegative")
negativeTexture:SetPoint("CENTER", negativePolarity, "CENTER")
negativePolarity:SetHeight(0.8)
negativePolarity:SetWidth(0.8)
negativePolarity:SetPoint("CENTER", UIParent, "CENTER", 0, 445)
local positivePolarity = CreateFrame("Frame", nil, UIParent)
positivePolarity:Hide()
local positiveTexture = positivePolarity:CreateTexture(nil, "BACKGROUND")
positiveTexture:SetTexture("Interface\\Icons\\Spell_ChargePositive")
positiveTexture:SetPoint("CENTER", positivePolarity, "CENTER")
positivePolarity:SetHeight(0.8)
positivePolarity:SetWidth(0.8)
positivePolarity:SetPoint("CENTER", UIParent, "CENTER", 0, 445)
-- Polarity Positive (2124202)
-- Polarity Negative (2124203)
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
phase2 = false
self.vb.phase = 1
currentCharge = nil
currentCharge = 0
i = 7
down = 0
self:ScheduleMethod(20.6 - delay, "TankThrow")
timerThrow:Start(-delay)
warnThrowSoon:Schedule(17.6 - delay)
end
local lastShift = 0
function mod:SPELL_CAST_START(args)
if args:IsSpellID(28089) then
phase2 = true
self.vb.phase = 2
timerNextShift:Start()
timerShiftCast:Start()
warnShiftCasting:Show()
lastShift = GetTime()
end
end
function mod:UNIT_AURA(elapsed)
if not phase2 then return end
local charge
local i = 1
while UnitDebuff("player", i) do
local _, _, icon, count = UnitDebuff("player", i)
if icon == "Interface\\Icons\\Spell_ChargeNegative" then
if count > 1 then return end
charge = L.Charge1
elseif icon == "Interface\\Icons\\Spell_ChargePositive" then
if count > 1 then return end
charge = L.Charge2
end
i = i + 1
end
if charge then
lastShift = 0
if charge == currentCharge then
warnChargeNotChanged:Show()
if self.Options.ArrowsEnabled and self.Options.ArrowsRightLeft then
if self.Options.ArrowsInverse then
self:ShowLeftArrow()
else
self:ShowRightArrow()
end
end
else
warnChargeChanged:Show(charge)
if self.Options.ArrowsEnabled then
if self.Options.ArrowsRightLeft and self.Options.ArrowsInverse then
self:ShowRightArrow()
elseif self.Options.ArrowsRightLeft then
self:ShowLeftArrow()
elseif currentCharge then
self:ShowUpArrow()
end
end
end
currentCharge = charge
end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.Emote or msg == L.Emote2 then
down = down + 1
if down >= 2 then
self:UnscheduleMethod("TankThrow")
timerThrow:Cancel()
warnThrowSoon:Cancel()
DBM.BossHealth:Hide()
enrageTimer:Start()
end
end
end
function mod:TankThrow()
if not self:IsInCombat() or phase2 then
DBM.BossHealth:Hide()
@@ -123,64 +89,224 @@ function mod:TankThrow()
self:ScheduleMethod(20.6, "TankThrow")
end
local function arrowOnUpdate(self, elapsed)
self.elapsed = (self.elapsed or 0) + elapsed
if self.elapsed >= 3.5 and self.elapsed < 4.5 then
self:SetAlpha(4.5 - self.elapsed)
elseif self.elapsed >= 4.5 then
self:Hide()
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2124201) then
phase2 = true
self.vb.phase = 2
self:ScheduleMethod(0, "ShiftingPolarity")
end
end
local function arrowOnShow(self)
self.elapsed = 0
self:SetAlpha(1)
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2124245) and DBM:AntiSpam(2, 6) then
if args:IsPlayer() then
SendChatMessage("Magnetic Reversal on "..UnitName("PLAYER").."!", "Say")
end
warnMagnetic:Show(args.destName)
timerMagnetic:Start()
mod:SetIcon(args.destName, i, 15)
i = i-1
end
if args:IsSpellID(2124222) then
local tanktarget = args.destName
if args:IsPlayer() then
specWarnTankOvercharged:Show()
else
warnTankOvercharged:Show(tanktarget)
end
mod:SetIcon(tanktarget, 8, 15)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(2124245) then
i = 7
end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.Emote or msg == L.Emote2 then
self:UnscheduleMethod("TankThrow")
timerThrow:Cancel()
warnThrowSoon:Cancel()
DBM.BossHealth:Hide()
enrageTimer:Start()
end
end
function mod:UNIT_AURA(unit)
if UnitDebuff("Player","Polarity: Negative") then
if currentCharge == 1 or currentCharge == 0 then
specWarnNegative:Show()
end
currentCharge = 2
negativePolarity:Show()
positivePolarity:Hide()
end
if UnitDebuff("Player","Polarity: Positive") then
if currentCharge == 2 or currentCharge == 0 then
specWarnPositive:Show()
end
currentCharge = 1
negativePolarity:Hide()
positivePolarity:Show()
end
end
function mod:ShiftingPolarity()
timerNextShift:Start()
timerShiftCast:Start()
warnShiftCasting:Show()
self:ScheduleMethod(34,"ShiftingPolarity")
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15928 or cid == 26629 then
positivePolarity:Hide()
negativePolarity:Hide()
timerShiftCast:Stop()
timerMagnetic:Stop()
self:UnscheduleMethod("ShiftingPolarity")
end
end
function mod:OnCombatEnd()
negativePolarity:Hide()
positivePolarity:Hide()
self:UnscheduleMethod("ShiftingPolarity")
end
--local function PolarityOnShow(self)
-- self.elapsed = 0
-- self:SetAlpha(1)
--end
--function mod:ShowNegativePolarity()
-- negativePolarity:Show()
--end
--function mod:ShowPositivePolarity()
-- positivePolarity:Show()
--end
-----------------------CURRENTLY DEPRECATED-----------------------
--mod:AddBoolOption("ArrowsEnabled", false, "Arrows")
--mod:AddBoolOption("ArrowsRightLeft", false, "Arrows")
--mod:AddBoolOption("ArrowsInverse", false, "Arrows")
--function mod:UNIT_AURA(elapsed)
-- if not phase2 then return end
-- local charge
-- local i = 1
-- while UnitDebuff("player", i) do
-- local _, _, icon, count = UnitDebuff("player", i)
-- if icon == "Interface\\Icons\\Spell_ChargeNegative" then
-- if count > 1 then return end
-- charge = L.Charge1
-- elseif icon == "Interface\\Icons\\Spell_ChargePositive" then
-- if count > 1 then return end
-- charge = L.Charge2
-- end
-- i = i + 1
-- end
-- if charge then
-- lastShift = 0
-- if charge == currentCharge then
-- warnChargeNotChanged:Show()
-- if self.Options.ArrowsEnabled and self.Options.ArrowsRightLeft then
-- if self.Options.ArrowsInverse then
-- self:ShowLeftArrow()
-- else
-- self:ShowRightArrow()
-- end
-- end
-- else
-- warnChargeChanged:Show(charge)
-- if self.Options.ArrowsEnabled then
-- if self.Options.ArrowsRightLeft and self.Options.ArrowsInverse then
-- self:ShowRightArrow()
-- elseif self.Options.ArrowsRightLeft then
-- self:ShowLeftArrow()
-- elseif currentCharge then
-- self:ShowUpArrow()
-- end
-- end
-- end
-- currentCharge = charge
-- end
--end
--local function arrowOnUpdate(self, elapsed)
-- self.elapsed = (self.elapsed or 0) + elapsed
-- if self.elapsed >= 3.5 and self.elapsed < 4.5 then
-- self:SetAlpha(4.5 - self.elapsed)
-- elseif self.elapsed >= 4.5 then
-- self:Hide()
-- end
--end
--local function arrowOnShow(self)
-- self.elapsed = 0
-- self:SetAlpha(1)
--end
-- this file uses the texture Textures/arrow.tga. This image was created by Everaldo Coelho and is licensed under the GNU Lesser General Public License. See Textures/lgpl.txt.
local arrowLeft = CreateFrame("Frame", nil, UIParent)
arrowLeft:Hide()
local arrowLeftTexture = arrowLeft:CreateTexture(nil, "BACKGROUND")
arrowLeftTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
arrowLeftTexture:SetPoint("CENTER", arrowLeft, "CENTER")
arrowLeft:SetHeight(1)
arrowLeft:SetWidth(1)
arrowLeft:SetPoint("CENTER", UIParent, "CENTER", -150, -30)
arrowLeft:SetScript("OnShow", arrowOnShow)
arrowLeft:SetScript("OnUpdate", arrowOnUpdate)
--local arrowLeft = CreateFrame("Frame", nil, UIParent)
--arrowLeft:Hide()
--local arrowLeftTexture = arrowLeft:CreateTexture(nil, "BACKGROUND")
--arrowLeftTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowLeftTexture:SetPoint("CENTER", arrowLeft, "CENTER")
--arrowLeft:SetHeight(1)
--arrowLeft:SetWidth(1)
--arrowLeft:SetPoint("CENTER", UIParent, "CENTER", -150, -30)
--arrowLeft:SetScript("OnShow", arrowOnShow)
--arrowLeft:SetScript("OnUpdate", arrowOnUpdate)
local arrowRight = CreateFrame("Frame", nil, UIParent)
arrowRight:Hide()
local arrowRightTexture = arrowRight:CreateTexture(nil, "BACKGROUND")
arrowRightTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
arrowRightTexture:SetPoint("CENTER", arrowRight, "CENTER")
arrowRightTexture:SetTexCoord(1, 0, 0, 1)
arrowRight:SetHeight(1)
arrowRight:SetWidth(1)
arrowRight:SetPoint("CENTER", UIParent, "CENTER", 150, -30)
arrowRight:SetScript("OnShow", arrowOnShow)
arrowRight:SetScript("OnUpdate", arrowOnUpdate)
--local arrowRight = CreateFrame("Frame", nil, UIParent)
--arrowRight:Hide()
--local arrowRightTexture = arrowRight:CreateTexture(nil, "BACKGROUND")
--arrowRightTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowRightTexture:SetPoint("CENTER", arrowRight, "CENTER")
----arrowRightTexture:SetTexCoord(1, 0, 0, 1)
--arrowRight:SetHeight(1)
--arrowRight:SetWidth(1)
--arrowRight:SetPoint("CENTER", UIParent, "CENTER", 150, -30)
--arrowRight:SetScript("OnShow", arrowOnShow)
--arrowRight:SetScript("OnUpdate", arrowOnUpdate)
local arrowUp = CreateFrame("Frame", nil, UIParent)
arrowUp:Hide()
local arrowUpTexture = arrowUp:CreateTexture(nil, "BACKGROUND")
arrowUpTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
arrowUpTexture:SetRotation(math.pi * 3 / 2)
arrowUpTexture:SetPoint("CENTER", arrowUp, "CENTER")
arrowUp:SetHeight(1)
arrowUp:SetWidth(1)
arrowUp:SetPoint("CENTER", UIParent, "CENTER", 0, 40)
arrowUp:SetScript("OnShow", arrowOnShow)
arrowUp:SetScript("OnUpdate", arrowOnUpdate)
--local arrowUp = CreateFrame("Frame", nil, UIParent)
--arrowUp:Hide()
--local arrowUpTexture = arrowUp:CreateTexture(nil, "BACKGROUND")
--arrowUpTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowUpTexture:SetRotation(math.pi * 3 / 2)
--arrowUpTexture:SetPoint("CENTER", arrowUp, "CENTER")
--arrowUp:SetHeight(1)
--arrowUp:SetWidth(1)
--arrowUp:SetPoint("CENTER", UIParent, "CENTER", 0, 40)
--arrowUp:SetScript("OnShow", arrowOnShow)
--arrowUp:SetScript("OnUpdate", arrowOnUpdate)
function mod:ShowRightArrow()
arrowRight:Show()
end
--function mod:ShowRightArrow()
-- arrowRight:Show()
--end
function mod:ShowLeftArrow()
arrowLeft:Show()
end
function mod:ShowUpArrow()
arrowUp:Show()
end
--function mod:ShowLeftArrow()
-- arrowLeft:Show()
--end
--
--function mod:ShowUpArrow()
-- arrowUp:Show()
--end
+281 -464
View File
@@ -2,7 +2,7 @@ local mod = DBM:NewMod("Kel'Thuzad", "DBM-Naxx", 5)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 2574 $"):sub(12, -3))
mod:SetCreatureID(15990)
mod:SetCreatureID(15990,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26627,26628,26629,26630)
mod:SetUsedIcons(8)
mod:RegisterCombat("yell", L.Yell)
mod:EnableModel()
@@ -11,530 +11,347 @@ mod:RegisterEvents(
"SPELL_AURA_APPLIED_DOSE",
"SPELL_CAST_START", --This should allow the addon to process this Event using the scripting from Anub'Rekhan for Impale.
"SPELL_CAST_SUCCESS",
"CHAT_MSG_MONSTER_EMOTE",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_HEALTH",
"UNIT_AURA",
"UNIT_DIED",
"PLAYER_ALIVE"
)
----------PHASE 1----------
-----MAJOR ADD WAVE-----
local warnMajorWave = mod:NewAnnounce("Major Wave Spawned", 2, 1003064, nil, "Show warning for Major Wave spawn")
local warnMajorWaveSoon = mod:NewAnnounce("Major Wave Spawns Soon", 3, 1003064, nil, "Show pre-warning for Major Wave spawn")
local timerMajorWave = mod:NewTimer(30, "Next Major Wave", 1003064, nil, "Show timer for Major Wave spawn")
local warnAbomination = mod:NewAnnounce("Abomination spawning", 1, 500335)
local timerAbomination = mod:NewTimer(30, "Abomination spawning", 500335)
local warnBanshee = mod:NewAnnounce("Soul Weaver spawning", 1, 58359)
local timerBanshee = mod:NewTimer(30, "Soul Weaver spawning", 58359)
local warnPosess = mod:NewTargetAnnounce(2124512, 2)
local timerPosess = mod:NewTargetTimer(10, 2124512)
-----CONSTRICTING CHAINS-----
local warnChains = mod:NewTargetAnnounce(1003114, 2)
local warnChains = mod:NewTargetAnnounce(1003114, 2)
-----WAIL OF SOULS-----
local warnWailSoul = mod:NewSpellAnnounce(1003115, 2)
local warnWailSoul = mod:NewSpellAnnounce(1003115, 2)
-----PHASE 1 -> 2 TRANSITION-----
local warnPhase2 = mod:NewPhaseAnnounce(2, 3)
local timerPhase2 = mod:NewTimer(180, "Phase Two", 29485, nil, "Show timer for Phase Two")
-----PHASE 2 -> 3 TRANSITION-----
local warnPhase3 = mod:NewPhaseAnnounce(3, 3)
local timerPhase3 = mod:NewTimer(378, "Phase Three", 29485, nil, "Show timer for Phase Three")
local warnPhase2 = mod:NewPhaseAnnounce(2, 3)
local timerPhase2 = mod:NewTimer(178, "Phase Two", 500992, nil, "Show timer for Phase Two")
local timerPhase2Transition = mod:NewTimer(15, "Phase Two starting", 500992)
----------PHASE 2----------
-----SHADE OF NAXXRAMAS-----
local warnNaxxShade = mod:NewAnnounce("Shade of Naxx Spawned", 2, 25228, nil, "Show warning for Shade of Naxxramas spawn")
local warnNaxxShadeSoon = mod:NewAnnounce("Shade of Naxx Spawns Soon", 3, 25228, nil, "Show pre-warning for Shade of Naxxramas spawn")
local timerNaxxShade = mod:NewTimer(60, "Next Shade of Naxx", 25228, nil, "Show timer for Shade of Naxxramas spawn")
-----DISRUPTING SHOUT-----
local warnShout = mod:NewSpellAnnounce(29107, 2)
local warnShoutSoon = mod:NewSoonAnnounce(29107, 3)
local timerShout = mod:NewCDTimer(16, 29107)
-----SEEING RED-----
local warnSeeingRed = mod:NewSpellAnnounce(1003255, 2)
-----GASTRIC AFFLICTION-----
local warnGastric = mod:NewTargetAnnounce(1003086, 2)
local specWarnGastric = mod:NewSpecialWarningYou(1003086)
-----VOID ZONE-----
local specWarnVoid = mod:NewSpecialWarningYou(28865)
-----SAFETY DANCE-----
local warnDanceSoon = mod:NewAnnounce("Safety Dance Soon", 2, 46573, nil, "Show pre-warning for the Safetyy Dance")
local warnDance = mod:NewAnnounce("Dance Ends Now", 3, 46573, nil, "Show warning for the Safety Dance")
local timerDance = mod:NewTimer(22, "Safety Dance Starts", 46573, nil, "Show timer for the Safety Dance")
-----HARVEST SOUL-----
local warnHarvestSoon = mod:NewSoonAnnounce(28679, 3)
local warnHarvest = mod:NewSpellAnnounce(28679, 2)
local timerHarvest = mod:NewNextTimer(15, 28679)
-----MAEXXNA SPIDERLINGS-----
local timerSpider = mod:NewNextTimer(16, 43134)
-----NOTH'S SHADE (UNSCRIPTED)-----
local warnNothShade = mod:NewAnnounce("Noth's Shade Spawned", 2, 1003072, nil, "Show warning for Noth's Shade spawn")
local timerNothShade = mod:NewTimer(60, "Next Noth's Shade", 1003072, nil, "Show timer for Noth's Shade spawn")
-----FROST BLAST-----
local warnBlast = mod:NewSpellAnnounce(29879, 2)
local timerBlast = mod:NewCDTimer(16, 29879)
-----DETONATE MANA-----
local warnMana = mod:NewSpellAnnounce(27819, 2)
local timerMana = mod:NewCDTimer(30, 27819)
-----DEATH AND DECAY-----
local specWarnDnD = mod:NewSpecialWarningYou(1003113)
-----CHAINS OF KEL'THUZAD-----
local warnChains = mod:NewSpellAnnounce(28410, 2)
local timerChains = mod:NewCDTimer(16, 28410)
--Shuffle in all timers we want to kill--
--ANUB--
local timerLocust = mod:NewNextTimer(90, 2123004)
local timerImpale = mod:NewCDTimer(15, 2123001)
--Faerlina--
local timerSadism = mod:NewNextTimer(30, 2123101)
--NOTH--
local timerCurse = mod:NewNextTimer(30, 2123805)
--LOATHEB--
local timerNextDeathbloom = mod:NewNextTimer(30, 2122627)
local timerDeathblooming = mod:NewTimer(15, "Deathbloom expires!", 2122627)
local timerNecrotic = mod:NewBuffActiveTimer(16, 2122601)
--INSTRUCTOR--
local timerenrage = mod:NewTimer(180, "Enrage", 2123914)
local timerKnife = mod:NewNextTimer(15, 2123924)
--HORSEMEN--
local timerMark = mod:NewNextTimer(12, 2124103)
local timerNextHolyWrath = mod:NewNextTimer(20, 2124141)
local timerNextDeepChill = mod:NewNextTimer(20, 2124167)
local timerNextMeteor = mod:NewNextTimer(20, 2124128)
local timerNextFamine = mod:NewNextTimer(20, 2124166)
--PATCH--
local timerGastric = mod:NewNextTimer(20,2122517)
local timerGastricSelf = mod:NewTargetTimer(15,2122517)
--GROBB--
local timerSpray = mod:NewCDTimer(20, 2122818)
local timerNextInjection = mod:NewNextTimer(15, 2122807)
--GLUTH--
local timerDecimate = mod:NewNextTimer(120, 2122905)
--THADD--
local timerShiftCast = mod:NewCastTimer(4, 2124201)
local timerNextShift = mod:NewNextTimer(34, 2124201)
local warnShiftCasting = mod:NewCastAnnounce(2124201, 3)
--SAPPH--
local timerNextBellowing = mod:NewNextTimer(45, 2124332)
-----PHASE 2 -> 3 TRANSITION-----
local warnPhase3 = mod:NewPhaseAnnounce(3, 3)
local timerPhase3 = mod:NewTimer(10, "Phase Three", 802125, nil, "Show the timer for Phase Three")
----------PHASE 3----------
local warnFrostSoon = mod:NewAnnounce("Frost Phase soon", 3, 2124594)
local warnFrostNow = mod:NewAnnounce("Frost Phase now!", 2, 2124594)
local timerKTteleport = mod:NewTimer(42, "Kel'Thuzad teleports", 46573)
local timerFrostPhase = mod:NewTimer(45, "Frost Phase ends", 2124594)
local warnAddsSoon = mod:NewAnnounce("Guardians spawn at 36%!, 2, 70965")
-----PHASE 3 ABILITIES-----
local specWarnDnD = mod:NewSpecialWarningMove(2124575,1)
local warnDnD = mod:NewSpellAnnounce(2124575, 2)
local timerDnD = mod:NewNextTimer(20, 2124575)
local specWarnFissure = mod:NewSpecialWarningMove(2124579,1)
local warnFissure = mod:NewSpellAnnounce(2124579,1)
local timerFissure = mod:NewCDTimer(20,2124579)
local warnFlashFreezeSoon = mod:NewSoonAnnounce(2124587, 2)
local timerFlashFreeze = mod:NewCDTimer(30, 2124587)
local specWarnManaBomb = mod:NewSpecialWarningYou(2124572, 2)
local warnManaBomb = mod:NewTargetAnnounce(2124572, 2)
local timerNextManaBomb = mod:NewNextTimer(20, 2124572)
local timerManaBomb = mod:NewBuffActiveTimer(8, 2124572)
-----RANGE CHECK-----
mod:AddBoolOption("ShowRange", true)
----------BOSS TRACKING----------
local anub
local faerlina
local maexx
local noth
local heigan
local loatheb
local razuv
local gothik
local horse
local patch
local grobb
local gluth
local thadd
local spiderHealth
local plagueHealth
local militaryHealth
local constructHealth
local spiderBoss
local plagueBoss
local militaryBoss
local constructBoss
local heiganDanceStart
----------MISC----------
local notRealRazuv = 0
local hasShoutCast = 0
local phase = 0
local shadesSpawned = 0
local berserkTimer = mod:NewBerserkTimer(1140)
local icy = 8
local mana = 8
local necroticSpam = 0
local bloomSpam = 0
local warnFrost = 0
local frostPhase = 0
local fissure = 20
local shadeCounter = 0
-----CODE START-----
function mod:OnCombatStart(delay)
mod:phaseOne()
berserkTimer:Start(1140)
notRealRazuv = 1
self.vb.phase = 1
icy = 8
mana = 8
warnFrost = 0
frostPhase = 0
shadeCounter = 0
fissure = 20
self.vb.phase = 1
mod:ScheduleMethod(0-delay,"PhaseOne")
end
function mod:phaseOne()
phase = 1
anub = 0
faerlina = 0
maexx = 0
noth = 0
heigan = 0
loatheb = 0
razuv = 0
gothik = 0
horse = 0
patch = 0
grobb = 0
gluth = 0
thadd = 0
spiderBoss = 0
plagueBoss = 0
militaryBoss = 0
constructBoss = 0
heiganDanceStart = 0
shadesSpawned = 0
hasShoutCast = 0
DBM.RangeCheck:Hide()
mod:phase2Transition()
mod:timerMajorWaveRepeat()
self:ScheduleMethod(30, "timerMajorWaveRepeat")
self:ScheduleMethod(60, "timerMajorWaveRepeat")
self:ScheduleMethod(90, "timerMajorWaveRepeat")
function mod:PhaseOne()
timerPhase2:Start()
timerAbomination:Start(10)
timerBanshee:Start(25)
self:ScheduleMethod(10, "Abomination")
self:ScheduleMethod(25, "Banshee")
self:ScheduleMethod(178, "PhaseTwoTransition")
end
function mod:timerMajorWaveRepeat()
timer = 30
warnMajorWave:Schedule(timer)
warnMajorWaveSoon:Schedule(timer-5)
timerMajorWave:Start(timer)
function mod:Abomination()
warnAbomination:Show()
timerAbomination:Start()
self:ScheduleMethod(30, "Abomination")
end
function mod:phase2Transition()
timer = 180
warnPhase2:Schedule(timer)
warnPhase2Soon:Schedule(timer-10)
timerPhase2:Start(timer)
self:ScheduleMethod(timer, "phaseTwo")
function mod:Banshee()
warnBanshee:Show()
timerBanshee:Start()
self:ScheduleMethod(30, "Banshee")
end
function mod:phaseTwo()
phase = 2
function mod:PhaseTwoTransition()
self:UnscheduleMethod("Banshee")
self:UnscheduleMethod("Abomination")
timerAbomination:Stop()
timerBanshee:Stop()
timerPhase2Transition:Start()
end
function mod:PhaseTwo()
phase = 2
self.vb.phase = 2
if self.Options.ShowRange then
mod:RangeTogglePhaseTwo()
end
-----SHADE SPAWNS-----
-- mod:timerNaxxShadeRepeat()
mod:phase3Transition()
-- timer = 34
-- self:ScheduleMethod(timer, "timerNaxxShadeRepeat")
-- self:ScheduleMethod(timer+60, "timerNaxxShadeRepeat")
-- self:ScheduleMethod(timer+120, "timerNaxxShadeRepeat")
-----HEALTH CHECK DEBUGS-----
-- local shade1 = UnitGUID("boss1")
-- local shade2 = UnitGUID("boss2")
-- local shade3 = UnitGUID("boss3")
-- local shade4 = UnitGUID("boss4")
-- mod:checkHealth()
end
function mod:phase3Transition()
timer = 600
warnPhase3:Schedule(timer)
warnPhase3Soon:Schedule(timer-10)
timerPhase3:Start(timer)
self:ScheduleMethod(timer, "phaseThree")
function mod:PhaseThreeTransition()
timerDnD:Start(10)
timerPhase3:Start()
end
function mod:phaseThree()
function mod:PhaseThree()
phase = 3
self.vb.phase = 3
if self.Options.ShowRange then
mod:RangeTogglePhaseThree()
end
timerBlast:Start(45)
timerMana:Start(30)
timerChains:Start(90)
timerDnD:Start()
timerNextManaBomb:Start(20)
timerFissure:Start(10)
timerFlashFreeze:Start()
self:ScheduleMethod(20, "DnD")
end
function mod:SPELL_CAST_START()
if args:IsSpellID(28478) and phase == 2 then
self:Unschedule("warnPhase3")
self:Unschedule("warnPhase3Soon")
self:UnscheduleMethod("phaseThree")
timerPhase3:Stop()
mod:phaseThree()
end
-- self:ScheduleMethod(10, "Fissure")
-- Flash Freeze (2124587)
-- Death and Decay (2124575) fixed
-- Shadow Fissure (2124579) fixed
-- Mana Bomb (2124572) fixed
--[[ CHECK
function mod:ShadowFissure()
fissure = fissure + 1
timerFissure:Start(fissure)
self:ScheduleMod(fissure, "ShadowFissure")
end
]]--
function mod:FrostPhase()
self:UnscheduleMethod(44, "DnD")
timerDnD:Cancel(44)
timerFrostPhase:Start()
self:ScheduleMethod(45, "FrostPhaseFinished")
end
-- function mod:timerNaxxShadeRepeat()
-- if shadesSpawned == 0 then
-- timer = 34
-- warnNaxxShade:Schedule(timer)
-- warnNaxxShadeSoon:Schedule(timer-10)
-- timerNaxxShade:Start(timer)
-- shadesSpawned = shadesSpawned+1
-- warnShout:Schedule(timer+16)
-- warnShoutSoon:Schedule(timer+11)
-- timerShout:Start(timer+16)
-- else
-- timer = 60
-- warnNaxxShade:Schedule(timer)
-- warnNaxxShadeSoon:Schedule(timer-10)
-- timerNaxxShade:Start(timer)
-- shadesSpawned = shadesSpawned+1
-- if hasShoutCast == 0 then
-- warnShout:Schedule(timer+16)
-- warnShoutSoon:Schedule(timer+11)
-- timerShout:Start(timer+16)
-- end
-- end
-- end
function mod:FrostPhaseFinished()
timerDnD:Start(25)
self:ScheduleMethod(25, "DnD")
end
function mod:DnD()
timerDnD:Start()
warnDnD:Show()
self:ScheduleMethod(20,"DnD")
end
function mod:SPELL_CAST_START(args)
end
function mod:SPELL_AURA_APPLIED(args)
-----CONSTRICTING CHAINS-----
if args:IsSpellID(1003114) then
if args:IsSpellID(2124516) then
warnChains:Show(args.destName)
-----SHADOW FISSURE-----
elseif args:IsSpellID(2124579) and DBM:AntiSpam(5,5) then
if args.destName == UnitName("player") then
specWarnFissure:Show()
else
warnFissure:Show()
end
end
-----HARVEST SOUL-----
if args:IsSpellID(28679) then
if args:IsPlayer() then
timer = 15
warnHarvestSoon:Schedule(timer-5)
warnHarvest:Schedule(timer)
timerHarvest:Start(timer)
end
end
-----SEEING RED-----
if args:IsSpellID(1003255) then
warnSeeingRed:Show()
end
-----GASTRIC AFFLICTION-----
if args:IsSpellID(1003086) then
warnGastric:Show(args.destName)
if args.destName == UnitName("player") then
specWarnGastric:Show()
end
end
-----VOID ZONE-----
if args:IsSpellID(28865) then
if args.destName == UnitName("player") then
specWarnVoid:Show()
end
end
timerFissure:Start()
-----DEATH AND DECAY-----
if args:IsSpellID(1003113) then
elseif args:IsSpellID(2124575, 2124576, 2124577, 2124578) then
if args.destName == UnitName("player") then
specWarnDnD:Show()
end
elseif args:IsSpellID(2124512) then
warnPosess:Show(args.destName)
timerPosess:Start(args.destName)
elseif args:IsSpellID(2124506) then
self:SetIcon(args.destName, icy)
icy = icy - 1
elseif args:IsSpellID(2124587,2124588,2124589, 2124590) then
timerFlashFreeze:Start()
warnFlashFreezeSoon:Schedule(25)
elseif args:IsSpellID(2124572) then
if args:IsPlayer() then
SendChatMessage("Mana Bomb on "..UnitName("PLAYER").."!", "Say")
specWarnManaBomb:Show()
else
warnManaBomb:Show(args.destName)
timerNextManaBomb:Start()
timerManaBomb:Start()
self:SetIcon(args.destName, mana)
mana = mana - 1
end
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
-----HARVEST SOUL-----
if args:IsSpellID(28679) then
if args:IsPlayer() then
timer = 15
warnHarvestSoon:Schedule(timer-5)
warnHarvest:Schedule(timer)
timerHarvest:Start(timer)
end
end
-----GASTRIC AFFLICTION-----
if args:IsSpellID(1003086) then
warnGastric:Show(args.destName)
if args.destName == UnitName("player") then
specWarnGastric:Show()
end
end
-----VOID ZONE-----
if args:IsSpellID(28865) then
if args.destName == UnitName("player") then
specWarnVoid:Show()
end
end
-----DEATH AND DECAY-----
if args:IsSpellID(1003113) then
if args.destName == UnitName("player") then
specWarnDnD:Show()
end
end
end
function mod:SPELL_CAST_SUCCESS(args)
----------SPELL TRACKING----------
-----DISRUPTING SHOUT-----
if args:IsSpellID(29107) then
if notRealRazuv == 1 then
timer = 16
warnShout:Show()
warnShoutSoon:Schedule(timer-5)
timerShout:Start(timer)
hasShoutCast = 1
end
-----WAIL OF SOULS-----
elseif args:IsSpellID(1003115) then
warnWailSoul:Show()
-----FROST BLAST-----
elseif args:IsSpellID(29879) then
warnBlast:Show()
timerBlast:Start(45)
-----MANA DETONATION-----
elseif args:IsSpellID(27819) then
warnMana:Show()
timerMana:Start(30)
-----CHAINS-----
elseif args:IsSpellID(28410) then
warnChains:Show()
timerChains:Start(90)
end
--[[
----------BOSS CHECKING TOOLS----------
-----ANUB-----
if args:IsSpellID(28783) and args:sourceGUID(shade1) and spiderBoss == 0 then
spiderBoss = 1
anub = 1
elseif args:IsSpellID(28783) and args:sourceGUID(shade2) and spiderBoss == 0 then
spiderBoss = 2
anub = 2
elseif args:IsSpellID(28783) and args:sourceGUID(shade3) and spiderBoss == 0 then
spiderBoss = 3
anub = 3
elseif args:IsSpellID(28783) and args:sourceGUID(shade4) and spiderBoss == 0 then
spiderBoss = 4
anub = 4
end
-----NOTH-----
if args:IsSpellID(29213) and args:sourceGUID(shade1) and plagueBoss == 0 then
plagueBoss = 1
noth = 1
elseif args:IsSpellID(29213) and args:sourceGUID(shade2) and plagueBoss == 0 then
plagueBoss = 2
noth = 2
elseif args:IsSpellID(29213) and args:sourceGUID(shade3) and plagueBoss == 0 then
plagueBoss = 3
noth = 3
elseif args:IsSpellID(29213) and args:sourceGUID(shade4) and plagueBoss == 0 then
plagueBoss = 4
noth = 4
end
-----RAZUVIOUS-----
if args:IsSpellID(29107) and args:sourceGUID(shade1) and militaryBoss == 0 then
militaryBoss = 1
razuv = 1
elseif args:IsSpellID(29107) and args:sourceGUID(shade2) and militaryBoss == 0 then
militaryBoss = 2
razuv = 2
elseif args:IsSpellID(29107) and args:sourceGUID(shade3) and militaryBoss == 0 then
militaryBoss = 3
razuv = 3
elseif args:IsSpellID(29107) and args:sourceGUID(shade4) and militaryBoss == 0 then
militaryBoss = 4
razuv = 4
end
-----PATCHWERK-----
if args:IsSpellID(28308) and args:sourceGUID(shade1) and constructBoss == 0 then
constructBoss = 1
patch = 1
elseif args:IsSpellID(28308) and args:sourceGUID(shade2) and constructBoss == 0 then
constructBoss = 2
patch = 2
elseif args:IsSpellID(28308) and args:sourceGUID(shade3) and constructBoss == 0 then
constructBoss = 3
patch = 3
elseif args:IsSpellID(28308) and args:sourceGUID(shade4) and constructBoss == 0 then
constructBoss = 4
patch = 4
end
]]--
end
function mod:UNIT_HEALTH(uId)
--[[
if phase == 2 then
-----SPIDER WING-----
if spiderBoss == 1 then
spiderHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
elseif spiderBoss == 2 then
spiderHealth = math.max(0, UnitHealth("boss2")) / math.max(1, UnitHealthMax("boss2")) * 100;
elseif spiderBoss == 3 then
spiderHealth = math.max(0, UnitHealth("boss3")) / math.max(1, UnitHealthMax("boss3")) * 100;
elseif spiderBoss == 4 then
spiderHealth = math.max(0, UnitHealth("boss4")) / math.max(1, UnitHealthMax("boss4")) * 100;
end
-----PLAGUE WING-----
if plagueBoss == 1 then
plagueHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
elseif plagueBoss == 2 then
plagueHealth = math.max(0, UnitHealth("boss2")) / math.max(1, UnitHealthMax("boss2")) * 100;
elseif plagueBoss == 3 then
plagueHealth = math.max(0, UnitHealth("boss3")) / math.max(1, UnitHealthMax("boss3")) * 100;
elseif plagueBoss == 4 then
plagueHealth = math.max(0, UnitHealth("boss4")) / math.max(1, UnitHealthMax("boss4")) * 100;
end
-----MILITARY WING-----
if militaryBoss == 1 then
militaryHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
elseif militaryBoss == 2 then
militaryHealth = math.max(0, UnitHealth("boss2")) / math.max(1, UnitHealthMax("boss2")) * 100;
elseif militaryBoss == 3 then
militaryHealth = math.max(0, UnitHealth("boss3")) / math.max(1, UnitHealthMax("boss3")) * 100;
elseif militaryBoss == 4 then
militaryHealth = math.max(0, UnitHealth("boss4")) / math.max(1, UnitHealthMax("boss4")) * 100;
end
-----CONSTRUCT WING-----
if constructBoss == 1 then
constructHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
elseif constructBoss == 2 then
constructHealth = math.max(0, UnitHealth("boss2")) / math.max(1, UnitHealthMax("boss2")) * 100;
elseif constructBoss == 3 then
constructHealth = math.max(0, UnitHealth("boss3")) / math.max(1, UnitHealthMax("boss3")) * 100;
elseif constructBoss == 4 then
constructHealth = math.max(0, UnitHealth("boss4")) / math.max(1, UnitHealthMax("boss4")) * 100;
end
end
]]--
end
function mod:checkHealth()
--[[
if phase == 2 then
self:ScheduleMethod(1, checkHealth)
end
-----SPIDER WING-----
if spiderHealth < 67 then
anub = spiderBoss
elseif spiderHealth > 67 and spiderHealth < 34 then
anub = 0
faerlina = spiderBoss
elseif spiderHealth > 34 and spiderHealth < 1 then
faerlina = 0
maexx = spiderBoss
timer = 8
timerSpider:Start(timer)
self:ScheduleMethod(timer, "spiderTimerRepeat")
elseif spiderHealth == 0 then
maexx = 0
end
-----PLAGUE WING-----
if plagueHealth < 67 then
noth = plagueBoss
elseif plagueHealth > 67 and plagueHealth < 34 then
noth = 0
heigan = plagueBoss
if heiganDanceStart == 0 then
heiganDanceStart = 1
timer = 21
timerDance:Start(timer)
warnDance:Schedule(timer)
warnDanceSoon:Schedule(timer-5)
end
elseif plagueHealth > 34 and spiderHealth < 1 then
heigan = 0
loatheb = plagueBoss
elseif plagueHealth == 0 then
loatheb = 0
end
-----MILITARY WING-----
if militaryHealth < 67 then
razuv = militaryBoss
elseif militaryHealth > 67 and militaryHealth < 34 then
razuv = 0
gothik = militaryBoss
timer = 15
warnHarvestSoon:Schedule(timer-5)
warnHarvest:Schedule(timer)
timerHarvest:Start(timer)
elseif militaryHealth > 34 and militaryHealth < 1 then
gothik = 0
horse = militaryBoss
warnHarvestSoon:Cancel()
warnHarvest:Cancel()
timerHarvest:Stop()
elseif militaryHealth == 0 then
horse = 0
end
-----CONSTRUCT WING-----
if constructHealth < 75 then
patch = constructBoss
elseif constructHealth > 75 and constructHealth < 50 then
patch = 0
grobb = constructBoss
elseif constructHealth > 50 and constructHealth < 25 then
grobb = 0
gluth = constructBoss
elseif constructHealth > 25 and constructHealth < 1 then
gluth = 0
thadd = constructBoss
elseif constructHealth == 0 then
thadd = 0
end
]]--
end
function mod:spiderTimerRepeat()
if maexx == 0 then
else
timer = 16
timerSpider:Start(timer)
self:ScheduleMethod(timer, "spiderTimerRepeat")
if self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.80 and warnFrost == 0 then
warnFrost = 1
warnFrostSoon:Show()
elseif self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.55 and warnFrost == 1 then
warnFrost = 2
warnFrostSoon:Show()
elseif self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.75 and frostPhase == 0 then
frostPhase = 1
self:ScheduleMethod(43, "FrostPhase")
timerKTteleport:Start(43)
elseif self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.50 and frostPhase == 1 then
frostPhase = 2
self:ScheduleMethod(43, "FrostPhase")
timerKTteleport:Start(43)
elseif self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.40 and frostPhase == 2 then
frostPhase = 3
warnAddsSoon:Show()
end
end
function mod:RangeTogglePhaseTwo(show)
if show then
DBM.RangeCheck:Show(15)
else
DBM.RangeCheck:Hide()
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.EmotePhase3 or msg:find(L.EmotePhase3) then
self:ScheduleMethod(0, "PhaseThree")
end
end
function mod:RangeTogglePhaseThree(show)
if show then
DBM.RangeCheck:Show(10)
else
DBM.RangeCheck:Hide()
function mod:CHAT_MSG_MONSTER_EMOTE(msg)
if msg == L.EmotePhase3 or msg:find(L.EmotePhase3) then
self:ScheduleMethod(0, "PhaseThree")
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15928 then
icy = 8
elseif (cid >= 26614 and cid <= 26629) then
shadeCounter = shadeCounter + 1
if (mod:IsDifficulty("heroic10") or mod:IsDifficulty("heroic25")) and shadeCounter == 17 then
self:ScheduleMethod(0, "phaseThreeTransition")
elseif not (mod:IsDifficulty("heroic10") or mod:IsDifficulty("heroic25")) and shadeCounter == 16 then
self:ScheduleMethod(0, "phaseThreeTransition")
end
end
if cid == 26614 then --Anub
timerLocust:Stop()
timerImpale:Stop()
elseif cid == 26615 then -- Faerlina
timerSadism:Stop()
elseif cid == 26617 then -- Noth
timerCurse:Stop()
elseif cid == 26619 then -- Loatheb
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNecrotic:Stop()
elseif cid == 26620 then -- Raz
timerenrage:Stop()
timerKnife:Stop()
elseif (cid >= 26622 and cid <= 2665) then -- Horsemen
timerMark:Stop()
timerNextHolyWrath:Stop()
timerNextDeepChill:Stop()
timerNextMeteor:Stop()
timerNextFamine:Stop()
elseif cid == 26626 then -- Patch
timerGastric:Stop()
timerGastricSelf:Stop()
elseif cid == 26627 then -- Grobb
timerNextInjection:Stop()
timerSpray:Stop()
elseif cid == 26628 then -- Gluth
timerDecimate:Stop()
elseif cid == 26629 then -- Thadd
timerNextShift:Stop()
self:UnscheduleMethod("ShiftingPolarity")
elseif cid == 26630 then -- Sapph
timerNextBellowing:Stop()
end
end
function mod:OnCombatEnd()
self:UnscheduleMethod("DnD")
timerLocust:Stop()
timerImpale:Stop()
timerSadism:Stop()
timerCurse:Stop()
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNecrotic:Stop()
timerenrage:Stop()
timerKnife:Stop()
timerMark:Stop()
timerNextHolyWrath:Stop()
timerNextDeepChill:Stop()
timerNextMeteor:Stop()
timerNextFamine:Stop()
timerGastric:Stop()
timerGastricSelf:Stop()
timerNextInjection:Stop()
timerSpray:Stop()
timerDecimate:Stop()
timerNextShift:Stop()
timerNextBellowing:Stop()
end
+116 -70
View File
@@ -7,102 +7,148 @@ mod:RegisterCombat("combat")
mod:EnableModel()
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"CHAT_MSG_MONSTER_EMOTE",
"CHAT_MSG_RAID_BOSS_EMOTE",
"CHAT_MSG_MONSTER_EMOTE",
"SPELL_CAST_SUCCESS",
"PLAYER_ALIVE"
"SPELL_CAST_START",
"PLAYER_ALIVE",
"UNIT_DIED"
)
-----DRAIN LIFE-----
local warnDrainLifeNow = mod:NewSpellAnnounce(28542, 2)
local warnDrainLifeSoon = mod:NewSoonAnnounce(28542, 1)
local timerDrainLife = mod:NewCDTimer(22, 28542)
-----DEEP BREATH-----
local warnAirPhaseSoon = mod:NewAnnounce("WarningAirPhaseSoon", 3, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp")
local warnAirPhaseNow = mod:NewAnnounce("WarningAirPhaseNow", 4, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp")
local warnLanded = mod:NewAnnounce("WarningLanded", 4, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
local warnDeepBreath = mod:NewSpecialWarning("WarningDeepBreath")
local timerLanding = mod:NewTimer(28.5, "TimerLanding", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
local timerAirPhase = mod:NewTimer(66, "TimerAir", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp")
local timerIceBlast = mod:NewTimer(9.3, "TimerIceBlast", 15876)
local warnDeepBreath = mod:NewSpecialWarning("WarningDeepBreath")
local timerDeepBreath = mod:NewTimer(16.5, "Deep Breath", 2106817)
-----AIR PHASE------
local warnAirPhaseSoon = mod:NewAnnounce("WarningAirPhaseSoon", 3, 2124314)
local warnAirPhaseNow = mod:NewAnnounce("WarningAirPhaseNow", 4, 2124314)
local timerAirPhase = mod:NewTimer(120, "TimerAir", 2124314)
local warnLanded = mod:NewAnnounce("WarningLanded", 4, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
local timerLanding = mod:NewTimer(26, "TimerLanding", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
----ICE SPIKES & BLIZZARD----
local specWarningBlizzard = mod:NewSpecialWarningMove(2124328, 2)
-- FROST BREATH--
local timerNextBreath = mod:NewNextTimer(20, 2124322)
local timerBreath = mod:NewCastTimer(2, 2124322)
----BELLOWING ROAR----
local timerBellowing = mod:NewCastTimer(5, 2124332)
local timerNextBellowing = mod:NewNextTimer(45, 2124332)
local timerTerrified = mod:NewTimer(5, "Terrified!", 2124332)
local specWarnBellowing = mod:NewSpecialWarningSpell(2124332, 2)
--- CURSE OF SAPPHIRON----
local timerNextCurse = mod:NewNextTimer(30, 2124338)
local warnCurse = mod:NewTargetAnnounce(2124338, 2)
----FROST TOMB----
local specWarnTombTarget = mod:NewSpecialWarningYou(2124344, 2)
local warnTombTarget = mod:NewTargetAnnounce(2124344, 2)
mod:AddBoolOption("WarningIceblock", true, "announce")
-----MISC-----
local noTargetTime = 0
local isFlying = false
-- Frost Breath (2124323, 2124324, 2124325, 2124326)
-- Curse of Sapphiron (2124338)
-- Bellowing Roar (2124332)
-- Bellowing Roar effect ()
-- Frost Tomb target (2124344)
-- Frost Tomb (2124309)
-- Blizzard (2124328, 2124329, 2124330, 2124331)
-- Ice Spikes (2124333, 2124334, 2124335, 2124336)
-- "%s lifts off into the air!"
-- "%s takes a deep breath."
-- "%s resumes his attacks!"
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
noTargetTime = 0
isFlying = false
warnAirPhaseSoon:Schedule(38.5 - delay)
timerAirPhase:Start(48.5 - delay)
warnAirPhaseSoon:Schedule(80-delay)
timerAirPhase:Start(90-delay)
timerNextBreath:Start(-delay)
timerNextCurse:Start(15-delay)
end
function mod:GroundPhase()
warnAirPhaseSoon:Schedule(110)
warnLanded:Show()
timerAirPhase:Start()
timerNextBreath:Start()
timerNextCurse:Start(15)
end
function mod:AirPhase()
timerLanding:Start()
warnLanded:Schedule(27)
timerDeepBreath:Start()
warnDeepBreath:Schedule(16.5)
timerNextBreath:Stop()
timerNextCurse:Stop()
timerNextBellowing:Stop()
timerNextBellowing:Start(27.5)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(28522) and args:IsPlayer() and self.Options.WarningIceblock then
SendChatMessage(L.WarningYellIceblock, "YELL")
if args:IsSpellID(2124344) then
if args:IsPlayer() then
specWarnTombTarget:Show()
SendChatMessage("Ice Tomb incoming on "..UnitName("PLAYER").."!", "Say")
else
warnTombTarget:Show(args.destName)
end
elseif args:IsSpellID(2124328) and args.IsPlayer() then
specWarningBlizzard:Show()
elseif args:IsSpellID(2124338) then
timerNextCurse:Start()
warnCurse:Show(args.destName)
elseif args:IsSpellID(2124332) then
timerTerrified:Start()
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(28542, 55665) then -- Life Drain
warnDrainLifeNow:Show()
warnDrainLifeSoon:Schedule(18.5)
timerDrainLife:Start()
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2124332) then
specWarnBellowing:Show()
timerBellowing:Start()
timerNextBellowing:Start()
timerTerrified:Schedule(4.5)
end
if args:IsSpellID(2124322) then
timerNextBreath:Start()
timerBreath:Start()
end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.EmoteFlying or msg:find(L.EmoteFlying) then
self:ScheduleMethod(0, "AirPhase")
elseif msg == L.EmoteLanding or msg:find(L.EmoteLanding) then
self:ScheduleMethod(0, "GroundPhase")
end
end
function mod:CHAT_MSG_MONSTER_EMOTE(msg)
if msg == L.EmoteBreath or msg:find(L.EmoteBreath) then
self:SendSync("DeepBreath")
if msg == L.EmoteFlying or msg:find(L.EmoteFlying) then
self:ScheduleMethod(0, "AirPhase")
elseif msg == L.EmoteLanding or msg:find(L.EmoteLanding) then
self:ScheduleMethod(0, "GroundPhase")
end
end
mod.CHAT_MSG_RAID_BOSS_EMOTE = mod.CHAT_MSG_MONSTER_EMOTE -- used to be a normal emote
function mod:OnSync(event)
if event == "DeepBreath" then
timerIceBlast:Show()
timerLanding:Update(14)
self:ScheduleMethod(14.5, "Landing")
warnDeepBreath:Show()
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15989 or cid == 26630 then
timerAirPhase:Stop()
timerLanding:Stop()
timerNextBellowing:Stop()
timerNextBreath:Stop()
timerNextCurse:Stop()
end
end
function mod:Landing()
warnAirPhaseSoon:Schedule(56)
warnLanded:Show()
timerAirPhase:Start()
function mod:OnCombatEnd()
timerAirPhase:Stop()
timerLanding:Stop()
timerNextBellowing:Stop()
timerNextBreath:Stop()
timerNextCurse:Stop()
end
local function resetIsFlying()
isFlying = false
end
mod:RegisterOnUpdateHandler(function(self, elapsed)
if not self:IsInCombat() then return end
local foundBoss, target
for i = 1, GetNumRaidMembers() do
local uId = "raid"..i.."target"
if self:GetUnitCreatureId(uId) == 15989 and UnitAffectingCombat(uId) then
target = UnitName(uId.."target")
foundBoss = true
break
end
end
if foundBoss and not target then
noTargetTime = noTargetTime + elapsed
elseif foundBoss then
noTargetTime = 0
end
if noTargetTime > 0.5 and not isFlying then
noTargetTime = 0
isFlying = true
self:Schedule(60, resetIsFlying)
timerDrainLife:Cancel()
timerAirPhase:Cancel()
warnAirPhaseNow:Show()
timerLanding:Start()
end
end, 0.2)
+45 -26
View File
@@ -8,52 +8,40 @@ mod:RegisterEvents(
"SPELL_AURA_APPLIED", --This should allow the addon to process this Event using the scripting from Kel'Thuzad for Harvest Soul.
"SPELL_AURA_APPLIED_DOSE", --This should allow the addon to process this Event using the scripting from Kel'Thuzad for Harvest Soul.
"UNIT_DIED",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"UNIT_HEALTH",
"UNIT_DIED",
"CHAT_MSG_MONSTER_YELL"
)
-----ADD DEATHS-----
local warnRiderDown = mod:NewAnnounce("Unrelenting Rider Killed", 2, 36461, nil, "Show a warning when an Unrelenting Rider is killed")
local warnKnightDown = mod:NewAnnounce("Unrelenting Death Knight Killed", 2, 36461, nil, "Show a warning when an Unrelenting Rider is killed")
-----HARVEST SOUL-----
local warnHarvestSoon = mod:NewSoonAnnounce(28679, 3)
local warnHarvestSoon = mod:NewSoonAnnounce(28679, 2)
local warnHarvest = mod:NewSpellAnnounce(28679, 2)
local timerHarvest = mod:NewNextTimer(15, 28679)
-----COMBAT START----
local timerCombatStart = mod:NewTimer(25, "Combat Starts", 2457, nil, "Show timer for the start of combat")
local warnCombatStartSoon = mod:NewAnnounce("Combat Starts Soon", 2, 2457, nil, "Show pre-warning for the end of the Safety Dance")
local warnCombatStart = mod:NewAnnounce("Combat Starts Now", 3, 2457, nil, "Show warning for the end of the Safety Dance")
local warnCombatStart = mod:NewAnnounce("Combat Starts Now", 2, 2457, nil, "Show warning for the end of the Safety Dance")
-----GOTHIK ARRIVES----
local timerGothik = mod:NewTimer(100, "Gothik Arrives", 46573, nil, "Show timer for the arrival of Gothik")
local warnGothikSoon = mod:NewAnnounce("Gothik Arrives Soon", 2, 46573, nil, "Show pre-warning for the arrival of Gothik")
local warnGothik = mod:NewAnnounce("Gothik Arrives Now", 3, 46573, nil, "Show warning for the arrival of Gothik")
local warnGothik = mod:NewAnnounce("Gothik Arrives Now", 2, 46573, nil, "Show warning for the arrival of Gothik")
--------MISC--------
local phase = nil
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
self:ScheduleMethod(115, "HarvestSoul")
-----HARVEST SOUL-----
harvestSoulIntiialTimer = 115
warnHarvestSoon:Schedule(harvestSoulIntiialTimer-5)
warnHarvest:Schedule(harvestSoulIntiialTimer)
timerHarvest:Start(harvestSoulIntiialTimer)
-----COMBAT START----
combatStartTimer = 25
timerCombatStart:Start(combatStartTimer)
warnCombatStartSoon:Schedule(combatStartTimer-5)
warnCombatStart:Schedule(combatStartTimer)
-----GOTHIK ARRIVES----
gothikTimer = 100
timerGothik:Start(gothikTimer)
warnGothikSoon:Schedule(gothikTimer-5)
warnGothik:Schedule(gothikTimer)
end
function mod:HarvestSoul()
timer = 15
timerHarvest:Start(timer)
warnHarvestSoon:Schedule(timer-3, 15)
warnHarvest:Schedule(timer)
self:ScheduleMethod(timer, "HarvestSoul")
timerHarvest:Start(20)
warnHarvestSoon:Schedule(17)
warnHarvest:Schedule(20)
self:ScheduleMethod(20, "HarvestSoul")
end
function mod:UNIT_DIED(args)
@@ -65,4 +53,35 @@ function mod:UNIT_DIED(args)
warnKnightDown:Show()
end
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if (msg == L.yell or msg:find(L.yell)) and phase == nil then
self:ScheduleMethod(100, "HarvestSoul")
phase = 1
-----HARVEST SOUL-----
warnHarvestSoon:Schedule(115)
warnHarvest:Schedule(120)
timerHarvest:Start(120)
-----COMBAT START----
timerCombatStart:Start(25)
warnCombatStartSoon:Schedule(20)
warnCombatStart:Schedule(25)
-----GOTHIK ARRIVES----
timerGothik:Start(100)
warnGothikSoon:Schedule(95)
warnGothik:Schedule(100)
end
end
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 16060 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.11 and phase ==1 then
self:UnscheduleMethod("HarvestSoul")
timerHarvest:Stop()
phase = 2
end
end
function mod:OnCombatEnd()
self:UnscheduleMethod("HarvestSoul")
end
+128 -6
View File
@@ -7,16 +7,39 @@ mod:RegisterCombat("combat", 16063, 16064, 16065, 30549)
mod:EnableModel()
mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"UNIT_DIED"
)
-----MARKS-----
local warnMarkSoon = mod:NewAnnounce("WarningMarkSoon", 1, 28835, false)
local warnMarkNow = mod:NewAnnounce("WarningMarkNow", 2, 28835)
local specWarnMarkOnPlayer = mod:NewSpecialWarning("SpecialWarningMarkOnPlayer", nil, false, true)
local specWarnHolyWrathYou = mod:NewSpecialWarningYou(2124141,2)
local warnHolyWrath = mod:NewTargetAnnounce(2124141,2)
local specWarnDeepChillYou = mod:NewSpecialWarningYou(2124167,2)
local warnDeepChill = mod:NewTargetAnnounce(2124167,2)
local specWarnMeteorYou = mod:NewSpecialWarningYou(2124128,2)
local warnMeteor = mod:NewTargetAnnounce(2124128,2)
local specWarnFamineYou = mod:NewSpecialWarningYou(2124166,2)
local warnFamine = mod:NewTargetAnnounce(2124166,2)
----timers----
local timerMark = mod:NewTimer(12, "Mark of the Apocalypse", 2124107)
local timerHolyWrath = mod:NewTargetTimer(3.8, 2124141)
local timerNextHolyWrath = mod:NewNextTimer(20, 2124141)
local timerDeepChill = mod:NewTargetTimer(3.8, 2124167)
local timerNextDeepChill = mod:NewNextTimer(20, 2124167)
local timerMeteor = mod:NewTargetTimer(7.8, 2124128)
local timerNextMeteor = mod:NewNextTimer(20, 2124128)
local timerFamine = mod:NewTargetTimer(3.8, 2124166)
local timerNextFamine = mod:NewNextTimer(20, 2124166)
-----MISC-----
local berserkTimer = mod:NewBerserkTimer(600)
local berserkTimer = mod:NewBerserkTimer(606)
local meteorTarget = nil
mod:AddBoolOption("HealthFrame", true)
mod:SetBossHealthInfo(
16064, L.Korthazz,
@@ -29,21 +52,120 @@ local markCounter = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
berserkTimer:Start()
timerMark:Start(18-delay)
timerNextMeteor:Start(21-delay)
timerNextDeepChill:Start(11-delay)
timerNextHolyWrath:Start(25-delay)
timerNextFamine:Start(16-delay)
markCounter = 0
end
function mod:Meteor()
local myName = UnitName("player")
if meteorTarget == myName then
specWarnMeteorYou:Show()
SendChatMessage("Meteor on "..UnitName("PLAYER").."!", "Say")
else
warnMeteor:Show(meteorTarget)
end
timerMeteor:Start(meteorTarget)
timerNextMeteor:Start()
self:SetIcon(meteorTarget, 7, 8)
end
function mod:DeepChill()
local targetDC = mod:GetBossTarget(30549) or mod:GetBossTarget(26622)
if targetDC == UnitName("player") then
specWarnDeepChillYou:Show()
SendChatMessage("Deep Chill on "..UnitName("PLAYER").."!", "Say")
else
warnDeepChill:Show(targetDC)
end
timerDeepChill:Start(targetDC)
timerNextDeepChill:Start()
self:SetIcon(targetDC, 6, 4)
end
function mod:HolyWrath()
local targetHW = mod:GetBossTarget(16063) or mod:GetBossTarget(26624)
if targetHW == UnitName("player") then
specWarnHolyWrathYou:Show()
SendChatMessage("Holy Wrath on "..UnitName("PLAYER").."!", "Say")
else
warnHolyWrath:Show(targetHW)
end
timerHolyWrath:Start(targetHW)
timerNextHolyWrath:Start()
self:SetIcon(targetHW, 1, 4)
end
function mod:Famine()
local famineTarget = mod:GetBossTarget(16065) or mod:GetBossTarget(26625) --Finds target of boss (if exsists) otherwise, find target of shade (if exists)
if famineTarget == UnitName("player") then --if target == player
specWarnFamineYou:Show()
SendChatMessage("Field of Famine on "..UnitName("PLAYER").."!", "Say")
else
warnFamine:Show(famineTarget)
end
timerFamine:Start(famineTarget) --we want timers to start even if player is the target, you had the timers only in the "if not player".
timerNextFamine:Start()
self:SetIcon(famineTarget, 3, 4)
end
local markSpam = 0
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(28832, 28833, 28834, 28835) and (GetTime() - markSpam) > 5 then
if args:IsSpellID(2124103,2124107,2124111,2124115) and (GetTime() - markSpam) > 5 then
markSpam = GetTime()
markCounter = markCounter + 1
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2124141) then
self:ScheduleMethod(0.25, "HolyWrath")
end
if args:IsSpellID(2124167) then
self:ScheduleMethod(0.25, "DeepChill")
end
if args:IsSpellID(2124166) then
self:ScheduleMethod(0.25, "Famine")
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2124128) then
self:ScheduleMethod(0.25, "Meteor")
meteorTarget = args.destName
elseif args:IsSpellID(2124103, 2124104, 2124105, 2124106) or args:IsSpellID(2124107, 2124108, 2124109, 2124110) or args:IsSpellID(2124111, 2124112, 2124113, 2124114) or args:IsSpellID(2124115, 2124116, 2124117, 2124118) then
timerMark:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(28832, 28833, 28834, 28835) and args:IsPlayer() then
if args.amount >= 4 then
if args:IsSpellID(2124103,2124107,2124111,2124115) and args:IsPlayer() then
if args.amount >= 3 then
specWarnMarkOnPlayer:Show(args.spellName, args.amount)
end
elseif args:IsSpellID(2124103, 2124104, 2124105, 2124106) or args:IsSpellID(2124107, 2124108, 2124109, 2124110) or args:IsSpellID(2124111, 2124112, 2124113, 2124114) or args:IsSpellID(2124115, 2124116, 2124117, 2124118) then
timerMark:Start()
end
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16063 or 26624 then
timerNextHolyWrath:Stop()
end
if cid == 16064 or 26623 then
timerNextMeteor:Stop()
end
if cid == 16065 or 26625 then
timerNextFamine:Stop()
end
if cid == 30549 or 26622 then
timerNextDeepChill:Stop()
end
if cid >= 26622 and cid <= 26625 then
timerMark:Stop()
end
end
+119 -85
View File
@@ -10,122 +10,156 @@ mod:SetBossHealthInfo(
)
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_CAST_SUCCESS",
"SPELL_CAST_START",
"UNIT_HEALTH",
"PLAYER_ALIVE"
"UNIT_DIED",
"PLAYER_ALIVE",
"SPELL_MISSED"
)
-----DISRUPTING SHOUT-----
local warnShoutNow = mod:NewSpellAnnounce(29107, 2)
local warnShoutSoon = mod:NewSoonAnnounce(29107, 3)
local timerShout = mod:NewCDTimer(10, 29107)
local warnShoutNowBackup = mod:NewSpellAnnounce(29107, 2)
local warnShoutSoonBackup = mod:NewSoonAnnounce(29107, 3)
local timerShoutBackup = mod:NewCDTimer(10, 29107)
-----SHADOW BURST-----
local warnShadowBurstNow = mod:NewSpellAnnounce(1003108, 2)
local warnShadowBurstSoon = mod:NewSoonAnnounce(1003108, 3)
local timerShadowBurst = mod:NewNextTimer(25, 1003108)
local timerShout = mod:NewCDTimer(8, 2123920)
-----Break Unholy Blade-----
local warnUnholyBladeNow = mod:NewSpellAnnounce(2123928, 2)
local warnUnholyBladeSoon = mod:NewSoonAnnounce(2123928, 2)
local timerUnholyBlade = mod:NewNextTimer(30, 2123928)
local timerCastUnholyBlade = mod:NewCastTimer(3, 2123928)
-----JAGGED KNIFE-----
local warnKnifeNow = mod:NewTargetAnnounce(55550, 2)
local specWarnKnife = mod:NewSpecialWarningSpell(55550, nil, nil, nil, 10)
-----BRUISING BLOW-----
local warnBlowNow = mod:NewSpellAnnounce(26613, 2)
local warnBlowSoon = mod:NewSoonAnnounce(26613, 3)
local timerBlow = mod:NewNextTimer(15, 26613)
-----CURSE OF FEEBLENESS-----
local warnCurseNow = mod:NewSpellAnnounce(1003253, 2)
local warnCurseEndSoon = mod:NewSoonAnnounce(1003253, 3)
local timerCurse = mod:NewBuffActiveTimer(120, 1003253)
local warnKnifeNow = mod:NewTargetAnnounce(2123924, 2)
local timerKnife = mod:NewNextTimer(15, 2123924)
-----Death Strike-----
local timerDeathStrike = mod:NewNextTimer(15,2123919)
local warnDeathStrike = mod:NewCastAnnounce(2123919)
local specwarnDeathStrike = mod:NewSpecialWarningStack(2123919, 2)
--------Strikes--------------
local timerPlagueStrike = mod:NewTimer(12, "Plague Strike active", 2123905)
local timerFrostStrike = mod:NewTimer(12, "Frost Strike active", 2123904)
-----MISC-----
local razHealth
local prewarn
local phase
local notKT = 0
local warnPhase2 = mod:NewPhaseAnnounce(2)
local warnPhase2Soon = mod:NewAnnounce("Prepare to stack for Anti-Magic Zone!", 1, 2123928, nil, "Show pre-warning for Phase 2")
local timerenrage = mod:NewTimer(180, "Enrage", 2123914)
-----PROG NOTES-------
--"Brake Unholy Blade" (2123928) - vet ikke timer
-- 2123905,"Plague Strike" || SPELL_CAST_SUCCESS
--2123919,"Death Strike" || SPELL_CAST_START - vet ikke timer
-- 2123920 - Disrupting Shout || vet ikke timer
-- Frost Strike - (finn Spell ID). 12 sec, 20sec CD
-- finn timer Death Strike
-- finn timer Jagged Knife
-- finn timer Break Unholy Blade
-- fix trigger for p2
--
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
phase = 1
prewarn = 1
self.vb.phase = 1
RealRazuv = 1
-----Shout-----
warnShoutNow:Schedule(16 - delay)
warnShoutSoon:Schedule(11 - delay)
timerShout:Start(16 - delay)
-----Shadow Burst-----
warnShadowBurstNow:Schedule(25-delay)
warnShadowBurstSoon:Schedule(20-delay)
timerShadowBurst:Start(25-delay)
-----Bruising Blow-----
warnBlowNow:Schedule(15-delay)
warnBlowSoon:Schedule(10-delay)
timerBlow:Start(15-delay)
-----Break Unholy Blade-----
timerUnholyBlade:Start(-delay)
if mod:GetBossTarget(16061) ~= nil then
timerKnife:Start(-delay)
timerDeathStrike:Start(20-delay)
end
end
function mod:BreakUnholyBlade()
warnUnholyBladeNow:Show()
timerUnholyBlade:Start()
timerCastUnholyBlade:Start()
warnUnholyBladeSoon:Show(25)
end
function mod:DeathStrike()
warnDeathStrike:Show()
timerDeathStrike:Start()
end
function mod:PhaseTwo()
timerDeathStrike:Stop()
timerUnholyBlade:Stop()
warnPhase2:Show();
timerenrage:Start()
timerShout:Start(8)
timerKnife:Start()
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(55550) then
if args:IsSpellID(2123924,2123925,2123926,2123927) then
warnKnifeNow:Show(args.destName)
if args:IsPlayer() then
specWarnKnife:Show(10);
SendChatMessage(L.YellKnife, "YELL")
notKT = 1
SendChatMessage("Jagged Cold Steel Knife on "..UnitName("PLAYER").."!", "Say")
end
elseif args:IsSpellID(1003253) then
timer = 120
warnCurseNow:Schedule(timer)
warnCurseEndSoon:Schedule(timer-10)
timerCurse:Start(timer)
notKT = 1
end
timerKnife:Start()
end
if args:IsSpellID(2123914) then
self:ScheduleMethod(0,"PhaseTwo")
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(2123919) and args.amount >=1 then
if args:IsPlayer() then
specwarnDeathStrike:Show(args.amount)
end
end
end
function mod:SPELL_CAST_SUCCESS(args)
if RealRazuv then
if args:IsSpellID(26613) then
timer = 15
warnBlowNow:Schedule(timer)
warnBlowSoon:Schedule(timer-5)
timerBlow:Start(timer)
elseif args:IsSpellID(29107) then
if notKT == 1 then
timer = 10
self:Unschedule("warnShoutNowBackup")
self:Unschedule("warnShoutSoonBackup")
timerShoutBackup:Stop()
warnShoutNow:Schedule(timer)
warnShoutSoon:Schedule(timer-3)
timerShout:Start(timer)
warnShoutNowBackup:Schedule(timer*2)
warnShoutSoonBackup:Schedule(timer*2-3)
timerShoutBackup:Start(timer*2)
end
if args:IsSpellID(2123905) then
timerPlagueStrike:Start()
end
if args:IsSpellID(2123904) then
timerFrostStrike:Start()
end
end
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(2123928,2123929,2123930,2123931) then
phase = 2
self.vb.phase = 2
self:ScheduleMethod(0,"PhaseTwo")
end
end
function mod:SPELL_MISSED(args)
if args:IsSpellID(2123920) and (args.destName == "Instructor Razuvious" or args.destName == "Shade of Instructor Razuvious") then
timerShout:Start()
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(1003108) then
timer = 25
warnShadowBurstNow:Schedule(timer)
warnShadowBurstSoon:Schedule(timer-5)
timerShadowBurst:Start(timer)
if args:IsSpellID(2123928,2123929,2123930,2123931) then
self:ScheduleMethod(0,"BreakUnholyBlade")
end
if args:IsSpellID(2123919) then
self:ScheduleMethod(0, "DeathStrike")
end
end
function mod:UNIT_HEALTH(args)
razHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if razHealth < 40 and phase == 1 then
phase = 2
self.vb.phase = 2
warnPhase2:Show();
-----Shadow Burst-----
warnShadowBurstNow:Cancel();
warnShadowBurstSoon:Cancel();
timerShadowBurst:Cancel();
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 16061 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.55 and phase == 1 and prewarn == 1 then
warnPhase2Soon:Show()
prewarn = 2
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16061 or cid == 26620 then
timerenrage:Stop()
timerKnife:Stop()
end
end
function mod:OnCombatEnd()
timerenrage:Stop()
timerKnife:Stop()
end
+146 -46
View File
@@ -6,79 +6,179 @@ mod:SetCreatureID(15936)
mod:RegisterCombat("combat")
mod:EnableModel()
mod:RegisterEvents(
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS",
"UNIT_DIED"
)
-----TELEPORT-----
local warnTeleportSoon = mod:NewAnnounce("Teleport to Platform Soon", 2, 46573, nil, "Show pre-warning for Heigan teleporting to the platform")
local warnTeleportNow = mod:NewAnnounce("Teleport to Platform Now", 3, 46573, nil, "Show warning for Heigan teleporting to the platform")
local timerTeleport = mod:NewTimer(90, "Teleport to Platform", 46573, nil, "Show timer for Heigan teleporting to the platform")
local warnTeleportSoon = mod:NewAnnounce("The Dance is starting soon", 2, 46573, nil, "Show pre-warning for Heigan teleporting to the platform")
local warnTeleportNow = mod:NewAnnounce("Teleport to Platform Now", 2, 46573, nil, "Show warning for Heigan teleporting to the platform")
local timerTeleport = mod:NewTimer(90, "Heigan's Dance (Teleport)", 46573, nil, "Show timer for Heigan teleporting to the platform")
-----POSITIONS-----
local timerPositionOne = mod:NewTimer(10, "Position: Entrance", 2122702)
local timerPositionTwo = mod:NewTimer(10, "Position: Center West", 2122702)
local timerPositionThree = mod:NewTimer(10, "Position: Center East", 2122702)
local timerPositionFour = mod:NewTimer(10, "Position: Exit", 2122702)
-----DANCE ENDS----
local timerDanceEnds = mod:NewTimer(47, "Dance Ends", 46573, nil, "Show timer for the end of the Safety Dance")
local warnDanceEndsSoon = mod:NewAnnounce("Dance Ends Soon", 2, 46573, nil, "Show pre-warning for the end of the Safety Dance")
local warnDanceEnds = mod:NewAnnounce("Dance Ends Now", 3, 46573, nil, "Show warning for the end of the Safety Dance")
local timerDanceEnds = mod:NewTimer(50, "Dance Ends", 46573, nil, "Show timer for the end of the Safety Dance")
-----SPELL DISRUPTION------
local specWarnSpellDisruption = mod:NewSpecialWarningYou(29310, false)
local specWarnBurningFever = mod:NewSpecialWarningYou(1003068)
local specWarnSpellDisruption = mod:NewSpecialWarningYou(2122708)
local specWarnDecrepitFever = mod:NewSpecialWarningYou(1003068)
-----Touch of the Unclean-----
local warnTouch = mod:NewAnnounce(L.HeiganTouch, 2, 196780)-- 196791 heroic
local warnTouchHC = mod:NewAnnounce(L.HeiganTouchHC, 2, 196791)
local specWarnTouch = mod:NewSpecialWarningStack(2122722, nil, 2)
local warnTouch = mod:NewAnnounce("%s on >%s< (%d)",2, 2122722)
----PLAGUE NOVA----
local specWarnPlagueNova = mod:NewSpecialWarningSpell(2122717, 2)
local timerPlagueNova = mod:NewNextTimer(60, 2122717)
local timerCastPlagueNova = mod:NewCastTimer(5, 2122717)
-----MISC-----
local berserkTimer = mod:NewBerserkTimer(540)
local dance = 0
local forward = 1
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
berserkTimer:Start(540-delay)
mod:SlowDancePhase()
end
function mod:DancePhase()
timer = 45
timerDanceEnds:Show(timer)
warnDanceEndsSoon:Schedule(timer-10, 10)
warnDanceEnds:Schedule(timer)
self:ScheduleMethod(timer, "SlowDancePhase")
dance = 0
self:ScheduleMethod(0-delay,"SlowDancePhase")
end
function mod:SlowDancePhase()
timer = 90
timerTeleport:Show(timer)
warnTeleportSoon:Schedule(timer-15, 15)
warnTeleportNow:Schedule(timer)
self:ScheduleMethod(timer, "DancePhase")
dance = 0
forward = 1
timerPositionTwo:Stop()
timerPositionThree:Stop()
self:UnscheduleMethod("PositionTwo")
self:UnscheduleMethod("PositionThree")
timerTeleport:Start(90)
warnTeleportSoon:Schedule(85)
timerPositionOne:Start(15)
self:ScheduleMethod(15,"PositionTwo")
end
function mod:DancePhase()
dance = 1
forward = 1
timerPositionThree:Stop()
self:UnscheduleMethod("PositionFour")
timerDanceEnds:Start()
timerPositionOne:Start(10)
self:ScheduleMethod(10,"PositionTwo")
end
function mod:PositionOne()
forward = 1
if dance == 1 then
timerPositionOne:Start(4)
self:ScheduleMethod(4, "PositionTwo")
else
timerPositionOne:Start(10)
self:ScheduleMethod(10, "PositionTwo")
end
end
function mod:PositionTwo()
if dance == 1 then
timerPositionTwo:Start(4)
if forward == 1 then
self:ScheduleMethod(4, "PositionThree")
else
self:ScheduleMethod(4, "PositionOne")
end
else
timerPositionTwo:Start(10)
if forward == 1 then
self:ScheduleMethod(10, "PositionThree")
else
self:ScheduleMethod(10, "PositionOne")
end
end
end
function mod:PositionThree()
if dance == 1 then
timerPositionThree:Start(4)
if forward == 1 then
self:ScheduleMethod(4, "PositionFour")
else
self:ScheduleMethod(4, "PositionTwo")
end
else
timerPositionThree:Start(10)
if forward == 1 then
self:ScheduleMethod(10, "PositionFour")
else
self:ScheduleMethod(10, "PositionTwo")
end
end
end
function mod:PositionFour()
forward = 0
if dance == 1 then
timerPositionFour:Start(4)
self:ScheduleMethod(4, "PositionThree")
else
timerPositionFour:Start(10)
self:ScheduleMethod(10, "PositionThree")
end
end
function mod:KillPositions()
timerPositionOne:Stop()
timerPositionTwo:Stop()
timerPositionThree:Stop()
timerPositionFour:Stop()
self:UnscheduleMethod("PositionOne")
self:UnscheduleMethod("PositionTwo")
self:UnscheduleMethod("PositionThree")
self:UnscheduleMethod("PositionFour")
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2122717) then
specWarnPlagueNova:Show()
timerCastPlagueNova:Start()
self:ScheduleMethod(0, "DancePhase")
self:ScheduleMethod(50, "SlowDancePhase")
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(29310) then
if args:IsSpellID(2122708) then
if args:IsPlayer() then
specWarnSpellDisruption:Show();
specWarnSpellDisruption:Show()
end
elseif args:IsSpellID(1003068) then
elseif args:IsSpellID(1003068) then
if args:IsPlayer() then
specWarnBurningFever:Show();
SendChatMessage(L.YellBurningFever, "YELL")
end
elseif args:IsSpellID(196780) then
warnTouch:Show(args.spellName, args.destName, args.amount or 1)
specWarnDecrepitFever:Show();
SendChatMessage("Decrepit Fever on "..UnitName("PLAYER").."!", "Say")
end
elseif args:IsSpellID(196791) then
warnTouchHC:Show(args.spellName, args.destName, args.amount or 1)
warnTouch:Show(args.destName, args.amount or 1)
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(29310) then
if args:IsSpellID(2122722) then
if args:IsPlayer() then
specWarnSpellDisruption:Show();
specWarnTouch:Show(args.amount)
else
warnTouch:Show(args.spellName, args.destName, args.amount or 1)
end
elseif args:IsSpellID(1003068) then
if args:IsPlayer() then
specWarnBurningFever:Show();
SendChatMessage(L.YellBurningFever, "YELL")
end
elseif args:IsSpellID(196780) then
warnTouch:Show(args.spellName, args.destName, args.amount or 1)
elseif args:IsSpellID(196791) then
warnTouchHC:Show(args.spellName, args.destName, args.amount or 1)
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15936 or cid == 26618 then
self:ScheduleMethod(0,"KillPositions")
end
end
function mod:OnCombatEnd()
self:ScheduleMethod(0,"KillPositions")
end
+100 -55
View File
@@ -6,51 +6,78 @@ mod:SetCreatureID(16011)
mod:RegisterCombat("combat")
mod:EnableModel()
mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"UNIT_DIED",
"PLAYER_ALIVE"
)
-----SPORES-----
local warnSporeNow = mod:NewSpellAnnounce(29234, 3)
local warnSporeNow = mod:NewSpellAnnounce(29234, 2)
local warnSporeSoon = mod:NewSoonAnnounce(29234, 2)
local timerSpore = mod:NewNextTimer(18, 29234)
local timerSpore = mod:NewNextTimer(30, 29234)
local specWarnCloudOfBlight = mod:NewSpecialWarningMove(79008)
-----IMPENDING DOOM-----
local warnDoomNow = mod:NewSpellAnnounce(29204, 3)
local timerDoom = mod:NewNextTimer(180, 29204)
local warnDoomNow = mod:NewSpellAnnounce(29204, 2)
local timerNextDoom = mod:NewNextTimer(180, 29204)
local timerDoomDamage = mod:NewTimer(8, "Inevitable Doom expires!", 2122623)
-----HEALING AURA-----
local warnHealSoon = mod:NewAnnounce("WarningHealSoon", 4, 48071)
local warnHealNow = mod:NewAnnounce("WarningHealNow", 1, 48071, false)
local timerAura = mod:NewBuffActiveTimer(17, 55593)
local warnHealNow = mod:NewAnnounce("Healing available!", 1, 48071)
local timerNecrotic = mod:NewBuffActiveTimer(16, 2122601)
local timerCastHeal = mod:NewTimer(4, "Heal now!", nil)
-----SOFT ENRAGE-----
local warnSoftEnrageSoon = mod:NewSpellAnnounce(79009, 3)
local warnSoftEnrageSoon = mod:NewSpellAnnounce(79009, 2)
local warnSoftEnrageNow = mod:NewSoonAnnounce(79009, 2)
local loathebHealth
local phase
local softEnrage
-----DEATHBLOOM-----
local timerNextDeathbloom = mod:NewNextTimer(30, 2122627)
local timerDeathblooming = mod:NewTimer(15, "Deathbloom expires!", 2122627)
local specWarnDeathblooming = mod:NewAnnounce("Deathbloom will expire soon!", 1,2122627)
local warnDeathbloomStack = mod:NewAnnounce("%s on >%s< (%d)", 2, 2122631)
-----MISC-----
mod:AddBoolOption("SporeDamageAlert", false)
local doomCounter = 0
local doomSpam = 0
local bloomSpam = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
phase = 1
doomSpam = 0
bloomSpam = 0
softEnrage = 0
doomCounter = 0
if mod:IsDifficulty("heroic25") then
sporeTimer = 15
else
sporeTimer = 15
end
timerSpore:Start(sporeTimer - delay)
warnSporeSoon:Schedule(sporeTimer - delay)
timerDoom:Start(120 - delay, doomCounter + 1)
self:ScheduleMethod(sporeTimer, "SporeSpawn")
timerSpore:Start(15-delay)
timerNecrotic:Start(10-delay)
timerNextDoom:Start(30-delay)
timerNextDeathbloom:Start(10-delay)
self:ScheduleMethod(15-delay, "SporeSpawn")
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(29204, 55052) then -- Inevitable Doom
-- Deathbloom (2122631)
-- Deathbloom trigger (2122627)
-- Necrotic Aura (2122601)
-- Aura of Famine (2122605)
-- Inevitable Doom (2122623)
-- Cloud of Plight (2122646)
function mod:SporeSpawn()
warnSporeNow:Show()
timerSpore:Start()
warnSporeSoon:Schedule(25)
self:ScheduleMethod(30, "SporeSpawn")
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2122646) then
if args:IsPlayer() then
specWarnCloudOfBlight:Show();
end
end
if args:IsSpellID(2122623,2122624,2122625,2122626) and (GetTime() - doomSpam) > 5 then
doomSpam = GetTime() -- Inevitable Doom
doomCounter = doomCounter + 1
local timer = 30
if doomCounter >= 7 then
@@ -58,46 +85,64 @@ function mod:SPELL_CAST_SUCCESS(args)
else timer = 12 end
end
warnDoomNow:Show(doomCounter)
timerDoom:Start(timer, doomCounter + 1)
elseif args:IsSpellID(55593) then
timerAura:Start()
warnHealSoon:Schedule(14)
warnHealNow:Schedule(17)
timerNextDoom:Start(timer, doomCounter + 1)
timerDoomDamage:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(79008) then
if args:IsPlayer() then
specWarnCloudOfBlight:Show();
end
if args:IsSpellID(2122601) and DBM:AntiSpam(5,2) then
timerNecrotic:Start()
warnHealNow:Schedule(16)
timerCastHeal:Schedule(16)
end
if args:IsSpellID(2122627) and DBM:AntiSpam(5,4) then
specWarnDeathblooming:Show()
timerDeathblooming:Start()
timerNextDeathbloom:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(79008) then
if args:IsSpellID(2122646) then
if args:IsPlayer() then
specWarnCloudOfBlight:Show();
end
end
end
function mod:SporeSpawn(args)
timer = 14
warnSporeNow:Show()
timerSpore:Start(timer)
warnSporeSoon:Schedule(timer-3)
self:ScheduleMethod(timer, "SporeSpawn")
end
function mod:UNIT_HEALTH(args)
loathebHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if loathebHealth < 25 and phase == 1 then
phase = 2
warnSoftEnrageSoon:Show()
elseif loathebHealth < 20 and phase == 2 then
phase = 3
warnSoftEnrageNow:Show()
if args:IsSpellID(2122631) then
if args:IsPlayer() and (args.amount == 5 or args.amount == 10 or args.amount == 15 or args.amount == 20) and (GetTime() - bloomSpam) > 5 then
bloomSpam = GetTime()
warnDeathbloomStack:Show(args.spellName, args.destName, args.amount or 1)
end
end
end
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 16011 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and softEnrage == 0 then
softEnrage = 1
warnSoftEnrageSoon:Show()
elseif self:GetUnitCreatureId(uId) == 16011 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.20 and softEnrage == 1 then
softEnrage = 2
warnSoftEnrageNow:Show()
warnSporeSoon:Cancel()
timerSpore:Stop()
timerNecrotic:Stop()
warnHealNow:Cancel()
timerNextDoom:Stop()
self:UnscheduleMethod("SporeSpawn")
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16011 or cid == 26619 then
timerNecrotic:Stop()
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNextDoom:stop()
end
end
function mod:OnCombatEnd()
timerNecrotic:Stop()
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNextDoom:stop()
end
+101 -46
View File
@@ -6,82 +6,137 @@ mod:SetCreatureID(15954)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"PLAYER_ALIVE"
"PLAYER_ALIVE",
"UNIT_HEALTH",
"UNIT_DIED",
"CHAT_MSG_RAID_BOSS_EMOTE"
)
-----TELEPORT-----
local warnTeleportNow = mod:NewAnnounce("Teleport Now", 3, 46573, nil, "Show warning for Noth teleporting to and from the balcony")
local warnTeleportSoon = mod:NewAnnounce("Teleport in 10 seconds", 1, 46573, nil, "Show pre-warning for Noth teleporting to and from the balcony")
local timerTeleport = mod:NewTimer(600, "Teleport to Balcony", 46573, nil, "Show timer for Noth teleporting to the balcony")
local timerTeleportBack = mod:NewTimer(600, "Teleport to Raid", 46573, nil, "Show timer for Noth teleporting from the balcony")
local warnIntermissionNow = mod:NewAnnounce("Intermission now", 2, 46573, nil, "Show warning for Noth teleporting to the balcony")
local warnIntermissionSoon = mod:NewAnnounce("Intermission soon", 2, 46573, nil, "Show pre-warning for Noth teleporting to the balcony")
local timerTeleportBack = mod:NewTimer(60, "Noth returns to the battlefield", 46573, nil, "Show timer for Noth teleporting from the balcony")
local warnNothReturn = mod:NewAnnounce("Noth has returned to the battlefield", 46573, nil, "Show warning for Noth returning from the balcony")
-----CURSE-----
local warnCurse = mod:NewSpellAnnounce(29213, 2)
local specWarnCurse = mod:NewSpecialWarningYou(29213)
local timerCurse = mod:NewNextTimer(30, 2123805)
local warnCurse = mod:NewSpellAnnounce(2123805, 2)
local specWarnCurse = mod:NewSpecialWarningYou(2123805)
-----Adds-----
local timerSkeletons = mod:NewNextTimer(30, 52611)
local timerWarriorSkeletons = mod:NewTimer(30,"Wave of Warrior Skeletons", 52611)
local timerSkeletonWave = mod:NewTimer(26, "Wave of Skeletons", 52611)
local timerArcaneExplo = mod:NewNextTimer(30, 2123828)
--Rise, my soldiers! Rise and fight once more!
-----MISC-----
-- local berserkTimer = mod:NewBerserkTimer(375)
local phase = 0
local prePhase = 0
local curseSpam = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
-- berserkTimer:Start(375-delay)
timerSkeletons:Start(15-delay)
timerSkeletons:Schedule(15)
phase = 0
self:BackInRoom()
prePhase = 0
curseSpam = 0
self:ScheduleMethod(0-delay,"NothFight")
end
function mod:Balcony()
local timer
if phase == 1 then timer = 60
elseif phase == 2 then timer = 60
elseif phase == 3 then timer = 60
else return end
timerTeleportBack:Show(timer)
warnTeleportSoon:Schedule(timer - 10)
warnTeleportNow:Schedule(timer)
self:ScheduleMethod(timer, "BackInRoom")
timerSkeletons:Start(5)
timerSkeletons:Schedule(5)
function mod:Intermission()
warnIntermissionNow:Show()
timerCurse:Stop()
timerWarriorSkeletons:Stop()
timerArcaneExplo:Start(15)
timerSkeletonWave:Start(10)
self:UnscheduleMethod("WarriorSkeletons")
self:ScheduleMethod(15,"SkeletonWaves")
timerTeleportBack:Start()
self:ScheduleMethod(60, "NothFight")
end
function mod:BackInRoom()
phase = phase + 1
local timer
if phase == 1 then timer = 75
elseif phase == 2 then timer = 75
elseif phase == 3 then timer = 75
else return end
timerTeleport:Show(timer)
warnTeleportSoon:Schedule(timer - 10)
warnTeleportNow:Schedule(timer)
self:ScheduleMethod(timer, "Balcony")
timerSkeletons:Start(15)
timerSkeletons:Schedule(15)
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(29213, 54835, 350288) then -- Curse of the Plaguebringer
warnCurse:Show()
function mod:NothFight()
timerWarriorSkeletons:Start(22)
timerCurse:Start()
self:ScheduleMethod(22,"WarriorSkeletons")
if phase >= 1 then
warnNothReturn:Show()
end
end
function mod:WarriorSkeletons()
timerWarriorSkeletons:Start()
self:ScheduleMethod(30,"WarriorSkeletons")
end
function mod:SkeletonWaves()
timerSkeletonWave:Start()
timerArcaneExplo:Start()
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(29213, 54835, 350288) then
if args:IsSpellID(2123805) and DBM:AntiSpam(5,1) then
if args:IsPlayer() then
specWarnCurse:Show();
specWarnCurse:Show()
end
timerCurse:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(29213, 54835, 350288) then
if args:IsSpellID(29213, 54835, 350288) then
if args:IsPlayer() then
specWarnCurse:Show();
end
end
end
end
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.80 and prePhase ==0 then
warnIntermissionSoon:Show()
prePhase = 1
end
--if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.753 and phase ==0 then
--self:ScheduleMethod(0,"Intermission")
--phase = 1
--end
if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.55 and prePhase ==1 then
warnIntermissionSoon:Show()
prePhase = 2
end
--if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.503 and phase ==1 then
-- self:ScheduleMethod(0,"Intermission")
-- phase = 2
--end
if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.30 and prePhase ==2 then
warnIntermissionSoon:Show()
prePhase = 3
end
--if self:GetUnitCreatureId(uId) == 15954 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.253 and phase ==2 then
-- self:ScheduleMethod(0,"Intermission")
-- phase = 3
--end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.Teleport or msg:find(L.Teleport) then
self:ScheduleMethod(0,"Intermission")
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15954 or cid == 26617 then
timerCurse:Stop()
self:UnscheduleMethod("WarriorSkeletons")
end
end
function mod:OnCombatEnd()
self:UnscheduleMethod("WarriorSkeletons")
timerCurse:Stop()
timerWarriorSkeletons:Stop()
end
+16 -6
View File
@@ -105,6 +105,10 @@ L:SetOptionLocalization({
TimerTeleportBack = "Show timer for Teleport back"
})
L:SetMiscLocalization({
Teleport = "%s teleports to the balcony above!"
})
--------------------------
-- Heigan the Unclean --
--------------------------
@@ -167,7 +171,8 @@ L:SetGeneralLocalization({
})
L:SetOptionLocalization({
WarningHateful = "Post Hateful Strike targets to raid chat\n(requires announce to be enabled and leader/promoted status)"
WarningHateful = "Post Hateful Strike targets to raid chat\n(requires announce to be enabled and leader/promoted status)",
SetIconOnGastricTarget = "Set icons on Gastric Affliction targets"
})
L:SetMiscLocalization({
@@ -191,7 +196,7 @@ L:SetOptionLocalization({
})
L:SetWarningLocalization({
SpecialWarningInjection = "Mutating Injection on you"
SpecialWarningInjection = "Mutating Injection on you"
})
L:SetTimerLocalization({
@@ -205,6 +210,9 @@ L = DBM:GetModLocalization("Gluth")
L:SetGeneralLocalization({
name = "Gluth"
})
L:SetWarningLocalization{
DBM_GLUTH_VICIOUS_BITE = "%s on >%s< (%d)" --(args.spellName, args.destName, args.amount or 1)
}
----------------
-- Thaddius --
@@ -217,8 +225,8 @@ L:SetGeneralLocalization({
L:SetMiscLocalization({
Yell = "Stalagg crush you!",
Emote = "%s overloads!",
Emote2 = "Tesla Coil overloads!",
Emote = "%s overload!",
Emote2 = "The Tesla Coils overload!",
Boss1 = "Feugen",
Boss2 = "Stalagg",
Charge1 = "negative",
@@ -334,7 +342,7 @@ L:SetWarningLocalization({
L:SetMiscLocalization({
Korthazz = "Thane Korth'azz",
Rivendare = "Highlord Mograine",
Mograine = "Highlord Mograine",
Blaumeux = "Lady Blaumeux",
Zeliek = "Sir Zeliek"
})
@@ -360,7 +368,9 @@ L:SetOptionLocalization({
})
L:SetMiscLocalization({
EmoteBreath = "%s takes a deep breath.",
EmoteBreath = "Sapphiron takes a deep breath.",
EmoteFlying = "Sapphiron lifts off into the air!",
EmoteLanding = "Sapphiron resumes his attacks!",
WarningYellIceblock = "I'm an Ice Block!"
})