diff --git a/DBM-AQ40/CThun.lua b/DBM-AQ40/CThun.lua index 9525059..6f4d023 100644 --- a/DBM-AQ40/CThun.lua +++ b/DBM-AQ40/CThun.lua @@ -13,7 +13,9 @@ mod:RegisterEvents( "SPELL_PERIODIC_HEAL", "SPELL_AURA_APPLIED", "SPELL_AURA_APPLIED_DOSE", - "SPELL_CAST_START" + "SPELL_AURA_REMOVED", + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS" ) @@ -44,22 +46,28 @@ local warnGiantClawTentacle = mod:NewAnnounce("Giant Claw Tentacle Spawned", 2 local warnWeakened = mod:NewAnnounce("C'thun is Weakened!", 4, 25383) local warnStomach = mod:NewAnnounce("Stomach Phase Now", 2, 26476) local warnPhase2 = mod:NewPhaseAnnounce(2) +local warnLesserEldritch = mod:NewSpellAnnounce(2117084, 4) +local specWarnLesserEldritch = mod:NewSpecialWarningYou(2117084, 4) +local SpecWarnDevSmash = mod:NewSpecialWarning("Devastating Smash!",2117076, 4) ----------Timers---------- -local timerDarkGlareCD = mod:NewCDTimer(87.5, 26029) -local timerDarkGlare = mod:NewTimer(37.5, "Dark Glare: Time Remaining", 26029) +local timerDarkGlareCD = mod:NewCDTimer(89, 26029) +local timerDarkGlare = mod:NewTimer(33, "Dark Glare: Time Remaining", 26029) local timerEldritch = mod:NewTimer(5, "LOOK AWAY", 4500009) local timerEldritchCD = mod:NewCDTimer(30, 4500009) local timerEyeTentacleShadow = mod:NewTimer(45, "Eye Tentacles: Shadow", 4500000) local timerEyeTentacleFire = mod:NewTimer(45, "Eye Tentacles: Fire", 4500054) local timerEyeTentacleNature = mod:NewTimer(45, "Eye Tentacles: Nature", 4500061) -local timerStomach = mod:NewTimer(21, "Enter Stomach", 26476) +local timerStomach = mod:NewTimer(41, "Enter Stomach", 26476) local timerGiantEyeTentacle = mod:NewTimer(44, "Giant Eye Tentacle", 4500060) local timerGiantClawTentacle = mod:NewTimer(14, "Giant Claw Tentacle", 6524) local timerWeakened = mod:NewTimer(30, "Weakened: Time Remaining", 25383) local timerManipulator = mod:NewTimer(15, "Manipulator Tentacle", 4500067) local timerDevastator = mod:NewTimer(15, "Devastator Tentacle", 4500007) local timerMalignant = mod:NewTimer(15, "Malignant Tentacle", 4500053) +local timerLesserEldritch = mod:NewCastTimer(3, 2117084) +local timerNextEyeTent = mod:NewTimer(45, "Next Eye Tentacle", 4500000) +local timerIntoStomach = mod:NewTimer(10, "From Beneath You it Devours", 2117117) ----------Misc---------- mod:AddBoolOption("RangeFrame", true) @@ -77,6 +85,7 @@ local warnMalignantGrasp = mod:NewAnnounce("%s Grabbed!", 4, nil, nil, "Announce local specWarnRevelations = mod:NewSpecialWarning("Look Away", nil, "Special warning for Eldritch Revelations cast") --4500009) local specWarnSensoryOverload = mod:NewSpecialWarningYou(4500068) local specWarnDigestiveAcid = mod:NewSpecialWarningStack(26476, nil, 4) --(mod.Options.NumAcidStacks or 4)) +local SpecwarnStomach = mod:NewSpecialWarningYou(2117117, 4) ----------PreWarning Functions---------- function mod:preShadow() prewarnEyeTentacleShadow:Show() @@ -115,17 +124,33 @@ function mod:preMalignant() end ----------Alert Functions---------- +function mod:LesserEldritch() + local target = nil + target = mod:GetBossTarget(15334) + local myName = UnitName("player") + if target == myName then + specWarnLesserEldritch:Show() + SendChatMessage("Lesser Eldritch on "..UnitName("PLAYER").."!", "Say") + else + warnLesserEldritch:Show(target) + end + timerLesserEldritch:Start(target) +end + function mod:alertShadow() warnEyeTentacleShadow:Show() + etent = 2 lasttent = 1 end function mod:alertFire() warnEyeTentacleFire:Show() - lasttent = 2 + etent = 3 + lasttent = 2 end function mod:alertNature() warnEyeTentacleNature:Show() - lasttent = 3 + etent = 1 + lasttent = 3 end function mod:alertStomach() warnStomach:Show() @@ -159,13 +184,15 @@ end function mod:OnCombatStart(delay) phase = 1 self.vb.phase = 1 - etent = 1 - lasttent = 3 + etent = 0 + lasttent = 0 miniadd = 1 eldfixglare = 1 + timerNextEyeTent:Start(45) self:ScheduleMethod(0-delay, "eldFearInitial") self:ScheduleMethod(0-delay, "darkGlareInitial") - self:ScheduleMethod(0-delay, "eyeTentacle") + self:ScheduleMethod(48-delay, "firstEyeTentacle") + -- self:ScheduleMethod(0-delay, "miniAddInitial") if self.Options.RangeFrame then DBM.RangeCheck:Show(13) @@ -184,41 +211,84 @@ end --function mod:miniAdd() -- local timer15 = 15 --end - -function mod:eyeTentacle() - local timer1 = 45 - if etent == 1 then - timerEyeTentacleShadow:Start(timer1) - self:ScheduleMethod(timer1-5, "preShadow") - self:ScheduleMethod(timer1, "alertShadow") + +function mod:firstEyeTentacle() + local timer0 = 43 + if etent == 1 then + timerEyeTentacleShadow:Start(42) + self:ScheduleMethod(39, "preShadow") + self:ScheduleMethod(42, "alertShadow") etent = 2 + lasttent = 3 elseif etent == 2 then - timerEyeTentacleFire:Start(timer1) - self:ScheduleMethod(timer1-5, "preFire") - self:ScheduleMethod(timer1, "alertFire") + timerEyeTentacleFire:Start(42) + self:ScheduleMethod(39, "preFire") + self:ScheduleMethod(42, "alertFire") etent = 3 + lasttent = 1 elseif etent == 3 then - timerEyeTentacleNature:Start(timer1) - self:ScheduleMethod(timer1-5, "preNature") - self:ScheduleMethod(timer1, "alertNature") + timerEyeTentacleNature:Start(42) + self:ScheduleMethod(39, "preNature") + self:ScheduleMethod(42, "alertNature") etent = 1 + lasttent = 2 + elseif etent == 0 then + timerNextEyeTent:Start(42) end - self:ScheduleMethod(timer1, "eyeTentacle") + self:ScheduleMethod(42, "eyeTentacle") +end + +function mod:eyeTentacle() + local timer1 = 44 + if etent == 1 then + timerEyeTentacleShadow:Start(44.5) + self:ScheduleMethod(40, "preShadow") + self:ScheduleMethod(44.5, "alertShadow") + elseif etent == 2 then + timerEyeTentacleFire:Start(44.5) + self:ScheduleMethod(40, "preFire") + self:ScheduleMethod(44.5, "alertFire") + elseif etent == 3 then + timerEyeTentacleNature:Start(44.5) + self:ScheduleMethod(40, "preNature") + self:ScheduleMethod(44.5, "alertNature") + elseif etent == 0 then + timerNextEyeTent:Start(44.5) + end + self:ScheduleMethod(45, "eyeTentacle") +end + +function mod:p2eyeTentacle() + local timer2 = 15 + if etent == 1 then + timerEyeTentacleShadow:Start(15) + self:ScheduleMethod(11, "preShadow") + self:ScheduleMethod(15, "alertShadow") + elseif etent == 2 then + timerEyeTentacleFire:Start(15) + self:ScheduleMethod(11, "preFire") + self:ScheduleMethod(15, "alertFire") + elseif etent == 3 then + timerEyeTentacleNature:Start(15) + self:ScheduleMethod(11, "preNature") + self:ScheduleMethod(15, "alertNature") + elseif etent == 0 then + timerNextEyeTent:Start(15) + end + self:ScheduleMethod(16, "eyeTentacle") end function mod:darkGlareInitial() - local timer11 = 50 - timerDarkGlareCD:Start(timer11) - self:ScheduleMethod(timer11-5, "preGlare") - self:ScheduleMethod(timer11, "alertGlare") + timerDarkGlareCD:Start(55) + self:ScheduleMethod(50, "preGlare") + self:ScheduleMethod(55, "darkGlare") end function mod:darkGlare() - local timer10 = 87.5 - timerDarkGlare:Start() - timerDarkGlareCD:Start(timer10) - self:ScheduleMethod(timer10-5, "preGlare") - self:ScheduleMethod(timer10, "alertGlare") + timerDarkGlareCD:Start(89) + self:ScheduleMethod(84, "preGlare") + self:ScheduleMethod(89, "alertGlare") + self:ScheduleMethod(89,"darkGlare") end function mod:eldFearInitial() @@ -238,9 +308,9 @@ function mod:eldFear() elseif eldfixglare == 2 then self:ScheduleMethod(timer12-5, "eldFearGlareFix") end - timerEldritchCD:Start(timer12) - self:ScheduleMethod(timer12-5, "preFear") - self:ScheduleMethod(timer12, "alertFear") + timerEldritchCD:Start(30) + self:ScheduleMethod(25, "preFear") + self:ScheduleMethod(30, "alertFear") end end @@ -249,35 +319,9 @@ function mod:eldFearGlareFix() end function mod:enterStomach() - local timer2a = 20 - local timer2b = 10 - if mod:IsDifficulty("heroic10") then - timerStomach:Start(timer2a) - self:ScheduleMethod(timer2a-5, "preStomach") - self:ScheduleMethod(timer2a, "alertStomach") - self:ScheduleMethod(timer2a, "enterStomach") - elseif mod:IsDifficulty("heroic25") then - timerStomach:Start(timer2b) - self:ScheduleMethod(timer2b-5, "preStomach") - self:ScheduleMethod(timer2b, "alertStomach") - self:ScheduleMethod(timer2b, "enterStomach") - end -end - -function mod:stomachWeaknessFix() - local timer4a = 15 - local timer4b = 5 - if mod:IsDifficulty("heroic10") then - timerStomach:Start(timer4a) - self:ScheduleMethod(timer4a-5, "preStomach") - self:ScheduleMethod(timer4a, "alertStomach") - self:ScheduleMethod(timer4a, "enterStomach") - elseif mod:IsDifficulty("heroic25") then - timerStomach:Start(timer4b) - self:ScheduleMethod(timer4b-5, "preStomach") - self:ScheduleMethod(timer4b, "alertStomach") - self:ScheduleMethod(timer4b, "enterStomach") - end + self:UnscheduleMethod("enterStomach") + timerStomach:Start(41) + self:ScheduleMethod(41, "enterStomach") end function mod:clawTentacleInitial() @@ -328,19 +372,20 @@ function mod:geyeTentacle() self:ScheduleMethod(timer9, "geyeTentacle") end -function mod:fixweaknessTimers() - self:ScheduleMethod(0, "stomachWeaknessFix") +function mod:fixWeaknessTimers() + self:UnscheduleMethod("eyeTentacle") + self:UnscheduleMethod("clawTentacle") + self:UnscheduleMethod("geyeTentacle") + self:UnscheduleMethod("preShadow") + self:UnscheduleMethod("preFire") + self:UnscheduleMethod("preNature") self:ScheduleMethod(0, "clawTentacleWeaknessFix") self:ScheduleMethod(0, "geyeTentacleWeaknessFix") - if lasttent == 1 then - etent = 2 - elseif lasttent == 2 then - etent = 3 - elseif lasttent == 3 then - etent = 1 - end - self:ScheduleMethod(0, "eyeTentacle") + timerStomach:Start(15) + self:ScheduleMethod(15, "enterStomach") + self:ScheduleMethod(0, "p2eyeTentacle") end + function mod:phaseTwo() warnPhase2:Show() self.vb.phase = 2 @@ -351,8 +396,9 @@ function mod:phaseTwo() elseif lasttent == 3 then etent = 1 end + timerStomach:Start(20) self:ScheduleMethod(6, "eyeTentacle") - self:ScheduleMethod(1, "enterStomach") + self:ScheduleMethod(20, "enterStomach") self:ScheduleMethod(0, "clawTentacleInitial") self:ScheduleMethod(0, "geyeTentacleInitial") end @@ -383,17 +429,17 @@ function mod:UNIT_DIED(args) self:UnscheduleMethod("darkGlareInitial") self:UnscheduleMethod("preGlare") self:UnscheduleMethod("alertGlare") - + self:UnscheduleMethod("firstEyeTentacle") self:ScheduleMethod(0, "phaseTwo") end end function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) - if msg:find(L.Eldritch) then + if msg:find(L.Eldritch) or msg == L.Eldritch then self:ScheduleMethod(0, "eldFear") specWarnRevelations:Show(); end - if msg:find(L.Glare) then + if msg == L.EmoteGlare or msg:find(L.EmoteGlare) then eldfixglare = 2 timerEldritchCD:Stop() self:UnscheduleMethod("eldFearInitial") @@ -403,7 +449,75 @@ function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) self:ScheduleMethod(0, "darkGlare") self:ScheduleMethod(37.5, "eldFear") end - if msg:find(L.weakened) then + --if msg == L.EmoteWeakend or msg:find(L.Weakened) then + -- timerWeakened:Start() + -- warnWeakened:Show() + -- timerGiantClawTentacle:Stop() + -- timerGiantEyeTentacle:Stop() + -- timerStomach:Stop() + -- timerEyeTentacleFire:Stop() + -- timerEyeTentacleNature:Stop() + -- timerEyeTentacleShadow:Stop() + -- self:UnscheduleMethod("enterStomach") + -- self:UnscheduleMethod("stomachWeaknessFix") + -- self:UnscheduleMethod("preStomach") + -- self:UnscheduleMethod("alertStomach") + -- self:UnscheduleMethod("clawTentacleInitial") + -- self:UnscheduleMethod("clawTentacleWeaknessFix") + -- self:UnscheduleMethod("clawTentacle") + -- self:UnscheduleMethod("preGiantClaw") + -- self:UnscheduleMethod("alertGiantClaw") + -- self:UnscheduleMethod("geyeTentacle") + -- self:UnscheduleMethod("geyeTentacleInitial") + -- self:UnscheduleMethod("geyeTentacleWeaknessFix") + -- self:UnscheduleMethod("preGiantEye") + -- self:UnscheduleMethod("alertGiantEye") + -- self:UnscheduleMethod("eyeTentacle") + -- self:UnscheduleMethod("preShadow") + -- self:UnscheduleMethod("alertShadow") + -- self:UnscheduleMethod("preFire") + -- self:UnscheduleMethod("alertFire") + -- self:UnscheduleMethod("preNature") + -- self:UnscheduleMethod("alertNature") + --end + --if msg == L.EmoteRestored or msg:find(L.EmoteRestored) then + -- self:ScheduleMethod(0, "fixweaknessTimers") + --end +end + +function mod:SPELL_PERIODIC_DAMAGE(args) + if args:IsSpellID(2117055,2117056,2117057,2117058) then -- Eradicate (Eye Tentacles) + if args:IsPlayer() and (((args.amount or 0) + (args.resisted or 0) + (args.absorbed or 0)) > 1000) then + specWarnEradicate:Show(); + end + end +end + +function mod:SPELL_PERIODIC_HEAL(args) + if args:IsSpellID(2117060,2117061,2117062,2117063) then -- Consume Essence + if args:IsPlayerSource() and ((args.amount or 0) > 4000) then + specWarnConsume:Show(); + end + end +end + +function mod:SPELL_AURA_REMOVED(args) + if (args:IsSpellID(2117107)) and args.destName == "C'Thun" then + timerWeakened:Stop() + timerGiantClawTentacle:Stop() + timerGiantEyeTentacle:Stop() + timerStomach:Stop() + timerEyeTentacleFire:Stop() + timerEyeTentacleNature:Stop() + timerEyeTentacleShadow:Stop() + self:UnscheduleMethod("fixWeaknessTimers") + self:ScheduleMethod(0, "fixWeaknessTimers") + end +end + + +function mod:SPELL_AURA_APPLIED(args) -- Weakened phase (C'Thun and tentacles) + if args:IsSpellID(2117107) then timerWeakened:Start() warnWeakened:Show() timerGiantClawTentacle:Stop() @@ -412,6 +526,14 @@ function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) timerEyeTentacleFire:Stop() timerEyeTentacleNature:Stop() timerEyeTentacleShadow:Stop() + self:UnscheduleMethod("eyeTentacle") + self:UnscheduleMethod("p2eyeTentacle") + self:UnscheduleMethod("preShadow") + self:UnscheduleMethod("alertShadow") + self:UnscheduleMethod("preFire") + self:UnscheduleMethod("alertFire") + self:UnscheduleMethod("preNature") + self:UnscheduleMethod("alertNature") self:UnscheduleMethod("enterStomach") self:UnscheduleMethod("stomachWeaknessFix") self:UnscheduleMethod("preStomach") @@ -426,35 +548,9 @@ function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) self:UnscheduleMethod("geyeTentacleWeaknessFix") self:UnscheduleMethod("preGiantEye") self:UnscheduleMethod("alertGiantEye") - self:UnscheduleMethod("eyeTentacle") - self:UnscheduleMethod("preShadow") - self:UnscheduleMethod("alertShadow") - self:UnscheduleMethod("preFire") - self:UnscheduleMethod("alertFire") - self:UnscheduleMethod("preNature") - self:UnscheduleMethod("alertNature") self:ScheduleMethod(30, "fixweaknessTimers") end -end - -function mod:SPELL_PERIODIC_DAMAGE(args) - if args:IsSpellID(4500054) then -- Eradicate (Eye Tentacles) - if args:IsPlayer() and (((args.amount or 0) + (args.resisted or 0) + (args.absorbed or 0)) > 1000) then - specWarnEradicate:Show(); - end - end -end - -function mod:SPELL_PERIODIC_HEAL(args) - if args:IsSpellID(4500062) then -- Consume Essence (Eye Tentacles, debuff is 61) - if args:IsPlayerSource() and ((args.amount or 0) > 4000) then - specWarnConsume:Show(); - end - end -end - -function mod:SPELL_AURA_APPLIED(args) - if args:IsSpellID(4500026) then -- Malignant Grasp (Malignant Tentacle) + if args:IsSpellID(2117074) then -- Malignant Grasp (Malignant Tentacle) if args.destName then if (not args:IsPlayer()) then local uId = DBM:GetRaidUnitId(args.destName) @@ -468,11 +564,20 @@ function mod:SPELL_AURA_APPLIED(args) end end end -elseif args:IsSpellID(4500001) then -- Miasma (Eye Tentacles) + end + if args:IsSpellID(2117054) then -- Miasma (Eye Tentacles) if args:IsPlayer() then specWarnMiasma:Show(); end end + if args:IsSpellID(2117117) then -- (From beneath it devours you) + if args.destName == UnitName("player") then + SpecwarnStomach:Show() + SendChatMessage(""..UnitName("PLAYER").."is being sent to the stomach", "Say") + else + warnStomach:Show(args.destName); + end + end end function mod:SPELL_AURA_APPLIED_DOSE(args) @@ -494,4 +599,26 @@ function mod:SPELL_CAST_START(args) specWarnSensoryOverload:Show(); end end -end \ No newline at end of file + if args:IsSpellID(2117084) then + self:ScheduleMethod(0.2, "LesserEldritch") + end + if args:IsSpellID(2117009) then + timerDarkGlare:Start() + warnDarkGlare:Show() + end + if args:IsSpellID(2117076) and args.UnitName == "Giant Claw Tentacle" then + SpecWarnDevSmash:Show() + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(2117055,2117056,2117057,2117058) and etent == 0 then + etent = 3 + end + if args:IsSpellID(2117060,2117061,2117062,2117063) and etent == 0 then + etent = 1 + end + if args:IsSpellID(2117050) and etent == 0 then + etent = 2 + end +end diff --git a/DBM-Core/Changelog.txt b/DBM-Core/Changelog.txt index 2a10d7f..83da907 100644 --- a/DBM-Core/Changelog.txt +++ b/DBM-Core/Changelog.txt @@ -223,3 +223,12 @@ v5.16 30/11/2022 - Fixed lua error with DBM:AntiSpam - Fixed spellIDs for SSC ---------------------------------------------------------------------------------------------------- +v5.17 07/05/2023 +- Rewrote C'Thun, adding new Spell IDs and fixed functions +- Rewrote most of Naxx, adding new Spell IDs and updating old. +- Added triggers and functions to fit with new mechanics +---------------------------------------------------------------------------------------------------- +v5.17 15/05/2023 +- Rewrote most of the Naxx fights, updating Spell IDs +- Added UNIT_DIED triggers to all +- Added AntiSpam \ No newline at end of file diff --git a/DBM-Core/DBM-Core.lua b/DBM-Core/DBM-Core.lua index 0217576..656f244 100644 --- a/DBM-Core/DBM-Core.lua +++ b/DBM-Core/DBM-Core.lua @@ -43,9 +43,9 @@ ------------------------------- DBM = { Revision = ("$Revision: 5016 $"):sub(12, -3), - Version = "5.16", - DisplayVersion = "5.16", -- the string that is shown as version - ReleaseRevision = 5015 -- the revision of the latest stable version that is available (for /dbm ver2) + Version = "5.17", + DisplayVersion = "5.17", -- the string that is shown as version + ReleaseRevision = 5016 -- the revision of the latest stable version that is available (for /dbm ver2) } DBM_SavedOptions = {} diff --git a/DBM-Hyjal/Anetheron.lua b/DBM-Hyjal/Anetheron.lua new file mode 100644 index 0000000..5d777c5 --- /dev/null +++ b/DBM-Hyjal/Anetheron.lua @@ -0,0 +1,196 @@ +local mod = DBM:NewMod("Anetheron", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(17808) +mod:SetUsedIcons(1,2,3,4,5,6,7,8) +mod:RegisterCombat("combat", 17808) + +mod:RegisterEvents( + "SPELL_AURA_APPLIED", + "SPELL_AURA_REFRESH", + "SPELL_AURA_REMOVED", + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS", + "CHAT_MSG_RAID_BOSS_EMOTE", + "CHAT_MSG_MONSTER_YELL", + "UNIT_DIED" +) + +-- Unknown Entity spawn +-- Unknown Effigy warning (2 stacks++) +-- Teleport active (plus body notification?) + +--Carrion Swarm +local warnSwarm = mod:NewSpellAnnounce(2140800, 3) +local timerSwarm = mod:NewNextTimer(30, 2140800) + +--Nightmare +local timerNextNightmare = mod:NewNextTimer(45, 2140830) +local warnNightmareSoon = mod:NewAnnounce("Nightmare soon!", 2140830) +local warnNightmare = mod:NewAnnounce("%s is sent into the Nightmare!", 2140830) + +-- Ring of Frost +local timerNextRingofFrost = mod:NewNextTimer(45, 2140153) +local timerRingofFrost = mod:NewTimer(15, "Ring of Frost duration", 2140153) + +-- Infernal Rain +local timerNextInfernal = mod:NewNextTimer(45, 2140810) +local timerInfernal = mod:NewTimer(10, "Infernal spawning", 2140810) +local timerInfernalRain = mod:NewTimer(19, "Infernal Rain duration", 2140818) + +-- Fight +local target1 +local target2 +local target3 + +function mod:OnCombatStart(delay) + timerSwarm:Start(10-delay) + timerNextNightmare:Start(35-delay) + timerNextInfernal:Start(20-delay) + self:ScheduleMethod(35-delay,"Nightmare") + target1 = nil + target2 = nil + target3 = nil + DBM.BossHealth:AddBoss(17772, L.Jaina) +end + +function mod:Nightmare() + self:UnscheduleMethod("Nightmare") + timerNextNightmare:Start() + warnNightmareSoon:Schedule(40) + self:ScheduleMethod(45,"Nightmare") +end + +function mod:InfernalRain() + self:UnscheduleMethod("InfernalRain") + timerInfernal:Stop() + timerInfernalRain:Stop() + timerNextInfernal:Stop() + timerInfernal:Start() + timerInfernalRain:Start() + timerNextInfernal:Start() + self:ScheduleMethod(45,"InfernalRain") +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(2140825) then + if target3 == nil and target2 ~= nil and target1 ~= nil then + target3 = args.DestName + self:setIcon(target3, 2) + DBM.BossHealth:AddBoss(92171,target3) + warnNightmare:Show(target3) + elseif target2 == nil and target1 ~= nil then + target2 = args.DestName + self:setIcon(target2, 2) + DBM.BossHealth:AddBoss(92171,target2) + warnNightmare:Show(target2) + elseif target1 == nil then + target1 = args.DestName + self:setIcon(target1, 1) + DBM.BossHealth:AddBoss(92171,target1) + warnNightmare:Show(target1) + end + end + if args:IsSpellID(2140825) and args.destName == target1 then + DBM.BossHealth:RemoveBoss(92171,target1) + self:setIcon(target1, 0) + target1 = nil + elseif args:IsSpellID(2140825) and args.destName == target2 then + DBM.BossHealth:RemoveBoss(92171,target2) + self:setIcon(target2, 0) + target2 = nil + elseif args:IsSpellID(2140825) and args.destName == target3 then + DBM.BossHealth:RemoveBoss(92171,target3) + self:setIcon(target3, 0) + target3 = nil + end +end + +function mod:SPELL_AURA_REFRESH(args) + if args:IsSpellID(2140825) and args.destName == target1 then + DBM.BossHealth:RemoveBoss(92171,target1) + self:setIcon(target1, 0) + target1 = nil + elseif args:IsSpellID(2140825) and args.destName == target2 then + DBM.BossHealth:RemoveBoss(92171,target2) + self:setIcon(target2, 0) + target2 = nil + elseif args:IsSpellID(2140825) and args.destName == target3 then + DBM.BossHealth:RemoveBoss(92171,target3) + self:setIcon(target3, 0) + target3 = nil + end +end + +function mod:SPELL_AURA_REMOVED(args) +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(2140800) then + warnSwarm:Show() + timerSwarm:Start() + end +end + +function mod:SPELL_CAST_SUCCESS(args) +end + +function mod:CHAT_MSG_MONSTER_YELL(msg) + if msg == L.Infernal1 or msg == L.Infernal2 or msg:find(L.Infernal1) or msg:find(L.Infernal2) then + self:UnscheduleMethod("InfernalRain") + timerInfernal:Stop() + timerNextInfernal:Stop() + timerInfernalRain:Stop() + timerNextInfernal:Start(45) + timerInfernal:Start(10) + timerInfernalRain:Start(19) + self:ScheduleMethod(45,"InfernalRain") + end + if msg == L.RingofFrost or msg:find(L.RingofFrost) then + timerNextRingofFrost:Start() + timerRingofFrost:Schedule(2) + end +end + +function mod:UNIT_DIED(args) + if args.destName == target1 then + DBM.BossHealth:RemoveBoss(92171,target1) + target1 = nil + elseif args.destName == target2 then + DBM.BossHealth:RemoveBoss(92171,target2) + target2 = nil + elseif args.destName ==target3 then + DBM.BossHealth:RemoveBoss(92171,target3) + target3 = nil + end +end + +function mod:OnCombatEnd() + DBM.BossHealth:RemoveBoss(92171,target1) + DBM.BossHealth:RemoveBoss(92171,target2) + DBM.BossHealth:RemoveBoss(92171,target3) + DBM.BossHealth:RemoveBoss(17772) + target1 = nil + target2 = nil + target3 = nil +end + + +function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) + if msg == " Anetheron sends %s into a nightmare!" or msg:find(L.Nightmare) then + if target3 == nil and target2 ~= nil and target1 ~= nil then + target3 = msg:find(L.Nightmare) + self:SetIcon(target3, 3) + DBM.BossHealth:AddBoss(92171,target3) + elseif target2 == nil and target1 ~= nil then + target2 = msg:find(L.Nightmare) + self:SetIcon(target2, 2) + DBM.BossHealth:AddBoss(92171,target2) + elseif target1 == nil then + target1 = msg:find(L.Nightmare) + self:SetIcon(target1, 1) + DBM.BossHealth:AddBoss(92171,target1) + end + end +end diff --git a/DBM-Hyjal/Archimonde.lua b/DBM-Hyjal/Archimonde.lua new file mode 100644 index 0000000..2c7aa7d --- /dev/null +++ b/DBM-Hyjal/Archimonde.lua @@ -0,0 +1,345 @@ +local mod = DBM:NewMod("Archimonde", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(17968,26648,26647) +mod:SetUsedIcons(8) +mod:RegisterCombat("combat") +mod:SetBossHealthInfo( + 17968, "Archimonde", + 26648, "Narmak", + 26647, "Haaroon" +) + +mod:RegisterEvents( + "SPELL_AURA_APPLIED", + "SPELL_AURA_APPLIED_DOSE", + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS", + "SPELL_DAMAGE", + "CHAT_MSG_MONSTER_YELL", + "UNIT_DIED", + "UNIT_HEALTH" +) +-- -------------- RP ------------------- +local timerCombatStart = mod:NewTimer(23, "Combat starting in ", 800462) + +--Haaroon & Narmak +local timerShockwave = mod:NewTimer(25, "Haaroon casting 3 Shockwaves", 2141567) +local timerCastsShockwave = mod:NewCastTimer(3, 2141567) +local warnShockwave = mod:NewSpellAnnounce(2141567, 3) +local timerFelBombs = mod:NewTimer(25, "Narmak throwing 4 Fel Bombs", 2141553) +local timerFelExplosionSoon = mod:NewTimer(10, "Fel Bombs exploding soon", 2141553) +local timerFelExplosion = mod:NewTimer(4, "Fel Bombs exploding", 2141553) +local warnFelBombs = mod:NewSpellAnnounce(2141553, 3) + +------------ Archimonde ---------------- +-- Transitions +local warnAddPhase = mod:NewAnnounce("Kill Narmak and Haaroon to engage Archimonde", 3, 10066) +local warnFirePhase = mod:NewAnnounce("Fire Phase incoming!", 3, 76325) +local warnLightningPhaseSoon = mod:NewAnnounce("Lightning Phase at 70 percent health!", 3, 2141471) +local warnLightningPhase = mod:NewAnnounce("Lightning Phase incoming!", 3, 2141471) +local timerCallLightning = mod:NewCastTimer(4, 2141471) +local warnVoidPhaseSoon = mod:NewAnnounce("Void Phase at 40 percent health!", 3, 2141480) +local warnVoidPhase = mod:NewAnnounce("Void Phase incoming!", 3, 2141480) + +-- All fight +local timerNextForceofWill = mod:NewNextTimer(45, 2141400) +local warnSpecialForceofWill = mod:NewSpecialWarning("Force of Will", 2141400) +local warnForceofWillSoon = mod:NewAnnounce("Force of Will in 5 seconds", 2141400) +local timerForceofWill = mod:NewCastTimer(2, 2141400) +local warnCurseoftheDefiler = mod:NewSpellAnnounce(2141422) +local timerCurseoftheDefiler = mod:NewNextTimer(30, 2141422) +local specWarnWeakCurse = mod:NewSpecialWarning("Curse of the Defiler is weakened. Decurse now!", 2141428) +local warnDecurseJaina = mod:NewAnnounce("Decurse Jaina now!", 2141428) +local warnDecurseTyrande = mod:NewAnnounce("Decurse Tyrande now!",2141428) +local warnDecurseThrall = mod:NewAnnounce("Decurse Thrall now!", 2141428) + +--Fire Phase +local timerNextDoomMeteor = mod:NewNextTimer(45, 2141405) +local timerCastDoomMeteor = mod:NewCastTimer(6, 2141405) +local warnDoomMeteor = mod:NewSpellAnnounce(2141405) +local timerDrawFlames = mod:NewNextTimer(55, 2141442) +local warnDrawFlames = mod:NewSpellAnnounce(2141442) + +--Lightning Phase +local timerLightningStrikes = mod:NewTimer(10, "Lightning Strikes", 2141456) +local warnLightningStrikes = mod:NewSpecialWarning("Lightning Strikes Soon!", 2141456) +local timerLivingLightning = mod:NewNextTimer(45,2141462) +local warnLivingLightning = mod:NewAnnounce("Archimonde is summoning Living Lightning!", 2141462, 2) + +-- Void Phase +local warnGoT = mod:NewSpellAnnounce(2141604, 3) +local timerNextGoT = mod:NewNextTimer(60, 2141604) +local timerCastGoT = mod:NewCastTimer(3, 2141604) +local timerVoidHerald = mod:NewTimer(20, "Void Herald incoming", 5108) +local timerVoidTendril = mod:NewTimer(20, "Void Tendrils spawning", 2117107) + +-- Jaina +local warnWardWinter = mod:NewAnnounce("Ward of Winter on %s!", 2140155) +local warnSpecWardsofWinter = mod:NewSpecialWarning("Ward of Winter on you!", 2140155) +local timerWardWinter = mod:NewTargetTimer(15, 2140155) +local timerNextWardWinter = mod:NewNextTimer(45, 2140155) + +-- Thrall +local warnTotemofLightning = mod:NewAnnounce("A Lightning Capture Totem is up for 15 seconds!", 2140264) +local timerTotemofLightning = mod:NewTimer(30, "Lightning Capture Totem duration", 2140264) +local timerNextTotemofLightning = mod:NewNextTimer(45, 2140264) + +--Tyrande +local warnLightofElune = mod:NewAnnounce("Light of Elune on %s!",2140073) +local timerLightofElune = mod:NewNextTimer(50, 2140073) +local warnSpecLightofElune = mod:NewSpecialWarning("Light of Elune on you!", 2140073) + +-- fight +local berserkTimer = mod:NewBerserkTimer(900) +local prewarn +local phase +local terror +local lastDoomfire +local remainingDoomfire +local lastForce +local remainingForce +local drawFlames + +function mod:OnCombatStart(delay) +prewarn = 0 +phase = 0 +terror = 0 +lastDoomfire = nil +lastForce = nil +drawFlames = 0 +end + +function mod:AddPhase() + warnAddPhase:Show() + timerFelBombs:Start(8) + timerShockwave:Start(12) +end + +function mod:FirePhase() + phase = 1 + berserkTimer:Start() + warnFirePhase:Show() + timerNextDoomMeteor:Start(10) + warnForceofWillSoon:Schedule(25) + timerNextForceofWill:Start(30) + + if mod:IsDifficulty("heroic10", "heroic25") then + timerNextWardWinter:Start(180) + else + timerNextWardWinter:Start(50) + end +end + +function mod:LightningPhase() + phase = 2 + warnLightningPhase:Show() + timerCallLightning:Start() + warnForceofWillSoon:Schedule(33) + timerNextForceofWill:Start(38) + timerTotemofLightning:Start(28) + timerLightningStrikes:Start(16) + warnLightningStrikes:Schedule(14) + self:ScheduleMethod(15,"LightningStrikes") +end + +function mod:VoidPhase() + phase = 3 + warnVoidPhase:Show() + warnForceofWillSoon:Schedule(33) + timerForceofWill:Start(38) + timerNextGoT:Start(3) + timerVoidTendril:Start(23) + warnLightningStrikes:Schedule(10) + timerLightningStrikes:Start(12) + self:ScheduleMethod(12,"LightningStrikes") +end + +function mod:CancelP0Timers() + timerFelBombs:Stop() + timerShockwave:Stop() +end + +function mod:CancelP1Timers() + timerNextDoomMeteor:Stop() + timerNextForceofWill:Stop() + warnForceofWillSoon:Cancel() +end + +function mod:CancelP2Timers() + self:UnscheduleMethod("LightningStrikes") + timerLightningStrikes:Stop() + warnLightningStrikes:Cancel() + timerNextForceofWill:Stop() + warnForceofWillSoon:Cancel() + timerLivingLightning:Stop() +end + +function mod:LightningStrikes() + self:UnscheduleMethod("LightningStrikes") + timerLightningStrikes:Start() + warnLightningStrikes:Schedule(8) + self:ScheduleMethod(10,"LightningStrikes") +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(2141428) and args:IsPlayer() then -- Grasp of the Defiler is Weakened + specWarnWeakCurse:Show() + end + if args:IsSpellID(2141428) and args.destName == "Lady Jaina Proudmoore" then + warnDecurseJaina:Show() + elseif args:IsSpellID(2141428) and args.destName == "Tyrande Whisperwind" then + warnDecurseTyrande:Show() + elseif args:IsSpellID(2141428) and args.destName == "Thrall" then + warnDecurseThrall:Show() + end + if args:IsSpellID(2141422,2141423,2141424,2141425) and args:IsPlayer() then -- Curse of the Defiler + warnCurseoftheDefiler:Show() + end + if args:IsSpellID(2140155) then + if args:IsPlayer() then + warnSpecWardsofWinter:Show() + else + warnWardWinter:Show(args.destName) + end + self:SetIcon(args.destName, 4, 15) + timerWardWinter:Start(args.destName) + timerNextWardWinter:Start() + end +end + +function mod:SPELL_AURA_APPLIED_DOSE(args) + if args:IsSpellID(2141422,2141423,2141424,2141425) and args:IsPlayer() then -- Curse of the Defiler + warnCurseoftheDefiler:Show(args.amount) + end +end + +function mod:SPELL_DAMAGE(args) + if args:IsSpellID(2141455,2141456,2141457,2141458) and DBM:AntiSpam(6,5) then + self:UnscheduleMethod("LightningStrikes") + warnLightningStrikes:Cancel() + self:ScheduleMethod(0,"LightningStrikes") + end +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(2141553) and DBM:AntiSpam(5,3) then -- Fel Iron Bombs + warnFelBombs:Show() + timerFelBombs:Start() + timerFelExplosionSoon:Start(11) + timerFelExplosion:Schedule(11) + elseif args:IsSpellID(2141567) and DBM:AntiSpam(5,4) then -- Shockwave + warnShockwave:Show() + timerShockwave:Start() + timerCastsShockwave:Start() + elseif args:IsSpellID(2141405) then -- Doomfire Meteor + warnDoomMeteor:Show() + timerCastDoomMeteor:Start() + timerNextDoomMeteor:Start() + lastDoomfire = GetTime() + elseif args:IsSpellID(2141400) then -- Force of Will + warnSpecialForceofWill:Show() + warnForceofWillSoon:Schedule(40) + timerForceofWill:Start() + timerNextForceofWill:Start() + lastForce = GetTime() + elseif args:IsSpellID(2141519) then -- Call Lightning + self:ScheduleMethod(0, "CancelP1Timers") + self:ScheduleMethod(0, "LightningPhase") + elseif args:IsSpellID(2141604) then -- Glimpse of Tomorrow + warnGoT:Show() + timerCastGoT:Start() + if terror == 1 then + timerNextGoT:Start(60) + elseif terror == 0 then + terror = 1 + timerNextGoT:Start(15) + end + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(2141442) then -- Draw Flames + warnDrawFlames:Show() + if drawFlames == 1 then + timerNextDoomMeteor:Start() + elseif drawFlames == 2 then + timerNextForceofWill:Start() + end + elseif args:IsSpellID(2141473) then -- Summon Living Lightning + warnLivingLightning:Show() + timerLivingLightning:Start() + end +end + +function mod:CHAT_MSG_MONSTER_YELL(msg) + if msg == L.FightStartYell or msg:find(L.FightStartYell) then -- Archimonde + timerCombatStart:Start() + self:ScheduleMethod(23,"AddPhase") + end + if msg == L.FirePhase or msg:find(L.FirePhase) then --Archimonde + self:ScheduleMethod(0,"CancelP0Timers") + self:ScheduleMethod(0,"FirePhase") + end + if msg == L.LightningCapTotem or msg:find(L.LightningCapTotem) then --Thrall + warnTotemofLightning:Show() + timerTotemofLightning:Start() + timerNextTotemofLightning:Start() + end + if msg == L.LightofElune or msg:find(L.LightofElune) then -- Tyrande + local lightofElune = msg:find(L.LightofElune) + if lightofElune == UnitName("Player") then + warnSpecLightofElune:Show() + else + warnLightofElune:Show(lightofElune) + end + self:SetIcon(lightofElune, 3, 50) + timerLightofElune:Start() + end + if msg == L.CalloftheVoid or msg:find(L.CalloftheVoid) then --Archimonde Void Phase + self:ScheduleMethod(0, "CancelP2Timers") + self:ScheduleMethod(0,"VoidPhase") + end +-- if msg == L.VoidSpawn or msg:find(L.VoidSpawn) then -- Archimonde Void Spawn + --end +end + +function mod:UNIT_HEALTH(uId) + if self:GetUnitCreatureId(uId) == 17968 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.85 and prewarn == 0 and DBM:AntiSpam(5,2) then + prewarn = 1 + remainingDoomfire = 45 - (GetTime() - lastDoomfire) + remainingForce = 45 - (GetTime() - lastForce) + if remainingDoomfire < remainingForce then + timerNextDoomMeteor:Cancel() + timerDrawFlames:Start(remainingDoomfire) + drawFlames = 1 + else + timerNextForceofWill:Cancel() + timerDrawFlames:Start(remainingForce) + drawFlames = 2 + end + end + if self:GetUnitCreatureId(uId) == 17968 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.75 and prewarn == 1 and DBM:AntiSpam(5,2) then + prewarn = 2 + warnLightningPhaseSoon:Show() + elseif self:GetUnitCreatureId(uId) == 17968 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.45 and prewarn == 2 and DBM:AntiSpam(5,3) then + prewarn = 3 + warnVoidPhaseSoon:Show() + end +end + +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 26647 then + timerShockwave:Stop() + elseif cid == 26648 then + timerFelBombs:Stop() + end +end + +function mod:CombatEnd() + self:ScheduleMethod("CancelP0Timers") + self:ScheduleMethod("CancelP1Timers") + self:ScheduleMethod("CancelP2Timers") +end \ No newline at end of file diff --git a/DBM-Hyjal/Azgalor.lua b/DBM-Hyjal/Azgalor.lua new file mode 100644 index 0000000..bf3f534 --- /dev/null +++ b/DBM-Hyjal/Azgalor.lua @@ -0,0 +1,134 @@ +local mod = DBM:NewMod("Azgalor", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(17842) +mod:SetUsedIcons(8) +mod:RegisterCombat("combat", 17842) + +mod:RegisterEvents( + "SPELL_AURA_APPLIED", + "SPELL_AURA_APPLIED_DOSE", + "SPELL_AURA_REMOVED", + "SPELL_CAST_SUCCESS", + "SPELL_CAST_START", + "SPELL_DAMAGE", + "UNIT_DIED" +) +-- mark of Azgalor +local warnMark = mod:NewSpellAnnounce(2141211, 2) +local timerNextMark = mod:NewNextTimer(60, 2141211) + +-- Rain of Fire +local specWarnFire = mod:NewSpecialWarning("Rain of Fire on you!", 2141200, 2) +local warnRoF = mod:NewSpellAnnounce(2141200, 2) +local timerRoF = mod:NewCastTimer(3, 2141200) +local timerNextRoF = mod:NewNextTimer(25, 2141200) + +--Howl of Terror +local warnHowl = mod:NewSpellAnnounce(2141209, 2) +local timerHowl = mod:NewCastTimer(2, 2141209) +local timerNextHowl = mod:NewNextTimer(30, 2141209) + +-- Legion Portal +local warnPortal = mod:NewAnnounce("Legion Portal spawning!", 2, 254274) +local timerNextPortal = mod:NewTimer(45, "Next Legion Portal", 2, 254274) + +--Add abilities +local warnDoom = mod:NewAnnounce("Curse of Doom on %s!", 2141250) +local specWarnDoom = mod:NewSpecialWarning("Curse of Doom on you!", 2141250) +local warnShadowStorm = mod:NewAnnounce("Shade is casting Shadow Bolt Storm!", 2140494) +local warnAntiMagic = mod:NewAnnounce("Anti-Magic Shield on %s!", 2140322) + +--Impending Doom +local warnImpending = mod:NewAnnounce("Impending Doom on %s!", 2141216) +local specWarnImpending = mod:NewSpecialWarning("Impending Doom on you!", 2141216) +local timerImpending = mod:NewTimer(8, "Impending Doom on %s", 2141216) + +--fight +local berserkTimer = mod:NewBerserkTimer(600) + +--combat start +function mod:OnCombatStart(delay) + berserkTimer:Start(-delay) + timerNextRoF:Start(20-delay) + timerNextPortal:Start(31-delay) + timerNextMark:Start(15-delay) + timerNextHowl:Start(35-delay) + self:ScheduleMethod(31-delay,"LegionPortal") +end + +function mod:LegionPortal() + self:UnscheduleMethod("LegionPortal") + warnPortal:Show() + timerNextPortal:Start() + DBM.BossHealth:AddBoss(26665, L.LegionPortal) + self:ScheduleMethod(45,"LegionPortal") +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(2141200,2141201,2141202,2141203) and args:IsPlayer() and DBM:AntiSpam(5, 1) then + specWarnFire:Show() + end + if args:IsSpellID(2141212) and args:IsPlayer() then + warnMark:Show() + timerNextMark:Start() + end + if args:IsSpellID(2141250,2141251,2141252,2141253) then + if args:IsPlayer() then + specWarnDoom:Show() + else + warnDoom:Show(args.destName) + end + end + if args:IsSpellID(2140322) then + warnAntiMagic:Show(args.destName) + end + if args:IsSpellID(2141216) then + if args:IsPlayer() then + specWarnImpending:Show() + else + warnImpending:Show(args.destName) + end + timerImpending:Show(args.destName) + end +end + +function mod:SPELL_AURA_APPLIED_DOSE(args) + if args:IsSpellID(2141200,2141201,2141202,2141203) and args:IsPlayer() and DBM:AntiSpam(5, 1) then + specWarnFire:Show() + end + if args:IsSpellID(2141212) and args:IsPlayer() then + warnMark:Show(args.amount) + timerNextMark:Start() + end +end + +function mod:SPELL_DAMAGE(args) + if args:IsSpellID(2141226) and DBM:AntiSpam(40,2) then + self:SetIcon(args.sourceGUID, 8) + end +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(2141200,2141201,2141202,2141203) then + warnRoF:Show() + timerRoF:Start() + timerNextRoF:Start() + end + if args:IsSpellID(2141209) then + warnHowl:Show() + timerHowl:Start() + timerNextHowl:Start() + end + if args:IsSpellID(2140494) then + warnShadowStorm:Show() + end +end + +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 26665 then + DBM.BossHealth:Clear() + end +end diff --git a/DBM-Hyjal/Chromius.lua b/DBM-Hyjal/Chromius.lua new file mode 100644 index 0000000..def4e4e --- /dev/null +++ b/DBM-Hyjal/Chromius.lua @@ -0,0 +1,290 @@ +local mod = DBM:NewMod("Chromius", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(26643) +mod:RegisterCombat("combat", 26643) + +mod:RegisterEvents( + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS", + "SPELL_AURA_APPLIED", + "SPELL_DAMAGE", + "CHAT_MSG_MONSTER_YELL", + "CHAT_MSG_RAID_BOSS_EMOTE", + "UNIT_HEALTH", + "UNIT_DIED" +) + +-- Final Countdown +local specWarnFinalCountdown = mod:NewSpecialWarning("Final Countdown! The Hourglass will vibrate %s times!", 2141735) +local warnCountdown = mod:NewAnnounce("There are %s vibrations left!", 2141735) +local timerNextFinalCountdown = mod:NewTimer(60,"Next Final Countdown: (%s)", 2141735) +local timerFinalDuration = mod:NewTimer(2,"Final Countdown (%s ticks)", 2141735) +local warnFinalCDSoon = mod:NewAnnounce("Final Countdown soon!", 2141735) +local timerFinalDelay = mod:NewTimer(3, "Vibration travel time", 2141735) + +-- Events (Mannoroth) +local timerNextChaosBlast = mod:NewNextTimer(20,2141800) +local timerCastChaosBlast = mod:NewTargetTimer(3.85, 2141800) +local warnChaosBlast = mod:NewTargetAnnounce(2141800) +local specWarnChaosBlast = mod:NewSpecialWarning("Chaos Blast on you!", 2141800) +local timerMannorothsFury = mod:NewNextTimer(20, 2141809) +local warnMannorothsFury = mod:NewSpellAnnounce(2141809) + +--Events (Tyrande) +local warnBlackArrow = mod:NewAnnounce("Black Arrow on %s!", 2141904) +local specWarnBlackArrow = mod:NewSpecialWarning("Black Arrow on you!", 2141904) + +--Events (Jaina) +local warnHolyLight = mod:NewAnnounce("%s is casting Holy Light! Interrupt it!", 2141856) +local timerInsanity = mod:NewTimer(106, "Jaina is losing her mind...", 2141884) + +-- Dragon abilities +local warnArcaneBreath = mod:NewSpellAnnounce(2141705) +local timerArcaneBreath = mod:NewNextTimer(30, 2141705) +local timerCastArcaneBreath = mod:NewCastTimer(2, 2141705) +local timerBreathDuration = mod:NewTimer(3, "Arcane Breath duration", 2141705) + +-- adds +local warnArcaneExplosion = mod:NewAnnounce("Infinite Time Warder is casting Arcane Explosion!", 2141758) +local timerArcaneExplosion = mod:NewCastTimer(4, 2141758) + +-- Phases +local warnTransSoon = mod:NewAnnounce("Portal Event incoming in 5 percent health!", 2141724) +local timerTeleport = mod:NewTimer(5, "Teleported in", 2100249) +local warnJainaPhase = mod:NewAnnounce("Enter the portal and kill Jaina!", 2141724) +local warnGromPhase = mod:NewAnnounce("Enter the portal and kill the Infinite Subjugators!", 2141724) +local warnTyrandePhase = mod:NewAnnounce("Enter the Portal and heal the Sentinels!", 2141724) +local SentinelAnnounce = mod:NewAnnounce("There are %s Sentinels remaining!", 2140018) + + +-- SPELL_DAMAGE special warnings +local specWarnConsecration = mod:NewSpecialWarningMove(2141858) +local specWarnSplitSecond = mod:NewSpecialWarningMove(2141725) + +-- fight +local timerCombatStart = mod:NewTimer(20, "Combat starting in", 39255) +local count +local countdown +local duration +local prewarn +local SentinelsAlive +local insanity +local phase +local JainaHP +local TyrandeHP +local ThrallHP + +-- INFO --- +-- SPELL_CAST_START Arcane Breath (2141705) + + +function mod:OnCombatStart(delay) + duration = 2 + count = 1 + countdown = 1 + prewarn = 0 + phase = 0 + SentinelsAlive = 5 + JainaHP = 0 + TyrandeHP = 0 + ThrallHP = 0 + insanity = 0 + timerArcaneBreath:Start(40-delay) + timerNextFinalCountdown:Start(65-delay, count) + warnFinalCDSoon:Schedule(60-delay) + self:ScheduleMethod(65-delay,"FinalCountdown") +end + +function mod:FinalCountdown() + self:UnscheduleMethod("FinalCountdown") + countdown = count - 1 + specWarnFinalCountdown:Show(count) + if phase == 0 then + timerFinalDuration:Start(duration, count) + count = count + 1 + duration = duration + 2.5 + timerNextFinalCountdown:Start(60,count) + warnFinalCDSoon:Schedule(55) + self:ScheduleMethod(60,"FinalCountdown") + elseif phase == 1 then + timerFinalDelay:Start(3) + self:ScheduleMethod(3,"FinalDuration") + elseif phase == 2 then + timerFinalDelay:Start(3) + self:ScheduleMethod(3,"FinalDuration") + elseif phase == 3 then + timerFinalDelay:Start(3) + self:ScheduleMethod(3,"FinalDuration") + end +end + +function mod:FinalDuration() + timerFinalDuration:Start(duration, count) + count = count + 1 + duration = duration + 2.5 + self:ScheduleMethod(57,"FinalCountdown") + timerNextFinalCountdown:Start(57,count) + warnFinalCDSoon:Schedule(52) +end + +function mod:ChaosBlast() + local targetCB = mod:GetBossTarget(26688) + if targetCB == UnitName("player") then + specWarnChaosBlast:Show() + SendChatMessage("Chaos Blast on "..UnitName("PLAYER").."!", "SAY") + else + warnChaosBlast:Show(targetCB) + end + timerCastChaosBlast:Start(targetCB) + self:SetIcon(targetCB, 8, 4) +end + +function mod:MannorothsFury() + self:UnscheduleMethod("MannorothsFury") + timerMannorothsFury:Start() + warnMannorothsFury:Show() + self:ScheduleMethod(20,"MannorothsFury") +end + +function mod:StopTimers() + timerArcaneBreath:Stop() +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(2141904) then + if args:IsPlayer() then + specWarnBlackArrow:Show() + else + warnBlackArrow:Show(args.destName) + end + end +end + +function mod:SPELL_DAMAGE(args) + if args:IsSpellID(2141858,2141859,2141860,2141861) and args:IsPlayer() and DBM:AntiSpam(5,1) then + specWarnConsecration:Show() + end + if args:IsSpellID(2141725,2141726,2141727,2141728) and args:IsPlayer() and DBM:AntiSpam(5,2) then + specWarnSplitSecond:Show() + end + if args:IsSpellID(2141736,2141737,2141738,2141739) and DBM:AntiSpam(1.8,6) then + if countdown >= 1 then + warnCountdown:Show(countdown) + countdown = countdown - 1 + end + end +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(2141705) then + warnArcaneBreath:Show() + timerArcaneBreath:Start() + timerCastArcaneBreath:Start() + timerBreathDuration:Schedule(2) + end + if args:IsSpellID(2141758) then + warnArcaneExplosion:Show() + timerArcaneExplosion:Start() + self:SetIcon(args.sourceGUID, 8) + end + if args:IsSpellID(2141800) then + self:ScheduleMethod(0.15, "ChaosBlast") + timerNextChaosBlast:Start() + end + if args:IsSpellID(2141856) then + warnHolyLight:Show(args.sourceName) + end + if args:IsSpellID(2141868,2141869,2140134,2140135) and phase == 1 and insanity == 1 and args.sourceName == "Lady Jaina Proudmoore" then + insanity = 0 + timerInsanity:Stop() + end +end + +function mod:SPELL_CAST_SUCCESS(args) +end + +function mod:CHAT_MSG_MONSTER_YELL(msg) + if msg == L.ChromiusRP or msg:find(L.ChromiusRP) then + timerCombatStart:Start() + elseif msg == L.ChromiusRP2 or msg:find(L.ChromiusRP2) then + timerCombatStart:Start() + elseif msg == L.JainaPhaseYell or msg:find(L.JainaPhaseYell) then -- Jaina Phase start + warnJainaPhase:Show() + timerInsanity:Start() + insanity = 1 + self:ScheduleMethod(0,"StopTimers") + DBM.BossHealth:Clear() + phase = 1 + elseif msg == L.GromPhaseYell or msg:find(L.GromPhaseYell) then -- Grom Phase start + warnGromPhase:Show() + self:ScheduleMethod(0,"StopTimers") + timerNextChaosBlast:Start(20) + timerMannorothsFury:Start(25) + self:ScheduleMethod(25,"MannorothsFury") + DBM.BossHealth:Clear() + phase = 2 + elseif msg == L.TyrandePhaseYell or msg:find(L.TyrandePhaseYell) then -- Tyrande Phase start + warnTyrandePhase:Show() + self:ScheduleMethod(0,"StopTimers") + DBM.BossHealth:Clear() + phase = 3 + end +end + +function mod:UNIT_DIED(args) + if args.destName =="Infinite Manipulator" then + timerTeleport:Start(5) + timerArcaneBreath:Start(13) + self:ScheduleMethod(7,"AddBoss") + JainaHP = 1 + phase = 0 + end + if args.destName =="Mannoroth" then + timerTeleport:Start(5) + timerArcaneBreath:Start(13) + self:UnscheduleMethod("MannorothsFury") + timerNextChaosBlast:Stop() + timerMannorothsFury:Stop() + self:ScheduleMethod(7,"AddBoss") + ThrallHP = 1 + phase = 0 + end + if args.destName =="Darnassus Sentinel" then + SentinelsAlive = SentinelsAlive - 1 + if DBM:AntiSpam(1, 2) then + SentinelAnnounce:Show(SentinelsAlive) + end + if SentinelsAlive == 0 then + timerTeleport:Start(5) + timerArcaneBreath:Start(13) + self:ScheduleMethod(7,"AddBoss") + TyrandeHP = 1 + phase = 0 + end + end +end + +function mod:UNIT_HEALTH(uId) + if self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.80 and prewarn == 0 and DBM:AntiSpam(5,3) then + prewarn = 1 + warnTransSoon:Show() + elseif self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.55 and prewarn == 1 and DBM:AntiSpam(5,4) then + prewarn = 2 + warnTransSoon:Show() + elseif self:GetUnitCreatureId(uId) == 26643 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.30 and prewarn == 2 and DBM:AntiSpam(5,5) then + prewarn = 3 + warnTransSoon:Show() + end +end + +function mod:AddBoss() + if JainaHP == 1 then + DBM.BossHealth:AddBoss(17772,"Lady Jaina Proudmoore") + elseif TyrandeHP == 1 then + DBM.BossHealth:AddBoss(17948,"Tyrande Whisperwind") + elseif ThrallHP == 1 then + DBM.BossHealth:AddBoss(17852,"Thrall") + end +end diff --git a/DBM-Hyjal/DBM-Hyjal.toc b/DBM-Hyjal/DBM-Hyjal.toc new file mode 100644 index 0000000..65444ff --- /dev/null +++ b/DBM-Hyjal/DBM-Hyjal.toc @@ -0,0 +1,23 @@ +## Interface: 30300 +## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Mount Hyjal|r +## LoadOnDemand: 1 +## RequiredDeps: DBM-Core, DBM-BurningCrusade +## SavedVariablesPerCharacter: DBMHyjal_SavedVars, DBMHyjal_SavedStats +## X-DBM-Mod: 1 +## X-DBM-Mod-Category: BC +## X-DBM-Mod-Name: Mount Hyjal +## X-DBM-Tab-Sort: 306 +## X-DBM-Mod-LoadZone: Hyjal Summit +localization.en.lua +localization.de.lua +localization.cn.lua +localization.tw.lua +localization.ru.lua +localization.es.lua +localization.kr.lua +RageWinterchill.lua +Anetheron.lua +Kazrogal.lua +Azgalor.lua +Chromius.lua +Archimonde.lua \ No newline at end of file diff --git a/DBM-Hyjal/Kazrogal.lua b/DBM-Hyjal/Kazrogal.lua new file mode 100644 index 0000000..bc2f560 --- /dev/null +++ b/DBM-Hyjal/Kazrogal.lua @@ -0,0 +1,121 @@ +local mod = DBM:NewMod("Kazrogal", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(17888) +mod:RegisterCombat("combat", 17888) + +mod:RegisterEvents( + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS", + "SPELL_AURA_APPLIED", + "SPELL_AURA_APPLIED_DOSE", + "SPELL_AURA_REMOVED", + "CHAT_MSG_RAID_BOSS_EMOTE", + "CHAT_MSG_MONSTER_YELL", + "SPELL_MISSED" +) + + +-- Pillar of Suffering (2141019) 200% increased Swing timer + can't dodge +-- Pillar of Cataclysm (2141018) Fire splash damage + +-- 1st Pillar (10 seconds) + +-- Mark of Kaz +local warnMark = mod:NewSpellAnnounce(2141001, 3) +local timerMark = mod:NewNextTimer(55, 2141000) + +-- Warstomp +local warnStomp = mod:NewSpellAnnounce(2141009, 2) +local timerStomp = mod:NewNextTimer(55, 2141009) + +-- Pillars +local timerPillar1 = mod:NewTimer(10, "First Pillar", 10408) +local timerPSuffering = mod:NewTimer(40, "Pillar of Suffering duration", 2141030) +local warnPSuffering = mod:NewAnnounce("The Pillar of Suffering has hit the ground", 2, 2141030) +local timerNextPSuffering = mod:NewNextTimer(10,2141030) +local timerPCataclysm = mod:NewTimer(40, "Pillar of Cataclysm duration", 2141026) +local warnPCataclysm = mod:NewAnnounce("The Pillar of Cataclysm has hit the ground", 2, 2141026) +local timerNextPCataclysm = mod:NewNextTimer(10, 2141026) +local pillar + +-- Physical attacks +local timerNextMalevolent = mod:NewNextTimer(51, 2141008) +local timerMalevolentSwing = mod:NewCastTimer(4, 2141008) +local warnMalevolent = mod:NewSpellAnnounce(2141008) + +-- Scars & Debuffs +local warnCataclysmic = mod:NewAnnounce("You have %s stacks of Cataclysmic Scar", 2141040) +local warnTormenting = mod:NewAnnounce("You have %s stacks of Tormenting Scar", 2141041) + +-- fight +local warnChallenged = mod:NewAnnounce("Kaz'rogal fixates on %s!",2141039) +local warnManaTotem = mod:NewAnnounce("Thrall is summoning a Mana Stream Totem! Click it to replenish your mana!", 2140261) + + +function mod:OnCombatStart(delay) + pillar = 0 + timerPillar1:Start(-delay) + timerStomp:Start(-delay) + timerMark:Start(14-delay) +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(2141001) and args:IsPlayer() and DBM:AntiSpam(5,1) then + timerMark:Start() + warnMark:Show(args.amount) + end + if args:IsSpellID(2141039) then + warnChallenged:Show(args.destName) + end +end + +function mod:SPELL_AURA_APPLIED_DOSE(args) + if args:IsSpellID(2141040) and args:IsPlayer() and args.amount >= 4 and DBM:AntiSpam(3,2) then + warnCataclysmic:Show(args.amount) + end + if args:IsSpellID(2141041) and args:IsPlayer() and args.amount >= 4 and DBM:AntiSpam(3,3) then + warnTormenting:Show(args.amount) + end +end + +function mod:SPELL_MISSED(args) + if args:IsSpellID(2141009) and DBM:AntiSpam(1,1) then + if pillar == 1 then + timerNextPCataclysm:Start() + pillar = 2 + elseif pillar == 2 then + timerNextPSuffering:Start() + pillar = 1 + end + timerStomp:Start() + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(2141027,2141028,2141029,2141030) and DBM:AntiSpam(40,3) then + warnPSuffering:Show() + timerPSuffering:Start() + if pillar == 0 then + pillar = 1 + end + elseif args:IsSpellID(2141023,2141024,2141025,2141026) and DBM:AntiSpam(40,4) then + warnPCataclysm:Show() + timerPCataclysm:Start() + if pillar == 0 then + pillar = 2 + end + end + if args:IsSpellID(2141008) and DBM:AntiSpam(6, 5) then + timerNextMalevolent:Start() + timerMalevolentSwing:Start() + warnMalevolent:Show() + end +end + +function mod:CHAT_MSG_MONSTER_YELL(msg) +if msg == "I am summoning a Mana Stream Totem near us. Use it to replenish!" then + warnManaTotem:Show() +end +end \ No newline at end of file diff --git a/DBM-Hyjal/RageWinterchill.lua b/DBM-Hyjal/RageWinterchill.lua new file mode 100644 index 0000000..ab961da --- /dev/null +++ b/DBM-Hyjal/RageWinterchill.lua @@ -0,0 +1,276 @@ +local mod = DBM:NewMod("RageWinterchill", "DBM-Hyjal") +local L = mod:GetLocalizedStrings() + +mod:SetRevision(("$Revision: 183 $"):sub(12, -3)) +mod:SetCreatureID(17767) +mod:SetUsedIcons(8) +mod:RegisterCombat("combat", 17767) + +mod:RegisterEvents( + "SPELL_AURA_APPLIED", + "SPELL_DAMAGE", + "SPELL_AURA_APPLIED_DOSE", + "SPELL_CAST_START", + "SPELL_CAST_SUCCESS", + "SPELL_MISSED", + "CHAT_MSG_RAID_BOSS_EMOTE", + "CHAT_MSG_MONSTER_YELL", + "UNIT_HEALTH", + "UNIT_DIED" +) + +--DnD +local warnDnDSoon = mod:NewSoonAnnounce(2140600, 2) +local timerDnDCD = mod:NewNextTimer(30, 2140601) +local timerDnDextra = mod:NewNextTimer(10, 2140601) +local specWarnDnD = mod:NewSpecialWarningMove(2140600, 2) +-- Frozen Solid +local specWarnFrozen = mod:NewSpecialWarningYou(2140617, 2) +local timerFrozen = mod:NewTimer(10,"Frozen Solid", 2140617) +local sayFrozenFade = mod:NewFadesYell(2140617) +-- Lich Slap +local timerNextSlap = mod:NewNextTimer(30, 2140645) +local warnLichSlap = mod:NewTargetAnnounce(2140645) +-- Winter's Touch +local warnWT = mod:NewTargetAnnounce(2140605, 2) +local specWarnWT = mod:NewSpecialWarningYou(2140605, 2) +local timerNextWT = mod:NewCDTimer(15, 2140605) +local timerWT = mod:NewCastTimer(1.3, 2140605) +-- Transitions +local warnTransSoon = mod:NewSpecialWarning("Intermission Phase Soon", 1, 500933) +local warnTransmission = mod:NewAnnounce("Transmission: Kill the Phylacteries!", 2, 500933) +-- Ice Barrage +local warnIceBarrage = mod:NewSpellAnnounce(2140624, 2) +local timerIceBarrage = mod:NewCastTimer(8, 2140624) +local timerNextBarrage = mod:NewNextTimer(45, 2140624) +--Chilled to the Bone +local SpecWarnChilled = mod:NewSpecialWarning("You have %s stacks of Chilled to the Bone!", 2140612) +--Frost Nova +local timerNextNova = mod:NewNextTimer(30, 2140620) +-- Chains of Winterchill +local warnChains = mod:NewAnnounce("%s is chained with >%s 14 and DBM:AntiSpam(5,4) then + SpecWarnChilled:Show(args.amount) + end +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(2140605) then + self:ScheduleMethod(0.2,"WTouch") + lastWintersTouch = GetTime() + timerNextWT:Start() + end + if args:IsSpellID(2140624) then + warnIceBarrage:Show() + timerIceBarrage:Start() + timerNextBarrage:Start(70) + remaininTouch = (15 - (GetTime() - lastWintersTouch)) + remainingDnD = (30 - (GetTime() - lastDnD)) + remainingNova = (30 - (GetTime() - lastNova)) + remainingSlap = (30 - (GetTime() - lastSlap)) + timerDnDCD:Stop() + warnDnDSoon:Cancel() + warnDnDSoon:Schedule(remainingDnD + 5) + timerDnDCD:Start(remainingDnD + 10) + self:UnscheduleMethod("DnD") + self:ScheduleMethod(remainingDnD + 10,"DnD") + timerNextWT:Stop() + timerNextWT:Start(remaininTouch + 10) + timerNextNova:Stop() + timerNextNova:Start(remainingNova + 10) + timerNextSlap:Stop() + timerNextSlap:Start(remainingSlap + 10) + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(2140645) then + timerNextSlap:Start(30) + lastSlap = GetTime() + warnLichSlap:Show(args.destName) + end +end + +function mod:CHAT_MSG_MONSTER_YELL(msg) + if msg == L.TransitionYell or msg:find(L.TransitionYell) then + self:ScheduleMethod(0,"Intermission") + end +end + +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 26634 then + phylDeath = phylDeath + 1 + phylRemaining = (6 - phylDeath) + phylAnnounce:Show(phylRemaining) + end + if cid == 26634 and phylRemaining == 0 then + self:ScheduleMethod(1,"BossPhase") + end +end + +function mod:UNIT_HEALTH(uId) + if self:GetUnitCreatureId(uId) == 17767 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.70 and prewarn == 1 and DBM:AntiSpam(5,2) then + prewarn = 2 + warnTransSoon:Show() + elseif self:GetUnitCreatureId(uId) == 17767 and (UnitHealth(uId) / UnitHealthMax(uId)) <= 0.36 and prewarn == 2 and DBM:AntiSpam(5,3) then + prewarn = 3 + warnTransSoon:Show() + end +end + +function mod:OnCombatEnd() + DBM.BossHealth:RemoveBoss(17772) + self:UnscheduleMethod("BossPhase") + self:UnscheduleMethod("Intermission") +end + +--function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) +-- if msg == L.Transition1 or msg:find(L.Transition1) and phase == 1 then +-- self:ScheduleMethod(0,"Intermission") +-- phase = 2 +-- elseif msg == L.Transition2 or msg:find(L.Transition2) and phase == 2 then +-- self:ScheduleMethod(0,"BossPhase") +-- phase = 1 +-- end +--end + +--function mod:CHAT_MSG_MONSTER_EMOTE(msg) +-- if msg == L.Transition1 or msg:find(L.Transition1) and phase == 1 then +-- self:ScheduleMethod(0,"Intermission") +-- phase = 2 +-- elseif msg == L.Transition2 or msg:find(L.Transition2) and phase == 2 then +-- self:ScheduleMethod(0,"BossPhase") +-- phase = 1 +-- end +--end \ No newline at end of file diff --git a/DBM-Hyjal/localization.cn.lua b/DBM-Hyjal/localization.cn.lua new file mode 100644 index 0000000..f9e9ed8 --- /dev/null +++ b/DBM-Hyjal/localization.cn.lua @@ -0,0 +1,98 @@ +if GetLocale() ~= "zhCN" then return end + +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "雷基·冬寒" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "安纳塞隆" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "卡兹洛加" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "阿兹加洛" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "阿克蒙德" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "普通怪物" +} +L:SetWarningLocalization{ + WarnWave = "%s", + WarnWaveSoon= "下一波敌人即将到来" +} +L:SetTimerLocalization{ + TimerWave = "Next wave"--Translate +} +L:SetOptionLocalization{ + WarnWave = "Warn when a new wave is incoming",--Translate + WarnWaveSoon = "Warn when a new wave is incoming soon",--Translate + DetailedWave = "Detailed warning when a new wave is incoming (which mobs)",--Translate + TimerWave = "Show a timer for next wave"--Translate +} +L:SetMiscLocalization{ + HyjalZoneName = "海加尔峰", + Thrall = "萨尔", + Jaina = "吉安娜·普罗德摩尔", + RageWinterchill = "雷基·冬寒", + Anetheron = "安纳塞隆", + Kazrogal = "卡兹洛加", + Azgalor = "阿兹加洛", + WarnWave_0 = "第%s/8波", + WarnWave_1 = "第%s/8波 - %s%s", + WarnWave_2 = "第%s/8波 - %s%s 和 %s%s", + WarnWave_3 = "第%s/8波 - %s%s, %s%s 和 %s%s", + WarnWave_4 = "第%s/8波 - %s%s, %s%s, %s%s 和 %s%s", + WarnWave_5 = "第%s/8波 - %s%s, %s%s, %s%s, %s%s 和 %s%s", + RageGossip = "我和我的伙伴们将与您并肩作战,普罗德摩尔女士。", + AnetheronGossip = "我们已经准备好对付阿克蒙德的任何爪牙了,普罗德摩尔女士。", + KazrogalGossip = "我与你并肩作战,萨尔。", + AzgalorGossip = "我们无所畏惧。", + Ghoul = "食尸鬼", + Abomination = "憎恶", + Necromancer = "亡灵巫师", + Banshee = "女妖", + Fiend = "地穴恶魔", + Gargoyle = "石像鬼", + Wyrm = "冰霜巨龙", + Stalker = "恶魔猎犬", + Infernal = "地狱火" +} diff --git a/DBM-Hyjal/localization.de.lua b/DBM-Hyjal/localization.de.lua new file mode 100644 index 0000000..61f7ecd --- /dev/null +++ b/DBM-Hyjal/localization.de.lua @@ -0,0 +1,96 @@ +if GetLocale() ~= "deDE" then return end +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "Furor Winterfrost" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "Anetheron" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "Kaz'rogal" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "Azgalor" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "Archimonde" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "Wellen (HdZ 3)" +} +L:SetWarningLocalization{ + WarnWave = "%s", +} +L:SetTimerLocalization{ + TimerWave = "Nächste Welle" +} +L:SetOptionLocalization{ + WarnWave = "Warne, wenn eine neue Welle kommt", + DetailedWave = "Detaillierte Warnung, wenn eine neue Welle kommt (welche Mobs)", + TimerWave = "Zeige Zeit bis nächste Welle" +} +L:SetMiscLocalization{ + HyjalZoneName = "Hyjalgipfel", + Thrall = "Thrall", + Jaina = "Lady Jaina Prachtmeer", + GeneralBoss = "Boss kommt", + RageWinterchill = "Furor Winterfrost kommt", + Anetheron = "Anetheron kommt", + Kazrogal = "Kaz'rogal kommt", + Azgalor = "Azgalor kommt", + WarnWave_0 = "Welle %s/8", + WarnWave_1 = "Welle %s/8 - %s %s", + WarnWave_2 = "Welle %s/8 - %s %s und %s %s", + WarnWave_3 = "Welle %s/8 - %s %s, %s %s und %s %s", + WarnWave_4 = "Welle %s/8 - %s %s, %s %s, %s %s und %s %s", + WarnWave_5 = "Welle %s/8 - %s %s, %s %s, %s %s, %s %s und %s %s", + RageGossip = "Meine Gefährten und ich werden Euch zur Seite stehen, Lady Prachtmeer.", + AnetheronGossip = "Was auch immer Archimonde gegen uns ins Feld schicken mag, wir sind bereit, Lady Prachtmeer.", + KazrogalGossip = "Ich werde Euch zur Seite stehen, Thrall!", + AzgalorGossip = "Wir haben nichts zu befürchten.", + Ghoul = "Ghule", + Abomination = "Monstrositäten", + Necromancer = "Nekromanten", + Banshee = "Banshees", + Fiend = "Gruftbestien", + Gargoyle = "Gargoyles", + Wyrm = "Frostwyrm", + Stalker = "Teufelspirscher", + Infernal = "Höllenbestien" +} diff --git a/DBM-Hyjal/localization.en.lua b/DBM-Hyjal/localization.en.lua new file mode 100644 index 0000000..b43c6a1 --- /dev/null +++ b/DBM-Hyjal/localization.en.lua @@ -0,0 +1,153 @@ +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("RageWinterchill") + +L:SetGeneralLocalization({ + name = "Rage Winterchill" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ + Transition1 = "%s calls for assistance!", + Transition2 = "%s shatters his Ice Bullwark, continuing his assault!", + TransitionYell = "It will be much colder in your grave.", + SayFrozenFade = ""..UnitName("PLAYER").."is frozen solid for 10 seconds!", + Jaina = "Lady Jaina Proudmoore" +}) + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization({ + name = "Anetheron" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ + RingofFrost = "I am summoning a ring of frost heroes! Quickly, move our enemies into my trap!", + Nightmare = "Anetheron sends %s into a nightmare!", + Infernal1 = "Let fire rain from above!", + Infernal2 = "Earth and sky shall burn!", + Jaina = "Lady Jaina Proudmoore" +}) + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization({ + name = "Kaz'rogal" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ +}) + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization({ + name = "Azgalor" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ + LegionPortal = "Legion Portal" +}) + +------------------ +-- Chromius -- +------------------ +L = DBM:GetModLocalization("Chromius") + +L:SetGeneralLocalization({ + name = "Chromius" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ + ChromiusRP ="You again? I should have known... ", + ChromiusRP2 ="You again? I should have known... ", + JainaPhaseYell ="All this fighting. All this talking. But my words only fall on deaf ears. Maybe a certain mage might be willing to listen...", + JainaPhaseEnd ="Oh Jaina, you would have been happier this way. For a time...", + GromPhaseYell ="Don't listen to her! You must ensure Thrall survives, and Grom must meet his fate", + MannorothYell ="His blood is mine! As is your whole miss misbegotten race!", + GromPhaseEnd ="You should have saved the other one...", + TyrandePhaseYell ="What? She can see the future? I'll take a guess and say save Tyrande, whatever it takes", + TyrandePhaseEnd ="That's sad. They didn't make it. Neither will you if you keep standing in my way! " +}) + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization({ + name = "Archimonde" +}) + +L:SetWarningLocalization({ +}) + +L:SetTimerLocalization({ +}) + +L:SetOptionLocalization({ +}) + +L:SetMiscLocalization({ + FightStartYell ="All of your efforts have been in vain, for the draining of the World Tree has already begun! Soon the heart of your world will beat no more!", + FirePhase ="Your resistance is insignificant.", + WardofWinter ="I going to place a ward on %s! Use it to quench the fire!", + LightningCapTotem ="I am summoning a Lightning Capture Totem near us! Lure the Ball Lightnings near it!", + LightofElune ="Great Mother, your daugther requires aid. Grant %s your blessed light and guide them through the darkness of the endless night!", + CalloftheVoid ="At last it is here! Mourn and lament the passing of all you have ever known, and all that would have been! Hach min corai!" +}) \ No newline at end of file diff --git a/DBM-Hyjal/localization.es.lua b/DBM-Hyjal/localization.es.lua new file mode 100644 index 0000000..e3165e2 --- /dev/null +++ b/DBM-Hyjal/localization.es.lua @@ -0,0 +1,96 @@ +if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "Ira Fríoinvierno" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "Anetheron" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "Kaz'rogal" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "Azgalor" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "Archimonde" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "Oleadas" +} +L:SetWarningLocalization{ + WarnWave = "%s", +} +L:SetTimerLocalization{ + TimerWave = "Siguiente oleada" +} +L:SetOptionLocalization{ + WarnWave = "Mostrar aviso cuando se aproxime una oleada", + DetailedWave = "Mostrar aviso detallado con los tipos y número de enemigos cuando se aproxime una oleada", + TimerWave = "Mostrar temporizador para la siguiente oleada" +} +L:SetMiscLocalization{ + HyjalZoneName = "La Cima Hyjal", + Thrall = "Thrall", + Jaina = "Lady Jaina Valiente", + GeneralBoss = "Se aproxima un jefe", + RageWinterchill = "Se aproxima Ira Fríoinvierno", + Anetheron = "Se aproxima Anetheron", + Kazrogal = "Se aproxima Kazrogal", + Azgalor = "Se aproxima Azgalor", + WarnWave_0 = "Oleada %s/8", + WarnWave_1 = "Oleada %s/8 - %s %s", + WarnWave_2 = "Oleada %s/8 - %s %s y %s %s", + WarnWave_3 = "Oleada %s/8 - %s %s, %s %s y %s %s", + WarnWave_4 = "Oleada %s/8 - %s %s, %s %s, %s %s y %s %s", + WarnWave_5 = "Oleada %s/8 - %s %s, %s %s, %s %s, %s %s y %s %s", + RageGossip = "Mis compañeros y yo estamos contigo, Lady Valiente.", + AnetheronGossip = "Estamos listos para cualquier cosa que Archimonde nos mande, Lady Valiente.", + KazrogalGossip = "Estoy contigo, Thrall.", + AzgalorGossip = "No tenemos nada que temer.", + Ghoul = "Necrófagos", + Abomination = "Abominaciones", + Necromancer = "Nigromantes", + Banshee = "Almas en pena", + Fiend = "Malignos de cripta", + Gargoyle = "Gárgolas", + Wyrm = "Vermis de escarcha", + Stalker = "Acechadores viles", + Infernal = "Infernales" +} diff --git a/DBM-Hyjal/localization.kr.lua b/DBM-Hyjal/localization.kr.lua new file mode 100644 index 0000000..afbf04d --- /dev/null +++ b/DBM-Hyjal/localization.kr.lua @@ -0,0 +1,100 @@ +if GetLocale() ~= "koKR" then return end +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "격노한 윈터칠" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "아네테론" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "카즈로갈" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "아즈갈로" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "아키몬드" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "하이잘: 일반구간" +} + +L:SetWarningLocalization{ + WarnWave = "%s", +} + +L:SetTimerLocalization{ + TimerWave = "다음 공격" +} + +L:SetOptionLocalization{ + WarnWave = "다음 공격 알림 보기", + DetailedWave = "다음 공격 알림시 적 조합까지 자세히 보기", + TimerWave = "다음 공격 바 보기" +} + +L:SetMiscLocalization{ + HyjalZoneName = "하이잘 정상", + Thrall = "스랄", + Jaina = "제이나 프라우드무어", + GeneralBoss = "곧 우두머리", + RageWinterchill = "곧 격노한 윈터칠", + Anetheron = "곧 아네테론", + Kazrogal = "곧 카즈로갈", + Azgalor = "곧 아즈갈로", + WarnWave_0 = "공격 %s/8", + WarnWave_1 = "공격 %s/8 - %s %s", + WarnWave_2 = "공격 %s/8 - %s %s, %s %s", + WarnWave_3 = "공격 %s/8 - %s %s, %s %s, %s %s", + WarnWave_4 = "공격 %s/8 - %s %s, %s %s, %s %s, %s %s", + WarnWave_5 = "공격 %s/8 - %s %s, %s %s, %s %s, %s %s, %s %s", + RageGossip = "제 동료와 저는 프라우드무어 님, 당신과 함께하겠습니다.", + AnetheronGossip = "아키몬드가 어떤 군대를 보내던 우리는 준비가 되어 있습니다, 프라우드무어 님.", + KazrogalGossip = "당신과 함께하겠습니다, 대족장님.", + AzgalorGossip = "두려워할 것은 아무것도 없습니다.", + Ghoul = "구울", + Abomination = "누더기골렘", + Necromancer = "강령술사", + Banshee = "밴시", + Fiend = "지하마귀", + Gargoyle = "가고일", + Wyrm = "서리고룡", + Stalker = "지옥사냥개", + Infernal = "지옥불정령" +} diff --git a/DBM-Hyjal/localization.ru.lua b/DBM-Hyjal/localization.ru.lua new file mode 100644 index 0000000..0b28eb4 --- /dev/null +++ b/DBM-Hyjal/localization.ru.lua @@ -0,0 +1,98 @@ +if GetLocale() ~= "ruRU" then return end + +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "Лютый Хлад" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "Анетерон" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "Каз'рогал" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "Азгалор" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "Архимонд" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "Треш-мобы" +} +L:SetWarningLocalization{ + WarnWave = "%s", + WarnWaveSoon= "Скоро следующая волна" +} +L:SetTimerLocalization{ + TimerWave = "Следующая волна" +} +L:SetOptionLocalization{ + WarnWave = "Warn when a new wave is incoming",--Translate + WarnWaveSoon = "Warn when a new wave is incoming soon",--Translate + DetailedWave = "Detailed warning when a new wave is incoming (which mobs)",--Translate + TimerWave = "Show a timer for next wave"--Translate +} +L:SetMiscLocalization{ + HyjalZoneName = "Вершина Хиджала", + Thrall = "Тралл", + Jaina = "Леди Джайна Праудмур", + RageWinterchill = "Лютый Хлад", + Anetheron = "Анетерон", + Kazrogal = "Каз'рогал", + Azgalor = "Азгалор", + WarnWave_0 = "Волна %s/8", + WarnWave_1 = "Волна %s/8 - %s %s", + WarnWave_2 = "Волна %s/8 - %s %s и %s %s", + WarnWave_3 = "Волна %s/8 - %s %s, %s %s и %s %s", + WarnWave_4 = "Волна %s/8 - %s %s, %s %s, %s %s и %s %s", + WarnWave_5 = "Волна %s/8 - %s %s, %s %s, %s %s, %s %s и %s %s", + RageGossip = "Мои спутники и я – с вами, леди Праудмур.", + AnetheronGossip = "Мы готовы встретить любого, кого пошлет Архимонд.", + KazrogalGossip = "Я с тобой, Тралл.", + AzgalorGossip = "Нам нечего бояться.", + Ghoul = "Вурдалака", + Abomination = "Поганища", + Necromancer = "Некроманта", + Banshee = "Банши", + Fiend = "Некрорахнида", + Gargoyle = "Горгульи", + Wyrm = "Ледяной змей", + Stalker = "Ловчих Скверны", + Infernal = "Инфернала" +} diff --git a/DBM-Hyjal/localization.tw.lua b/DBM-Hyjal/localization.tw.lua new file mode 100644 index 0000000..5fffbbd --- /dev/null +++ b/DBM-Hyjal/localization.tw.lua @@ -0,0 +1,97 @@ +if GetLocale() ~= "zhTW" then return end + +local L + +------------------------ +-- Rage Winterchill -- +------------------------ +L = DBM:GetModLocalization("Rage") + +L:SetGeneralLocalization{ + name = "瑞齊·凜冬" +} + +----------------- +-- Anetheron -- +----------------- +L = DBM:GetModLocalization("Anetheron") + +L:SetGeneralLocalization{ + name = "安納塞隆" +} + +---------------- +-- Kazrogal -- +---------------- +L = DBM:GetModLocalization("Kazrogal") + +L:SetGeneralLocalization{ + name = "卡茲洛加" +} + +--------------- +-- Azgalor -- +--------------- +L = DBM:GetModLocalization("Azgalor") + +L:SetGeneralLocalization{ + name = "亞茲加洛" +} + +------------------ +-- Archimonde -- +------------------ +L = DBM:GetModLocalization("Archimonde") + +L:SetGeneralLocalization{ + name = "阿克蒙德" +} + +---------------- +-- WaveTimers -- +---------------- +L = DBM:GetModLocalization("HyjalWaveTimers") + +L:SetGeneralLocalization{ + name = "小怪模組" +} +L:SetWarningLocalization{ + WarnWave = "%s" +} +L:SetTimerLocalization{ + TimerWave = "下一波" +} +L:SetOptionLocalization{ + WarnWave = "當新一波進攻到來時顯示警告", + DetailedWave = "當新一波進攻到來時顯示詳細警告(何種怪)", + TimerWave = "為下一波進攻顯示計時器" +} +L:SetMiscLocalization{ + HyjalZoneName = "海加爾山", + Thrall = "索爾", + Jaina = "珍娜·普勞德摩爾女士", + GeneralBoss = "首領到來", + RageWinterchill = "瑞齊·凜冬到來", + Anetheron = "安納塞隆到來", + Kazrogal = "卡茲洛加到來", + Azgalor = "亞茲加洛到來", + WarnWave_0 = "第%s/8波", + WarnWave_1 = "第%s/8波 - %s %s", + WarnWave_2 = "第%s/8波 - %s %s 和 %s %s", + WarnWave_3 = "第%s/8波 - %s %s, %s %s 和 %s %s", + WarnWave_4 = "第%s/8波 - %s %s, %s %s, %s %s 和 %s %s", + WarnWave_5 = "第%s/8波 - %s %s, %s %s, %s %s, %s %s 和 %s %s", + RageGossip = "我和我的同伴都與你同在,普勞德摩爾女士。", + AnetheronGossip = "不管阿克蒙德要派誰來對付我們,我們都已經準備好了,普勞德摩爾女士。", + KazrogalGossip = "我與你同在,索爾。", + AzgalorGossip = "我們無所畏懼。", + Ghoul = "食屍鬼", + Abomination = "憎惡", + Necromancer = "死靈法師", + Banshee = "女妖", + Fiend = "地穴惡魔", + Gargoyle = "石像鬼", + Wyrm = "冰龍", + Stalker = "惡魔捕獵者", + Infernal = "巨型地獄火" +} diff --git a/DBM-Naxx/ArachnidQuarter/Anub'Rekhan.lua b/DBM-Naxx/ArachnidQuarter/Anub'Rekhan.lua index d4a3e60..5ede14d 100644 --- a/DBM-Naxx/ArachnidQuarter/Anub'Rekhan.lua +++ b/DBM-Naxx/ArachnidQuarter/Anub'Rekhan.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/ArachnidQuarter/Faerlina.lua b/DBM-Naxx/ArachnidQuarter/Faerlina.lua index 30ed0c4..81f9aa9 100644 --- a/DBM-Naxx/ArachnidQuarter/Faerlina.lua +++ b/DBM-Naxx/ArachnidQuarter/Faerlina.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/ArachnidQuarter/Maexxna.lua b/DBM-Naxx/ArachnidQuarter/Maexxna.lua index 51fbbd7..ccfe86f 100644 --- a/DBM-Naxx/ArachnidQuarter/Maexxna.lua +++ b/DBM-Naxx/ArachnidQuarter/Maexxna.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/ConstructQuarter/Gluth.lua b/DBM-Naxx/ConstructQuarter/Gluth.lua index 71d6b8b..acafe86 100644 --- a/DBM-Naxx/ConstructQuarter/Gluth.lua +++ b/DBM-Naxx/ConstructQuarter/Gluth.lua @@ -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 \ No newline at end of file +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{ diff --git a/DBM-Naxx/ConstructQuarter/Grobbulus.lua b/DBM-Naxx/ConstructQuarter/Grobbulus.lua index 29b362a..ebfe27c 100644 --- a/DBM-Naxx/ConstructQuarter/Grobbulus.lua +++ b/DBM-Naxx/ConstructQuarter/Grobbulus.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/ConstructQuarter/Patchwerk.lua b/DBM-Naxx/ConstructQuarter/Patchwerk.lua index 781391a..77e94e1 100644 --- a/DBM-Naxx/ConstructQuarter/Patchwerk.lua +++ b/DBM-Naxx/ConstructQuarter/Patchwerk.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/ConstructQuarter/Thaddius.lua b/DBM-Naxx/ConstructQuarter/Thaddius.lua index 1111e02..36b47c5 100644 --- a/DBM-Naxx/ConstructQuarter/Thaddius.lua +++ b/DBM-Naxx/ConstructQuarter/Thaddius.lua @@ -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 diff --git a/DBM-Naxx/FrostwyrmLair/Kel'Thuzad.lua b/DBM-Naxx/FrostwyrmLair/Kel'Thuzad.lua index a560362..803ef5c 100644 --- a/DBM-Naxx/FrostwyrmLair/Kel'Thuzad.lua +++ b/DBM-Naxx/FrostwyrmLair/Kel'Thuzad.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/FrostwyrmLair/Sapphiron.lua b/DBM-Naxx/FrostwyrmLair/Sapphiron.lua index 1738418..9898965 100644 --- a/DBM-Naxx/FrostwyrmLair/Sapphiron.lua +++ b/DBM-Naxx/FrostwyrmLair/Sapphiron.lua @@ -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) diff --git a/DBM-Naxx/MilitaryQuarter/Gothik.lua b/DBM-Naxx/MilitaryQuarter/Gothik.lua index ad4d8f2..b1b9573 100644 --- a/DBM-Naxx/MilitaryQuarter/Gothik.lua +++ b/DBM-Naxx/MilitaryQuarter/Gothik.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/MilitaryQuarter/Horsemen.lua b/DBM-Naxx/MilitaryQuarter/Horsemen.lua index 0e70d5e..583fc7e 100644 --- a/DBM-Naxx/MilitaryQuarter/Horsemen.lua +++ b/DBM-Naxx/MilitaryQuarter/Horsemen.lua @@ -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 \ No newline at end of file +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 diff --git a/DBM-Naxx/MilitaryQuarter/Razuvious.lua b/DBM-Naxx/MilitaryQuarter/Razuvious.lua index 03de5be..e765897 100644 --- a/DBM-Naxx/MilitaryQuarter/Razuvious.lua +++ b/DBM-Naxx/MilitaryQuarter/Razuvious.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/PlagueQuarter/Heigan.lua b/DBM-Naxx/PlagueQuarter/Heigan.lua index b7e7be9..a94979d 100644 --- a/DBM-Naxx/PlagueQuarter/Heigan.lua +++ b/DBM-Naxx/PlagueQuarter/Heigan.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/PlagueQuarter/Loatheb.lua b/DBM-Naxx/PlagueQuarter/Loatheb.lua index 6731433..ee6cddc 100644 --- a/DBM-Naxx/PlagueQuarter/Loatheb.lua +++ b/DBM-Naxx/PlagueQuarter/Loatheb.lua @@ -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 \ No newline at end of file diff --git a/DBM-Naxx/PlagueQuarter/Noth.lua b/DBM-Naxx/PlagueQuarter/Noth.lua index f866dc9..1eb53a1 100644 --- a/DBM-Naxx/PlagueQuarter/Noth.lua +++ b/DBM-Naxx/PlagueQuarter/Noth.lua @@ -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 \ No newline at end of file +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 + + diff --git a/DBM-Naxx/localization.en.lua b/DBM-Naxx/localization.en.lua index a963b94..22adac1 100644 --- a/DBM-Naxx/localization.en.lua +++ b/DBM-Naxx/localization.en.lua @@ -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!" })