diff --git a/DBM-Naxx/DBM-Naxx.toc b/DBM-Naxx/DBM-Naxx.toc index a24636f0..2b97dac1 100644 --- a/DBM-Naxx/DBM-Naxx.toc +++ b/DBM-Naxx/DBM-Naxx.toc @@ -34,6 +34,7 @@ ## X-DBM-Mod-Name-esMX: Naxxramas ## X-DBM-Mod-Sort: 6 ## X-DBM-Mod-MapID: 536 +## X-DBM-Mod-BlockRealm: Onyxia, Vanilla Naxxamas PTR ## X-DBM-Mod-LoadZone: Naxxramas ## X-DBM-Mod-LoadZone-zhCN: 纳克萨玛斯 ## X-DBM-Mod-LoadZone-ruRU: Наксрамас diff --git a/DBM-VanillaNaxx/ArachnidQuarter/Anub'Rekhan.lua b/DBM-VanillaNaxx/ArachnidQuarter/Anub'Rekhan.lua new file mode 100644 index 00000000..3d8e13e1 --- /dev/null +++ b/DBM-VanillaNaxx/ArachnidQuarter/Anub'Rekhan.lua @@ -0,0 +1,58 @@ +local mod = DBM:NewMod("Anub'Rekhan-Vanilla", "DBM-VanillaNaxx", 1) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15956) + +mod:RegisterCombat("combat_yell", L.Pull1, L.Pull2) + +mod:RegisterEventsInCombat( + "SPELL_CAST_START 28785 54021", + "SPELL_CAST_SUCCESS 28783 56090", + "SPELL_AURA_REMOVED 28785 54021" +) + +local warningLocustSoon = mod:NewSoonAnnounce(28785, 2) +local warningLocustFaded = mod:NewFadesAnnounce(28785, 1) +local warnImpale = mod:NewTargetNoFilterAnnounce(28783, 3, nil, false) + +local specialWarningLocust = mod:NewSpecialWarningSpell(28785, nil, nil, nil, 2, 2) +local yellImpale = mod:NewYell(28783, nil, false) + +local timerLocustIn = mod:NewCDTimer(80, 28785, nil, nil, nil, 6) +local timerLocustFade = mod:NewBuffActiveTimer(23, 28785, nil, nil, nil, 6) +local timerImpale = mod:NewCDTimer(13, 56090, nil, nil, nil, 3) -- REVIEW! ~7s variance [13.0-19.8]? (25m Lordaeron 2022/10/16) -- 13.7, 13.6, 19.8, 13.0 + +function mod:OnCombatStart(delay) + timerLocustIn:Start(100 - delay) + warningLocustSoon:Schedule(90 - delay) + timerImpale:Start(12.7-delay) -- REVIEW! variance? (25m Lordaeron 2022/10/16) - pull:12.7 +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(28785, 54021) then -- Locust Swarm + specialWarningLocust:Show() + specialWarningLocust:Play("aesoon") + timerLocustIn:Stop() + timerLocustFade:Start(23) + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(28783, 56090) then -- Impale. REVIEW! 28783 needed? + timerImpale:Start() + warnImpale:Show(args.destName) + if args:IsPlayer() then + yellImpale:Yell() + end + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args:IsSpellID(28785, 54021) + and args.auraType == "BUFF" then + warningLocustFaded:Show() + timerLocustIn:Start() + warningLocustSoon:Schedule(62) + end +end diff --git a/DBM-VanillaNaxx/ArachnidQuarter/Faerlina.lua b/DBM-VanillaNaxx/ArachnidQuarter/Faerlina.lua new file mode 100644 index 00000000..33e7aa67 --- /dev/null +++ b/DBM-VanillaNaxx/ArachnidQuarter/Faerlina.lua @@ -0,0 +1,79 @@ +local mod = DBM:NewMod("Faerlina-Vanilla", "DBM-VanillaNaxx", 1) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15953) + +mod:RegisterCombat("combat_yell", L.Pull) + +mod:RegisterEventsInCombat( + "SPELL_AURA_APPLIED 28798 54100 28732 54097 28794 54099", + "SPELL_CAST_SUCCESS 28796 54098", + "UNIT_DIED" +) + +local warnEmbraceActive = mod:NewSpellAnnounce(28732, 1) +local warnEmbraceExpire = mod:NewAnnounce("WarningEmbraceExpire", 2, 28732, nil, nil, nil, 28732) +local warnEmbraceExpired = mod:NewFadesAnnounce(28732, 3) +local warnEnrageSoon = mod:NewSoonAnnounce(28131, 3) +local warnEnrageNow = mod:NewSpellAnnounce(28131, 4) + +local specWarnEnrage = mod:NewSpecialWarningDefensive(28131, nil, nil, nil, 3, 2) +local specWarnGTFO = mod:NewSpecialWarningGTFO(28794, nil, nil, nil, 1, 8) + +local timerEmbrace = mod:NewBuffActiveTimer(30, 28732, nil, nil, nil, 6) +local timerEnrage = mod:NewCDTimer(60, 28131, nil, nil, nil, 6) +local timerPoisonVolleyCD = mod:NewCDTimer(8.2, 54098, nil, nil, nil, 5) -- REVIEW! ~1s variance? (25man Lordaeron 2022/10/16) - 9.1, 9.3, 9.1, 8.5, 8.4, 8.5, 8.2, 8.8 + +mod.vb.enraged = false + +function mod:OnCombatStart(delay) + timerEnrage:Start(-delay) + warnEnrageSoon:Schedule(55 - delay) + timerPoisonVolleyCD:Start(12.6-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 12.6 + self.vb.enraged = false +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(28798, 54100) then -- Frenzy + self.vb.enraged = true + if self:IsTanking("player", "boss1", nil, true) then + specWarnEnrage:Show() + specWarnEnrage:Play("defensive") + else + warnEnrageNow:Show() + end + elseif args:IsSpellID(28732, 54097) and args:GetDestCreatureID() == 15953 and self:AntiSpam(5, 2) then -- Widow's Embrace + warnEmbraceExpire:Cancel() + warnEmbraceExpired:Cancel() + warnEnrageSoon:Cancel() + timerEnrage:Stop() + if self.vb.enraged then + timerEnrage:Start() + warnEnrageSoon:Schedule(45) + end + timerEmbrace:Start() + warnEmbraceActive:Show() + warnEmbraceExpire:Schedule(25) + warnEmbraceExpired:Schedule(30) + self.vb.enraged = false + elseif args:IsSpellID(28794, 54099) and args:IsPlayer() then + specWarnGTFO:Show(args.spellName) + specWarnGTFO:Play("watchfeet") + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(28796, 54098) then -- Poison Bolt Volley + timerPoisonVolleyCD:Start(10) + end +end + +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 15953 then + warnEnrageSoon:Cancel() + warnEmbraceExpire:Cancel() + warnEmbraceExpired:Cancel() + end +end diff --git a/DBM-VanillaNaxx/ArachnidQuarter/Maexxna.lua b/DBM-VanillaNaxx/ArachnidQuarter/Maexxna.lua new file mode 100644 index 00000000..f7f5876f --- /dev/null +++ b/DBM-VanillaNaxx/ArachnidQuarter/Maexxna.lua @@ -0,0 +1,72 @@ +local mod = DBM:NewMod("Maexxna-Vanilla", "DBM-VanillaNaxx", 1) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15952) +mod:RegisterCombat("combat") + +mod:RegisterEventsInCombat( + "SPELL_AURA_APPLIED 28622", + "SPELL_CAST_SUCCESS 29484 54125" +) + +--TODO, verify nax40 web wrap timer +local warnWebWrap = mod:NewTargetNoFilterAnnounce(28622, 2) +local warnWebSpraySoon = mod:NewSoonAnnounce(29484, 1) +local warnWebSprayNow = mod:NewSpellAnnounce(29484, 3) +local warnSpidersSoon = mod:NewAnnounce("WarningSpidersSoon", 2, 17332) +local warnSpidersNow = mod:NewAnnounce("WarningSpidersNow", 4, 17332) + +local specWarnWebWrap = mod:NewSpecialWarningSwitch(28622, "RangedDps", nil, nil, 1, 2) +local yellWebWrap = mod:NewYellMe(28622) + +local timerWebSpray = mod:NewNextTimer(40, 29484, nil, nil, nil, 2) +local timerWebWrap = mod:NewNextTimer(39.6, 28622, nil, "RangedDps|Healer", nil, 3)-- 39.593-40.885 +local timerSpider = mod:NewTimer(30, "TimerSpider", 17332, nil, nil, 1) + +local function Spiderlings(self) + warnSpidersSoon:Schedule(35) + warnSpidersNow:Schedule(40) + timerSpider:Start(40) + self:Unschedule(Spiderlings) + self:Schedule(40, Spiderlings, self) +end + +function mod:OnCombatStart(delay) + warnWebSpraySoon:Schedule(35 - delay) + timerWebSpray:Start(40 - delay) + timerWebWrap:Start(20.1 - delay)--20.095-21.096 + warnSpidersSoon:Schedule(25 - delay) + warnSpidersNow:Schedule(30 - delay) + timerSpider:Start(30 - delay) + self:Schedule(30 - delay, Spiderlings, self) +end + +function mod:OnCombatEnd(wipe) + if not wipe then + if DBT:GetBar(L.ArachnophobiaTimer) then + DBT:CancelBar(L.ArachnophobiaTimer) + end + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 28622 then -- Web Wrap + warnWebWrap:CombinedShow(0.5, args.destName) + if args.destName == UnitName("player") then + yellWebWrap:Yell() + elseif not DBM:UnitDebuff("player", args.spellName) and self:AntiSpam(3, 1) then + specWarnWebWrap:Show() + specWarnWebWrap:Play("targetchange") + timerWebWrap:Start() + end + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(29484, 54125) then -- Web Spray + warnWebSprayNow:Show() + warnWebSpraySoon:Schedule(35) + timerWebSpray:Start() + end +end diff --git a/DBM-VanillaNaxx/ConstructQuarter/Gluth.lua b/DBM-VanillaNaxx/ConstructQuarter/Gluth.lua new file mode 100644 index 00000000..c6dc11c9 --- /dev/null +++ b/DBM-VanillaNaxx/ConstructQuarter/Gluth.lua @@ -0,0 +1,57 @@ +local mod = DBM:NewMod("Gluth-Vanilla", "DBM-VanillaNaxx", 2) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15932) + +mod:RegisterCombat("combat") + +mod:RegisterEventsInCombat( + "SPELL_AURA_APPLIED 28371", + "SPELL_AURA_REMOVED 28371", + "SPELL_DAMAGE 28375 54426" +) + +--TODO, is it really necessary to use SPELL_DAMAGE here? +--TODO, verify decimate timer is actually accurate for wrath (it certainly wasn't for naxx 40) +local warnEnrage = mod:NewTargetNoFilterAnnounce(19451, 3, nil , "Healer|Tank|RemoveEnrage", 2) +local warnDecimateSoon = mod:NewSoonAnnounce(28374, 2) +local warnDecimateNow = mod:NewSpellAnnounce(28374, 3) + +local specWarnEnrage = mod:NewSpecialWarningDispel(19451, "RemoveEnrage", nil, nil, 1, 6) + +local timerEnrage = mod:NewBuffActiveTimer(8, 19451, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON) +local timerDecimate = mod:NewCDTimer(104, 28374, nil, nil, nil, 2) +local enrageTimer = mod:NewBerserkTimer(420) + +function mod:OnCombatStart(delay) + enrageTimer:Start(420 - delay) + timerDecimate:Start(110 - delay) -- 25m Log review from 2022-05-05 - 1 minutes 50 seconds + warnDecimateSoon:Schedule(100 - delay) +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 28371 then + if self.Options.SpecWarn19451dispel then + specWarnEnrage:Show(args.destName) + specWarnEnrage:Play("enrage") + else + warnEnrage:Show(args.destName) + end + timerEnrage:Start() + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args.spellId == 28371 then + timerEnrage:Stop() + end +end + +function mod:SPELL_DAMAGE(_, _, _, _, _, _, spellId) + if (spellId == 28375 or spellId == 54426) and self:AntiSpam(20) then + warnDecimateNow:Show() + timerDecimate:Start() + warnDecimateSoon:Schedule(96) + end +end diff --git a/DBM-VanillaNaxx/ConstructQuarter/Grobbulus.lua b/DBM-VanillaNaxx/ConstructQuarter/Grobbulus.lua new file mode 100644 index 00000000..6c8f08f9 --- /dev/null +++ b/DBM-VanillaNaxx/ConstructQuarter/Grobbulus.lua @@ -0,0 +1,106 @@ +local mod = DBM:NewMod("Grobbulus-Vanilla", "DBM-VanillaNaxx", 2) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15931) +mod:SetUsedIcons(1, 2, 3, 4) + +mod:RegisterCombat("combat") + +mod:RegisterEventsInCombat( + "SPELL_AURA_APPLIED 28169", + "SPELL_AURA_REMOVED 28169", + "SPELL_CAST_SUCCESS 28240 28157 54364" +) + +local warnInjection = mod:NewTargetNoFilterAnnounce(28169, 2) +local warnCloud = mod:NewSpellAnnounce(28240, 2) +local warnSlimeSprayNow = mod:NewSpellAnnounce(54364, 2) +local warnSlimeSpraySoon = mod:NewSoonAnnounce(54364, 1) + +local specWarnInjection = mod:NewSpecialWarningYou(28169, nil, nil, nil, 1, 2) +local yellInjection = mod:NewYellMe(28169, nil, false) + +local timerInjection = mod:NewTargetTimer(10, 28169, nil, nil, nil, 3) +local timerCloud = mod:NewNextTimer(15, 28240, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) +local timerSlimeSprayCD = mod:NewCDTimer(32, 54364, nil, nil, nil, 2) -- Transcriptor snippet below +local enrageTimer = mod:NewBerserkTimer(720) + +mod:AddSetIconOption("SetIconOnInjectionTarget", 28169, false, false, {1, 2, 3, 4}) + +mod.vb.slimeSprays = 1 +local mutateIcons = {} + +local function addIcon(self) + for i,j in ipairs(mutateIcons) do + local icon = 0 + i + self:SetIcon(j, icon) + end +end + +local function removeIcon(self, target) + for i,j in ipairs(mutateIcons) do + if j == target then + table.remove(mutateIcons, i) + self:SetIcon(target, 0) + end + end + addIcon(self) +end + +function mod:OnCombatStart(delay) + self.vb.slimeSprays = 1 + table.wipe(mutateIcons) + enrageTimer:Start(-delay) + warnSlimeSpraySoon:Schedule(27) + timerSlimeSprayCD:Start(31) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 31.0 +end + +function mod:OnCombatEnd() + for _, j in ipairs(mutateIcons) do + self:SetIcon(j, 0) + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 28169 then + warnInjection:Show(args.destName) + timerInjection:Start(args.destName) + if args:IsPlayer() then + specWarnInjection:Show() + specWarnInjection:Play("runout") + yellInjection:Yell() + end + if self.Options.SetIconOnInjectionTarget then + table.insert(mutateIcons, args.destName) + addIcon(self) + end + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args.spellId == 28169 then + timerInjection:Cancel(args.destName)--Cancel timer if someone is dumb and dispels it. + if self.Options.SetIconOnInjectionTarget then + removeIcon(self, args.destName) + end + end +end + +function mod:SPELL_CAST_SUCCESS(args) + if args.spellId == 28240 then + warnCloud:Show() + timerCloud:Start() + elseif args:IsSpellID(28157, 54364) then + warnSlimeSprayNow:Show() + self.vb.slimeSprays = self.vb.slimeSprays + 1 + -- REVIEW! variance? (25man Lordaeron 2022/10/16) - pull:31.0, 27.7, 61.1, 25.5 + if self.vb.slimeSprays % 2 == 0 then -- every 2/4/6... spray short cd + warnSlimeSpraySoon:Schedule(20.5) + timerSlimeSprayCD:Start(25.5) + else -- every 3/5/7... spray long cd + warnSlimeSpraySoon:Schedule(54) + timerSlimeSprayCD:Start(59) + end + end +end diff --git a/DBM-VanillaNaxx/ConstructQuarter/Patchwerk.lua b/DBM-VanillaNaxx/ConstructQuarter/Patchwerk.lua new file mode 100644 index 00000000..40e21cf5 --- /dev/null +++ b/DBM-VanillaNaxx/ConstructQuarter/Patchwerk.lua @@ -0,0 +1,36 @@ +local mod = DBM:NewMod("Patchwerk-Vanilla", "DBM-VanillaNaxx", 2) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(16028) + +mod:RegisterCombat("combat_yell", L.yell1, L.yell2) + +mod:RegisterEventsInCombat( + "SPELL_DAMAGE 28308 59192", + "SPELL_MISSED 28308 59192" +) + +local enrageTimer = mod:NewBerserkTimer(360) + +mod:AddBoolOption("WarningHateful", false, "announce", nil, nil, nil, 28308) + +local function announceStrike(target, damage) + SendChatMessage(L.HatefulStrike:format(target, damage), "RAID") +end + +function mod:OnCombatStart(delay) + enrageTimer:Start(-delay) +end + +function mod:SPELL_DAMAGE(_, _, _, _, destName, _, spellId, _, _, amount) + if (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then + announceStrike(destName, amount or 0) + end +end + +function mod:SPELL_MISSED(_, _, _, _, destName, _, spellId, _, _, missType) + if (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then + announceStrike(destName, getglobal("ACTION_SPELL_MISSED_"..(missType)) or "") + end +end diff --git a/DBM-VanillaNaxx/ConstructQuarter/Textures/arrow.tga b/DBM-VanillaNaxx/ConstructQuarter/Textures/arrow.tga new file mode 100644 index 00000000..1c846271 Binary files /dev/null and b/DBM-VanillaNaxx/ConstructQuarter/Textures/arrow.tga differ diff --git a/DBM-VanillaNaxx/ConstructQuarter/Textures/lgpl.txt b/DBM-VanillaNaxx/ConstructQuarter/Textures/lgpl.txt new file mode 100644 index 00000000..cca7fc27 --- /dev/null +++ b/DBM-VanillaNaxx/ConstructQuarter/Textures/lgpl.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/DBM-VanillaNaxx/ConstructQuarter/Thaddius.lua b/DBM-VanillaNaxx/ConstructQuarter/Thaddius.lua new file mode 100644 index 00000000..af3560ae --- /dev/null +++ b/DBM-VanillaNaxx/ConstructQuarter/Thaddius.lua @@ -0,0 +1,190 @@ +-- 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 mod = DBM:NewMod("Thaddius-Vanilla", "DBM-VanillaNaxx", 2) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15928) + +mod:RegisterCombat("combat_yell", L.Yell) + +mod:RegisterEventsInCombat( + "SPELL_CAST_START 28089", + "CHAT_MSG_RAID_BOSS_EMOTE", + "UNIT_AURA player" +) + +local warnShiftSoon = mod:NewPreWarnAnnounce(28089, 5, 3) +local warnShiftCasting = mod:NewCastAnnounce(28089, 4) +--local warnThrow = mod:NewSpellAnnounce(28338, 2) +local warnThrowSoon = mod:NewSoonAnnounce(28338, 1) + +local warnChargeChanged = mod:NewSpecialWarning("WarningChargeChanged", nil, nil, nil, 3, 2, nil, nil, 28089) +local warnChargeNotChanged = mod:NewSpecialWarning("WarningChargeNotChanged", false, nil, nil, 1, 12, nil, nil, 28089) +local yellShift = mod:NewShortPosYell(28089, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION) + +local enrageTimer = mod:NewBerserkTimer(365) +local timerNextShift = mod:NewNextTimer(30, 28089, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON) +local timerShiftCast = mod:NewCastTimer(3, 28089, nil, nil, nil, 2) +local timerThrow = mod:NewNextTimer(20.6, 28338, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) + +if not DBM.Options.GroupOptionsBySpell then + mod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS) +end +mod:AddDropdownOption("ArrowsEnabled", {"Never", "TwoCamp", "ArrowsRightLeft", "ArrowsInverse"}, "Never", "misc", nil, 28089) --not grouping to prevent padding issue (aggravated with ElvUI) and ungrouped dropdown line workaround + +mod:SetBossHealthInfo( + 15930, L.Boss1, + 15929, L.Boss2 +) + +local currentCharge +local down = 0 + +local function TankThrow(self) + if not self:IsInCombat() or self.vb.phase == 2 then + DBM.BossHealth:Hide() + return + end + timerThrow:Start() + warnThrowSoon:Schedule(17.6) + self:Schedule(20.6, TankThrow, self) +end + +function mod:OnCombatStart(delay) + self:SetStage(1) + currentCharge = nil + down = 0 + self:Schedule(20.6 - delay, TankThrow, self) + timerThrow:Start(-delay) + warnThrowSoon:Schedule(17.6 - delay) +end + +do + local lastShift + function mod:SPELL_CAST_START(args) + if args.spellId == 28089 then + self:SetStage(2) + timerNextShift:Start() + timerShiftCast:Start() + warnShiftCasting:Show() + warnShiftSoon:Schedule(25) + lastShift = GetTime() + end + end + + function mod:UNIT_AURA() + if self.vb.phase ~= 2 or not lastShift or (GetTime() - lastShift) < 3 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 --Incorrect aura, it's stacking damage one + charge = L.Charge1 + yellShift:Yell(7, "- -") + elseif icon == "Interface\\Icons\\Spell_ChargePositive" then + if count > 1 then return end --Incorrect aura, it's stacking damage one + charge = L.Charge2 + yellShift:Yell(6, "+ +") + end + i = i + 1 + end + if charge then + lastShift = nil + if charge == currentCharge then + warnChargeNotChanged:Show() + warnChargeNotChanged:Play("dontmove") + if self.Options.ArrowsEnabled == "ArrowsInverse" then + self:ShowLeftArrow() + elseif self.Options.ArrowsEnabled == "ArrowsRightLeft" then + self:ShowRightArrow() + end + else + warnChargeChanged:Show(charge) + warnChargeChanged:Play("stilldanger") + if self.Options.ArrowsEnabled == "ArrowsInverse" then + self:ShowRightArrow() + elseif self.Options.ArrowsEnabled == "ArrowsRightLeft" then + self:ShowLeftArrow() + elseif self.Options.ArrowsEnabled == "TwoCamp" then + self:ShowUpArrow() + end + end + currentCharge = charge + end + end +end + +function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) + if msg:match(L.Emote) or msg:match(L.Emote2) or msg:find(L.Emote) or msg:find(L.Emote2) or msg == L.Emote or msg == L.Emote2 then + down = down + 1 + if down >= 2 then + self:Unschedule(TankThrow) + timerThrow:Cancel() + warnThrowSoon:Cancel() + DBM.BossHealth:Hide() + enrageTimer:Start() + end + 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 + +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 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:ShowLeftArrow() + arrowLeft:Show() +end + +function mod:ShowUpArrow() + arrowUp:Show() +end diff --git a/DBM-VanillaNaxx/DBM-VanillaNaxx.toc b/DBM-VanillaNaxx/DBM-VanillaNaxx.toc new file mode 100644 index 00000000..7954c2f5 --- /dev/null +++ b/DBM-VanillaNaxx/DBM-VanillaNaxx.toc @@ -0,0 +1,69 @@ +## Interface: 30300 +## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Vanilla)|r +## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Vanilla)|r +## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Наксрамас (классический)|r +## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0納克薩瑪斯 (Vanilla)|r +## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0纳克萨玛斯 (Vanilla)|r +## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0낙스라마스 (클래식)|r +## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Clásico)|r +## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Clásico)|r +## LoadOnDemand: 1 +## RequiredDeps: DBM-Core +## SavedVariables: DBMVanillaNaxx_AllSavedVars +## SavedVariablesPerCharacter: DBMVanillaNaxx_SavedStats +## X-DBM-Mod: 1 +## X-DBM-Mod-Type: RAID +## X-DBM-Mod-Category: CLASSIC +## X-DBM-StatTypes: normal +## X-DBM-Mod-SubCategories: Arachnid Quarter,Construct Quarter,Plague Quarter,Military Quarter,Frostwyrm Lair +## X-DBM-Mod-SubCategories-deDE: Das Arachnidenviertel,Das Konstruktviertel,Das Seuchenviertel,Das Militärviertel,Frostwyrmhort +## X-DBM-Mod-SubCategories-ruRU: Паучий квартал,Квартал Мерзости,Чумной квартал,Военный квартал,Логово ледяного змея +## X-DBM-Mod-SubCategories-zhTW: 蜘蛛區,傀儡區,瘟疫區,軍事區,冰霜巨龍巢穴 +## X-DBM-Mod-SubCategories-zhCN: 蜘蛛区,构造区,瘟疫区,军事区,冰霜巨龙的巢穴 +## X-DBM-Mod-SubCategories-koKR: 거미 지구,피조물 지구,역병 지구,군사 지구,서리고룡 둥지 +## X-DBM-Mod-SubCategories-frFR: Quartier des Arachnides,Quartier des Assemblages,Quartier de la Peste,Quartier Militaire,Aile de glace +## X-DBM-Mod-SubCategories-esES: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada +## X-DBM-Mod-SubCategories-esMX: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada +## X-DBM-Mod-Name: Naxxramas (Vanilla) +## X-DBM-Mod-Name-deDE: Naxxramas (Vanilla) +## X-DBM-Mod-Name-ruRU: Наксрамас (Vanilla) +## X-DBM-Mod-Name-zhTW: 納克薩瑪斯 (Vanilla) +## X-DBM-Mod-Name-zhCN: 纳克萨玛斯 (Vanilla) +## X-DBM-Mod-Name-koKR: 낙스라마스 (클래식) +## X-DBM-Mod-Name-esES: Naxxramas (Clásico) +## X-DBM-Mod-Name-esMX: Naxxramas (Clásico) +## X-DBM-Mod-Sort: 6 +## X-DBM-Mod-MapID: 536 +X-DBM-Mod-LoadRealm: Onyxia, Vanilla Naxxamas PTR +## X-DBM-Mod-LoadZone: Naxxramas +## X-DBM-Mod-LoadZone-zhCN: 纳克萨玛斯 +## X-DBM-Mod-LoadZone-ruRU: Наксрамас + +localization.en.lua +localization.de.lua +localization.fr.lua +localization.ru.lua +localization.tw.lua +localization.kr.lua +localization.es.lua +localization.cn.lua + +ArachnidQuarter\Anub'Rekhan.lua +ArachnidQuarter\Faerlina.lua +ArachnidQuarter\Maexxna.lua + +ConstructQuarter\Patchwerk.lua +ConstructQuarter\Grobbulus.lua +ConstructQuarter\Gluth.lua +ConstructQuarter\Thaddius.lua + +PlagueQuarter\Noth.lua +PlagueQuarter\Heigan.lua +PlagueQuarter\Loatheb.lua + +MilitaryQuarter\Razuvious.lua +MilitaryQuarter\Gothik.lua +MilitaryQuarter\Horsemen.lua + +FrostwyrmLair\Sapphiron.lua +FrostwyrmLair\Kel'Thuzad.lua diff --git a/DBM-VanillaNaxx/FrostwyrmLair/Kel'Thuzad.lua b/DBM-VanillaNaxx/FrostwyrmLair/Kel'Thuzad.lua new file mode 100644 index 00000000..7356073f --- /dev/null +++ b/DBM-VanillaNaxx/FrostwyrmLair/Kel'Thuzad.lua @@ -0,0 +1,374 @@ +local mod = DBM:NewMod("Kel'Thuzad-Vanilla", "DBM-VanillaNaxx", 5) +local L = mod:GetLocalizedStrings() + +local select, tContains = select, tContains +local PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff = PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff +local UnitClass = UnitClass + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15990) +mod:SetModelID("creature/lich/lich.m2") +mod:SetMinCombatTime(60) +mod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8) + +mod:RegisterCombat("combat_yell", L.Yell) + +mod:RegisterEventsInCombat( + "SPELL_AURA_APPLIED 27808 27819 28410", + "SPELL_AURA_REMOVED 28410", + "SPELL_CAST_SUCCESS 27810 27819 27808 28410", + "UNIT_HEALTH boss1" +) + +local warnAddsSoon = mod:NewAnnounce("warnAddsSoon", 1, "Interface\\Icons\\INV_Misc_MonsterSpiderCarapace_01") +local warnPhase2 = mod:NewPhaseAnnounce(2, 3) +local warnBlastTargets = mod:NewTargetAnnounce(27808, 2) +local warnFissure = mod:NewTargetNoFilterAnnounce(27810, 4) +local warnMana = mod:NewTargetAnnounce(27819, 2) +local warnChainsTargets = mod:NewTargetNoFilterAnnounce(28410, 4) +local warnMindControlSoon = mod:NewSoonAnnounce(28410, 4) + +local specwarnP2Soon = mod:NewSpecialWarning("specwarnP2Soon") +local specWarnManaBomb = mod:NewSpecialWarningMoveAway(27819, nil, nil, nil, 1, 2) +local specWarnManaBombNear = mod:NewSpecialWarningClose(27819, nil, nil, nil, 1, 2) +local yellManaBomb = mod:NewShortYell(27819) +local specWarnBlast = mod:NewSpecialWarningTarget(27808, "Healer", nil, nil, 1, 2) +local specWarnFissureYou = mod:NewSpecialWarningYou(27810, nil, nil, nil, 3, 2) +local specWarnFissureClose = mod:NewSpecialWarningClose(27810, nil, nil, nil, 2, 8) +local yellFissure = mod:NewYellMe(27810) + +local blastTimer = mod:NewBuffActiveTimer(4, 27808, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON) +local timerManaBomb = mod:NewCDTimer(20, 27819, nil, nil, nil, 3)--20-50 +local timerFrostBlast = mod:NewCDTimer(30, 27808, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--40-46 (retail 40.1) +local timerFissure = mod:NewTargetTimer(5, 27810, nil, nil, 2, 3) +local timerFissureCD = mod:NewCDTimer(11.5, 27810, nil, nil, nil, 3, nil, nil, true) -- Huge variance! Added "keep" arg (25m Lordaeron 2022/10/16) - Stage 2/*, 22.8, 41.2, 77.5, 11.5 +local timerMC = mod:NewBuffActiveTimer(20, 28410, nil, nil, nil, 3) +local timerMCCD = mod:NewCDTimer(90, 28410, nil, nil, nil, 3)--actually 60 second cdish but its easier to do it this way for the first one. +local timerPhase2 = mod:NewTimer(228, "TimerPhase2", nil, nil, nil, 6) -- (25m Lordaeron 2022/10/16) - 228.0 + +mod:AddRangeFrameOption(12, 27819) +mod:AddSetIconOption("SetIconOnMC", 28410, true, false, {1, 2, 3}) +mod:AddSetIconOption("SetIconOnManaBomb", 27819, false, false, {8}) +mod:AddSetIconOption("SetIconOnFrostTomb", 27808, true, false, {1, 2, 3, 4, 5, 6, 7, 8}) +mod:AddDropdownOption("RemoveBuffsOnMC", {"Never", "Gift", "CCFree", "ShortOffensiveProcs", "MostOffensiveBuffs"}, "Never", "misc", nil, 28410) + +local RaidWarningFrame = RaidWarningFrame +local GetFramesRegisteredForEvent, RaidNotice_AddMessage = GetFramesRegisteredForEvent, RaidNotice_AddMessage +local function selfWarnMissingSet() + if mod.Options.EqUneqWeaponsKT and not mod:IsEquipmentSetAvailable("pve") then + for i = 1, select("#", GetFramesRegisteredForEvent("CHAT_MSG_RAID_WARNING")) do + local frame = select(i, GetFramesRegisteredForEvent("CHAT_MSG_RAID_WARNING")) + if frame.AddMessage then + frame.AddMessage(frame, L.setMissing) + end + end + RaidNotice_AddMessage(RaidWarningFrame, L.setMissing, ChatTypeInfo["RAID_WARNING"]) + end +end + +mod:AddMiscLine(L.EqUneqLineDescription) +mod:AddBoolOption("EqUneqWeaponsKT", mod:IsDps(), nil, selfWarnMissingSet) +mod:AddBoolOption("EqUneqWeaponsKT2") + +local function selfSchedWarnMissingSet(self) + if self.Options.EqUneqWeaponsKT and not self:IsEquipmentSetAvailable("pve") then + for i = 1, select("#", GetFramesRegisteredForEvent("CHAT_MSG_RAID_WARNING")) do + local frame = select(i, GetFramesRegisteredForEvent("CHAT_MSG_RAID_WARNING")) + if frame.AddMessage then + self:Schedule(10, frame.AddMessage, frame, L.setMissing) + end + end + self:Schedule(10, RaidNotice_AddMessage, RaidWarningFrame, L.setMissing, ChatTypeInfo["RAID_WARNING"]) + end +end +mod:Schedule(0.5, selfSchedWarnMissingSet, mod) -- mod options default values were being read before SV ones, so delay this + +mod.vb.warnedAdds = false +mod.vb.MCIcon = 1 +local frostBlastTargets = {} +local chainsTargets = {} +local isHunter = select(2, UnitClass("player")) == "HUNTER" +local playerClass = select(2, UnitClass("player")) + +local function UnWKT(self) + if (self.Options.EqUneqWeaponsKT or self.Options.EqUneqWeaponsKT2) and self:IsEquipmentSetAvailable("pve") then + PickupInventoryItem(16) + PutItemInBackpack() + PickupInventoryItem(17) + PutItemInBackpack() + DBM:Debug("MH and OH unequipped",2) + if isHunter then + PickupInventoryItem(18) + PutItemInBackpack() + DBM:Debug("Ranged unequipped",2) + end + end +end + +local function EqWKT(self) + if (self.Options.EqUneqWeaponsKT or self.Options.EqUneqWeaponsKT2) and self:IsEquipmentSetAvailable("pve") then + DBM:Debug("trying to equip pve",1) + UseEquipmentSet("pve") + CancelUnitBuff("player", (GetSpellInfo(25780))) -- Righteous Fury + end +end + +local aurastoRemove = { -- ordered by aggressiveness {degree, classFilter} + -- 1 (Gift) + [48469] = {1, nil}, -- Mark of the Wild + [48470] = {1, nil}, -- Gift of the Wild + [69381] = {1, nil}, -- Drums of the Wild + -- 2 (CCFree) + [48169] = {2, nil}, -- Shadow Protection + [48170] = {2, nil}, -- Prayer of Shadow Protection + -- 3 (ShortOffensiveProcs) + [13877] = {3, "ROGUE"}, -- Blade Flurry (Combat Rogue) + [70721] = {3, "DRUID"}, -- Omen of Doom (Balance Druid) + [48393] = {3, "DRUID"}, -- Owlkin Frenzy (Balance Druid) + [53201] = {3, "DRUID"}, -- Starfall (Balance Druid) + [50213] = {3, "DRUID"}, -- Tiger's Fury (Feral Druid) + [31572] = {3, "MAGE"}, -- Arcane Potency (Arcane Mage) + [54490] = {3, "MAGE"}, -- Missile Barrage (Arcane Mage) + [48108] = {3, "MAGE"}, -- Hot Streak (Fire Mage) + [71165] = {3, "WARLOCK"}, -- Molten Core (Warlock) + [63167] = {3, "WARLOCK"}, -- Decimation (Warlock) + [70840] = {3, "WARLOCK"}, -- Devious Minds (Warlock) + [17941] = {3, "WARLOCK"}, -- Shadow Trance (Warlock) + [47197] = {3, "WARLOCK"}, -- Eradication (Affliction Warlock) + [34939] = {3, "WARLOCK"}, -- Backlash (Destruction Warlock) + [47260] = {3, "WARLOCK"}, -- Backdraft (Destruction Warlock) + [16246] = {3, "SHAMAN"}, -- Clearcasting (Elemental Shaman) + [64701] = {3, "SHAMAN"}, -- Elemental Mastery (Elemental Shaman) + [26297] = {3, nil}, -- Berserking (Troll racial) + [54758] = {3, nil}, -- Hyperspeed Acceleration (Hands engi enchant) + [59626] = {3, nil}, -- Black Magic (Weapon enchant) + [72416] = {3, nil}, -- Frostforged Sage (ICC Rep ring) + [64713] = {3, nil}, -- Flame of the Heavens (Flare of the Heavens) + [67669] = {3, nil}, -- Elusive Power (Trinket Abyssal Rune) + [60064] = {3, nil}, -- Now is the Time! (Trinket Sundial of the Exiled/Mithril Pocketwatch) + -- 4 (MostOffensiveBuffs) + [48168] = {4, "PRIEST"}, -- Inner Fire (Priest) + [15258] = {4, "PRIEST"}, -- Shadow Weaving (Shadow Priest) + [48420] = {4, "DRUID"}, -- Master Shapeshifter (Druid) + [24932] = {4, "DRUID"}, -- Leader of the Pack (Feral Druid) + [67355] = {4, "DRUID"}, -- Agile (Feral Druid idol) + [52610] = {4, "DRUID"}, -- Savage Roar (Feral Druid) + [24907] = {4, "DRUID"}, -- Moonkin Aura (Balance Druid) + [71199] = {4, "DRUID"}, -- Furious (Shaman EoF: Bizuri's Totem of Shattered Ice) + [67360] = {4, "DRUID"}, -- Blessing of the Moon Goddess (Druid EoT: Idol of Lunar Fury) + [48943] = {4, "PALADIN"}, -- Shadow Resistance Aura (Paladin) + [43046] = {4, "MAGE"}, -- Molten Armor (Mage) + [47893] = {4, "WARLOCK"}, -- Fel Armor (Warlock) + [63321] = {4, "WARLOCK"}, -- Life Tap (Warlock) + [55637] = {4, nil}, -- Lightweave (Back tailoring enchant) + [71572] = {4, nil}, -- Cultivated Power (Muradin Spyglass) + [60235] = {4, nil}, -- Greatness (Darkmoon Card: Greatness) + [71644] = {4, nil}, -- Surge of Power (Dislodged Foreign Object) + [75473] = {4, nil}, -- Twilight Flames (Charred Twilight Scale) + [71636] = {4, nil}, -- Siphoned Power (Phylactery of the Nameless Lich) +} +local optionToDegree = { + ["Gift"] = 1, -- Cyclones resists + ["CCFree"] = 2, -- CC Shadow resists, life Fear from Psychic Scream + ["ShortOffensiveProcs"] = 3, -- Short-term procs that would expire during Mind Control anyway + ["MostOffensiveBuffs"] = 4, -- Most offensive buffs that are easily renewable but would expire after Mind Control ends +} + +local function RemoveBuffs(option) -- Spell is removed based on name so no longer need SpellID for each rank + if not option then return end + local degreeOption = optionToDegree[option] + for aura, infoTable in pairs(aurastoRemove) do + local degree, classFilter = unpack(infoTable) + if degree <= degreeOption then + if not classFilter or classFilter == playerClass then + CancelUnitBuff("player", (GetSpellInfo(aura))) + end + end + end + DBM:Debug("Buffs removed, using option \"" .. option .. "\" and degree: " .. tostring(degreeOption), 2) +end + +local function AnnounceChainsTargets(self) + warnChainsTargets:Show(table.concat(chainsTargets, "< >")) + if (not tContains(chainsTargets, UnitName("player")) and self.Options.EqUneqWeaponsKT and self:IsDps()) then + DBM:Debug("Equipping scheduled",2) + self:Schedule(1.0, EqWKT, self) + self:Schedule(2.0, EqWKT, self) + self:Schedule(3.6, EqWKT, self) + self:Schedule(5.0, EqWKT, self) + self:Schedule(6.0, EqWKT, self) + self:Schedule(8.0, EqWKT, self) + self:Schedule(10.0, EqWKT, self) + self:Schedule(12.0, EqWKT, self) + end + table.wipe(chainsTargets) + self.vb.MCIcon = 1 +end + +local function AnnounceBlastTargets(self) + if self.Options.SpecWarn27808target then + specWarnBlast:Show(table.concat(frostBlastTargets, "< >")) + specWarnBlast:Play("healall") + else + warnBlastTargets:Show(table.concat(frostBlastTargets, "< >")) + end + blastTimer:Start(3.5) + if self.Options.SetIconOnFrostTomb then + for i = #frostBlastTargets, 1, -1 do + self:SetIcon(frostBlastTargets[i], 8 - i, 4.5) + frostBlastTargets[i] = nil + end + end +end + +local function StartPhase2(self) + if self.vb.phase == 1 then + self:SetStage(2) + warnPhase2:Show() + warnPhase2:Play("ptwo") + if self:IsDifficulty("normal25") then + timerMCCD:Start(31) + warnMindControlSoon:Schedule(26) + if self.Options.EqUneqWeaponsKT and self:IsDps() then + self:Schedule(60, UnWKT, self) + self:Schedule(60.5, UnWKT, self) + end + end + if self.Options.RangeFrame then + DBM.RangeCheck:Show(12) + end + end +end + +function mod:OnCombatStart(delay) + self:SetStage(1) + table.wipe(chainsTargets) + table.wipe(frostBlastTargets) + self.vb.warnedAdds = false + self.vb.MCIcon = 1 + specwarnP2Soon:Schedule(218-delay) + timerPhase2:Start() +-- self:Schedule(226, StartPhase2, self) + self:RegisterShortTermEvents( + "INSTANCE_ENCOUNTER_ENGAGE_UNIT" + ) +end + +function mod:OnCombatEnd() + if self.Options.RangeFrame then + DBM.RangeCheck:Hide() + end +end + +function mod:SPELL_CAST_SUCCESS(args) + local spellId = args.spellId + if spellId == 27810 then + timerFissure:Start(args.destName) + timerFissureCD:Start() + if args:IsPlayer() then + specWarnFissureYou:Show() + specWarnFissureYou:Play("targetyou") + yellFissure:Yell() + elseif self:CheckNearby(8, args.destName) then + specWarnFissureClose:Show(args.destName) + specWarnFissureClose:Play("watchfeet") + else + warnFissure:Show(args.destName) + warnFissure:Play("watchstep") + end + elseif args.spellId == 28410 then + DBM:Debug("MC on "..args.destName,2) + if args.destName == UnitName("player") then + if self.Options.RemoveBuffsOnMC ~= "Never" then + RemoveBuffs(self.Options.RemoveBuffsOnMC) + end + if self.Options.EqUneqWeaponsKT2 then + UnWKT(self) + self:Schedule(0.05, UnWKT, self) + DBM:Debug("Unequipping",2) + end + end + if self:AntiSpam(2, 2) then + timerMCCD:Start() + end + elseif spellId == 27819 then + timerManaBomb:Start() + elseif spellId == 27808 then + timerFrostBlast:Start() + end +end + +function mod:SPELL_AURA_APPLIED(args) + local spellId = args.spellId + if spellId == 27808 then -- Frost Blast + table.insert(frostBlastTargets, args.destName) + self:Unschedule(AnnounceBlastTargets) + self:Schedule(0.5, AnnounceBlastTargets, self) + elseif spellId == 27819 then -- Detonate Mana + if self.Options.SetIconOnManaBomb then + self:SetIcon(args.destName, 8, 5.5) + end + if args:IsPlayer() then + specWarnManaBomb:Show() + specWarnManaBomb:Play("bombrun") + yellManaBomb:Yell() + elseif self:CheckNearby(12, args.destName) then + specWarnManaBombNear:Show(args.destName) + specWarnManaBombNear:Play("scatter") + else + warnMana:Show(args.destName) + end + elseif spellId == 28410 then -- Chains of Kel'Thuzad + chainsTargets[#chainsTargets + 1] = args.destName + if self:AntiSpam() then + timerMC:Start() + timerMCCD:Start() + warnMindControlSoon:Schedule(60) + end + if self.Options.SetIconOnMC then + self:SetIcon(args.destName, self.vb.MCIcon) + end + self.vb.MCIcon = self.vb.MCIcon + 1 + self:Unschedule(AnnounceChainsTargets) + if #chainsTargets >= 3 then + AnnounceChainsTargets(self) + else + self:Schedule(1.0, AnnounceChainsTargets, self) + end + if self.Options.EqUneqWeaponsKT and self:IsDps() then + self:Schedule(58.0, UnWKT, self) + self:Schedule(58.5, UnWKT, self) + end + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args.spellId == 28410 then + if self.Options.SetIconOnMC then + self:SetIcon(args.destName, 0) + end + if (args.destName == UnitName("player") or args:IsPlayer()) and (self.Options.EqUneqWeaponsKT or self.Options.EqUneqWeaponsKT2) and self:IsDps() then + DBM:Debug("Equipping scheduled",2) + self:Schedule(0.1, EqWKT, self) + self:Schedule(1.7, EqWKT, self) + self:Schedule(3.7, EqWKT, self) + self:Schedule(7.0, EqWKT, self) + self:Schedule(9.0, EqWKT, self) + self:Schedule(11.0, EqWKT, self) + end + end +end + +function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT() + if UnitExists("boss1") and self:GetUnitCreatureId("boss1") == 15990 then + StartPhase2(self) + self:UnregisterShortTermEvents() + end +end + +function mod:UNIT_HEALTH(uId) + if not self.vb.warnedAdds and self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.48 then + self.vb.warnedAdds = true + warnAddsSoon:Show() + end +end diff --git a/DBM-VanillaNaxx/FrostwyrmLair/Sapphiron.lua b/DBM-VanillaNaxx/FrostwyrmLair/Sapphiron.lua new file mode 100644 index 00000000..a6703327 --- /dev/null +++ b/DBM-VanillaNaxx/FrostwyrmLair/Sapphiron.lua @@ -0,0 +1,210 @@ +local mod = DBM:NewMod("Sapphiron-Vanilla", "DBM-VanillaNaxx", 5) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15989) +mod:SetMinSyncRevision(20220904000000) + +mod:RegisterCombat("combat") +mod:SetModelScale(0.1) + +mod:RegisterEventsInCombat( +-- "SPELL_CAST_START 28524", + "SPELL_CAST_SUCCESS 28542 55665 28560 55696", + "SPELL_AURA_APPLIED 28522 28547 55699", + "CHAT_MSG_RAID_BOSS_EMOTE", + "UNIT_HEALTH boss1" +) + +--TODO, verify SPELL_CAST_START on retail to switch to it over emote, same as classicc era was done + +-- General +local specWarnLowHP = mod:NewSpecialWarning("SpecWarnSapphLow") + +local berserkTimer = mod:NewBerserkTimer(900) + +-- Stage One (Ground Phase) +mod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)) +local warnDrainLifeNow = mod:NewSpellAnnounce(28542, 2) +local warnDrainLifeSoon = mod:NewSoonAnnounce(28542, 1) +local warnAirPhaseSoon = mod:NewAnnounce("WarningAirPhaseSoon", 3, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp") +local warnLanded = mod:NewAnnounce("WarningLanded", 4, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp") +local warnBlizzard = mod:NewSpellAnnounce(28560, 4) + +local specWarnBlizzard = mod:NewSpecialWarningGTFO(28547, nil, nil, nil, 1, 8) + +local timerDrainLife = mod:NewCDTimer(24, 28542, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON) -- (25man Lordaeron 2022/09/02) - 24.0 +local timerAirPhase = mod:NewTimer(60, "TimerAir", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp", nil, nil, 6) +local timerBlizzard = mod:NewNextTimer(7, 28560, nil, nil, nil, 3) +local timerTailSweep = mod:NewNextTimer(9, 55696, nil, nil, nil, 2) + +-- Stage Two (Air Phase) +mod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)) +local warnAirPhaseNow = mod:NewAnnounce("WarningAirPhaseNow", 4, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp") +local warnIceBlock = mod:NewTargetAnnounce(28522, 2) + +local specWarnDeepBreath= mod:NewSpecialWarningSpell(28524, nil, nil, nil, 1, 2) +local yellIceBlock = mod:NewYell(28522) + +local timerLanding = mod:NewTimer(24.2, "TimerLanding", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp", nil, nil, 6) +local timerIceBlast = mod:NewCastTimer(8, 28524, nil, nil, nil, 2, DBM_COMMON_L.DEADLY_ICON) + +mod:AddRangeFrameOption("12") + +--local UnitAffectingCombat = UnitAffectingCombat +--local noTargetTime = 0 +local warned_lowhp = false +mod.vb.isFlying = false + +--[[local function resetIsFlying(self) + self.vb.isFlying = false +end]] + +local function Landing(self) + self:SetStage(1) + warnLanded:Show() + warnDrainLifeSoon:Schedule(5) + timerDrainLife:Start(10.5) + warnAirPhaseSoon:Schedule(50) + timerAirPhase:Start() + if self.Options.RangeFrame then + DBM.RangeCheck:Hide() + self:Schedule(59, DBM.RangeCheck.Show, DBM.RangeCheck, 12) + end +end + +function mod:OnCombatStart(delay) +-- noTargetTime = 0 + warned_lowhp = false + self:SetStage(1) + self.vb.isFlying = false + warnDrainLifeSoon:Schedule(6.5-delay) + timerDrainLife:Start(12-delay) -- (25man Lordaeron 2022/09/02) - 12.0 + timerBlizzard:Start(6.1-delay) -- REVIEW! ~3s variance? (25man Lordaeron 2022/09/02 || 25man Lordaeron 2022/10/16) - 8.8 || 6.1 + timerTailSweep:Start(-delay) + warnAirPhaseSoon:Schedule(38.4-delay) + timerAirPhase:Start(48.4-delay) -- REVIEW! ~0.1s variance? (25man Lordaeron 2022/09/02) - 48.4 + berserkTimer:Start(-delay) + if self.Options.RangeFrame then + self:Schedule(46-delay, DBM.RangeCheck.Show, DBM.RangeCheck, 12) + end +--[[self:RegisterOnUpdateHandler(function(self, elapsed) + if not self:IsInCombat() then return end + local foundBoss, target + for uId in DBM:GetGroupMembers() do + local unitID = uId.."target" + if self:GetUnitCreatureId(unitID) == 15989 and UnitAffectingCombat(unitID) then + target = DBM:GetUnitFullName(unitID.."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 self.vb.isFlying then + noTargetTime = 0 + self:SetStage(2) + self.vb.isFlying = true + self:Schedule(60, resetIsFlying, self) + timerDrainLife:Cancel() + timerAirPhase:Cancel() + warnAirPhaseNow:Show() + timerLanding:Start() + end + end, 0.2)]] +end + +function mod:OnCombatEnd() + if self.Options.RangeFrame then + DBM.RangeCheck:Hide() + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 28522 then + warnIceBlock:CombinedShow(0.5, args.destName) + if args:IsPlayer() then + yellIceBlock:Yell() + end + elseif args:IsSpellID(28547, 55699) and args:IsPlayer() and self:AntiSpam(1) then + specWarnBlizzard:Show(args.spellName) + specWarnBlizzard:Play("watchfeet") + end +end + +--[[ +function mod:SPELL_CAST_START(args) + --if args:IsSpellID(28524, 29318) then--NEEDS verification before deployed + timerIceBlast:Start() + timerLanding:Update(16.3, 28.5)--Probably not even needed, if base timer is more accurate + self:Schedule(12.2, Landing, self) + warnDeepBreath:Show() + warnDeepBreath:Play("findshelter") + end +end +--]] + +function mod:SPELL_CAST_SUCCESS(args) + local spellId = args.spellId + if args:IsSpellID(28542, 55665) then -- Life Drain + warnDrainLifeNow:Show() + warnDrainLifeSoon:Schedule(18.5) + timerDrainLife:Start() + elseif spellId == 28560 then + warnBlizzard:Show() + timerBlizzard:Start() + elseif spellId == 55696 then + timerTailSweep:Start() + end +end + +function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) + if msg == L.EmoteBreath or msg:find(L.EmoteBreath) then +-- self:SendSync("DeepBreath") -- this does not need syncing and spam comms + timerIceBlast:Start() + timerLanding:Update(13.5) -- 8s until breath + 3.5s until emote + ~2s until UNIT_TARGET + specWarnDeepBreath:Show() + specWarnDeepBreath:Play("findshelter") + elseif msg == L.AirPhase or msg:find(L.AirPhase) then + self:SetStage(2) + self.vb.isFlying = true + timerDrainLife:Cancel() + timerAirPhase:Cancel() + warnAirPhaseNow:Show() + timerLanding:Start() + elseif msg == L.LandingPhase or msg:find(L.LandingPhase) then + self.vb.isFlying = false + self:RegisterShortTermEvents( + "UNIT_TARGET boss1" + ) + end +end + +function mod:UNIT_HEALTH(uId) + if not warned_lowhp and self:GetUnitCreatureId(uId) == 15989 and UnitHealth(uId) / UnitHealthMax(uId) < 0.1 then + warned_lowhp = true + specWarnLowHP:Show() + timerAirPhase:Cancel() + end +end + +function mod:UNIT_TARGET(uId) + -- Apparently there's a delay after emote where boss is actually engaged (TC has 3.5s). From S3 Naxx videos this is somewhat still accurate, so check when boss retargets raid member, which is when land phase script restarts + if UnitExists(uId.."target") then + Landing(self) + self:UnregisterShortTermEvents() + end +end + +--[[function mod:OnSync(event) + if event == "DeepBreath" then + timerIceBlast:Start() + timerLanding:Update(14) + self:Schedule(14.5, Landing, self) + specWarnDeepBreath:Show() + specWarnDeepBreath:Play("findshelter") + end +end]] diff --git a/DBM-VanillaNaxx/MilitaryQuarter/Gothik.lua b/DBM-VanillaNaxx/MilitaryQuarter/Gothik.lua new file mode 100644 index 00000000..8a27139e --- /dev/null +++ b/DBM-VanillaNaxx/MilitaryQuarter/Gothik.lua @@ -0,0 +1,131 @@ +local mod = DBM:NewMod("Gothik-Vanilla", "DBM-VanillaNaxx", 4) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(16060) + +mod:RegisterCombat("combat") + +mod:RegisterEventsInCombat( + "UNIT_DIED" +) + +--TODO, sync infoframe from classic era version? +--(source.type = "NPC" and source.firstSeen = timestamp) or (target.type = "NPC" and target.firstSeen = timestamp) +local warnWaveNow = mod:NewAnnounce("WarningWaveSpawned", 3, nil, false) +local warnWaveSoon = mod:NewAnnounce("WarningWaveSoon", 2) +local warnRiderDown = mod:NewAnnounce("WarningRiderDown", 4) +local warnKnightDown = mod:NewAnnounce("WarningKnightDown", 2) +local warnPhase2 = mod:NewPhaseAnnounce(2, 3) + +local timerPhase2 = mod:NewTimer(277, "TimerPhase2", 27082, nil, nil, 6) +local timerWave = mod:NewTimer(20, "TimerWave", 5502, nil, nil, 1) +local timerGate = mod:NewTimer(155, "Gate Opens", 9484) + +mod.vb.wave = 0 +local wavesNormal = { + {2, L.Trainee, timer = 20}, + {2, L.Trainee, timer = 20}, + {2, L.Trainee, timer = 10}, + {1, L.Knight, timer = 10}, + {2, L.Trainee, timer = 15}, + {1, L.Knight, timer = 5}, + {2, L.Trainee, timer = 20}, + {1, L.Knight, 2, L.Trainee, timer = 10}, + {1, L.Rider, timer = 10}, + {2, L.Trainee, timer = 5}, + {1, L.Knight, timer = 15}, + {2, L.Trainee, 1, L.Rider, timer = 10}, + {2, L.Knight, timer = 10}, + {2, L.Trainee, timer = 10}, + {1, L.Rider, timer = 5}, + {1, L.Knight, timer = 5}, + {2, L.Trainee, timer = 20}, + {1, L.Rider, 1, L.Knight, 2, L.Trainee, timer = 15}, + {2, L.Trainee}, +} + +local wavesHeroic = { + {3, L.Trainee, timer = 20}, + {3, L.Trainee, timer = 20}, + {3, L.Trainee, timer = 10}, + {2, L.Knight, timer = 10}, + {3, L.Trainee, timer = 15}, + {2, L.Knight, timer = 5}, + {3, L.Trainee, timer = 20}, + {3, L.Trainee, 2, L.Knight, timer = 10}, + {3, L.Trainee, timer = 10}, + {1, L.Rider, timer = 5}, + {3, L.Trainee, timer = 15}, + {1, L.Rider, timer = 10}, + {2, L.Knight, timer = 10}, + {1, L.Rider, timer = 10}, + {1, L.Rider, 3, L.Trainee, timer = 5}, + {1, L.Knight, 3, L.Trainee, timer = 5}, + {1, L.Rider, 3, L.Trainee, timer = 20}, + {1, L.Rider, 2, L.Knight, 3, L.Trainee}, +} + +local waves = wavesNormal + +local function StartPhase2(self) + self:SetStage(2) +end + +local function getWaveString(wave) + local waveInfo = waves[wave] + if #waveInfo == 2 then + return L.WarningWave1:format(unpack(waveInfo)) + elseif #waveInfo == 4 then + return L.WarningWave2:format(unpack(waveInfo)) + elseif #waveInfo == 6 then + return L.WarningWave3:format(unpack(waveInfo)) + end +end + +local function NextWave(self) + self.vb.wave = self.vb.wave + 1 + warnWaveNow:Show(self.vb.wave, getWaveString(self.vb.wave)) + local timer = waves[self.vb.wave].timer + if timer then + timerWave:Start(timer, self.vb.wave + 1) + warnWaveSoon:Schedule(timer - 3, self.vb.wave + 1, getWaveString(self.vb.wave + 1)) + self:Schedule(timer, NextWave, self) + end +end + +function mod:OnCombatStart() + self:SetStage(1) + if self:IsDifficulty("normal25") then + waves = wavesHeroic + else + waves = wavesNormal + end + self.vb.wave = 0 + timerGate:Start() + timerPhase2:Start() + warnPhase2:Schedule(277) + timerWave:Start(25, self.vb.wave + 1) + warnWaveSoon:Schedule(22, self.vb.wave + 1, getWaveString(self.vb.wave + 1)) + self:Schedule(25, NextWave, self) + self:Schedule(277, StartPhase2, self) +end + +function mod:OnTimerRecovery() + if self:IsDifficulty("normal25") then + waves = wavesHeroic + else + waves = wavesNormal + end +end + +function mod:UNIT_DIED(args) + if bit.band(args.destGUID:sub(0, 5), 0x00F) == 3 then + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 16126 then -- Unrelenting Rider + warnRiderDown:Show() + elseif cid == 16125 then -- Unrelenting Deathknight + warnKnightDown:Show() + end + end +end diff --git a/DBM-VanillaNaxx/MilitaryQuarter/Horsemen.lua b/DBM-VanillaNaxx/MilitaryQuarter/Horsemen.lua new file mode 100644 index 00000000..2e80118b --- /dev/null +++ b/DBM-VanillaNaxx/MilitaryQuarter/Horsemen.lua @@ -0,0 +1,150 @@ +local mod = DBM:NewMod("Horsemen-Vanilla", "DBM-VanillaNaxx", 4) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(16063, 16064, 16065, 30549) + +mod:RegisterCombat("combat", 16063, 16064, 16065, 30549) + +mod:RegisterEventsInCombat( + "SPELL_CAST_START 28884 57467", + "SPELL_CAST_SUCCESS 28832 28833 28834 28835 28883 53638 57466 32455", + "SPELL_AURA_APPLIED 29061", + "SPELL_AURA_REMOVED 29061", + "SPELL_AURA_APPLIED_DOSE 28832 28833 28834 28835", + "UNIT_DIED" +) + +--TODO, first marks +--TODO, verify stuff migrated from naxx 40 +local warnMarkSoon = mod:NewAnnounce("WarningMarkSoon", 1, 28835, false, nil, nil, 28835) +local warnMeteor = mod:NewSpellAnnounce(57467, 4) +local warnVoidZone = mod:NewTargetNoFilterAnnounce(28863, 3)--Only warns for nearby targets, to reduce spam +local warnHolyWrath = mod:NewTargetNoFilterAnnounce(28883, 3, nil, false) +local warnBoneBarrier = mod:NewTargetNoFilterAnnounce(29061, 2) + +local specWarnMarkOnPlayer = mod:NewSpecialWarning("SpecialWarningMarkOnPlayer", nil, nil, nil, 1, 6, nil, nil, 28835) +local specWarnVoidZone = mod:NewSpecialWarningYou(28863, nil, nil, nil, 1, 2) +local yellVoidZone = mod:NewYell(28863) + +local timerLadyMark = mod:NewNextTimer(16, 28833, nil, nil, nil, 3) +local timerZeliekMark = mod:NewNextTimer(16, 28835, nil, nil, nil, 3) +local timerBaronMark = mod:NewNextTimer(15, 28834, nil, nil, nil, 3) +local timerThaneMark = mod:NewNextTimer(15, 28832, nil, nil, nil, 3) +local timerMeteorCD = mod:NewCDTimer(11.1, 57467, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~10s variance? Added "keep" arg (25man Lordaeron 2022/10/16 wipe || 25man Lordaeron 2022/10/16 kill) - 17.8, 17.7, 17.8, 17.7, 15.5 || 17.7, 15.5, 17.8, 17.9, 11.1, 17.7, 13.4, 20.0, 13.3, 20.0 +--local timerVoidZoneCD = mod:NewCDTimer(12.9, 28863, nil, nil, nil, 3)-- 12.9-16 +local timerHolyWrathCD = mod:NewCDTimer(13, 28883, nil, nil, nil, 3) +local timerBoneBarrier = mod:NewTargetTimer(20, 29061, nil, nil, nil, 5) + +mod:AddRangeFrameOption("12") + +mod:SetBossHealthInfo( + 16064, L.Korthazz, -- Thane + 30549, L.Rivendare, -- Baron + 16065, L.Blaumeux, -- Lady + 16063, L.Zeliek -- Zeliek +) + +mod.vb.markCount = 0 + +-- REVIEW-Have two logs where this is NOT verified! Still 15s timer on next meteor when he skips one (usually on tank swaps) +--[[local function MeteorCast(self) + self:Unschedule(MeteorCast) + timerMeteorCD:Restart() + self:Schedule(15, MeteorCast, self) +end]] + +function mod:OnCombatStart() + self.vb.markCount = 0 + timerLadyMark:Start() + timerZeliekMark:Start() + timerBaronMark:Start() + timerThaneMark:Start() + warnMarkSoon:Schedule(12) + timerMeteorCD:Start() + timerHolyWrathCD:Start(10.1) -- REVIEW! ~2s variance? (25man Lordaeron 2022/10/16 wipe || 25man Lordaeron 2022/10/16 kill) - 12.3 || 10.1 + if self.Options.RangeFrame then + DBM.RangeCheck:Show(12) + end +end + +function mod:OnCombatEnd() + if self.Options.RangeFrame then + DBM.RangeCheck:Hide() + end +end + +function mod:SPELL_CAST_START(args) + if args:IsSpellID(28884, 57467) then + warnMeteor:Show() + timerMeteorCD:Start() +-- MeteorCast(self) + end +end + +function mod:SPELL_CAST_SUCCESS(args) + local spellId = args.spellId + if args:IsSpellID(28832, 28833, 28834, 28835) and self:AntiSpam(5, spellId) then + self.vb.markCount = self.vb.markCount + 1 + if spellId == 28833 then -- Lady Mark + timerLadyMark:Start(15) + elseif spellId == 28835 then -- Zeliek Mark + timerZeliekMark:Start(15) + elseif spellId == 28834 then -- Baron Mark + timerBaronMark:Start() + elseif spellId == 28832 then -- Thane Mark + timerThaneMark:Start() + end + warnMarkSoon:Schedule(12) + elseif args.spellId == 28863 then +-- timerVoidZoneCD:Start() + if args:IsPlayer() then + specWarnVoidZone:Show() + specWarnVoidZone:Play("targetyou") + yellVoidZone:Yell() + elseif self:CheckNearby(12, args.destName) then + warnVoidZone:Show(args.destName) + end + elseif args:IsSpellID(28883, 53638, 57466, 32455) then + warnHolyWrath:Show(args.destName) + timerHolyWrathCD:Start() + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 29061 then + warnBoneBarrier:Show(args.destName) + timerBoneBarrier:Start(20, args.destName) + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args.spellId == 29061 then + timerBoneBarrier:Stop(args.destName) + end +end + +function mod:SPELL_AURA_APPLIED_DOSE(args) + if args:IsSpellID(28832, 28833, 28834, 28835) and args:IsPlayer() then + local amount = args.amount or 1 + if amount >= 4 then + specWarnMarkOnPlayer:Show(args.spellName, amount) + specWarnMarkOnPlayer:Play("stackhigh") + end + end +end + +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 16064 then + timerThaneMark:Cancel() + timerMeteorCD:Cancel() +-- self:Unschedule(MeteorCast) + elseif cid == 30549 then + timerBaronMark:Cancel() + elseif cid == 16065 then + timerLadyMark:Cancel() + elseif cid == 16063 then + timerZeliekMark:Cancel() + end +end diff --git a/DBM-VanillaNaxx/MilitaryQuarter/Razuvious.lua b/DBM-VanillaNaxx/MilitaryQuarter/Razuvious.lua new file mode 100644 index 00000000..6ac543bf --- /dev/null +++ b/DBM-VanillaNaxx/MilitaryQuarter/Razuvious.lua @@ -0,0 +1,56 @@ +local mod = DBM:NewMod("Razuvious-Vanilla", "DBM-VanillaNaxx", 4) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(16061) + +mod:RegisterCombat("combat_yell", L.Yell1, L.Yell2, L.Yell3, L.Yell4) + +mod:RegisterEventsInCombat( + "SPELL_CAST_SUCCESS 55543 29107 29060 29061", + "SPELL_AURA_APPLIED 605", + "UNIT_DIED" +) + +local warnShoutNow = mod:NewSpellAnnounce(29107, 1) +local warnShoutSoon = mod:NewSoonAnnounce(29107, 3) +local warnShieldWall = mod:NewAnnounce("WarningShieldWallSoon", 3, 29061, nil, nil, nil, 29061) + +local timerShout = mod:NewNextTimer(15, 29107, nil, nil, nil, 2) +local timerTaunt = mod:NewCDTimer(20, 29060, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) +local timerShieldWall = mod:NewCDTimer(20, 29061, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) +local timerMindControl = mod:NewBuffActiveTimer(60, 605, nil, nil, nil, 6) + +function mod:OnCombatStart(delay) + timerShout:Start(16 - delay) + warnShoutSoon:Schedule(11 - delay) +end + +function mod:SPELL_CAST_SUCCESS(args) + local spellId = args.spellId + if args:IsSpellID(55543, 29107) then -- Disrupting Shout + timerShout:Start() + warnShoutNow:Show() + warnShoutSoon:Schedule(11) + elseif spellId == 29060 then -- Taunt + timerTaunt:Start(20, args.sourceGUID) + elseif spellId == 29061 then -- ShieldWall + timerShieldWall:Start(20, args.sourceGUID) + warnShieldWall:Schedule(15) + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args.spellId == 605 and args:IsSrcTypePlayer() then -- Mind Control + timerMindControl:Start(nil, args.sourceName) + end +end + +function mod:UNIT_DIED(args) + local guid = args.destGUID + local cid = self:GetCIDFromGUID(guid) + if cid == 16803 then--Deathknight Understudy + timerTaunt:Stop(args.destGUID) + timerShieldWall:Stop(args.destGUID) + end +end diff --git a/DBM-VanillaNaxx/PlagueQuarter/Heigan.lua b/DBM-VanillaNaxx/PlagueQuarter/Heigan.lua new file mode 100644 index 00000000..e94c450c --- /dev/null +++ b/DBM-VanillaNaxx/PlagueQuarter/Heigan.lua @@ -0,0 +1,35 @@ +local mod = DBM:NewMod("Heigan-Vanilla", "DBM-VanillaNaxx", 3) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15936) + +mod:RegisterCombat("combat_yell", L.Pull) + +local warnTeleportSoon = mod:NewAnnounce("WarningTeleportSoon", 2, 46573) +local warnTeleportNow = mod:NewAnnounce("WarningTeleportNow", 3, 46573) +local warnPlagueCloudEnd = mod:NewEndAnnounce(30122, 1) + +local timerTeleport = mod:NewTimer(90, "TimerTeleport", 46573, nil, nil, 6) +local timerPlagueCloud = mod:NewBuffActiveTimer(45, 30122, nil, nil, nil, 6) + +function mod:DancePhase() + timerPlagueCloud:Start() + warnTeleportSoon:Schedule(35, 10) + warnPlagueCloudEnd:Schedule(45) + self:ScheduleMethod(45, "BackInRoom", 88) + self:SetStage(2) +end + +function mod:BackInRoom(time) + timerTeleport:Show(time) + warnTeleportSoon:Schedule(time - 15, 15) + warnTeleportNow:Schedule(time) + self:ScheduleMethod(time, "DancePhase") + self:SetStage(1) +end + +function mod:OnCombatStart(delay) + self:SetStage(1) + self:BackInRoom(90 - delay) +end diff --git a/DBM-VanillaNaxx/PlagueQuarter/Loatheb.lua b/DBM-VanillaNaxx/PlagueQuarter/Loatheb.lua new file mode 100644 index 00000000..b8819f4a --- /dev/null +++ b/DBM-VanillaNaxx/PlagueQuarter/Loatheb.lua @@ -0,0 +1,183 @@ +local mod = DBM:NewMod("Loatheb-Vanilla", "DBM-VanillaNaxx", 3) +local L = mod:GetLocalizedStrings() + +mod:SetRevision("20240701222429") +mod:SetCreatureID(16011) + +mod:RegisterCombat("combat")--Maybe change to a yell later so pull detection works if you chain pull him from tash gauntlet + +mod:RegisterEventsInCombat( + "SPELL_CAST_SUCCESS 29234 29204 55052 30281 55593", + "SPELL_AURA_APPLIED 29185 29194 29196 29198",-- 29184 29195 29197 29199 + "SPELL_AURA_REMOVED 29185 29194 29196 29198",-- 29184 29195 29197 29199 + "SPELL_DAMAGE", + "SWING_DAMAGE", + "UNIT_DIED" +) + +--TODO, verify infoframe and spellIds ported from Classic as accurate, they didn't have to be accurate in classic since it just matched name, but here it does +--Also, 55593 is used instead of classic ID since classic ID has no tooltip +local warnSporeNow = mod:NewCountAnnounce(32329, 2) +local warnSporeSoon = mod:NewSoonAnnounce(32329, 1) +local warnDoomNow = mod:NewSpellAnnounce(29204, 3) +local warnRemoveCurse = mod:NewSpellAnnounce(30281, 3) +local warnHealSoon = mod:NewAnnounce("WarningHealSoon", 4, 48071, nil, nil, nil, 55593) +local warnHealNow = mod:NewAnnounce("WarningHealNow", 1, 48071, false, nil, nil, 55593) + +local timerSpore = mod:NewNextTimer(36, 32329, nil, nil, nil, 5, 42524, DBM_COMMON_L.DAMAGE_ICON) +local timerDoom = mod:NewNextTimer(180, 29204, nil, nil, nil, 2) +--local timerRemoveCurseCD = mod:NewNextTimer(30.8, 30281, nil, nil, nil, 5) +local timerAura = mod:NewBuffActiveTimer(17, 55593, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON) + +mod:AddInfoFrameOption(55593, "Tank|Healer") +mod:AddBoolOption("SporeDamageAlert", false) +if not DBM.Options.GroupOptionsBySpell then + mod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS) +end +mod:AddDropdownOption("CorruptedSorting", {"Alphabetical", "Duration"}, "Alphabetical", "misc", nil, 55593) + +mod.vb.doomCounter = 0 +mod.vb.sporeTimer = 36 +mod.vb.sporeCounter = 0 +local hadCorrupted = {} + +local updateInfoFrame +do + local ipairs, pairs, tostring = ipairs, pairs, tostring + local mfloor, mmax, tinsert, tsort, twipe = math.floor, math.max, table.insert, table.sort, table.wipe + local lines, sortedLines, corruptKeys = {}, {}, {} + local function addLine(key, value) + -- sort by insertion order + lines[key] = value + sortedLines[#sortedLines + 1] = key + end + updateInfoFrame = function() + twipe(lines) + twipe(sortedLines) + twipe(corruptKeys) + + local refreshTime = GetTime() + + for name, _ in pairs(hadCorrupted) do + tinsert(corruptKeys, name) + end + if mod.Options.CorruptedSorting == "Duration" then + tsort(corruptKeys, function (a, b) return (hadCorrupted[a] or refreshTime) > (hadCorrupted[b] or refreshTime) end) + else + tsort(corruptKeys) + end + + for _, name in ipairs(corruptKeys) do + addLine(name, tostring(mfloor(mmax(hadCorrupted[name] - refreshTime, 0)))) + end + + return lines, sortedLines + end +end + +function mod:OnCombatStart(delay) + self.vb.doomCounter = 0 + self.vb.sporeCounter = 0 +-- timerRemoveCurseCD:Start(3 - delay) + if self:IsDifficulty("normal25") then + self.vb.sporeTimer = 15 + timerDoom:Start(90 - delay, 1) + else + self.vb.sporeTimer = 36 + timerDoom:Start(120 - delay, 1) + end + timerSpore:Start(self.vb.sporeTimer - delay, 1) + warnSporeSoon:Schedule(self.vb.sporeTimer - 5 - delay) + + local startTime = GetTime() + table.wipe(hadCorrupted) + for unit in DBM:GetGroupMembers() do + local _, cls = UnitClass(unit) + if not UnitIsDeadOrGhost(unit) and (cls == "DRUID" or cls == "PALADIN" or cls == "PRIEST" or cls == "SHAMAN") then + hadCorrupted[UnitName(unit)] = startTime + end + end + if self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then + DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(55593)) + DBM.InfoFrame:Show(25, "function", updateInfoFrame, false, false) + DBM.InfoFrame:SetColumns(2) + end +end + +function mod:OnCombatEnd() + if DBM.InfoFrame:IsShown() then + DBM.InfoFrame:Hide() + end +end + +function mod:SPELL_CAST_SUCCESS(args) + local spellId = args.spellId + if spellId == 29234 then + self.vb.sporeCounter = self.vb.sporeCounter + 1 + timerSpore:Start(self.vb.sporeTimer, self.vb.sporeCounter + 1) + warnSporeNow:Show(self.vb.sporeCounter) + warnSporeSoon:Schedule(self.vb.sporeTimer - 5) + elseif args:IsSpellID(29204, 55052) then -- Inevitable Doom + self.vb.doomCounter = self.vb.doomCounter + 1 + local timer = 30 + if self.vb.doomCounter >= 7 then + if self.vb.doomCounter % 2 == 0 then timer = 17 + else timer = 12 end + end + warnDoomNow:Show(self.vb.doomCounter) + timerDoom:Start(timer, self.vb.doomCounter + 1) + elseif spellId == 30281 then + warnRemoveCurse:Show() +-- timerRemoveCurseCD:Start() + elseif spellId == 55593 then + timerAura:Start() + warnHealSoon:Schedule(14) + warnHealNow:Schedule(17) + end +end + +--Spore loser function. Credits to Forte guild and their old discontinued dbm plugins. Sad to see that guild disband, best of luck to them! +function mod:SPELL_DAMAGE(_, sourceName, _, _, destName, _, spellId, _, _, amount) + if self.Options.SporeDamageAlert and destName == "Spore" and spellId ~= 62124 and self:IsInCombat() then + SendChatMessage(sourceName..", You are damaging a Spore!!! ("..amount.." damage)", "RAID_WARNING") + SendChatMessage(sourceName..", You are damaging a Spore!!! ("..amount.." damage)", "WHISPER", nil, sourceName) + end +end + + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(29194, 29196, 29185, 29198) and DBM:UnitDebuff(args.destName, 29184, 29195, 29197, 29199) then + hadCorrupted[args.destName] = GetTime() + 60 + if args:IsPlayer() then + warnHealSoon:Schedule(55) + end + end +end + +function mod:SPELL_AURA_REMOVED(args) + if args:IsSpellID(29194, 29196, 29185, 29198) and not DBM:UnitDebuff(args.destName, 29184, 29195, 29197, 29199) then + if args:IsPlayer() then + warnHealNow:Show() + end + end +end + +function mod:SWING_DAMAGE(_, sourceName, _, _, destName, _, _, _, _, amount) + if self.Options.SporeDamageAlert and destName == "Spore" and self:IsInCombat() then + SendChatMessage(sourceName..", You are damaging a Spore!!! ("..amount.." damage)", "RAID_WARNING") + SendChatMessage(sourceName..", You are damaging a Spore!!! ("..amount.." damage)", "WHISPER", nil, sourceName) + end +end + +--because in all likelyhood, pull detection failed (cause 90s like to charge in there trash and all and pull it +--We unschedule the pre warnings on death as a failsafe +function mod:UNIT_DIED(args) + local cid = self:GetCIDFromGUID(args.destGUID) + if cid == 16011 then + warnSporeSoon:Cancel() + warnHealSoon:Cancel() + warnHealNow:Cancel() + elseif hadCorrupted[args.destName] then + hadCorrupted[args.destName] = nil + end +end diff --git a/DBM-VanillaNaxx/PlagueQuarter/Noth.lua b/DBM-VanillaNaxx/PlagueQuarter/Noth.lua new file mode 100644 index 00000000..9002d086 --- /dev/null +++ b/DBM-VanillaNaxx/PlagueQuarter/Noth.lua @@ -0,0 +1,212 @@ +local mod = DBM:NewMod("Noth-Vanilla", "DBM-VanillaNaxx", 3) +local L = mod:GetLocalizedStrings() + +local GetSpellInfo = GetSpellInfo + +mod:SetRevision("20240701222429") +mod:SetCreatureID(15954) + +mod:RegisterCombat("combat_yell", L.Pull) + +mod:RegisterEvents( + "SPELL_CAST_SUCCESS 29213 54835 29212 29208", + "SPELL_AURA_APPLIED 29208 29209 29210 29211", + "CHAT_MSG_RAID_BOSS_EMOTE", + "UNIT_SPELLCAST_SUCCEEDED boss1" +) + +local warnTeleportNow = mod:NewAnnounce("WarningTeleportNow", 3, 46573) +local warnTeleportSoon = mod:NewAnnounce("WarningTeleportSoon", 1, 46573) +local warnCurse = mod:NewSpellAnnounce(29213, 2) +local warnBlinkSoon = mod:NewSoonAnnounce(29208, 1) +local warnBlink = mod:NewSpellAnnounce(29208, 3) + +local specWarnAdds = mod:NewSpecialWarningAdds(29212, "-Healer", nil, nil, 1, 2) + +local timerTeleport = mod:NewTimer(90, "TimerTeleport", 46573, nil, nil, 6) +local timerTeleportBack = mod:NewTimer(70, "TimerTeleportBack", 46573, nil, nil, 6) +local timerCurseCD = mod:NewCDTimer(56.7, 29213, nil, nil, nil, 5, nil, DBM_COMMON_L.CURSE_ICON) -- REVIEW! variance? (25man Frostmourne 2022/05/25 || 25man Lordaeron 2022/10/16) - 56.7, 99.1! || 57.4 +local timerAddsCD = mod:NewAddsTimer(30, 29212, nil, "-Healer") +local timerBlink = mod:NewNextTimer(30, 29208) -- (25N Lordaeron 2022/10/16) - 30.1, 30.0 + +mod.vb.teleCount = 0 +mod.vb.addsCount = 0 +mod.vb.curseCount = 0 +local teleportBalconyName = GetSpellInfo(29216) -- Teleport +local teleportBackName = GetSpellInfo(29231) + +--[[function mod:Balcony() + self.vb.teleCount = self.vb.teleCount + 1 + self.vb.addsCount = 0 + timerCurseCD:Stop() + timerAddsCD:Stop() + timerBlink:Stop() + local timer + if self.vb.teleCount == 1 then + timer = 70 + timerAddsCD:Start(5)--Always 5 + elseif self.vb.teleCount == 2 then + timer = 97 + timerAddsCD:Start(5)--Always 5 + elseif self.vb.teleCount == 3 then + timer = 126 + timerAddsCD:Start(5)--Always 5 + else + timer = 55 + end + timerTeleportBack:Start(timer) + warnTeleportSoon:Schedule(timer - 10) + warnTeleportNow:Schedule(timer) +-- self:ScheduleMethod(timer, "BackInRoom") +end + +function mod:BackInRoom(delay) + delay = delay or 0 + self:SetStage(0) + local timer + if self.vb.phase == 1 then timer = 90 - delay + elseif self.vb.phase == 2 then timer = 110 - delay + elseif self.vb.phase == 3 then timer = 180 - delay + else return end + timerTeleport:Show(timer) + warnTeleportSoon:Schedule(timer - 10) + warnTeleportNow:Schedule(timer) + self:ScheduleMethod(timer, "Balcony") +end]] + +function mod:OnCombatStart(delay) + self.vb.phase = 0 + self.vb.teleCount = 0 + self.vb.addsCount = 0 + self.vb.curseCount = 0 + timerAddsCD:Start(7-delay) + timerCurseCD:Start(15-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 15.0 + timerBlink:Start(23.8-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 23.8 + timerTeleport:Start(90-delay) + warnTeleportSoon:Schedule(80-delay) +-- self:ScheduleMethod(90.8-delay, "Balcony") +end + +function mod:SPELL_CAST_SUCCESS(args) + if args:IsSpellID(29213, 54835) then -- Curse of the Plaguebringer + self.vb.curseCount = self.vb.curseCount + 1 + warnCurse:Show() + if self.vb.teleCount == 2 and self.vb.curseCount == 2 or self.vb.teleCount == 3 and self.vb.curseCount == 1 then + timerCurseCD:Start(67)--Niche cases it's 67 and not 53-55 + elseif self.vb.curseCount < 2 then + timerCurseCD:Start() + end +-- elseif args.spellId == 29212 then--Cripple that's always cast when he teleports away + +-- elseif args.spellId == 29208 then +-- warnBlink:Show() + end +end + +function mod:SPELL_AURA_APPLIED(args) + if args:IsSpellID(29208, 29209, 29210, 29211) then -- Blink + warnBlink:Show() + timerBlink:Start() + warnBlinkSoon:Schedule(26) + end +end + +function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) + if msg == L.Adds or msg:find(L.Adds) then + self:SendSync("Adds")--Syncing to help unlocalized clients + elseif msg == L.AddsTwo or msg:find(L.AddsTwo) then + self:SendSync("AddsTwo")--Syncing to help unlocalized clients + end +end + +function mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName) + if spellName == teleportBalconyName then -- Teleport + self.vb.teleCount = self.vb.teleCount + 1 + self.vb.addsCount = 0 + timerCurseCD:Stop() + timerAddsCD:Stop() + timerBlink:Stop() + local timer + if self.vb.teleCount == 1 then + timer = 70 + timerAddsCD:Start(5)--Always 5 + elseif self.vb.teleCount == 2 then + timer = 97 + timerAddsCD:Start(5)--Always 5 + elseif self.vb.teleCount == 3 then + timer = 126 + timerAddsCD:Start(5)--Always 5 + else + timer = 55 + end + timerTeleportBack:Start(timer) + warnTeleportSoon:Schedule(timer - 10) + warnTeleportNow:Schedule(timer) + elseif spellName == teleportBackName then -- Teleport Return + self.vb.addsCount = 0 + self.vb.curseCount = 0 + timerAddsCD:Stop() + local timer + if self.vb.teleCount == 1 then + timer = 109 + timerAddsCD:Start(10) + elseif self.vb.teleCount == 2 then + timer = 173 + timerAddsCD:Start(17) + elseif self.vb.teleCount == 3 then + timer = 93 + else + timer = 35 + end + timerTeleport:Start(timer) + warnTeleportSoon:Schedule(timer - 10) + warnTeleportNow:Show() + if self.vb.teleCount == 4 then--11-12 except after 4th return it's 17 + timerCurseCD:Start(17)--verify consistency though + else + timerCurseCD:Start(11) + end +-- self:ScheduleMethod(timer, "Balcony") + end +end + +function mod:OnSync(msg) + if not self:IsInCombat() then return end + if msg == "Adds" then--Boss Grounded + self.vb.addsCount = self.vb.addsCount + 1 + specWarnAdds:Show() + specWarnAdds:Play("killmob") + if self.vb.teleCount < 4 then + if self.vb.teleCount == 0 and self.vb.addsCount < 3 then--3 waves 30 seconds apart + timerAddsCD:Start(30) + elseif self.vb.teleCount == 1 then--3 waves 34 then 47 seconds apart + if self.vb.addsCount == 1 then + timerAddsCD:Start(33.9) + elseif self.vb.addsCount == 1 then + timerAddsCD:Start(47.3) + end + elseif self.vb.teleCount == 2 then--30, 32, 32, 30 + if self.vb.addsCount == 1 or self.vb.addsCount == 4 then + timerAddsCD:Start(30) + elseif self.vb.addsCount == 2 or self.vb.addsCount == 3 then + timerAddsCD:Start(32) + end + end + end + elseif msg == "AddsTwo" then--Boss away + self.vb.addsCount = self.vb.addsCount + 1 + specWarnAdds:Show() + specWarnAdds:Play("killmob") + --He won't do anymore adds when teleported way on 4th and later teleport + --He'll never do more than 2 waves + if self.vb.teleCount < 4 and self.vb.addsCount == 1 then + if self.vb.teleCount == 3 then + timerAddsCD:Start(60)--2 big waves, 60 seconds apart + elseif self.vb.teleCount == 2 then--2 medium waves 46 seconds apart + timerAddsCD:Start(46) + else--2 smaller waves 30 seconds apart + timerAddsCD:Start(30) + end + end + end +end diff --git a/DBM-VanillaNaxx/localization.cn.lua b/DBM-VanillaNaxx/localization.cn.lua new file mode 100644 index 00000000..72a0e6e0 --- /dev/null +++ b/DBM-VanillaNaxx/localization.cn.lua @@ -0,0 +1,397 @@ +-- author: callmejames @《凤凰之翼》 一区藏宝海湾 +-- commit by: yaroot +-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原 +-- Last update: 2019/08/22 + +if GetLocale() ~= "zhCN" then return end + +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "阿努布雷坎" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "为蜘蛛克星(成就)显示计时条" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "蜘蛛克星", + Pull1 = "对,跑吧!那样伤口出血就更多了!", + Pull2 = "一些小点心……", +-- Pull3 = "你们逃不掉的。" +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "黑女巫法琳娜" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "黑女巫的拥抱5秒后结束" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "为黑女巫的拥抱结束显示提前警报" +}) + +L:SetMiscLocalization({ + Pull = "跪下求饶吧,诺夫!"--Not actually pull trigger, but often said on pull +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "迈克斯纳" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "迈克斯纳之子 5秒后出现", + WarningSpidersNow = "迈克斯纳之子出现了" +}) + +L:SetTimerLocalization({ + TimerSpider = "下一次 迈克斯纳之子" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "为迈克斯纳之子显示提前警报", + WarningSpidersNow = "为迈克斯纳之子显示警报", + TimerSpider = "为下一次迈克斯纳之子显示计时条" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "蜘蛛克星" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "药剂师诺斯" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "传送", + WarningTeleportSoon = "10秒后 传送" +}) + +L:SetTimerLocalization({ + TimerTeleport = "传送", + TimerTeleportBack = "传送回来" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "为传送显示警报", + WarningTeleportSoon = "为传送显示预警", + TimerTeleport = "为传送显示计时条", + TimerTeleportBack = "为传送回来显示计时条" +}) + +L:SetMiscLocalization({ + Pull = "死吧,入侵者!", + Adds = "召唤出骷髅战士!", + AddsTwo = "召唤出更多的骷髅!" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "肮脏的希尔盖" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "传送", + WarningTeleportSoon = "%d秒后 传送" +}) + +L:SetTimerLocalization({ + TimerTeleport = "传送" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "为传送显示警报", + WarningTeleportSoon = "为传送显示提前警报", + TimerTeleport = "为传送显示计时条" +}) + +L:SetMiscLocalization({ + Pull = "你是我的了。" +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "洛欧塞布" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "3秒后可以治疗", + WarningHealNow = "现在治疗" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "为3秒后可以治疗显示提前警报", + WarningHealNow = "为现在治疗显示警报", + SporeDamageAlert = "在团队中提示谁杀死了孢子并发送悄悄话给该玩家\n(需要团长或助理权限)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "帕奇维克" +}) + +L:SetOptionLocalization({ + WarningHateful = "公布仇恨打击的目标到团队频道\n(需要团长或助理权限)" +}) + +L:SetMiscLocalization({ + yell1 = "帕奇维克要跟你玩!", + yell2 = "帕奇维克是克尔苏加德的战神!", + HatefulStrike = "仇恨打击 --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "格罗布鲁斯" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "格拉斯" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "塔迪乌斯" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "极性变为%s", + WarningChargeNotChanged = "极性没有改变" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "当你的极性改变时显示特别警报", + WarningChargeNotChanged = "当你的极性没有改变时显示特别警报", + ArrowsEnabled = "显示箭头 (正常 \"两边\" 站位打法)", + ArrowsRightLeft = "显示左/右箭头 给 \"四角\" 站位打法 (如果极性改变显示左箭头, 没变显示右箭头)", + ArrowsInverse = "显示反转的 \"四角\" 站位打法 (如果极性改变显示右箭头, 没变显示左箭头)" +}) + +L:SetMiscLocalization({ + Yell = "斯塔拉格要碾碎你!", + Emote = "%s超载了!", + Emote2 = "电磁圈超载了!", + Boss1 = "费尔根", + Boss2 = "斯塔拉格", + Charge1 = "负极", + Charge2 = "正极" +}) + +---------------------------- +-- Instructor Razuvious -- +---------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "教官拉苏维奥斯" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "5秒后 盾墙结束" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "为盾墙结束显示提前警报" +}) + +L:SetMiscLocalization({ + Yell1 = "仁慈无用!", + Yell2 = "练习时间到此为止!都拿出真本事来!", + Yell3 = "按我教导的去做!", + Yell4 = "绊腿……有什么问题吗?" +}) + +---------------------------- +-- Gothik the Harvester -- +---------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "收割者戈提克" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "3秒后 第%d波: %s", + WarningWaveSpawned = "第%d波: %s 出现了", + WarningRiderDown = "骑兵已死亡", + WarningKnightDown = "死亡骑士已死亡", + WarningPhase2 = "第二阶段" +}) + +L:SetTimerLocalization({ + TimerWave = "第 %d 波", + TimerPhase2 = "第2阶段" +}) + +L:SetOptionLocalization({ + TimerWave = "为下一波小怪显示计时条", + TimerPhase2 = "为第二阶段显示计时条", + WarningWaveSoon = "为小怪出现显示提前警报", + WarningWaveSpawned = "为小怪出现显示警报", + WarningRiderDown = "当冷酷的骑兵死亡时显示警报", + WarningKnightDown = "当冷酷的死亡骑士死亡时显示警报" +}) + +L:SetMiscLocalization({ + yell = "你们这些蠢货已经主动步入了陷阱。", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s 和 %d %s", + WarningWave3 = "%d %s, %d %s 和 %d %s", + Trainee = "学徒", + Knight = "死亡骑士", + Rider = "骑兵" +}) + +--------------------- +-- Four Horsemen -- +--------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "四骑士" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "为印记显示提前警报", + SpecialWarningMarkOnPlayer = "当你印记叠加多于四层时显示特别警报" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "3秒后 印记 %d", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetMiscLocalization({ + Korthazz = "库尔塔兹领主", + Rivendare = "瑞文戴尔男爵", + Blaumeux = "女公爵布劳缪克丝", + Zeliek = "瑟里耶克爵士" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "萨菲隆" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "10秒后 空中阶段", + WarningAirPhaseNow = "空中阶段", + WarningLanded = "萨菲隆降落了", + WarningDeepBreath = "冰霜吐息", + SpecWarnSapphLow = "萨菲隆不能飞!" +}) + +L:SetTimerLocalization({ + TimerAir = "空中阶段", + TimerLanding = "降落", + TimerIceBlast = "冰霜吐息" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "为空中阶段显示提前警报", + WarningAirPhaseNow = "提示空中阶段", + WarningLanded = "提示地上阶段", + TimerAir = "为空中阶段显示计时条", + TimerLanding = "为降落显示计时条", + TimerIceBlast = "为冰霜吐息显示计时条", + WarningDeepBreath = "为冰霜吐息显示特别警报", + SpecWarnSapphLow = "10%执行阶段特别警告(取消空中阶段)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s深深地吸了一口气。", + AirPhase = "萨菲隆缓缓升空!", + LandingPhase = "萨菲隆再次发动了攻击!" +}) + +------------------ +-- Kel'Thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "克尔苏加德" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "10秒后克尔苏加德开始攻击", + warnAddsSoon = "寒冰皇冠卫士即将出现" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "第二阶段" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "为第二阶段显示计时条", + specwarnP2Soon = "为克尔苏加德攻击前10秒显示特别警报", + warnAddsSoon = "为寒冰皇冠卫士显示提前警报", + EqUneqWeaponsKT = "在 $spell:28410 之前和之后自动取消装备和装备武器。 需要名为“pve”的装备套装", + EqUneqWeaponsKT2 = "对你施放 $spell:28410 时自动解除和装备武器", + RemoveBuffsOnMC = "当$spell:28410对你施法时,移除BUFF。每个选项都是累积的。", + Gift = "移除$spell:48469 / $spell:48470。防止$spell:33786抵制的最简单方法。", + CCFree = "+ 删除$spell:48169 / $spell:48170。考虑到阴影学派中法术的抵抗。", + ShortOffensiveProcs = "+ 删除持续时间短的攻击性程序。建议在不影响突击队伤害输出的情况下保证突击队的安全。", + MostOffensiveBuffs = "+ 移除大部分攻击性BUFF(主要针对施法者和|cFFFF7C0A野性德鲁伊|r)。在损失伤害输出和需要自我补血/移形换影的情况下,最大限度地保证了突击队的安全!" +}) + +L:SetMiscLocalization({ + Yell = "仆从们,侍卫们,隶属于黑暗与寒冷的战士们!听从克尔苏加德的召唤!", + setMissing = "注意力! 在您创建名为 pve 的装备集之前,DBM 自动武器卸载/装备将不起作用", + EqUneqLineDescription = "自动装备/取消装备" +}) diff --git a/DBM-VanillaNaxx/localization.de.lua b/DBM-VanillaNaxx/localization.de.lua new file mode 100644 index 00000000..20587247 --- /dev/null +++ b/DBM-VanillaNaxx/localization.de.lua @@ -0,0 +1,390 @@ +if GetLocale() ~= "deDE" then return end +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "Anub'Rekhan" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "Zeige Timer für Erfolg 'Arachnophobie'" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobie", + Pull1 = "Rennt! Das bringt das Blut in Wallung!", + Pull2 = "Nur einmal kosten..." --needs to be verified (wowhead-captured translation) +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "Großwitwe Faerlina" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "Umarmung endet in 5 Sek" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "Zeige Vorwarnung für das Ende von $spell:28732" +}) + +L:SetMiscLocalization({ + Pull = "Kniet nieder, Wurm!" --needs to be verified (wowhead-captured translation) +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "Maexxna" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "Maexxnaspinnlinge in 5 Sek", + WarningSpidersNow = "Maexxnaspinnlinge erschienen" +}) + +L:SetTimerLocalization({ + TimerSpider = "Nächste Maexxnaspinnlinge" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "Zeige Vorwarnung für Maexxnaspinnlinge", + WarningSpidersNow = "Zeige Warnung für Maexxnaspinnlinge", + TimerSpider = "Zeige Zeit bis nächste Maexxnaspinnlinge erscheinen" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobie" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "Noth der Seuchenfürst" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teleportiert", + WarningTeleportSoon = "Teleport in 10 Sek" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teleport", + TimerTeleportBack = "Teleport zurück" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Zeige Warnung für Teleport", + WarningTeleportSoon = "Zeige Vorwarnung für Teleport", + TimerTeleport = "Zeige Zeit bis sich Noth auf den Balkon teleportiert", + TimerTeleportBack = "Zeige Zeit bis sich Noth zurück teleportiert" +}) + +L:SetMiscLocalization({ + Pull = "Sterbt, Eindringling!", + Adds = "beschwört Skelettkrieger!", + AddsTwo = "%s belebt mehr Skelette!" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "Heigan der Unreine" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teleportiert", + WarningTeleportSoon = "Teleport in %d Sek" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teleport" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Zeige Warnung für Teleport", + WarningTeleportSoon = "Zeige Vorwarnung für Teleport", + TimerTeleport = "Zeige Zeit bis Teleport" +}) + +L:SetMiscLocalization({ + Pull = "Ihr gehört mir..." +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "Loatheb" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "Heilung in 3 Sek möglich", + WarningHealNow = "Jetzt heilen" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "Zeige Vorwarnung für 3-Sekunden-Heilfenster", + WarningHealNow = "Zeige Warnung für 3-Sekunden-Heilfenster", + SporeDamageAlert = "Sende Flüsternachricht und verkünde Spieler in Raid die Sporen beschädigen\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "Flickwerk" +}) + +L:SetOptionLocalization({ + WarningHateful = "Verkünde Hasserfüllte Stöße im Raidchat\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)" +}) + +L:SetMiscLocalization({ + yell1 = "Flickwerk spielen möchte!", + yell2 = "Kel’Thuzad macht Flickwerk zu seinem Abgesandten des Kriegs!", + HatefulStrike = "Hasserfüllter Stoß --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "Grobbulus" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "Gluth" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "Thaddius" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "Polarität geändert zu %s", + WarningChargeNotChanged = "Polarität hat sich nicht geändert" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "Spezialwarnung, wenn deine Polarität gewechselt hat", + WarningChargeNotChanged = "Spezialwarnung, wenn deine Polarität nicht gewechselt hat", + ArrowsEnabled = "Zeige Pfeile (normale \"2-Camps\"-Strategie)", + ArrowsRightLeft = "Zeige Links-/Rechtspfeil für die \"4-Camps\"-Strategie
(Linkspfeil bei Polaritätsänderung, Rechtspfeil bei keiner Änderung)", + ArrowsInverse = "Umgedrehte \"4-Camps\"-Strategie
(Rechtspfeil bei Polaritätsänderung, Linkspfeil bei keiner Änderung)" +}) + +L:SetMiscLocalization({ + Yell = "Stalagg zerquetschen!", + Emote = "%s überlädt!", + Emote2 = "Teslaspule überlädt!", + Boss1 = "Feugen", + Boss2 = "Stalagg", + Charge1 = "negativ", + Charge2 = "positiv" +}) + +---------------------------- +-- Instructor Razuvious -- +---------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "Instrukteur Razuvious" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "Knochenbarriere endet in 5 Sekunden" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "Zeige Vorwarnung, wenn $spell:29061 endet" +}) + +L:SetMiscLocalization({ + Yell1 = "Lasst keine Gnade walten!", + Yell2 = "Die Zeit des Übens ist vorbei! Zeigt mir, was ihr gelernt habt!", + Yell3 = "Befolgt meine Befehle!", + Yell4 = "Streckt sie nieder... oder habt ihr ein Problem damit?" +}) + +---------------------------- +-- Gothik the Harvester -- +---------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "Gothik der Ernter" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "Welle %d: %s in 3 Sek", + WarningWaveSpawned = "Welle %d: %s erschienen", + WarningRiderDown = "Reiter tot", + WarningKnightDown = "Ritter tot", + WarningPhase2 = "Phase 2" +}) + +L:SetTimerLocalization({ + TimerWave = "Welle %d", + TimerPhase2 = "Phase 2" +}) + +L:SetOptionLocalization({ + TimerWave = "Zeige Zeit bis nächste Welle", + TimerPhase2 = "Zeige Zeit bis Phase 2", + WarningWaveSoon = "Warne, wenn bald eine neue Welle kommt", + WarningWaveSpawned = "Warne, wenn eine neue Welle kommt", + WarningRiderDown = "Zeige Warnung, wenn ein Unerbittlicher Reiter stirbt", + WarningKnightDown = "Zeige Warnung, wenn ein Unerbittlicher Todesritter stirbt" +}) + +L:SetMiscLocalization({ + yell = "Ihr Narren habt euren eigenen Untergang heraufbeschworen.", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s und %d %s", + WarningWave3 = "%d %s, %d %s und %d %s", + Trainee = "Lehrlinge", + Knight = "Ritter", + Rider = "Reiter" +}) + +--------------------- +-- Four Horsemen -- +--------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "Die vier Reiter" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "Mal %d in 3 Sekunden", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "Zeige Vorwarnung für Mal", + SpecialWarningMarkOnPlayer = "Spezialwarnung, wenn sich ein Mal mehr als 4-mal auf dir stapelt" +}) + +L:SetMiscLocalization({ + Korthazz = "Than Korth'azz", + Rivendare = "Baron Totenschwur", + Blaumeux = "Lady Blaumeux", + Zeliek = "Sir Zeliek" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "Saphiron" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "Luftphase in 10 Sek", + WarningAirPhaseNow = "Luftphase", + WarningLanded = "Bodenphase", + WarningDeepBreath = "Frostatem", + SpecWarnSapphLow = "Saphiron kann nicht fliegen!" +}) + +L:SetTimerLocalization({ + TimerAir = "Nächste Luftphase", + TimerLanding = "Nächste Bodenphase", + TimerIceBlast = "Frostatem" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "Zeige Vorwarnung, wenn Saphiron bald abhebt", + WarningAirPhaseNow = "Zeige Warnung, wenn Saphiron abhebt", + WarningLanded = "Zeige Warnung, wenn Saphiron landet", + TimerAir = "Zeige Zeit bis nächste Luftphase", + TimerLanding = "Zeige Zeit bis nächste Bodenphase", + TimerIceBlast = "Zeige Zeit bis $spell:28524", + WarningDeepBreath = "Spezialwarnung für $spell:28524", + SpecWarnSapphLow = "Sonderwarnung für 10 % Ausführungsphase (Luftphase abbrechen)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s holt tief Luft.", + AirPhase = "Saphiron erhebt sich in die Lüfte!", + LandingPhase = "Saphiron nimmt seine Angriffe wieder auf!" +}) + +------------------ +-- Kel'Thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "Kel'Thuzad" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "Kel'Thuzad greift in 10 Sekunden an", + warnAddsSoon = "Wächter von Eiskrone bald" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "Phase 2" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "Zeige Zeit bis Phase 2", + specwarnP2Soon = "Spezialwarnung 10 Sekunden bevor Kel'Thuzad angreift", + warnAddsSoon = "Zeige Vorwarnung für Wächter von Eiskrone", + EqUneqWeaponsKT = "Waffen vor und nach $spell:28410 automatisch aus- und ausrüsten. Benötigt Ausrüstungsset namens \"pve\"", + EqUneqWeaponsKT2 = "Waffen automatisch ablegen und ausrüsten, wenn $spell:28410 auf DICH gewirkt wird", + RemoveBuffsOnMC = "Entferne Buffs, wenn $spell:28410 auf dich gewirkt wird. Jede Option ist kumulativ.", + Gift = "Entferne $spell:48469 / $spell:48470. Minimaler Ansatz, um $spell:33786 Resistenzen zu verhindern.", + CCFree = "+ Entferne $spell:48169 / $spell:48170. Berücksichtige die Resistenzen von Zaubern der Schattenschule.", + ShortOffensiveProcs = "+ Entferne offensive Procs, die eine geringe Dauer haben. Empfohlen für die Sicherheit des Schlachtzugs, ohne den Schadensoutput des Schlachtzugs zu beeinträchtigen.", + MostOffensiveBuffs = "+ Entfernt die meisten offensiven Buffs (hauptsächlich für Zauberwirker und |cFFFF7C0AWildheit-Druide|r). Maximale Schlachtzugsicherheit bei gleichzeitigem Verlust des Schadensoutputs und der Notwendigkeit, sich selbst zu rebuffen/shapeshiften!" +}) + +L:SetMiscLocalization({ + Yell = "Lakaien, Diener, Soldaten der eisigen Finsternis! Folgt dem Ruf von Kel'Thuzad!", + setMissing = "AUFMERKSAMKEIT! Das automatische Ausrüsten/Ausrüsten von DBM-Waffen funktioniert erst, wenn Sie ein Ausrüstungsset namens pve . erstellen", + EqUneqLineDescription = "Automatisches An-/Ablegen" +}) diff --git a/DBM-VanillaNaxx/localization.en.lua b/DBM-VanillaNaxx/localization.en.lua new file mode 100644 index 00000000..4e8939b4 --- /dev/null +++ b/DBM-VanillaNaxx/localization.en.lua @@ -0,0 +1,389 @@ +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "Anub'Rekhan" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "Show timer for Arachnophobia (achievement)" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobia", + Pull1 = "Yes, run! It makes the blood pump faster!", + Pull2 = "Just a little taste..." +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "Grand Widow Faerlina" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "Widow's Embrace ends in 5 seconds" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "Show pre-warning for $spell:28732 fade" +}) + +L:SetMiscLocalization({ + Pull = "Kneel before me, worm!"--Not actually pull trigger, but often said on pull +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "Maexxna" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "Maexxna Spiderlings in 5 seconds", + WarningSpidersNow = "Maexxna Spiderlings spawned" +}) + +L:SetTimerLocalization({ + TimerSpider = "Next Maexxna Spiderlings" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "Show pre-warning for Maexxna Spiderlings", + WarningSpidersNow = "Show warning for Maexxna Spiderlings", + TimerSpider = "Show timer for next Maexxna Spiderlings" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobia" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "Noth the Plaguebringer" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teleported", + WarningTeleportSoon = "Teleport in 10 seconds" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teleport", + TimerTeleportBack = "Teleport back" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Show warning for Teleport", + WarningTeleportSoon = "Show pre-warning for Teleport", + TimerTeleport = "Show timer for Teleport", + TimerTeleportBack = "Show timer for Teleport back" +}) + +L:SetMiscLocalization({ + Pull = "Die, trespasser!", + Adds = "summons forth Skeletal Warriors!", + AddsTwo = "raises more skeletons!" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "Heigan the Unclean" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teleported", + WarningTeleportSoon = "Teleport in %d seconds" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teleport" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Show warning for Teleport", + WarningTeleportSoon = "Show pre-warning for Teleport", + TimerTeleport = "Show timer for Teleport" +}) + +L:SetMiscLocalization({ + Pull = "You are mine now." +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "Loatheb" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "Healing possible in 3 seconds", + WarningHealNow = "Heal now" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "Show pre-warning for 3-second healing window", + WarningHealNow = "Show warning for 3-second healing window", + SporeDamageAlert = "Send whisper to and announce to raid players who damage spores\n(requires announce to be enabled and leader/promoted status)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", + Alphabetical = "Sort in alphabetical order", + Duration = "Sort by duration" +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "Patchwerk" +}) + +L:SetOptionLocalization({ + WarningHateful = "Post Hateful Strike targets to raid chat\n(requires announce to be enabled and leader/promoted status)" +}) + +L:SetMiscLocalization({ + yell1 = "Patchwerk want to play!", + yell2 = "Kel'thuzad make Patchwerk his avatar of war!", + HatefulStrike = "Hateful Strike --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "Grobbulus" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "Gluth" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "Thaddius" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "Polarity changed to %s", + WarningChargeNotChanged = "Polarity did not change" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "Show special warning when your polarity changed", + WarningChargeNotChanged = "Show special warning when your polarity did not change", + ArrowsEnabled = "Show arrows during $spell:28089", + TwoCamp = "Show arrows (normal \"2 camp\" run through strategy)", + ArrowsRightLeft = "Show left/right arrows for the \"4 camp\" strategy (show left arrow if polarity changed, right if not)", + ArrowsInverse = "Inverse \"4 camp\" strategy (show right arrow if polarity changed, left if not)" +}) + +L:SetMiscLocalization({ + Yell = "Stalagg crush you!", + Emote = "%s overloads!", + Emote2 = "Tesla Coil overloads!", + Boss1 = "Feugen", + Boss2 = "Stalagg", + Charge1 = "negative", + Charge2 = "positive" +}) + +---------------------------- +-- Instructor Razuvious -- +---------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "Instructor Razuvious" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "Shield Wall ends in 5 seconds" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "Show pre-warning for Shield Wall ending" +}) + +L:SetMiscLocalization({ + Yell1 = "Show them no mercy!", + Yell2 = "The time for practice is over! Show me what you have learned!", + Yell3 = "Do as I taught you!", + Yell4 = "Sweep the leg... Do you have a problem with that?" +}) + +---------------------------- +-- Gothik the Harvester -- +---------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "Gothik the Harvester" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "Wave %d: %s in 3 sec", + WarningWaveSpawned = "Wave %d: %s spawned", + WarningRiderDown = "Rider down", + WarningKnightDown = "Knight down", + WarningPhase2 = "Phase 2" +}) + +L:SetTimerLocalization({ + TimerWave = "Wave %d", + TimerPhase2 = "Phase 2" +}) + +L:SetOptionLocalization({ + TimerWave = "Show timer for next wave", + TimerPhase2 = "Show timer for Phase 2", + WarningWaveSoon = "Show pre-warning for wave", + WarningWaveSpawned = "Show warning for wave spawned", + WarningRiderDown = "Show warning when an Unrelenting Rider dies", + WarningKnightDown = "Show warning when an Unrelenting Death Knight dies" +}) + +L:SetMiscLocalization({ + yell = "Foolishly you have sought your own demise.", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s and %d %s", + WarningWave3 = "%d %s, %d %s and %d %s", + Trainee = "Trainees", + Knight = "Knights", + Rider = "Riders" +}) + +--------------------- +-- Four Horsemen -- +--------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "Four Horsemen" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "Mark %d in 3 seconds", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "Show pre-warning for Mark", + SpecialWarningMarkOnPlayer = "Show special warning when you are affected by more than 4 marks" +}) + +L:SetMiscLocalization({ + Korthazz = "Thane Korth'azz", + Rivendare = "Baron Rivendare", + Blaumeux = "Lady Blaumeux", + Zeliek = "Sir Zeliek" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "Sapphiron" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "Air phase in 10 seconds", + WarningAirPhaseNow = "Air phase", + WarningLanded = "Sapphiron landed", + SpecWarnSapphLow = "Sapphiron can't fly!" +}) + +L:SetTimerLocalization({ + TimerAir = "Air phase", + TimerLanding = "Landing" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "Show pre-warning for air phase", + WarningAirPhaseNow = "Announce air phase", + WarningLanded = "Announce ground phase", + TimerAir = "Show timer for air phase", + TimerLanding = "Show timer for landing", + SpecWarnSapphLow = "Special warning for 10% execute phase (cancel air phase)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s takes a deep breath.", + AirPhase = "Sapphiron lifts off into the air!", + LandingPhase = "Sapphiron resumes his attacks!" +}) + +------------------ +-- Kel'Thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "Kel'Thuzad" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "Kel'Thuzad engages in 10 Seconds", + warnAddsSoon = "Guardians of Icecrown incoming soon" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "Phase 2" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "Show timer for Phase 2", + specwarnP2Soon = "Show special warning 10 seconds before Kel'Thuzad engages", + warnAddsSoon = "Show pre-warning for Guardians of Icecrown", + EqUneqWeaponsKT = "Automatically unequip and equip weapons before and after $spell:28410. Requires a COMPLETE (with the weapons of choice that will be equipped) equipment set named \"pve\"", + EqUneqWeaponsKT2 = "Automatically unequip and equip weapons when $spell:28410 is cast on YOU", + RemoveBuffsOnMC = "Remove buffs when $spell:28410 is cast on you. Each option is cumulative.", + Never = NEVER, -- don't translate, + Gift = "Remove $spell:48469 / $spell:48470. Minimal approach to prevent $spell:33786 resists.", + CCFree = "+ Remove $spell:48169 / $spell:48170. Account for resists of spells in the Shadow school.", + ShortOffensiveProcs = "+ Remove offensive procs that have a low duration. Recommended for raid safety without compromising raid damage output.", + MostOffensiveBuffs = "+ Remove most offensive buffs (mainly for Casters and |cFFFF7C0AFeral Druids|r). Maximum raid safety with loss of damage output and need to self-rebuff/shapeshift!" +}) + +L:SetMiscLocalization({ + Yell = "Minions, servants, soldiers of the cold dark! Obey the call of Kel'Thuzad!", +-- YellMC1 = "Your soul is bound to me, now!", +-- YellMC2 = "There will be no escape!", + setMissing = "ATTENTION! DBM automatic weapon unequipping/equipping will not work until you create a equipment set named pve", + EqUneqLineDescription = "Automatic Equip/Unequip" +}) diff --git a/DBM-VanillaNaxx/localization.es.lua b/DBM-VanillaNaxx/localization.es.lua new file mode 100644 index 00000000..40653101 --- /dev/null +++ b/DBM-VanillaNaxx/localization.es.lua @@ -0,0 +1,390 @@ +if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end +local L + +----------------- +-- Anub'Rekhan -- +----------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "Anub'Rekhan" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "Mostrar temporizador para el logro 'Aracnofobia'" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Logro: Aracnofobia", + Pull1 = "¡Eso, corred! ¡Así la sangre circula más rápido!", + Pull2 = "Solo un bocado..." +}) + +------------------------- +-- Gran Viuda Faerlina -- +------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "Gran Viuda Faerlina" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "Abrazo de la viuda expirando en 5 s" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "Mostrar aviso previo para cuando expire Abrazo de la viuda" +}) + +L:SetMiscLocalization({ + Pull = "¡Arrodíllate ante mí, sabandija!"--Not actually pull trigger, but often said on pull +}) + +------------- +-- Maexxna -- +------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "Maexxna" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "Arañitas de Maexxna en 5 s", + WarningSpidersNow = "Arañitas de Maexxna" +}) + +L:SetTimerLocalization({ + TimerSpider = "Siguientes arañitas" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "Mostrar aviso previo para cuando aparezcan Arañitas de Maexxna", + WarningSpidersNow = "Mostrar aviso cuando aparezcan Arañitas de Maexxna", + TimerSpider = "Mostrar temporizador para las siguientes Arañitas de Maexxna" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Logro: Aracnofobia" +}) + +----------------------- +-- Noth el Pesteador -- +----------------------- +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "Noth el Pesteador" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teletransporte", + WarningTeleportSoon = "Teletransporte en 10 s" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teletransporte: Balcón", + TimerTeleportBack = "Teletransporte: Suelo" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Mostrar aviso para Teletransporte", + WarningTeleportSoon = "Mostrar aviso previo para Teletransporte", + TimerTeleport = "Mostrar temporizador para el siguiente Teletransporte: Balcón", + TimerTeleportBack = "Mostrar temporizador para Teletransporte: Suelo" +}) + +L:SetMiscLocalization({ + Pull = "¡Muere, intruso!", + Adds = "invoca a guerreros esqueletos!", + AddsTwo = "alza más esqueletos!" +}) + +---------------------- +-- Heigan el Impuro -- +---------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "Heigan el Impuro" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Teletransporte", + WarningTeleportSoon = "Teletransporte en %d s" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Teletransporte" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Mostrar aviso para Teletransporte", + WarningTeleportSoon = "Mostrar aviso previo para Teletransporte", + TimerTeleport = "Mostrar aviso para Teletransporte" +}) + +L:SetMiscLocalization({ + Pull = "Ahora me perteneces." +}) + +------------- +-- Loatheb -- +------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "Loatheb" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "Sanación posible en 3 s", + WarningHealNow = "¡Sanad ahora!" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "Mostrar aviso previo para la franja de sanación", + WarningHealNow = "Mostrar aviso para la franja de sanación", + SporeDamageAlert = "Enviar susurros y avisar a la banda de los jugadores que estén dañando esporas\n(necesita 'anunciar' activado y lider/ayudante)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +--------------- +-- Remendejo -- +--------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "Remendejo" +}) + +L:SetOptionLocalization({ + WarningHateful = "Avisar por chat de banda los Golpes de Odio (necesitas ser ayudante o lider para eso)" +}) + +L:SetMiscLocalization({ + yell1 = "¡Remendejo quiere jugar!", + yell2 = "¡Remendejo es la encarnación de guerra de Kel'Thuzad!", + HatefulStrike = "Golpe de Odio --> %s [%s]" +}) + +--------------- +-- Grobbulus -- +--------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "Grobbulus" +}) + +----------- +-- Gluth -- +----------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "Gluth" +}) + +-------------- +-- Thaddius -- +-------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "Thaddius" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "Polaridad cambiada a %s", + WarningChargeNotChanged = "Tu polaridad no ha cambiado" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "Mostrar aviso especial cuando tu polaridad cambie", + WarningChargeNotChanged = "Mostrar aviso especial cuando tu polaridad no cambie", + ArrowsEnabled = "Mostrar flechas (estrategia típica de dos grupos)", + ArrowsRightLeft = "Mostrar flechas de izquierda y derecha (estrategia de cuatro grupos; muestra la flecha izquierda si cambia la polaridad, y la derecha si no cambia)", + ArrowsInverse = "Mostrar flechas de izquierda y derecha inversas (estrategia de cuatro grupos; muestra la flecha derecha si cambia la polaridad, y la izquierda si no cambia)" +}) + +L:SetMiscLocalization({ + Yell = "¡Stalagg aplasta!", + Emote = "¡%s se sobrecarga!", + Emote2 = "¡Espiral Tesla se sobrecarga!", + Boss1 = "Feugen", + Boss2 = "Stalagg", + Charge1 = "negativo", + Charge2 = "positivo" +}) + +-------------------------- +-- Instructor Razuvious -- +-------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "Instructor Razuvious" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "Barrera de huesos termina en 5 s" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "Mostrar aviso previo para cuando termine $spell:29061" +}) + +L:SetMiscLocalization({ + Yell1 = "¡No tengáis piedad!", + Yell2 = "¡El tiempo de practicar ha pasado! ¡Quiero ver lo que habéis aprendido!", + Yell3 = "¡Poned en práctica lo que os he enseñado!", + Yell4 = "Un barrido con pierna... ¿Tienes algún problema?" +}) + +-------------------------- +-- Gothik el Cosechador -- +-------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "Gothik el Cosechador" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "Oleada %d: %s en 3 s", + WarningWaveSpawned = "Oleada %d: %s", + WarningRiderDown = "Jinete muerto", + WarningKnightDown = "Caballero muerto", + WarningPhase2 = "Fase 2" +}) + +L:SetTimerLocalization({ + TimerWave = "Oleada %d", + TimerPhase2 = "Fase 2" +}) + +L:SetOptionLocalization({ + TimerWave = "Mostrar temporizador para la siguiente oleada de esbirros", + TimerPhase2 = "Mostrar temporizador para el cambio a Fase 2", + WarningWaveSoon = "Mostrar aviso previo para la siguiente oleada de esbirros", + WarningWaveSpawned = "Mostrar aviso cuando comience una oleada de esbirros", + WarningRiderDown = "Mostrar aviso cuando muera un Jinete inflexible", + WarningKnightDown = "Mostrar aviso cuando muera un Caballero de la Muerte inflexible" +}) + +L:SetMiscLocalization({ + yell = "Tú mismo has buscado tu final.", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s y %d %s", + WarningWave3 = "%d %s, %d %s y %d %s", + Trainee = "practicantes", + Knight = "caballeros", + Rider = "jinetes" +}) + +------------------------ +-- Los Cuatro Jinetes -- +------------------------ +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "Los Cuatro Jinetes" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "Marca %d en 3 s", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "Mostrar aviso previo para las marcas", + SpecialWarningMarkOnPlayer = "Mostrar aviso especial cuando estés afectado por más de cuatro marcas" +}) + +L:SetMiscLocalization({ + Korthazz = "Señor feudal Korth'azz", + Rivendare = "Barón Osahendido", + Blaumeux = "Lady Blaumeux", + Zeliek = "Sir Zeliek" +}) + +--------------- +-- Sapphiron -- +--------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "Sapphiron" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "Fase aérea en 10 s", + WarningAirPhaseNow = "Fase aérea", + WarningLanded = "Fase en tierra", + WarningDeepBreath = "Aliento de Escarcha", + SpecWarnSapphLow = "¡Sapphiron no puede volar!" +}) + +L:SetTimerLocalization({ + TimerAir = "Fase aérea", + TimerLanding = "Fase en tierra", + TimerIceBlast = "Aliento de Escarcha" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "Mostrar aviso previo para el cambio a fase aérea", + WarningAirPhaseNow = "Anunciar cambio a fase aérea", + WarningLanded = "Anunciar cambio a fase en tierra", + TimerAir = "Mostrar temporizador para el cambio a fase aérea", + TimerLanding = "Mostrar temporizador para el cambio a fase en tierra", + TimerIceBlast = "Mostrar temporizador para $spell:28524", + WarningDeepBreath = "Mostrar aviso especial para $spell:28524", + SpecWarnSapphLow = "Advertencia especial para fase de ejecución del 10% (cancelación de fase de aire)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s respira hondo.", + AirPhase = "¡Sapphiron se eleva en el aire!", + LandingPhase = "¡Sapphiron reanuda su ataque!" +}) + +---------------- +-- Kel'Thuzad -- +---------------- +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "Kel'Thuzad" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "Fase 2 en 10 s", + warnAddsSoon = "Guardianes de Corona de Hielo en breve" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "Fase 2" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "Mostrar temporizador para el cambio a Fase 2", + specwarnP2Soon = "Mostrar aviso especial 10 s antes del cambio a Fase 2", + warnAddsSoon = "Mostrar aviso previo para cuando aparezcan los Guardianes de Corona de Hielo", + EqUneqWeaponsKT = "Desequipar y equipar armas automáticamente antes y después del $spell:28410. Requiere equipamiento llamado \"pve\"", + EqUneqWeaponsKT2 = "Desequipar y equipar armas automáticamente cuando se lanza $spell:28410 sobre USTED", + RemoveBuffsOnMC = "Elimina los buffs cuando $spell:28410 es lanzado sobre ti. Cada opción es acumulativa", + Gift = "Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista", + CCFree = "+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra", + ShortOffensiveProcs = "+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid", + MostOffensiveBuffs = "+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma" +}) + +L:SetMiscLocalization({ + Yell = "¡Esbirros, sirvientes, soldados de la fría oscuridad! ¡Obedeced la llamada de Kel'Thuzad!", + setMissing = "¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve", + EqUneqLineDescription = "Equipar/desequipar automático" +}) diff --git a/DBM-VanillaNaxx/localization.fr.lua b/DBM-VanillaNaxx/localization.fr.lua new file mode 100644 index 00000000..aad770a0 --- /dev/null +++ b/DBM-VanillaNaxx/localization.fr.lua @@ -0,0 +1,392 @@ +if GetLocale() ~= "frFR" then return end + +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "Anub'Rekhan" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "Activer le timer pour l'arachnophobie (HAUT-FAIT)" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobie", + Pull1 = "Oui, courez ! Faites circuler le sang !", + Pull2 = "Rien qu'une petite bouchée…" +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "Grande Veuve Faerlina" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "Fin du baisé de la veuve dans 5 sec" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "Activer l'avertissement de fin du baisé de la veuve" +}) + +L:SetMiscLocalization({ + Pull = "À genoux, vermisseau !"--Not actually pull trigger, but often said on pull +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "Maexxna" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "Araignées dans 5 sec", + WarningSpidersNow = "Arrivée des araignées!" +}) + +L:SetTimerLocalization({ + TimerSpider = "Araignées" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "Activer le pré-avertissement pour les araignées", + WarningSpidersNow = "Activer l'avertissement pour les araignées", + TimerSpider = "Montre le timer pour l'arrivée des araignées" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Arachnophobie" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "Noth le Porte-peste" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Téléportation!", + WarningTeleportSoon = "Téléportation dans in 10 sec" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Téléportation", + TimerTeleportBack = "Retour de TP" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Activer l'avertissement pour la téléporation", + WarningTeleportSoon = "Activer le pré-avertissement pour la téléporation", + TimerTeleport = "Activer le timer pour la téléporation", + TimerTeleportBack = "Activer le timer pour le retour de North" +}) + +L:SetMiscLocalization({ + Pull = "Mourez, intrus !", + Adds = "invoque des guerriers squelettes !", + AddsTwo = "lève encore d'autres squelettes !" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "Heigan l'Impur" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Téléportation!", + WarningTeleportSoon = "Téléporation dans %d sec" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Téléporation" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Activer l'avertissement de Téléporation", + WarningTeleportSoon = "Activer le pré-avertissement de Téléporation", + TimerTeleport = "Activer le timer pour la Téléporation" +}) + +L:SetMiscLocalization({ + Pull = "Vous êtes à moi, maintenant." +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "Horreb" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "Soins possibles dans 3 sec", + WarningHealNow = "SOIGNEZ MAINTENANT!" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "Activer l'avertissement \"Soins dans 3 sec\" ", + WarningHealNow = "Activer l'avertissement \"SOIGNEZ MAINTENANT\" ", + SporeDamageAlert = "Envoyer un murmure et annoncer aux joueurs de raid qui endommagent les spores\n(nécessite que l'annonce soit activée et le statut de leader/promu)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "Le recousu" +}) + +L:SetOptionLocalization({ + WarningHateful = "Annoncer les Frappes Haineuses au raid\n(vous devez être promote ou le raid leader pour le faire)" +}) + +L:SetMiscLocalization({ + yell1 = "R'cousu veut jouer !", + yell2 = "R'cousu avatar de guerre pour Kel'Thuzad !", + HatefulStrike = "Frappe Haineuse --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "Grobbulus" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "Gluth" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "Thaddius" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "Polarité changée : %s", + WarningChargeNotChanged = "Même polarité" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "Activer l'avertissement spécial quand votre polarité a changé", + WarningChargeNotChanged = "Activer l'avertissement spécial quand votre polarité n'a pas changé", + TimerShiftCast = "Afficher le timer pour le cast du changement de polarité", + ArrowsEnabled = "Afficher les flèches (stratégie normale : \"2 camps\")", + ArrowsRightLeft = "Afficher les flèches droite/gauche pour la stratégie \"4 camps\" (flèche gauche si la polarité a changé et droite sinon)", + ArrowsInverse = "Inverser la statégie \"4 camps\" (afficher la flèche droite si la polarité a changé et la gauche sinon)" +}) + +L:SetMiscLocalization({ + Yell = "Stalagg écraser toi !", + Emote = "%s entre en surcharge !", + Emote2 = "Bobine de Tesla entre en surcharge !", + Boss1 = "Feugen", + Boss2 = "Stalagg", + Charge1 = "négative", + Charge2 = "positive" +}) + +----------------- +-- Razuvious -- +----------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "Razuvious" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "Mur de Bouclier expire dans 5 sec" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "Activer l'avertissement du Mur de Bouclier" +}) + +L:SetMiscLocalization({ + Yell1 = "Pas de quartier !", + Yell2 = "Les cours sont terminés ! Montrez-moi ce que vous avez appris !", + Yell3 = "Faites ce que vous ai appris !", + Yell4 = "Frappe-le à la jambe" +}) + +-------------- +-- Gothik -- +-------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "Gothik" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "Vague %d: %s dans 3 sec", + WarningWaveSpawned = "Vague %d: %s arrivée", + WarningRiderDown = "Cavalier down", + WarningKnightDown = "Chevalier down", + WarningPhase2 = "Phase 2" +}) + +L:SetTimerLocalization({ + TimerWave = "Vague #%d", + TimerPhase2 = "Phase 2" +}) + +L:SetOptionLocalization({ + TimerWave = "Afficher le timer des vagues", + TimerPhase2 = "Afficher le timer pour la Phase 2", + WarningWaveSoon = "Activer le pré-avertissement pour les Vagues", + WarningWaveSpawned = "Avertir quand une vague est arrivée", + WarningRiderDown = "Avertir quand un Cavalier meurt", + WarningKnightDown = "Avertir quand un Chevalier meurt", + WarningPhase2 = "Activer l'avertissement pour la Phase 2" +}) + +L:SetMiscLocalization({ + yell = "Dans votre folie, vous avez provoqué votre propre mort.", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s et %d %s", + WarningWave3 = "%d %s, %d %s et %d %s", + Trainee = "Recrues", + Knight = "Chevaliers", + Rider = "Cavaliers" +}) + +---------------- +-- Horsemen -- +---------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "Les quatre Cavaliers" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "Marque %d dans 3 sec", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "Activer le pré-avertissement des Marques", + SpecialWarningMarkOnPlayer = "Avertissement spécial quand vous avez plus de 4 marques sur vous" +}) + +L:SetMiscLocalization({ + Korthazz = "Thane Korth'azz", + Rivendare = "Baron Vaillefendre", + Blaumeux = "Dame Blaumeux", + Zeliek = "Sire Zeliek" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "Sapphiron" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "Envol dans 10 sec", + WarningAirPhaseNow = "Dans les airs", + WarningLanded = "Atterrissage de Sapphiron", + WarningDeepBreath = "Souffle de givre !", + SpecWarnSapphLow = "Sapphiron ne peut pas voler !" +}) + +L:SetTimerLocalization({ + TimerAir = "Envol", + TimerLanding = "Atterrissage dans", + TimerIceBlast = "Souffle de givre" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "Activer le pré-avertissement de la phase en vol", + WarningAirPhaseNow = "Activer l'avertissement de la phase en vol", + WarningLanded = "Activer l'avertissement pour la phase au sol", + TimerAir = "Afficher le timer de la phase en vol", + TimerLanding = "Afficher le timer de l'atterrissage", + TimerIceBlast = "Afficher le timer du Souffle de givre", + WarningDeepBreath = "Activer l'avertissement spécial pour le Souffle de givre", + SpecWarnSapphLow = "Avertissement spécial pour la phase d'exécution à 10 % (annulation de la phase d'air)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "prend une grande inspiration", + AirPhase = "Saphiron s'envole !", + LandingPhase = "Saphiron reprend ses attaques !" +}) + +------------------ +-- Kel'thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "Kel'Thuzad" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "Kel'Thuzad sera actif dans 10 secondes" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "Phase 2", + BlastTimer = "Heal Maintenant !" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "Afficher le timer pour la Phase 2", + specwarnP2Soon = "Montre un timer pour prévenir 10 secondes avant l'arrivée de Kel'Thuzad", + EqUneqWeaponsKT = "Déséquipez et équipez automatiquement les armes avant et après $spell:28410. Nécessite un ensemble d'équipement nommé \"pve\"", + EqUneqWeaponsKT2 = "Déséquiper et équiper automatiquement les armes lorsque $spell:28410 est lancé sur VOUS", + RemoveBuffsOnMC = "Retirez les buffs lorsque $spell:28410 est lancé sur vous. Chaque option est cumulative.", + Gift = "Supprimer $spell:48469 / $spell:48470. Approche minimale pour éviter $spell:33786 résistances.", + CCFree = "+ Supprimer $spell:48169 / $spell:48170. Tient compte des résistances des sorts de l'école de l'ombre.", + ShortOffensiveProcs = "+ Supprimer les procs offensifs qui ont une faible durée. Recommandé pour la sécurité du raid sans compromettre les dégâts du raid.", + MostOffensiveBuffs = "+ Supprimer la plupart des buffs offensifs (principalement pour les Casters et les |cFFFF7C0AFarouche Druide|r). Sécurité maximale pour les raids avec une perte de dégâts et la nécessité de s'auto-rebuffer/shapeshift!" +}) + +L:SetMiscLocalization({ + Yell = "Serviteurs, valets et soldats des ténèbres glaciales ! Répondez à l'appel de Kel'Thuzad !", + setMissing = "ATTENTION! DBM auto-déséquipement d'arme ne fonctionnera pas tant que vous n'aurez pas créer un set apellé pve", + EqUneqLineDescription = "Équiper/Déséquiper automatiquement" +}) diff --git a/DBM-VanillaNaxx/localization.kr.lua b/DBM-VanillaNaxx/localization.kr.lua new file mode 100644 index 00000000..13268a02 --- /dev/null +++ b/DBM-VanillaNaxx/localization.kr.lua @@ -0,0 +1,404 @@ +if GetLocale() ~= "koKR" then return end + +local L + +------------------- +-- 거미 지구 -- +------------------- +------------------- +-- 아눕레칸 -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "아눕레칸" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "거미의 공포 업적 가능 바 보기" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "거미의 공포 업적 가능", + Pull1 = "그래, 도망쳐! 더 신선한 피가 솟구칠 테니!", + Pull2 = "어디 맛 좀 볼까..." +}) + +--------------------- +-- 귀부인 펠리나 -- +--------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "귀부인 펠리나" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "귀부인의 은총 종료 5초 전" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "귀부인의 은총 종료 이전에 알림 보기" +}) + +--------------- +-- 맥스나 -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "맥스나" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "5초 후 거미의 입맞춤", + WarningSpidersNow = "거미의 입맞춤" +}) + +L:SetTimerLocalization({ + TimerSpider = "다음 거미의 입맞춤" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "거미의 입맞춤 이전에 알림 보기", + WarningSpidersNow = "거미의 입맞춤 알림 보기", + TimerSpider = "다음 거미의 입맞춤 바 보기" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "거미의 공포" +}) + +--------------- +-- 역병 지구 -- +--------------- +--------------------- +-- 역병술사 노스 -- +--------------------- +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "역병술사 노스" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "순간이동", + WarningTeleportSoon = "10초 후 순간이동" +}) + +L:SetTimerLocalization({ + TimerTeleport = "다음 순간이동", + TimerTeleportBack = "방으로 복귀" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "순간이동 알림 보기", + WarningTeleportSoon = "순간이동 이전에 알림 보기", + TimerTeleport = "다음 순간이동 바 보기", + TimerTeleportBack = "방으로 복귀 바 보기" +}) + +L:SetMiscLocalization({ + Pull = "죽어라, 침입자들아!", + Adds = "해골 전사를 소환합니다!", + AddsTwo = "해골을 계속 일으킵니다!" +}) + +-------------------------- +-- 부정의 헤이건 -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "부정의 헤이건" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "순간이동", + WarningTeleportSoon = "%d초 후 순간이동" +}) + +L:SetTimerLocalization({ + TimerTeleport = "다음 순간이동" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "순간이동 알림 보기", + WarningTeleportSoon = "순간이동 이전에 알림 보기", + TimerTeleport = "다음 순간이동 바 보기" +}) + +L:SetMiscLocalization({ + Pull = "이제 넌 내 것이다." +}) + +---------------- +-- 로데브 -- +---------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "로데브" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "3초 후 치유 가능", + WarningHealNow = "치유 가능" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "치유 가능 이전에 알림 보기", + WarningHealNow = "치유 가능 알림 보기", + SporeDamageAlert = "포자에게 데미지를 주는 공격대원에게 귓속말 보내기 및 알리기\n(공대장 및 경보 권한이 있을 경우)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- 피조물 지구 -- +----------------- +----------------- +-- 패치워크 -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "패치워크" +}) + +L:SetOptionLocalization({ + WarningHateful = "증오의 일격 대상자를 공격대 채팅창에 알리기\n(만약 당신이 공대장의 권한이 있거나, 승급을 받은 유저라면 이 기능을 사용할 수 있습니다.)" +}) + +L:SetMiscLocalization({ + yell1 = "패치워크랑 놀아줘!", + yell2 = "켈투자드님이 패치워크 싸움꾼으로 만들었다.", + HatefulStrike = "증오의 일격 --> %s [%s]" +}) + +----------------- +-- 그라불루스 -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "그라불루스" +}) + +------------- +-- 글루스 -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "글루스" +}) + +---------------- +-- 타디우스 -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "타디우스" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "전하 변경 : %s", + WarningChargeNotChanged = "전하 유지됨" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "전하가 바뀐 경우 알림 보기", + WarningChargeNotChanged = "전하가 바뀌지 않을 경우 알림 보기", + ArrowsEnabled = "극성변환 후 화살표 보기(일반 \"2 지역\" 공략용)", + ArrowsRightLeft = "극성변환 후 오른쪽/왼쪽 화살표 보기(\"4 지역\" 공략용)", + ArrowsInverse = "극성변환 후 오른쪽/왼쪽 화살표를 반대로 보기(\"4 지역\" 공략용)" +}) + +L:SetMiscLocalization({ + Yell = "스탈라그, 박살낸다!", + Emote = "%s|1이;가; 과부하 상태가 됩니다.", + Emote2 = "테슬라 코일!!", + Boss1 = "퓨진", + Boss2 = "스탈라그", + Charge1 = "마이너스 전하", + Charge2 = "플러스 전하", + Arrows = "화살표" +}) + +----------------- +-- 군사 지구 -- +----------------- +--------------------------- +-- 훈련교관 라주비어스 -- +--------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "훈련교관 라주비어스" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "뼈 보호막 종료 5초 전" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "뼈 보호막 종료 알림 보기" +}) + +L:SetMiscLocalization({ + Yell1 = "절대 봐주지 마라!", + Yell2 = "훈련은 끝났다! 배운 걸 보여줘라!", + Yell3 = "훈련받은 대로 해!", + Yell4 = "다리를 후려 차라! 무슨 문제 있나?" +}) + +------------------------ +-- 영혼 착취자 고딕 -- +------------------------ +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "영혼 착취자 고딕" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "지원군 %d: %s 3초전", + WarningWaveSpawned = "지원군 %d: %s", + WarningRiderDown = "무자비한 죽음의 기병 처치", + WarningKnightDown = "무자비한 죽음의 기사 처치", + WarningPhase2 = "2 단계" +}) + +L:SetTimerLocalization({ + TimerWave = "지원군 #%d", + TimerPhase2 = "2 단계" +}) + +L:SetOptionLocalization({ + TimerWave = "다음 지원군 바 보기", + TimerPhase2 = "2 단계 바 보기", + WarningWaveSoon = "지원군 이전에 알림 보기", + WarningWaveSpawned = "지원군 알림 보기", + WarningRiderDown = "죽음의 기병 처치 알림 보기", + WarningKnightDown = "죽음의 기사 처치 알림 보기", + WarningPhase2 = "2 단계 알림 보기" +}) + +L:SetMiscLocalization({ + yell = "어리석은 것들, 스스로 죽음을 자초하다니!", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s, %d %s", + WarningWave3 = "%d %s, %d %s, %d %s", + Trainee = "|4수련생:수련생;", + Knight = "|4죽음의 기사:죽음의 기사;", + Rider = "|4죽음의 기병:죽음의 기병;" +}) + +-------------------- +-- 4인의 기사단 -- +-------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "4인의 기사단" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "3초 후 징표 #%d", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "징표 이전에 알림 보기", + SpecialWarningMarkOnPlayer = "징표가 4 중첩 이상시 특수 경고 보기" +}) + +L:SetMiscLocalization({ + Korthazz = "영주 코스아즈", + Rivendare = "남작 리븐데어", + Blaumeux = "여군주 블라미우스", + Zeliek = "젤리에크 경" +}) + +------------------- +-- 서리고룡 둥지 -- +------------------- +-------------- +-- 사피론 -- +-------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "사피론" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "비행 단계 10초 전", + WarningAirPhaseNow = "비행 단계", + WarningLanded = "착지", + WarningDeepBreath = "냉기 숨결!", + SpecWarnSapphLow = "사피론은 날지 못한다!" +}) + +L:SetTimerLocalization({ + TimerAir = "비행 단계 종료", + TimerLanding = "착지 중", + TimerIceBlast = "냉기 숨결" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "비행 단계 이전에 알림 보기", + WarningAirPhaseNow = "비행 단계 알림 보기", + WarningLanded = "지상 단계 알림 보기", + TimerAir = "비행 단계 유지시간 바 보기", + TimerLanding = "착지 중 바 보기", + TimerIceBlast = "냉기 숨결 시전 바 보기", + WarningDeepBreath = "냉기 숨결 특수 경고 보기", + SpecWarnSapphLow = "10% 실행 단계에 대한 특별 경고(공기 단계 취소)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "숨을 깊게 들이마십니다.", + AirPhase = "사피론이 공중으로 떠오릅니다!", + LandingPhase = "사피론이 다시 공격합니다!" +}) + +------------------ +-- 켈투자드 -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "켈투자드" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "10초 후 2 단계", + warnAddsSoon = "곧 얼음왕관의 수호자" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "2 단계" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "2 단계 바 보기", + specwarnP2Soon = "2 단계 10초 전에 특수 경고 보기", + warnAddsSoon = "얼음왕관의 수호자 이전에 알림 보기", + EqUneqWeaponsKT = "$spell:28410 전후에 자동으로 무기를 장착 해제하고 장착합니다. \"pve\"라는 장비 세트가 필요합니다.", + EqUneqWeaponsKT2 = "$spell:28410이 당신에게 시전되면 자동으로 무기를 장착 해제하고 장착합니다.", + RemoveBuffsOnMC = "$spell:28410를 시전하면 버프를 제거합니다. 각 옵션은 누적됩니다.", + Gift = "$spell:48469 / $spell:48470을 제거합니다. $spell:33786 저항을 방지하기 위한 최소한의 접근입니다.", + CCFree = "+ $spell:48169 / $spell:48170을 제거합니다. 그림자 학교의 주문 저항을 설명합니다.", + ShortOffensiveProcs = "+ 지속 시간이 짧은 공격 절차를 제거합니다. 공격대 피해 출력을 손상시키지 않으면서 공격대 안전을 위해 권장됩니다.", + MostOffensiveBuffs = "+ 대부분의 공격 버프를 제거합니다(주로 캐스터 및 |cFFFF7C0A야성 드루이드|r용). 손상 출력 손실로 최대 레이드 안전 및 자체 버프/변형이 필요합니다!" +}) + +L:SetMiscLocalization({ + Yell = "어둠의 문지기와 하수인, 그리고 병사들이여! 나 켈투자드가 부르니 명을 받들라!", + setMissing = "주목! DBM 자동 무기 해제/장착은 pve라는 장비 세트를 생성할 때까지 작동하지 않습니다.", + EqUneqLineDescription = "자동 장착/장비 해제" +}) diff --git a/DBM-VanillaNaxx/localization.ru.lua b/DBM-VanillaNaxx/localization.ru.lua new file mode 100644 index 00000000..0803fb94 --- /dev/null +++ b/DBM-VanillaNaxx/localization.ru.lua @@ -0,0 +1,389 @@ +if GetLocale() ~= "ruRU" then return end + +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "Ануб'Рекан" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "Отсчет времени для Арахнофобия (достижение)" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Арахнофобия", + Pull1 = "Бегите, бегите! Я люблю горячую кровь!", + Pull2 = "Посмотрим, какие вы на вкус!" +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "Великая вдова Фарлина" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "Объятие Вдовы через 5 секунд" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "Предупреждение, когда Объятие Вдовы исчезает" +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "Мексна" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "Паученыши Мексны через 5 секунд", + WarningSpidersNow = "В паутине появляются паучата" +}) + +L:SetTimerLocalization({ + TimerSpider = "Паученыши Мексны" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "Предупреждать перед следующим призывом Паученышей Мексны", + WarningSpidersNow = "Предупреждение для призыва Паученышей Мексны", + TimerSpider = "Отсчет времени до Паученышей Мексны" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "Арахнофобия" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "Нот Чумной" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Телепортация", + WarningTeleportSoon = "Телепортация через 10 секунд" +}) + +L:SetTimerLocalization({ + TimerTeleport = "Телепортация", + TimerTeleportBack = "Телепортация обратно" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Предупреждение о телепортации", + WarningTeleportSoon = "Предупреждать перед следующей телепортацией", + TimerTeleport = "Отсчет времени до телепортации", + TimerTeleportBack = "Отсчет времени до обратной телепортации" +}) + +L:SetMiscLocalization({ + Pull = "Смерть чужакам!", + Adds = "призывает скелетов-воинов!", + AddsTwo = "поднимает новых скелетов!" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "Хейган Нечестивый" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "Телепортация", + WarningTeleportSoon = "Телепортация через %d сек." +}) + +L:SetTimerLocalization({ + TimerTeleport = "Телепортация" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "Предупреждение о телепортации", + WarningTeleportSoon = "Предупреждать перед следующей телепортацией", + TimerTeleport = "Отсчет времени до телепортации" +}) + +L:SetMiscLocalization({ + Pull = "Теперь вы принадлежите мне!" +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "Лотхиб" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "Можно исцелять через 3 секунды", + WarningHealNow = "Исцеляйте сейчас" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "Предупреждать заранее перед 3-х секундным окном исцеления", + WarningHealNow = "Предупреждение для 3-х секундного окна исцеления", + SporeDamageAlert = "Сообщать шепотом и объявлять в рейд игроков, наносящих урон спорам\n(требуются права лидера или помощника)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "Лоскутик" +}) + +L:SetOptionLocalization({ + WarningHateful = "Объявлять цели под Ударом ненависти\n(требуются права лидера или помощника)" +}) + +L:SetMiscLocalization({ + yell1 = "Лоскутик хочет поиграть!", + yell2 = "Кел'Тузад объявил Лоскутика воплощением войны!", + HatefulStrike = "Удар ненависти --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "Гроббулус" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "Глут" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "Таддиус" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "Полярность изменена на %s", + WarningChargeNotChanged = "Полярность не изменена" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "Предупреждение, когда ваша полярность изменена", + WarningChargeNotChanged = "Предупреждение, когда ваша полярность не изменена", + ArrowsEnabled = "Отображать стрелки (обычная \"2-сторонняя\" стратегия)", + ArrowsRightLeft = "Стрелки влево/вправо для \"4-сторонней\" стратегии", + ArrowsInverse = "Обратная \"4-сторонняя\" стратегия (вправо, если полярность изменена, влево, если нет)" +}) + +L:SetMiscLocalization({ + Yell = "Сталагг сокрушить вас!", + Emote = "%s перезагружается!", + Emote2 = "Катушка Теслы перезагружается!", + Boss1 = "Фойген", + Boss2 = "Сталагг", + Charge1 = "отрицательную", + Charge2 = "положительную" +}) + +---------------------------- +-- Instructor Razuvious -- +---------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "Инструктор Разувий" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "Стена костей закончится через 5 секунд" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "Предупреждать о скором исчезновении Стены костей" +}) + +L:SetMiscLocalization({ + Yell1 = "Покажите мне, на что способны!", + Yell2 = "Обучение окончено! Покажите мне, что вы усвоили!", + Yell3 = "Вспомните, чему я вас учил!", + Yell4 = "Выше ногу! Или у тебя с этим проблемы?" +}) + +---------------------------- +-- Gothik the Harvester -- +---------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "Готик Жнец" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "Волна %d: %s через 3 секунды", + WarningWaveSpawned = "Волна %d: %s призван", + WarningRiderDown = "Всадник мертв", + WarningKnightDown = "Рыцарь мертв", + WarningPhase2 = "Фаза 2" +}) + +L:SetTimerLocalization({ + TimerWave = "Волна %d", + TimerPhase2 = "Фаза 2" +}) + +L:SetOptionLocalization({ + TimerWave = "Отсчет времени до волны", + TimerPhase2 = "Отсчет времени до фазы 2", + WarningWaveSoon = "Предупреждать перед следующей волной", + WarningWaveSpawned = "Предупреждение для волны призыва", + WarningRiderDown = "Предупреждение, когда всадник мертв", + WarningKnightDown = "Предупреждение, когда рыцарь мертв" +}) + +L:SetMiscLocalization({ + yell = "Глупо было искать свою смерть.", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s и %d %s", + WarningWave3 = "%d %s, %d %s и %d %s", + Trainee = "Ученика", + Knight = "Рыцаря", + Rider = "Всадника" +}) + +--------------------- +-- Four Horsemen -- +--------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "Четыре Всадника" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "Знак %d через 3 секунды", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "Предупреждать перед следующими знаками", + SpecialWarningMarkOnPlayer = "Спец-предупреждение, когда >4 знаков на вас" +}) + +L:SetMiscLocalization({ + Korthazz = "Тан Кортазз", + Rivendare = "Барон Ривендер", + Blaumeux = "Леди Бломе", + Zeliek = "Сэр Зелиек" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "Сапфирон" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "Воздушная фаза через 10 секунд", + WarningAirPhaseNow = "Воздушная фаза", + WarningLanded = "Сапфирон приземляется", + WarningDeepBreath = "Ледяное дыхание", + SpecWarnSapphLow = "У Сапфирона нет сил взлететь" +}) + +L:SetTimerLocalization({ + TimerAir = "Воздушная фаза", + TimerLanding = "Приземление", + TimerIceBlast = "Ледяное дыхание" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "Предупреждать о приближении Воздушной фазы", + WarningAirPhaseNow = "Объявлять Воздушную фазу", + WarningLanded = "Объявлять Наземную фазу", + TimerAir = "Отсчет времени до Воздушной фазы", + TimerLanding = "Отсчет времени до приземления", + TimerIceBlast = "Отсчет времени до Ледяного дыхания", + WarningDeepBreath = "Специальное объявление Ледяного Дыхания", + SpecWarnSapphLow = "Спец-предупреждения для 10% босса(отмена воздушной фазы)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s глубоко вдыхает.", + AirPhase = "Сапфирон взмывает в воздух!", + LandingPhase = "Сапфирон возобновляет свою атаку!" +}) + +------------------ +-- Kel'Thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "Кел'Тузад" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "Кел'Тузад вступает в бой через 10 секунд", + warnAddsSoon = "Скоро прибытие Стражей Ледяной Короны" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "Фаза 2" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "Отсчет времени до фазы 2", + specwarnP2Soon = "Спец-предупреждение за 10 секунд до вступления Кел'Тузада в бой", + warnAddsSoon = "Предупреждать заранее о Стражах Ледяной Короны", + EqUneqWeaponsKT = "Снимать/надевать оружия перед/после контроля по таймеру. Для надевания создайте компл. экип. \"pve\". Для снятия не нужен.", + EqUneqWeaponsKT2 = "Снимать/надевать оружия когда контроль кастуется в вас.", + RemoveBuffsOnMC = "Снимать баффы, когда на вас наложено заклинание $spell:28410. Каждый вариант является кумулятивным.", + Gift = "Снять $spell:48469 / $spell:48470. Минимальный подход для предотвращения сопротивления $spell:33786.", + CCFree = "+ Убрать $spell:48169 / $spell:48170. Учет сопротивлений заклинаний школы Теней.", + ShortOffensiveProcs = "+ Удалите атакующие заклинания с малой продолжительностью. Рекомендуется для безопасности рейда без ущерба для урона рейда.", + MostOffensiveBuffs = "+ Уберите большинство атакующих баффов (в основном для кастеров и |cFFFF7C0AСила зверя Друид|r). Максимальная безопасность рейда с потерей урона и необходимостью самовосстановления/перемещения!" +}) + +L:SetMiscLocalization({ + Yell = "Соратники, слуги, солдаты холодной тьмы! Повинуйтесь зову Кел'Тузада!", +-- YellMC1 = "Теперь твоя душа связана с моей!", +-- YellMC2 = "Тебе не уйти!", + setMissing = "ВНИМАНИЕ! DBM: автоматическое снимание/надевание оружия не будет работать пока вы не создадите набор экипировки pve", + EqUneqLineDescription = "Автоматическое оснащение/снятие оборудования" +}) diff --git a/DBM-VanillaNaxx/localization.tw.lua b/DBM-VanillaNaxx/localization.tw.lua new file mode 100644 index 00000000..7d282ef1 --- /dev/null +++ b/DBM-VanillaNaxx/localization.tw.lua @@ -0,0 +1,386 @@ +if GetLocale() ~= "zhTW" then return end +local L + +------------------- +-- Anub'Rekhan -- +------------------- +L = DBM:GetModLocalization("Anub'Rekhan-Vanilla") + +L:SetGeneralLocalization({ + name = "阿努比瑞克漢" +}) + +L:SetOptionLocalization({ + ArachnophobiaTimer = "為蜘蛛恐懼症(成就)顯示計時器" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "蜘蛛恐懼症", + Pull1 = "對,跑吧!那樣傷口出血就更多了!", + Pull2 = "一些小點心..." +}) + +---------------------------- +-- Grand Widow Faerlina -- +---------------------------- +L = DBM:GetModLocalization("Faerlina-Vanilla") + +L:SetGeneralLocalization({ + name = "大寡婦費琳娜" +}) + +L:SetWarningLocalization({ + WarningEmbraceExpire = "寡婦之擁5秒後結束" +}) + +L:SetOptionLocalization({ + WarningEmbraceExpire = "為寡婦之擁結束顯示預先警告" +}) + +--------------- +-- Maexxna -- +--------------- +L = DBM:GetModLocalization("Maexxna-Vanilla") + +L:SetGeneralLocalization({ + name = "梅克絲娜" +}) + +L:SetWarningLocalization({ + WarningSpidersSoon = "梅克絲娜之子5秒後出現", + WarningSpidersNow = "梅克絲娜之子出現了" +}) + +L:SetTimerLocalization({ + TimerSpider = "下一次梅克絲娜之子" +}) + +L:SetOptionLocalization({ + WarningSpidersSoon = "為梅克絲娜之子顯示預先警告", + WarningSpidersNow = "為梅克絲娜之子顯示警告", + TimerSpider = "為下一次梅克絲娜之子顯示計時器" +}) + +L:SetMiscLocalization({ + ArachnophobiaTimer = "蜘蛛恐懼症" +}) + +------------------------------ +-- Noth the Plaguebringer -- +------------------------------ +L = DBM:GetModLocalization("Noth-Vanilla") + +L:SetGeneralLocalization({ + name = "『瘟疫使者』諾斯" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "傳送", + WarningTeleportSoon = "10秒後傳送" +}) + +L:SetTimerLocalization({ + TimerTeleport = "傳送", + TimerTeleportBack = "傳送回來" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "為傳送顯示警告", + WarningTeleportSoon = "為傳送顯示預先警告", + TimerTeleport = "為傳送顯示計時器", + TimerTeleportBack = "為傳送回來顯示計時器" +}) + +L:SetMiscLocalization({ + Pull = "死吧,入侵者!", + Adds = "召喚了骷髏戰士!", + AddsTwo = "喚醒了更多骷髏!" +}) + +-------------------------- +-- Heigan the Unclean -- +-------------------------- +L = DBM:GetModLocalization("Heigan-Vanilla") + +L:SetGeneralLocalization({ + name = "『不潔者』海根" +}) + +L:SetWarningLocalization({ + WarningTeleportNow = "傳送", + WarningTeleportSoon = "%d秒後 傳送" +}) + +L:SetTimerLocalization({ + TimerTeleport = "傳送" +}) + +L:SetOptionLocalization({ + WarningTeleportNow = "為傳送顯示警告", + WarningTeleportSoon = "為傳送顯示預先警告", + TimerTeleport = "為傳送顯示計時器" +}) + +L:SetMiscLocalization({ + Pull = "你現在是我的了。" +}) + +--------------- +-- Loatheb -- +--------------- +L = DBM:GetModLocalization("Loatheb-Vanilla") + +L:SetGeneralLocalization({ + name = "憎恨者" +}) + +L:SetWarningLocalization({ + WarningHealSoon = "3秒後可以治療", + WarningHealNow = "現在治療" +}) + +L:SetOptionLocalization({ + WarningHealSoon = "為3秒後可以治療顯示預先警告", + WarningHealNow = "為現在治療顯示警告", + SporeDamageAlert = "在團隊中提示誰殺死了孢子並發送密語給兇手\n(需要團隊隊長或助理權限)", + CorruptedSorting = "Set infoframe sorting behaviour for $spell:55593", -- translation missing + Alphabetical = "Sort in alphabetical order", -- translation missing + Duration = "Sort by duration" -- translation missing +}) + +----------------- +-- Patchwerk -- +----------------- +L = DBM:GetModLocalization("Patchwerk-Vanilla") + +L:SetGeneralLocalization({ + name = "縫補者" +}) + +L:SetOptionLocalization({ + WarningHateful = "公佈憎恨打擊的目標到團隊頻道\n(需要團隊隊長或助理權限)" +}) + +L:SetMiscLocalization({ + yell1 = "縫補者要跟你玩!", + yell2 = "科爾蘇加德讓縫補者成為戰爭的化身!", + HatefulStrike = "憎恨打擊 --> %s [%s]" +}) + +----------------- +-- Grobbulus -- +----------------- +L = DBM:GetModLocalization("Grobbulus-Vanilla") + +L:SetGeneralLocalization({ + name = "葛羅巴斯" +}) + +------------- +-- Gluth -- +------------- +L = DBM:GetModLocalization("Gluth-Vanilla") + +L:SetGeneralLocalization({ + name = "古魯斯" +}) + +---------------- +-- Thaddius -- +---------------- +L = DBM:GetModLocalization("Thaddius-Vanilla") + +L:SetGeneralLocalization({ + name = "泰迪斯" +}) + +L:SetWarningLocalization({ + WarningChargeChanged = "極性變為%s", + WarningChargeNotChanged = "極性沒有改變" +}) + +L:SetOptionLocalization({ + WarningChargeChanged = "當你的極性改變時顯示特別警告", + WarningChargeNotChanged = "當你的極性沒有改變時顯示特別警告", + ArrowsEnabled = "顯示箭頭 (正常 \"二邊\" 站位打法)", + ArrowsRightLeft = "顯示左/右箭頭 給 \"四角\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示左箭頭)", + ArrowsInverse = "顯示倒轉的 \"四角\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示右箭頭)" +}) + +L:SetMiscLocalization({ + Yell = "斯塔拉格要碾碎你!", + Emote = "%s超過負荷!", + Emote2 = "泰斯拉線圈超過負荷!", + Boss1 = "伏晨", + Boss2 = "斯塔拉格", + Charge1 = "負極", + Charge2 = "正極" +}) + +---------------------------- +-- Instructor Razuvious -- +---------------------------- +L = DBM:GetModLocalization("Razuvious-Vanilla") + +L:SetGeneralLocalization({ + name = "講師拉祖維斯" +}) + +L:SetWarningLocalization({ + WarningShieldWallSoon = "5秒後盾牆結束" +}) + +L:SetOptionLocalization({ + WarningShieldWallSoon = "為盾牆結束顯示預先警告" +}) + +L:SetMiscLocalization({ + Yell1 = "絕不留情!", + Yell2 = "練習時間到此為止!都拿出真本事來!", + Yell3 = "照我教你的做!", + Yell4 = "絆腿……有什麼問題嗎?" +}) + +---------------------------- +-- Gothik the Harvester -- +---------------------------- +L = DBM:GetModLocalization("Gothik-Vanilla") + +L:SetGeneralLocalization({ + name = "『收割者』高希" +}) + +L:SetWarningLocalization({ + WarningWaveSoon = "3秒後第%d波: %s", + WarningWaveSpawned = "第%d波: %s出現了", + WarningRiderDown = "騎兵已死亡", + WarningKnightDown = "死亡騎士已死亡", + WarningPhase2 = "第二階段" +}) + +L:SetTimerLocalization({ + TimerWave = "第%d波", + TimerPhase2 = "第2階段" +}) + +L:SetOptionLocalization({ + TimerWave = "為下一波顯示計時器", + TimerPhase2 = "為第二階段顯示計時器", + WarningWaveSoon = "為波數顯示預先警告", + WarningWaveSpawned = "為波數出現顯示警告", + WarningRiderDown = "當無情的騎兵死亡時顯示警告", + WarningKnightDown = "當無情的死亡騎士死亡時顯示警告" +}) + +L:SetMiscLocalization({ + yell = "你們這些蠢貨已經主動步入了陷阱。", + WarningWave1 = "%d %s", + WarningWave2 = "%d %s 和 %d %s", + WarningWave3 = "%d %s, %d %s 和 %d %s", + Trainee = "受訓員", + Knight = "死亡騎士", + Rider = "騎兵" +}) + +--------------------- +-- Four Horsemen -- +--------------------- +L = DBM:GetModLocalization("Horsemen-Vanilla") + +L:SetGeneralLocalization({ + name = "四騎士" +}) + +L:SetWarningLocalization({ + WarningMarkSoon = "3秒後印記 %d", + SpecialWarningMarkOnPlayer = "%s: %s" +}) + +L:SetOptionLocalization({ + WarningMarkSoon = "為印記顯示預先警告", + SpecialWarningMarkOnPlayer = "當你印記堆疊多於四層時顯示特別警告" +}) + +L:SetMiscLocalization({ + Korthazz = "寇斯艾茲族長", + Rivendare = "瑞文戴爾男爵", + Blaumeux = "布洛莫斯女士", + Zeliek = "札里克爵士" +}) + +----------------- +-- Sapphiron -- +----------------- +L = DBM:GetModLocalization("Sapphiron-Vanilla") + +L:SetGeneralLocalization({ + name = "薩菲隆" +}) + +L:SetWarningLocalization({ + WarningAirPhaseSoon = "10秒後 空中階段", + WarningAirPhaseNow = "空中階段", + WarningLanded = "薩菲隆降落了", + WarningDeepBreath = "冰息術", + SpecWarnSapphLow = "薩菲隆不能飛!" +}) + +L:SetTimerLocalization({ + TimerAir = "空中階段", + TimerLanding = "降落", + TimerIceBlast = "冰息術" +}) + +L:SetOptionLocalization({ + WarningAirPhaseSoon = "為空中階段顯示預先警告", + WarningAirPhaseNow = "提示空中階段", + WarningLanded = "提示地上階段", + TimerAir = "為空中階段顯示計時器", + TimerLanding = "為降落顯示計時器", + TimerIceBlast = "為冰息術顯示計時器", + WarningDeepBreath = "為冰息術顯示特別警告", + SpecWarnSapphLow = "10%執行階段特別警告(取消空中階段)" +}) + +L:SetMiscLocalization({ + EmoteBreath = "%s深深地吸了一口氣。", + AirPhase = "薩菲隆離地升空了!", + LandingPhase = "薩菲隆重新開始攻擊!" +}) + +------------------ +-- Kel'Thuzad -- +------------------ +L = DBM:GetModLocalization("Kel'Thuzad-Vanilla") + +L:SetGeneralLocalization({ + name = "科爾蘇加德" +}) + +L:SetWarningLocalization({ + specwarnP2Soon = "10秒後科爾蘇加德開始攻擊", + warnAddsSoon = "寒冰皇冠守護者即將出現" +}) + +L:SetTimerLocalization({ + TimerPhase2 = "第二階段" +}) + +L:SetOptionLocalization({ + TimerPhase2 = "為第二階段顯示計時器", + specwarnP2Soon = "為科爾蘇加德攻擊前10秒顯示特別警告", + warnAddsSoon = "為寒冰皇冠守護者顯示預先警告", + EqUneqWeaponsKT = "在 $spell:28410 之前和之後自動取消裝備和裝備武器。 需要名為“pve”的裝備套裝", + EqUneqWeaponsKT2 = "對你施放 $spell:28410 時自動解除和裝備武器", + RemoveBuffsOnMC = "當 $spell:28410 對你施放時移除增益。每個選項都是累積的。", + Gift = "移除 $spell:48469 / $spell:48470。防止 $spell:33786 抵抗的最小方法。", + CCFree = "+ 移除 $spell:48169 / $spell:48170。說明影子學派的法術抗性。", + ShortOffensiveProcs = "+ 移除持續時間較短的攻擊性觸發。推薦用於團隊安全而不影響團隊傷害輸出。", + MostOffensiveBuffs = "+ 移除大部分攻擊性增益(主要針對施法者和 |cFFFF7C0A野性戰鬥德魯伊|r)。最大的團隊安全性,損失輸出並需要自我反擊/變形!" +}) + +L:SetMiscLocalization({ + Yell = "僕從們,侍衛們,隸屬於黑暗與寒冷的戰士們!聽從科爾蘇加德的召喚!", + setMissing = "注意力! 在您創建名為 pve 的裝備集之前,DBM 自動武器卸載/裝備將不起作用", + EqUneqLineDescription = "自動裝備/取消裝備" +}) diff --git a/DBM-VanillaOnyxia/DBM-VanillaOnyxia.toc b/DBM-VanillaOnyxia/DBM-VanillaOnyxia.toc index 35a171ef..db8735bc 100644 --- a/DBM-VanillaOnyxia/DBM-VanillaOnyxia.toc +++ b/DBM-VanillaOnyxia/DBM-VanillaOnyxia.toc @@ -1,13 +1,13 @@ ## Interface: 30300 ## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxia (Vanilla)|r -## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Repaire d'Onyxia (Vanilla)|r -## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ониксия (Vanilla)|r +## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Repaire d'Onyxia (Classique)|r +## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ониксия (классический)|r ## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia (Vanilla)|r ## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia (Vanilla)|r ## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奧妮克希亞 (Vanilla)|r ## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奥妮克希亚 (Vanilla)|r -## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0오닉시아| (Vanilla)r -## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxias Hort| (Vanilla)r +## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0오닉시아 (클래식)|r +## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxias Hort (Vanilla)|r ## LoadOnDemand: 1 ## RequiredDeps: DBM-Core ## SavedVariables: DBMVanillaOnyxia_AllSavedVars @@ -20,13 +20,13 @@ ## X-DBM-Mod-MapID: 719 ## X-DBM-Mod-LoadRealm: Onyxia ## X-DBM-Mod-Name: Onyxia's Lair (Vanilla) -## X-DBM-Mod-Name-frFR: Repaire d'Onyxia (Vanilla) -## X-DBM-Mod-Name-ruRU: Логово Ониксии (Vanilla) -## X-DBM-Mod-Name-esES: Guarida de Onyxia (Vanilla) -## X-DBM-Mod-Name-esMX: Guarida de Onyxia (Vanilla) +## X-DBM-Mod-Name-frFR: Repaire d'Onyxia (Classique) +## X-DBM-Mod-Name-ruRU: Логово Ониксии (классический) +## X-DBM-Mod-Name-esES: Guarida de Onyxia (Clásico) +## X-DBM-Mod-Name-esMX: Guarida de Onyxia (Clásico) ## X-DBM-Mod-Name-zhTW: 奧妮克希亞 (Vanilla) ## X-DBM-Mod-Name-zhCN: 奥妮克希亚的巢穴 (Vanilla) -## X-DBM-Mod-Name-koKR: 오닉시아 (Vanilla) +## X-DBM-Mod-Name-koKR: 오닉시아 (클래식) ## X-DBM-Mod-Name-deDE: Onyxias Hort (Vanilla) ## X-DBM-Mod-LoadZone: Onyxia's Lair ## X-DBM-Mod-LoadZone-frFR: Repaire d'Onyxia