5.17 + Hyjal from Szyler's Discord
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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!"
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user