This commit is contained in:
Andrew6810
2022-10-21 06:50:13 -07:00
parent 8571e98fb1
commit 39c0ed874e
466 changed files with 52263 additions and 2 deletions
+45
View File
@@ -0,0 +1,45 @@
local mod = DBM:NewMod("Ayamiss", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 171 $"):sub(12, -3))
mod:SetCreatureID(15369)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"PLAYER_ALIVE"
)
local warnPhase2 = mod:NewPhaseAnnounce(2)
local warnParalyze = mod:NewTargetAnnounce(25725, 3)
local timerParalyze = mod:NewTargetTimer(30, 25725)
local warned_P2 = false
function mod:OnCombatStart(delay)
warned_P2 = false
self.vb.phase = 1
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(25725) then
warnParalyze:Show(args.destName)
timerParalyze:Start(args.destName)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(25725) then
timerParalyze:Cancel()
end
end
function mod:UNIT_HEALTH(uId)
if not warned_P2 and self:GetUnitCreatureId(uId) == 15369 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then
warned_P2 = true
warnPhase2:Show()
self.vb.phase = 2
end
end
+50
View File
@@ -0,0 +1,50 @@
local mod = DBM:NewMod("Buru", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 156 $"):sub(12, -3))
mod:SetCreatureID(15370)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"CHAT_MSG_MONSTER_EMOTE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"PLAYER_ALIVE"
)
local warnPursue = mod:NewAnnounce("WarnPursue", 3)
local specWarnPursue = mod:NewSpecialWarning("SpecWarnPursue")
local berserkTimer = mod:NewBerserkTimer(600)
local specWarnWeakened = mod:NewSpecialWarning("Buru is Weakened!", nil, "Special warning for Buru's weakened phase")
local eggsDead
function mod:OnCombatStart(delay)
berserkTimer:Start()
eggsDead = 0
end
function mod:CHAT_MSG_MONSTE_EMOTE(msg)
if not msg then return end
local _, target = msg.find(L.PursueEmote)
if target then
warnPursue:Show(target)
if target == UnitName("player") then
specWarnPursue:Show()
end
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1002041) then
specWarnWeakened:Show();
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(1002041) then -- Miasma (Eye Tentacles)
specWarnWeakened:Show();
end
end
+32
View File
@@ -0,0 +1,32 @@
## Interface: 30300
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruins of Ahn'Qiraj|r
## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruinas de Ahn'Qiraj|r
## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Руины Ан'Киража|r
## LoadOnDemand: 1
## RequiredDeps: DBM-Core
## SavedVariablesPerCharacter: DBMAQ20_SavedVars, DBMAQ20_SavedStats
## X-DBM-Mod: 1
## X-DBM-Mod-Category: Vanilla
## X-DBM-Mod-Has-Heroic-Mode: 0
## X-DBM-Mod-Name: The Ruins of Ahn'Qiraj
## X-DBM-Mod-Name-esES: Ruinas de Ahn'Qiraj
## X-DBM-Mod-Name-ruRU: Руины Ан'Киража
## X-DBM-Mod-Sort: 114
## X-DBM-Mod-LoadZone: Nitram,Ruins of Ahn'Qiraj
## X-DBM-Mod-LoadZone-esES: Nitram,Ruinas de Ahn'Qiraj
## X-DBM-Mod-LoadZone-ruRU: Nitram,Руины Ан'Киража
## X-DBM-Mod-LoadZone-frFR: Nitram,Ruines d'Ahn'Qiraj
## X-DBM-Mod-LoadZone-esMX: Nitram,Ruinas de Ahn'Qiraj
## X-DBM-Mod-LoadZone-zhTW: 安其拉廢墟
## X-DBM-Mod-LoadZone-zhCN: 安其拉废墟
## X-DBM-Mod-LoadZone-koKR: 안퀴라즈 폐허
## X-DBM-Mod-LoadZone-deDE: Nitram,Ruinen von Ahn'Qiraj
localization.en.lua
localization.es.lua
localization.ru.lua
Kurinnaxx.lua
Rajaxx.lua
Moam.lua
Buru.lua
Ayamiss.lua
Ossirian.lua
+76
View File
@@ -0,0 +1,76 @@
local mod = DBM:NewMod("Kurinnaxx", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 167 $"):sub(12, -3))
mod:SetCreatureID(15348)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"UNIT_HEALTH",
"PLAYER_ALIVE"
)
local hpCounter
local prewarnEnrage = mod:NewAnnounce("Soft Enrage Soon", 3, 1002069)
local warnAdds = mod:NewAnnounce("Adds Spawned", 2, 985050)
local warnEnrage = mod:NewAnnounce("Soft Enrage", 2, 1002069)
local timerAdds = mod:NewTimer(3, "Adds Spawn", 985050)
function mod:OnCombatStart(delay)
hpCounter = 0
end
function mod:preEnrage()
prewarnEnrage:Show()
end
function mod:alertEnrage()
warnEnrage:Show()
end
function mod:alertAdds()
warnAdds:Show()
end
function mod:addSpawn()
timerAdds:Show()
self:ScheduleMethod(3, "alertAdds")
end
function mod:UNIT_HEALTH(args)
kuriHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if kuriHealth <= 90 and hpCounter == 0 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 1
elseif kuriHealth <= 80 and hpCounter == 1 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 2
elseif kuriHealth == 70 and hpCounter == 2 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 3
elseif kuriHealth == 60 and hpCounter == 3 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 4
elseif kuriHealth == 50 and hpCounter == 4 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 5
elseif kuriHealth == 40 and hpCounter == 5 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 6
elseif kuriHealth == 35 and hpCounter == 6 then
self:ScheduleMethod(0, "preEnrage")
hpCounter = 7
elseif kuriHealth == 30 and hpCounter == 7 then
self:ScheduleMethod(0, "addSpawn")
self:ScheduleMethod(0, "warnEnrage")
hpCounter = 8
elseif kuriHealth == 20 and hpCounter == 8 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 9
elseif kuriHealth == 10 and hpCounter == 9 then
self:ScheduleMethod(0, "addSpawn")
hpCounter = 10
end
end
+15
View File
@@ -0,0 +1,15 @@
local mod = DBM:NewMod("Moam", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15340)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE"
)
function mod:OnCombatStart(delay)
end
+63
View File
@@ -0,0 +1,63 @@
local mod = DBM:NewMod("Ossirian", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 175 $"):sub(12, -3))
mod:SetCreatureID(15339)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE"
)
local prewarnVoid = mod:NewAnnounce("Void Singularity Soon", 3, 1002140)
local prewarnAdds = mod:NewAnnounce("Adds Soon", 3, 1002126)
local warnVoid = mod:NewAnnounce("Void Singularity Spawned", 2, 1002140)
local warnAdds = mod:NewAnnounce("Adds Spawned", 2, 1002126)
local timerVoid = mod:NewTimer(45, "Void Singularity Spawn", 1002140)
local timerAdds = mod:NewTimer(15, "Next Add Wave", 1002126)
function mod:preVoid()
prewarnVoid:Show()
end
function mod:preAdds()
prewarnAdds:Show()
end
function mod:alertVoid()
warnVoid:Show()
end
function mod:alertAdds()
warnAdds:Show()
end
function mod:OnCombatStart(delay)
self:ScheduleMethod(0-delay, "initialAdds")
self:ScheduleMethod(0-delay, "repeatVoid")
end
function mod:initialAdds()
timer1 = 10
timerAdds:Show(timer1)
self:ScheduleMethod(timer1-5, "preAdds")
self:ScheduleMethod(timer1, "alertAdds")
self:ScheduleMethod(timer1, "repeatAdds")
end
function mod:repeatAdds()
timer2 = 15
timerAdds:Show(timer2)
self:ScheduleMethod(timer2-5, "preAdds")
self:ScheduleMethod(timer2, "alertAdds")
self:ScheduleMethod(timer2, "repeatAdds")
end
function mod:repeatVoid()
timer4 = 45
timerVoid:Show(timer4)
self:ScheduleMethod(timer4-5, "preVoid")
self:ScheduleMethod(timer4, "alertVoid")
self:ScheduleMethod(timer4, "repeatVoid")
end
+36
View File
@@ -0,0 +1,36 @@
local mod = DBM:NewMod("Rajaxx", "DBM-AQ20", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 171 $"):sub(12, -3))
mod:SetCreatureID(15341)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE"
)
function mod:OnCombatStart(delay)
end
local specWarnSpellReflect = mod:NewSpecialWarning("Spell Reflect: Stop Casting", nil, "Special warning for Spell Reflect") --4500009)
local warnSpellReflect = mod:NewSpellAnnounce(1002113)
local warnLust = mod:NewSpellAnnounce(1002090, 4)
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1002113) then
warnSpellReflect:Show()
specWarnSpellReflect:Show()
elseif args:IsSpellID(1002090) then
warnLust:Show()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(1002090) then
warnLust:Show()
end
end
+100
View File
@@ -0,0 +1,100 @@
local L
---------------
-- Kurinnaxx --
---------------
L = DBM:GetModLocalization("Kurinnaxx")
L:SetGeneralLocalization{
name = "Kurinnaxx"
}
L:SetWarningLocalization{
WarnWound = "%s on >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown"),
}
------------
-- Rajaxx --
------------
L = DBM:GetModLocalization("Rajaxx")
L:SetGeneralLocalization{
name = "General Rajaxx"
}
L:SetWarningLocalization{
WarnWave = "Wave %s",
WarnBoss = "Boss incoming"
}
L:SetOptionLocalization{
WarnWave = "Show announce for next incoming wave"
}
L:SetMiscLocalization{
NpcPull = "They come now. Try not to get yourself killed, young blood.",
Wave1 = "Remember, Rajaxx, when I said I'd kill you last?",
Wave3 = "The time of our retribution is at hand! Let darkness reign in the hearts of our enemies!",
Wave4 = "No longer will we wait behind barred doors and walls of stone! No longer will our vengeance be denied! The dragons themselves will tremble before our wrath!",
Wave5 = "Fear is for the enemy! Fear and death!",
Wave6 = "Staghelm will whimper and beg for his life, just as his whelp of a son did! One thousand years of injustice will end this day!",
Wave7 = "Fandral! Your time has come! Go and hide in the Emerald Dream and pray we never find you!",
Wave8 = "Impudent fool! I will kill you myself!"
}
----------
-- Moam --
----------
L = DBM:GetModLocalization("Moam")
L:SetGeneralLocalization{
name = "Moam"
}
----------
-- Buru --
----------
L = DBM:GetModLocalization("Buru")
L:SetGeneralLocalization{
name = "Buru the Gorger"
}
L:SetWarningLocalization{
WarnPursue = "Pursue on >%s<",
SpecWarnPursue = "Pursue on you",
WarnDismember = "%s on >%s< (%s)"
}
L:SetOptionLocalization{
WarnPursue = "Announce pursue targets",
SpecWarnPursue = "Show special warning when you are being pursued",
WarnDismember = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(96, GetSpellInfo(96) or "unknown"),
}
L:SetMiscLocalization{
PursueEmote = "%s sets eyes on %s!"
}
-------------
-- Ayamiss --
-------------
L = DBM:GetModLocalization("Ayamiss")
L:SetGeneralLocalization{
name = "Ayamiss the Hunter"
}
--------------
-- Ossirian --
--------------
L = DBM:GetModLocalization("Ossirian")
L:SetGeneralLocalization{
name = "Ossirian the Unscarred"
}
L:SetWarningLocalization{
WarnVulnerable = "%s"
}
L:SetTimerLocalization{
TimerVulnerable = "%s"
}
L:SetOptionLocalization{
WarnVulnerable = "Announce weaknesses",
TimerVulnerable = "Show timer for weaknesses"
}
+98
View File
@@ -0,0 +1,98 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
local L
---------------
-- Kurinnaxx --
---------------
L = DBM:GetModLocalization("Kurinnaxx")
L:SetGeneralLocalization{
name = "Kurinnaxx"
}
L:SetWarningLocalization{
WarnWound = "%s en >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown"),
}
------------
-- Rajaxx --
------------
L = DBM:GetModLocalization("Rajaxx")
L:SetGeneralLocalization{
name = "General Rajaxx"
}
L:SetWarningLocalization{
WarnWave = "Oleada %s",
WarnBoss = "Sale Boss"
}
L:SetOptionLocalization{
WarnWave = "Mostrar aviso para oleada siguiente"
}
L:SetMiscLocalization{
Wave1 = "They come now. Try not to get yourself killed, young blood.", --translate
Wave3 = "The time of our retribution is at hand! Let darkness reign in the hearts of our enemies!", --translate
Wave4 = "No longer will we wait behind barred doors and walls of stone! No longer will our vengeance be denied! The dragons themselves will tremble before our wrath!", --translate
Wave5 = "Fear is for the enemy! Fear and death!", --translate
Wave6 = "Staghelm will whimper and beg for his life, just as his whelp of a son did! One thousand years of injustice will end this day!", --translate
Wave7 = "Fandral! Your time has come! Go and hide in the Emerald Dream and pray we never find you!", --translate
Wave8 = "Impudent fool! I will kill you myself!" --translate
}
----------
-- Moam --
----------
L = DBM:GetModLocalization("Moam")
L:SetGeneralLocalization{
name = "Moam"
}
----------
-- Buru --
----------
L = DBM:GetModLocalization("Buru")
L:SetGeneralLocalization{
name = "Buru el Manducador"
}
L:SetWarningLocalization{
WarnPursue = "Persigue a >%s<",
SpecWarnPursue = "Te persigue a ti"
}
L:SetOptionLocalization{
WarnPursue = "Anunciar los objetivos perseguidos",
SpecWarnPursue = "Mostrar aviso especial cuando te persigan"
}
L:SetMiscLocalization{
PursueEmote = "%s fija su mirada en %s!"
}
-------------
-- Ayamiss --
-------------
L = DBM:GetModLocalization("Ayamiss")
L:SetGeneralLocalization{
name = "Ayamiss el Cazador"
}
--------------
-- Ossirian --
--------------
L = DBM:GetModLocalization("Ossirian")
L:SetGeneralLocalization{
name = "Osirio el Sinmarcas"
}
L:SetWarningLocalization{
WarnVulnerable = "%s"
}
L:SetTimerLocalization{
TimerVulnerable = "%s"
}
L:SetOptionLocalization{
WarnVulnerable = "Anunciar Debilidad",
TimerVulnerable = "Mostrar tiempo para Debilidad"
}
+99
View File
@@ -0,0 +1,99 @@
if GetLocale() ~= "ruRU" then return end
local L
---------------
-- Kurinnaxx --
---------------
L = DBM:GetModLocalization("Kurinnaxx")
L:SetGeneralLocalization{
name = "Куриннакс"
}
L:SetWarningLocalization{
WarnWound = "%s на >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown"),
}
------------
-- Rajaxx --
------------
L = DBM:GetModLocalization("Rajaxx")
L:SetGeneralLocalization{
name = "Генерал Раджакс"
}
L:SetWarningLocalization{
WarnWave = "Волна %s",
WarnBoss = "Появление босса"
}
L:SetOptionLocalization{
WarnWave = "Показывать предупреждение о следующей волне"
}
L:SetMiscLocalization{
Wave1 = "They come now. Try not to get yourself killed, young blood.",
Wave3 = "The time of our retribution is at hand! Let darkness reign in the hearts of our enemies!",
Wave4 = "No longer will we wait behind barred doors and walls of stone! No longer will our vengeance be denied! The dragons themselves will tremble before our wrath!",
Wave5 = "Fear is for the enemy! Fear and death!",
Wave6 = "Staghelm will whimper and beg for his life, just as his whelp of a son did! One thousand years of injustice will end this day!",
Wave7 = "Fandral! Your time has come! Go and hide in the Emerald Dream and pray we never find you!",
Wave8 = "Impudent fool! I will kill you myself!"
}
----------
-- Moam --
----------
L = DBM:GetModLocalization("Moam")
L:SetGeneralLocalization{
name = "Моам"
}
----------
-- Buru --
----------
L = DBM:GetModLocalization("Buru")
L:SetGeneralLocalization{
name = "Буру Ненасытный"
}
L:SetWarningLocalization{
WarnPursue = "Преследует >%s<",
SpecWarnPursue = "Преследует вас!"
}
L:SetOptionLocalization{
WarnPursue = "Называть преследуемые цели",
SpecWarnPursue = "Показывать специальное предупреждение, когда преследование на вас"
}
L:SetMiscLocalization{
PursueEmote = "%s sets eyes on %s!"
}
-------------
-- Ayamiss --
-------------
L = DBM:GetModLocalization("Ayamiss")
L:SetGeneralLocalization{
name = "Аямисса Охотница"
}
--------------
-- Ossirian --
--------------
L = DBM:GetModLocalization("Ossirian")
L:SetGeneralLocalization{
name = "Оссириан Неуязвимый"
}
L:SetWarningLocalization{
WarnVulnerable = "%s"
}
L:SetTimerLocalization{
TimerVulnerable = "%s"
}
L:SetOptionLocalization{
WarnVulnerable = "Объявлять слабость",
TimerVulnerable = "Показывать таймер до слабости"
}
+497
View File
@@ -0,0 +1,497 @@
local mod = DBM:NewMod("CThun", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15727, 15589)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_SUMMON",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_DIED",
"PLAYER_ALIVE",
"SPELL_PERIODIC_DAMAGE",
"SPELL_PERIODIC_HEAL",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_CAST_START"
)
----------Pre-warnings----------
local prewarnEyeTentacleShadow = mod:NewAnnounce("Eye Tentacles: Shadow Soon", 3, 4500000)
local prewarnEyeTentacleFire = mod:NewAnnounce("Eye Tentacles: Fire Soon", 3, 4500054)
local prewarnEyeTentacleNature = mod:NewAnnounce("Eye Tentacles: Nature Soon", 3, 4500061)
local prewarnLookAway = mod:NewAnnounce("Look Away Soon", 3, 4500009)
local prewarnDarkGlare = mod:NewAnnounce("Dark Glare Soon", 3, 26029)
local prewarnManipulator = mod:NewAnnounce("Manipulator Tentacle Soon", 3, 4500067)
local prewarnDevastator = mod:NewAnnounce("Devastator Tentacle Soon", 3, 4500007)
local prewarnMalignant = mod:NewAnnounce("Malignant Tentacle Soon", 3, 4500053)
local prewarnGiantEye = mod:NewAnnounce("Giant Eye Tentacle Soon", 3, 4500060)
local prewarnGiantClaw = mod:NewAnnounce("Giant Claw Tentacle Soon", 3, 6524)
local prewarnStomach = mod:NewAnnounce("Stomach Phase Soon", 3, 26476)
----------Warnings----------
local warnEyeTentacleShadow = mod:NewAnnounce("Eye Tentacles Spawned: Shadow", 2, 4500000)
local warnEyeTentacleFire = mod:NewAnnounce("Eye Tentacles Spawned: Fire", 2, 4500054)
local warnEyeTentacleNature = mod:NewAnnounce("Eye Tentacles Spawned: Nature", 2, 4500061)
local warnDarkGlare = mod:NewTargetAnnounce(26029, 4)
local warnEldritch = mod:NewSpellAnnounce(4500009, 4)
local warnManipulator = mod:NewAnnounce("Manipulator Tentacle Spawned", 2, 4500067)
local warnDevastator = mod:NewAnnounce("Devastator Tentacle Spawned", 2, 4500007)
local warnMalignant = mod:NewAnnounce("Malignant Tentacle Spawned", 2, 4500053)
local warnGiantEyeTentacle = mod:NewAnnounce("Giant Eye Tentacle Spawned", 2, 4500060)
local warnGiantClawTentacle = mod:NewAnnounce("Giant Claw Tentacle Spawned", 2, 6524)
local warnWeakened = mod:NewAnnounce("C'thun is Weakened!", 4, 25383)
local warnStomach = mod:NewAnnounce("Stomach Phase Now", 2, 26476)
local warnPhase2 = mod:NewPhaseAnnounce(2)
----------Timers----------
local timerDarkGlareCD = mod:NewCDTimer(87.5, 26029)
local timerDarkGlare = mod:NewTimer(37.5, "Dark Glare: Time Remaining", 26029)
local timerEldritch = mod:NewTimer(5, "LOOK AWAY", 4500009)
local timerEldritchCD = mod:NewCDTimer(30, 4500009)
local timerEyeTentacleShadow = mod:NewTimer(45, "Eye Tentacles: Shadow", 4500000)
local timerEyeTentacleFire = mod:NewTimer(45, "Eye Tentacles: Fire", 4500054)
local timerEyeTentacleNature = mod:NewTimer(45, "Eye Tentacles: Nature", 4500061)
local timerStomach = mod:NewTimer(21, "Enter Stomach", 26476)
local timerGiantEyeTentacle = mod:NewTimer(44, "Giant Eye Tentacle", 4500060)
local timerGiantClawTentacle = mod:NewTimer(14, "Giant Claw Tentacle", 6524)
local timerWeakened = mod:NewTimer(30, "Weakened: Time Remaining", 25383)
local timerManipulator = mod:NewTimer(15, "Manipulator Tentacle", 4500067)
local timerDevastator = mod:NewTimer(15, "Devastator Tentacle", 4500007)
local timerMalignant = mod:NewTimer(15, "Malignant Tentacle", 4500053)
----------Misc----------
mod:AddBoolOption("RangeFrame", true)
local etent
local lasttent
local phase
local miniadd
local eldfixglare
----------JuniorStuff----------
local specWarnEradicate = mod:NewSpecialWarning("Eradicate damage too high!", nil, "Special warning when taking >1000 damage from Eradicate", true) -- 4500054
local specWarnConsume = mod:NewSpecialWarning("Consume healing too high!", nil, "Special warning when healing >4000 from Consume Essence", true) -- 4500061
local specWarnMiasma = mod:NewSpecialWarningMove(4500001, true, "Special warning when standing in Miasma", true)
local warnMalignantGrasp = mod:NewAnnounce("%s Grabbed!", 4, nil, nil, "Announce when someone within 28 yards is grabbed by a Malignant Tentacle")
local specWarnRevelations = mod:NewSpecialWarning("Look Away", nil, "Special warning for Eldritch Revelations cast") --4500009)
local specWarnSensoryOverload = mod:NewSpecialWarningYou(4500068)
local specWarnDigestiveAcid = mod:NewSpecialWarningStack(26476, nil, 4) --(mod.Options.NumAcidStacks or 4))
----------PreWarning Functions----------
function mod:preShadow()
prewarnEyeTentacleShadow:Show()
end
function mod:preFire()
prewarnEyeTentacleFire:Show()
end
function mod:preNature()
prewarnEyeTentacleNature:Show()
end
function mod:preStomach()
prewarnStomach:Show()
end
function mod:preGiantClaw()
prewarnGiantClaw:Show()
end
function mod:preGiantEye()
prewarnGiantEye:Show()
end
function mod:preGlare()
prewarnDarkGlare:Show()
end
function mod:preFear()
if phase == 1 then
prewarnLookAway:Show()
end
end
function mod:preManipulator()
prewarnManipulator:Show()
end
function mod:preDevastator()
prewarnDevastator:Show()
end
function mod:preMalignant()
prewarnMalignant:Show()
end
----------Alert Functions----------
function mod:alertShadow()
warnEyeTentacleShadow:Show()
lasttent = 1
end
function mod:alertFire()
warnEyeTentacleFire:Show()
lasttent = 2
end
function mod:alertNature()
warnEyeTentacleNature:Show()
lasttent = 3
end
function mod:alertStomach()
warnStomach:Show()
end
function mod:alertGiantClaw()
warnGiantClawTentacle:Show()
end
function mod:alertGiantEye()
warnGiantEyeTentacle:Show()
end
function mod:alertGlare()
warnDarkGlare:Show()
end
function mod:alertFear()
if phase == 1 then
warnEldritch:Show()
end
end
function mod:alertManipulator()
warnManipulator:Show()
end
function mod:alertDevastator()
warnDevastator:Show()
end
function mod:alertMalignant()
warnMalignant:Show()
end
----------Real Functions----------
function mod:OnCombatStart(delay)
phase = 1
self.vb.phase = 1
etent = 1
lasttent = 3
miniadd = 1
eldfixglare = 1
self:ScheduleMethod(0-delay, "eldFearInitial")
self:ScheduleMethod(0-delay, "darkGlareInitial")
self:ScheduleMethod(0-delay, "eyeTentacle")
-- self:ScheduleMethod(0-delay, "miniAddInitial")
if self.Options.RangeFrame then
DBM.RangeCheck:Show(13)
end
end
--function mod:miniAddInitial()
-- local timer14 = 10
-- timerDevastator:Start(timer14)
-- miniadd = 2
-- self:ScheduleMethod(timer14-5, "warnDevastator")
-- self:ScheduleMethod(timer14, "alertDevastator")
-- self:ScheduleMethod(timer14, "miniAdd")
--end
--function mod:miniAdd()
-- local timer15 = 15
--end
function mod:eyeTentacle()
local timer1 = 45
if etent == 1 then
timerEyeTentacleShadow:Start(timer1)
self:ScheduleMethod(timer1-5, "preShadow")
self:ScheduleMethod(timer1, "alertShadow")
etent = 2
elseif etent == 2 then
timerEyeTentacleFire:Start(timer1)
self:ScheduleMethod(timer1-5, "preFire")
self:ScheduleMethod(timer1, "alertFire")
etent = 3
elseif etent == 3 then
timerEyeTentacleNature:Start(timer1)
self:ScheduleMethod(timer1-5, "preNature")
self:ScheduleMethod(timer1, "alertNature")
etent = 1
end
self:ScheduleMethod(timer1, "eyeTentacle")
end
function mod:darkGlareInitial()
local timer11 = 50
timerDarkGlareCD:Start(timer11)
self:ScheduleMethod(timer11-5, "preGlare")
self:ScheduleMethod(timer11, "alertGlare")
end
function mod:darkGlare()
local timer10 = 87.5
timerDarkGlare:Start()
timerDarkGlareCD:Start(timer10)
self:ScheduleMethod(timer10-5, "preGlare")
self:ScheduleMethod(timer10, "alertGlare")
end
function mod:eldFearInitial()
if phase == 1 then
local timer13 = 30
timerEldritchCD:Start(timer13)
self:ScheduleMethod(timer13-5, "preFear")
self:ScheduleMethod(timer13, "alertFear")
end
end
function mod:eldFear()
if phase == 1 then
local timer12 = 30
if eldfixglare == 1 then
timerEldritch:Start()
elseif eldfixglare == 2 then
self:ScheduleMethod(timer12-5, "eldFearGlareFix")
end
timerEldritchCD:Start(timer12)
self:ScheduleMethod(timer12-5, "preFear")
self:ScheduleMethod(timer12, "alertFear")
end
end
function mod:eldFearGlareFix()
eldfixglare = 1
end
function mod:enterStomach()
local timer2a = 20
local timer2b = 10
if mod:IsDifficulty("heroic10") then
timerStomach:Start(timer2a)
self:ScheduleMethod(timer2a-5, "preStomach")
self:ScheduleMethod(timer2a, "alertStomach")
self:ScheduleMethod(timer2a, "enterStomach")
elseif mod:IsDifficulty("heroic25") then
timerStomach:Start(timer2b)
self:ScheduleMethod(timer2b-5, "preStomach")
self:ScheduleMethod(timer2b, "alertStomach")
self:ScheduleMethod(timer2b, "enterStomach")
end
end
function mod:stomachWeaknessFix()
local timer4a = 15
local timer4b = 5
if mod:IsDifficulty("heroic10") then
timerStomach:Start(timer4a)
self:ScheduleMethod(timer4a-5, "preStomach")
self:ScheduleMethod(timer4a, "alertStomach")
self:ScheduleMethod(timer4a, "enterStomach")
elseif mod:IsDifficulty("heroic25") then
timerStomach:Start(timer4b)
self:ScheduleMethod(timer4b-5, "preStomach")
self:ScheduleMethod(timer4b, "alertStomach")
self:ScheduleMethod(timer4b, "enterStomach")
end
end
function mod:clawTentacleInitial()
local timer3 = 14
timerGiantClawTentacle:Start(timer3)
self:ScheduleMethod(timer3-5, "preGiantClaw")
self:ScheduleMethod(timer3, "alertGiantClaw")
self:ScheduleMethod(timer3, "clawTentacle")
end
function mod:clawTentacleWeaknessFix()
local timer5 = 10
timerGiantClawTentacle:Start(timer5)
self:ScheduleMethod(timer5-5, "preGiantClaw")
self:ScheduleMethod(timer5, "alertGiantClaw")
self:ScheduleMethod(timer5, "clawTentacle")
end
function mod:clawTentacle()
local timer6 = 60
timerGiantClawTentacle:Start(timer6)
self:ScheduleMethod(timer6-5, "preGiantClaw")
self:ScheduleMethod(timer6, "alertGiantClaw")
self:ScheduleMethod(timer6, "clawTentacle")
end
function mod:geyeTentacleInitial()
local timer7 = 44
timerGiantEyeTentacle:Start(timer7)
self:ScheduleMethod(timer7-5, "preGiantEye")
self:ScheduleMethod(timer7, "alertGiantEye")
self:ScheduleMethod(timer7, "geyeTentacle")
end
function mod:geyeTentacleWeaknessFix()
local timer8 = 40
timerGiantEyeTentacle:Start(timer8)
self:ScheduleMethod(timer8-5, "preGiantEye")
self:ScheduleMethod(timer8, "alertGiantEye")
self:ScheduleMethod(timer8, "geyeTentacle")
end
function mod:geyeTentacle()
local timer9 = 60
timerGiantEyeTentacle:Start(timer9)
self:ScheduleMethod(timer9-5, "preGiantEye")
self:ScheduleMethod(timer9, "alertGiantEye")
self:ScheduleMethod(timer9, "geyeTentacle")
end
function mod:fixweaknessTimers()
self:ScheduleMethod(0, "stomachWeaknessFix")
self:ScheduleMethod(0, "clawTentacleWeaknessFix")
self:ScheduleMethod(0, "geyeTentacleWeaknessFix")
if lasttent == 1 then
etent = 2
elseif lasttent == 2 then
etent = 3
elseif lasttent == 3 then
etent = 1
end
self:ScheduleMethod(0, "eyeTentacle")
end
function mod:phaseTwo()
warnPhase2:Show()
self.vb.phase = 2
if lasttent == 1 then
etent = 2
elseif lasttent == 2 then
etent = 3
elseif lasttent == 3 then
etent = 1
end
self:ScheduleMethod(6, "eyeTentacle")
self:ScheduleMethod(1, "enterStomach")
self:ScheduleMethod(0, "clawTentacleInitial")
self:ScheduleMethod(0, "geyeTentacleInitial")
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15589 and phase == 1 then
phase = 2
timerEldritch:Stop()
timerEldritchCD:Stop()
timerDarkGlare:Stop()
timerDarkGlareCD:Stop()
timerEyeTentacleFire:Stop()
timerEyeTentacleNature:Stop()
timerEyeTentacleShadow:Stop()
self:UnscheduleMethod("eyeTentacle")
self:UnscheduleMethod("preShadow")
self:UnscheduleMethod("preFire")
self:UnscheduleMethod("preNature")
self:UnscheduleMethod("alertShadow")
self:UnscheduleMethod("alertFire")
self:UnscheduleMethod("alertNature")
self:UnscheduleMethod("eldFear")
self:UnscheduleMethod("eldFearInitial")
self:UnscheduleMethod("preFear")
self:UnscheduleMethod("alertFear")
self:UnscheduleMethod("darkGlare")
self:UnscheduleMethod("darkGlareInitial")
self:UnscheduleMethod("preGlare")
self:UnscheduleMethod("alertGlare")
self:ScheduleMethod(0, "phaseTwo")
end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg:find(L.Eldritch) then
self:ScheduleMethod(0, "eldFear")
specWarnRevelations:Show();
end
if msg:find(L.Glare) then
eldfixglare = 2
timerEldritchCD:Stop()
self:UnscheduleMethod("eldFearInitial")
self:UnscheduleMethod("eldFear")
self:UnscheduleMethod("preFear")
self:UnscheduleMethod("alertFear")
self:ScheduleMethod(0, "darkGlare")
self:ScheduleMethod(37.5, "eldFear")
end
if msg:find(L.weakened) then
timerWeakened:Start()
warnWeakened:Show()
timerGiantClawTentacle:Stop()
timerGiantEyeTentacle:Stop()
timerStomach:Stop()
timerEyeTentacleFire:Stop()
timerEyeTentacleNature:Stop()
timerEyeTentacleShadow:Stop()
self:UnscheduleMethod("enterStomach")
self:UnscheduleMethod("stomachWeaknessFix")
self:UnscheduleMethod("preStomach")
self:UnscheduleMethod("alertStomach")
self:UnscheduleMethod("clawTentacleInitial")
self:UnscheduleMethod("clawTentacleWeaknessFix")
self:UnscheduleMethod("clawTentacle")
self:UnscheduleMethod("preGiantClaw")
self:UnscheduleMethod("alertGiantClaw")
self:UnscheduleMethod("geyeTentacle")
self:UnscheduleMethod("geyeTentacleInitial")
self:UnscheduleMethod("geyeTentacleWeaknessFix")
self:UnscheduleMethod("preGiantEye")
self:UnscheduleMethod("alertGiantEye")
self:UnscheduleMethod("eyeTentacle")
self:UnscheduleMethod("preShadow")
self:UnscheduleMethod("alertShadow")
self:UnscheduleMethod("preFire")
self:UnscheduleMethod("alertFire")
self:UnscheduleMethod("preNature")
self:UnscheduleMethod("alertNature")
self:ScheduleMethod(30, "fixweaknessTimers")
end
end
function mod:SPELL_PERIODIC_DAMAGE(args)
if args:IsSpellID(4500054) then -- Eradicate (Eye Tentacles)
if args:IsPlayer() and (((args.amount or 0) + (args.resisted or 0) + (args.absorbed or 0)) > 1000) then
specWarnEradicate:Show();
end
end
end
function mod:SPELL_PERIODIC_HEAL(args)
if args:IsSpellID(4500062) then -- Consume Essence (Eye Tentacles, debuff is 61)
if args:IsPlayerSource() and ((args.amount or 0) > 4000) then
specWarnConsume:Show();
end
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(4500026) then -- Malignant Grasp (Malignant Tentacle)
if args.destName then
if (not args:IsPlayer()) then
local uId = DBM:GetRaidUnitId(args.destName)
if uId then
local inRange = CheckInteractDistance(uId, 4)
if inRange then
warnMalignantGrasp:Show(args.destName);
end
else
warnMalignantGrasp:Show(args.destName);
end
end
end
elseif args:IsSpellID(4500001) then -- Miasma (Eye Tentacles)
if args:IsPlayer() then
specWarnMiasma:Show();
end
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(26476) then -- Digestive Acid (Stomach)
if args:IsPlayer() and ((args.amount or 1) >= 4) then --(self.Options.NumAcidStacks or 4)) then
specWarnDigestiveAcid:Show(args.amount);
end
elseif args:IsSpellID(4500001) then -- Miasma (Eye Tentacles)
if args:IsPlayer() then
specWarnMiasma:Show();
end
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(4500068) then
local targetname = self:GetBossTarget(26180) -- self:GetBossTarget(157252)
if targetname and (targetname == UnitName("PLAYER")) then
specWarnSensoryOverload:Show();
end
end
end
+35
View File
@@ -0,0 +1,35 @@
## Interface: 30300
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Temple of Ahn'Qiraj|r
## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Templo de Ahn'Qiraj|r
## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Храм Ан'Киража|r
## LoadOnDemand: 1
## RequiredDeps: DBM-Core
## SavedVariablesPerCharacter: DBMAQ40_SavedVars, DBMAQ40_SavedStats
## X-DBM-Mod: 1
## X-DBM-Mod-Category: Vanilla
## X-DBM-Mod-Has-Heroic-Mode: 0
## X-DBM-Mod-Name: The Temple of Ahn'Qiraj
## X-DBM-Mod-Name-esES: Templo de Ahn'Qiraj
## X-DBM-Mod-Name-ruRU: Храм Ан'Киража
## X-DBM-Mod-Sort: 115
## X-DBM-Mod-LoadZone: Nitram,Ahn'Qiraj
## X-DBM-Mod-LoadZone-esES: Nitram,Ahn'Qiraj
## X-DBM-Mod-LoadZone-ruRU: Nitram,Ан'Кираж
## X-DBM-Mod-LoadZone-frFR: Nitram,Ahn'Qiraj
## X-DBM-Mod-LoadZone-esMX: Nitram,Ahn'Qiraj
## X-DBM-Mod-LoadZone-zhTW: 安其拉
## X-DBM-Mod-LoadZone-zhCN: 安其拉
## X-DBM-Mod-LoadZone-koKR: 안퀴라즈
## X-DBM-Mod-LoadZone-deDE: Nitram,Ahn'Qiraj
localization.en.lua
localization.es.lua
localization.ru.lua
Skeram.lua
ThreeBugs.lua
Sartura.lua
Fankriss.lua
Viscidus.lua
Huhuran.lua
TwinEmps.lua
CThun.lua
Ouro.lua
+122
View File
@@ -0,0 +1,122 @@
local mod = DBM:NewMod("Fankriss", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 184 $"):sub(12, -3))
mod:SetCreatureID(15510)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE"
)
local warnHatchlingssoon = mod:NewAnnounce("Vekniss Hatchlings Soon", 2, 1002256)
local warnExplodingsoon = mod:NewAnnounce("Volatile Explosion Soon", 3, 1002356)
local warnSpawnssoon = mod:NewAnnounce("Spawn of Fankriss Soon", 4, 1002297)
local warnHatchlings = mod:NewAnnounce("Vekniss Hatchlings Spawned", 2, 1002256)
local warnExploding = mod:NewAnnounce("Volatile Hatchlings Exploding", 3, 1002356)
local warnSpawns = mod:NewAnnounce("Spawn of Fankriss Spawned", 4, 1002297)
local timerHatchlingA = mod:NewTimer(60, "Hatchlings", 1002256)
local timerExplosionA = mod:NewTimer(60, "Explosion", 1002356)
local timerHatchlingB = mod:NewTimer(60, "Hatchlings", 1002256)
local timerExplosionB = mod:NewTimer(60, "Explosion", 1002356)
local timerSpawnofFankriss = mod:NewTimer(60, "Spawn of Fankriss", 1002297)
local berserkTimer = mod:NewBerserkTimer(540)
function mod:veknissSoon()
warnHatchlingssoon:Show()
end
function mod:veknissWarning()
warnHatchlings:Show()
end
function mod:explosionSoon()
warnExplodingsoon:Show()
end
function mod:explosionWarning()
warnExploding:Show()
end
function mod:spawnSoon()
warnSpawnssoon:Show()
end
function mod:spawnWarning()
warnSpawns:Show()
end
function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
self:ScheduleMethod(10-delay, "veknissHatchlingA")
self:ScheduleMethod(45-delay, "veknissHatchlingB")
self:ScheduleMethod(30-delay, "spawnofFankriss")
self:ScheduleMethod(0-delay, "veknissInitial")
self:ScheduleMethod(0-delay, "spawnInitial")
end
function mod:veknissInitial()
local timeri = 10
timerHatchlingB:Start(timeri)
self:ScheduleMethod(timeri-5,"veknissSoon")
self:ScheduleMethod(timeri, "veknissWarning")
self:ScheduleMethod(timeri, "explosionInitial")
end
function mod:explosionInitial()
local timere = 40
timerExplosionB:Start(timere)
self:ScheduleMethod(timere-5, "explosionSoon")
self:ScheduleMethod(timere, "explosionWarning")
end
function mod:spawnInitial()
local timers = 30
timerSpawnofFankriss:Start(30)
self:ScheduleMethod(timers-5, "spawnSoon")
self:ScheduleMethod(timers, "spawnWarning")
end
function mod:veknissHatchlingA()
local timera = 35
timerHatchlingA:Start(timera)
self:ScheduleMethod(timera*2, "veknissHatchlingA")
self:ScheduleMethod(timera-5,"veknissSoon")
self:ScheduleMethod(timera, "veknissWarning")
self:ScheduleMethod(timera, "explosionA")
end
function mod:explosionA()
local timeraa = 40
timerExplosionA:Start(timeraa)
self:ScheduleMethod(timeraa-5, "explosionSoon")
self:ScheduleMethod(timeraa, "explosionWarning")
self:ScheduleMethod(timeraa*2, "explosionA")
end
function mod:veknissHatchlingB()
local timerb = 35
timerHatchlingB:Start(timerb)
self:ScheduleMethod(timerb*2, "veknissHatchlingB")
self:ScheduleMethod(timerb-5,"veknissSoon")
self:ScheduleMethod(timerb, "veknissWarning")
self:ScheduleMethod(timerb, "explosionB")
end
function mod:explosionB()
local timerbb = 40
timerExplosionB:Start(timerbb)
self:ScheduleMethod(timerbb-5, "explosionSoon")
self:ScheduleMethod(timerbb, "explosionWarning")
self:ScheduleMethod(timerbb*2, "explosionB")
end
function mod:spawnofFankriss()
local timerc = 35
timerSpawnofFankriss:Start(timerc)
self:ScheduleMethod(timerc, "spawnofFankriss")
self:ScheduleMethod(timerc-5, "spawnSoon")
self:ScheduleMethod(timerc, "spawnWarning")
end
+106
View File
@@ -0,0 +1,106 @@
local mod = DBM:NewMod("Huhuran", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 185 $"):sub(12, -3))
mod:SetCreatureID(15509)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"PLAYER_ALIVE"
)
local warnSoon = mod:NewAnnounce("Adds Soon", 2, 1002077)
local warnSpawn = mod:NewAnnounce("Adds Spawned", 3, 1002077)
local prewarnSoftEnrage = mod:NewAnnounce("Soft Enrage Soon", 2, 1002304)
local warnSoftEnrage = mod:NewAnnounce("Soft Enrage Now", 3, 1002304)
local timerSpawn = mod:NewTimer(60, "Adds", 1002077)
local warnSting = mod:NewTargetAnnounce(26180, 2)
local warnAcid = mod:NewAnnounce("WarnAcid", 3)
local timerSting = mod:NewBuffActiveTimer(12, 26180)
local timerStingCD = mod:NewCDTimer(20, 26180)
local timerAcid = mod:NewTargetTimer(30, 26050)
local specWarnAcid = mod:NewSpecialWarningStack(26050, nil, 10)
local berserkTimer = mod:NewBerserkTimer(420)
local StingTargets = {}
local check1
local check2
function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
self:ScheduleMethod(0-delay, "initialSpawn")
table.wipe(StingTargets)
check1 = 0
check2 = 0
end
function mod:Soon()
warnSoon:Show()
end
function mod:Spawn()
warnSpawn:Show()
end
function mod:initialSpawn()
timera = 10
timerSpawn:Start(timera)
self:ScheduleMethod(timera-5,"Soon")
self:ScheduleMethod(timera, "Spawn")
self:ScheduleMethod(timera, "reSpawn")
end
function mod:reSpawn()
timerb = 30
timerSpawn:Start(timerb)
self:ScheduleMethod(timerb-5,"Soon")
self:ScheduleMethod(timerb, "Spawn")
self:ScheduleMethod(timerb, "reSpawn")
end
local function warnStingTargets()
warnSting:Show(table.concat(StingTargets, "<, >"))
timerSting:Start()
table.wipe(StingTargets)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(26180) then
StingTargets[#StingTargets + 1] = args.destName
self:Unschedule(warnStingTargets)
self:Schedule(0.3, warnStingTargets)
elseif args:IsSpellID(26050) then
warnAcid:Show(args.spellName, args.destName, args.amount or 1)
timerAcid:Start(args.destName)
if args:IsPlayer() and (args.amount or 1) >= 10 then
specWarnAcid:Show()
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(26180) then
timerSting:Cancel()
end
end
function mod:UNIT_HEALTH(args)
huhuranHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if huhuranHealth < 35 and check1 == 0 then
check1 = 1
prewarnSoftEnrage:Show()
elseif skeramHealth < 30 and check2 == 0 then
check2 = 1
warnSoftEnrage:Show()
end
end
+92
View File
@@ -0,0 +1,92 @@
local mod = DBM:NewMod("Ouro", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15517)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"UNIT_HEALTH",
"UNIT_DIED",
"COMBAT_LOG_EVENT_UNFILTERED",
"PLAYER_ALIVE"
)
local prewarnShard = mod:NewAnnounce("Shard Spawn Soon", 3, 1002340)
local warnShard = mod:NewAnnounce("Mind-Corrupting Shard Spawned", 2, 1002340)
local timerShard = mod:NewTimer(35, "Shard Spawn", 1002340)
local berserkTimer = mod:NewBerserkTimer(360)
local shardsDead
local maxShards
local ouroHealth
local shardNumber
function mod:OnCombatStart(delay)
berserkTimer:Start()
self:ScheduleMethod(0, "initialShardSpawn")
self:ScheduleMethod(0.1, "deadShards")
maxShards = 1
shardNumber = 1
end
function mod:preShard()
prewarnShard:Show()
end
function mod:alertShard()
warnShard:Show()
self:ScheduleMethod(0, "alarmSound")
end
function mod:initialShardSpawn()
shardsDead = 0
local timer1 = 30
timerShard:Show(timer1)
self:ScheduleMethod(timer1-5, "preShard")
self:ScheduleMethod(timer1, "alertShard")
self:ScheduleMethod(timer1, "checkShards")
end
function mod:shardSpawn()
shardsDead = 0
local timer2 = 35
timerShard:Show(timer2)
self:ScheduleMethod(timer2-5, "preShard")
self:ScheduleMethod(timer2, "alertShard")
self:ScheduleMethod(timer2, "checkShards")
end
function mod:deadShards()
if maxShards == 1 and shardsDead == 1 then
self:ScheduleMethod(0, "shardSpawn")
elseif maxShards == 2 and shardsDead == 2 then
self:ScheduleMethod(0, "shardSpawn")
elseif maxShards == 3 and shardsDead == 3 then
self:ScheduleMethod(0, "shardSpawn")
end
self:ScheduleMethod(0.1, "deadShards")
end
function mod:checkShards()
if ouroHealth > 75 then
maxShards = 1
elseif ouroHealth < 75 and ouroHealth > 33 then
maxShards = 2
elseif ouroHealth < 33 then
maxShards = 3
end
end
function mod:UNIT_HEALTH(args)
ouroHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
end
function mod:UNIT_DIED(args)
local recapID = self:GetCIDFromGUID(args.destGUID)
if recapID == 19045 then
shardsDead = shardsDead + 1
end
end
+370
View File
@@ -0,0 +1,370 @@
local mod = DBM:NewMod("Sartura", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15516)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"PLAYER_ALIVE"
)
function mod:PLAYER_ALIVE()
if UnitIsDeadOrGhost("PLAYER") and self.Options.ResetOnRelease then
--self:wipeAllTimers();
self:Stop();
end
end
-----MISC TIMERS-----
local berserkTimer = mod:NewBerserkTimer(360)
local kickAnnounce = mod:NewSpellAnnounce(1766, 4)
local meleeOut = mod:NewAnnounce("MELEE OUT - MELEE OUT", 4)
-----PREWARNINGS-----
local prewarnSTranslocation = mod:NewAnnounce("Song of Translocation Soon", 3, 1002345)
local prewarnDTranslocation = mod:NewAnnounce("Dance of Translocation Soon", 3, 1002323)
local prewarnSColossus = mod:NewAnnounce("Song of The Colossus Soon", 3, 1002346)
local prewarnDHaste = mod:NewAnnounce("Dance of Haste Soon", 3, 1002324)
local prewarnSOppression = mod:NewAnnounce("Song of Oppression Soon", 3, 1002347)
local prewarnDHunt = mod:NewAnnounce("Dance of The Hunt Soon", 3, 1002325)
local prewarnSDeath = mod:NewAnnounce("Song of Death Soon", 3, 1002348)
-----ALERTS-----
local warn1Stacks = mod:NewAnnounce("1 Stack of Suspended Assault", 3, 1002328)
local warn2Stacks = mod:NewAnnounce("2 Stacks of Suspended Assault", 3, 1002328)
local warn3Stacks = mod:NewAnnounce("3 Stacks of Suspended Assault", 3, 1002328)
local warn4Stacks = mod:NewAnnounce("4 Stacks of Suspended Assault", 3, 1002328)
local warnSTranslocation = mod:NewSpellAnnounce(1002345, 2)
local warnDTranslocation = mod:NewSpellAnnounce(1002323, 2)
local warnSColossus = mod:NewSpellAnnounce(1002346, 2)
local warnDHaste = mod:NewSpellAnnounce(1002324, 2)
local warnSOppression = mod:NewSpellAnnounce(1002347, 2)
local warnDHunt = mod:NewSpellAnnounce(1002325, 2)
local warnSDeath = mod:NewSpellAnnounce(1002348, 2)
-----TIMERS-----
local timerStacks = mod:NewTimer(60, "Time Remaining: Stacks", 1002328)
local timerSongRemaining = mod:NewTimer(15, "Time Remaining: Song", 1002345)
local timerDanceRemaining = mod:NewTimer(15, "Time Remaining: Dance", 1002323)
local timerSTranslocation = mod:NewCDTimer(30, 1002345)
local timerDTranslocation = mod:NewCDTimer(30, 1002323)
local timerSColossus = mod:NewCDTimer(30, 1002346)
local timerDHaste = mod:NewCDTimer(30, 1002324)
local timerSOppression = mod:NewCDTimer(30, 1002347)
local timerDHunt = mod:NewCDTimer(30, 1002325)
local timerSDeath = mod:NewCDTimer(30, 1002348)
-----SOUND-----
local castNumber
local dancetimerFix
local songtimerFix
local isFourStack
local latestAuraFix
-----PREWARNING FUNCTIONS-----
function mod:preSTranslocation()
prewarnSTranslocation:Show()
end
function mod:preDTranslocation()
prewarnDTranslocation:Show()
end
function mod:preSColossus()
prewarnSColossus:Show()
end
function mod:preDHaste()
prewarnDHaste:Show()
end
function mod:preSOppression()
prewarnSOppression:Show()
end
function mod:preDHunt()
prewarnDHunt:Show()
end
function mod:preSDeath()
prewarnSDeath:Show()
end
-----ALERT FUNCTIONS-----
function mod:alertSTranslocation()
warnSTranslocation:Show()
end
function mod:alertDTranslocation()
warnDTranslocation:Show()
end
function mod:alertSColossus()
warnSColossus:Show()
end
function mod:alertDHaste()
warnDHaste:Show()
end
function mod:alertSOppression()
warnSOppression:Show()
end
function mod:alertDHunt()
warnDHunt:Show()
end
function mod:alertSDeath()
warnSDeath:Show()
end
-----MISC FUNCTIONS-----
function mod:kickThisCunt()
kickAnnounce:Show()
end
function mod:runBitch()
meleeOut:Show()
end
-----ACTUAL FUNCTIONS-----
function mod:OnCombatStart(delay)
berserkTimer:Start()
self:ScheduleMethod(0, "initialSarturaCast")
castNumber = 0
dancetimerFix = 0
songtimerFix = 0
isFourStack = 0
latestAuraFix = 0
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1002328) and (args.amount or 1) == 1 then
warn1Stacks:Show()
timerStacks:Start()
elseif args:IsSpellID(1002328) and (args.amount or 1) == 2 then
warn2Stacks:Show()
timerStacks:Start()
elseif args:IsSpellID(1002328) and (args.amount or 1) == 3 then
warn3Stacks:Show()
timerStacks:Start()
elseif args:IsSpellID(1002328) and (args.amount or 1) == 4 then
warn4Stacks:Show()
timerStacks:Start()
if isFourStack == 0 then
isFourStack = 1
self:ScheduleMethod(60, "fixFourStack")
end
elseif args:IsSpellID(1002323) then
if dancetimerFix == 0 then
timerDanceRemaining:Start()
dancetimerFix = 1
self:ScheduleMethod(20, "fixDanceTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002323
end
elseif args:IsSpellID(1002324) then
if dancetimerFix == 0 then
timerDanceRemaining:Start()
dancetimerFix = 1
self:ScheduleMethod(20, "fixDanceTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002324
end
elseif args:IsSpellID(1002325) then
if dancetimerFix == 0 then
timerDanceRemaining:Start()
dancetimerFix = 1
self:ScheduleMethod(20, "fixDanceTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002325
end
elseif args:IsSpellID(1002345) then
if songtimerFix == 0 then
timerSongRemaining:Start()
songtimerFix = 1
self:ScheduleMethod(20, "fixSongTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002345
end
elseif args:IsSpellID(1002346) then
if songtimerFix == 0 then
timerSongRemaining:Start()
songtimerFix = 1
self:ScheduleMethod(20, "fixSongTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002346
end
elseif args:IsSpellID(1002347) then
if songtimerFix == 0 then
timerSongRemaining:Start()
songtimerFix = 1
self:ScheduleMethod(20, "fixSongTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002347
end
elseif args:IsSpellID(1002348) then
if songtimerFix == 0 then
timerSongRemaining:Start()
songtimerFix = 1
self:ScheduleMethod(20, "fixSongTimer")
self:ScheduleMethod(1, "checkFourCast")
latestAuraFix = 1002348
end
end
end
function mod:fixDanceTimer()
dancetimerFix = 0
end
function mod:fixSongTimer()
songtimerFix = 0
end
function mod:fixFourStack()
isFourStack = 0
end
function mod:checkFourCast()
if isFourStack == 1 then
if latestAuraFix == 1002323 then
self:ScheduleMethod(0, "dotCast")
latestAuraFix = 0
elseif latestAuraFix == 1002324 then
self:ScheduleMethod(0, "dohCast")
latestAuraFix = 0
elseif latestAuraFix == 1002325 then
self:ScheduleMethod(0, "dothCast")
latestAuraFix = 0
elseif latestAuraFix == 1002345 then
self:ScheduleMethod(0, "sotCast")
latestAuraFix = 0
elseif latestAuraFix == 1002346 then
self:ScheduleMethod(0, "socCast")
latestAuraFix = 0
elseif latestAuraFix == 1002347 then
self:ScheduleMethod(0, "sooCast")
latestAuraFix = 0
elseif latestAuraFix == 1002348 then
self:ScheduleMethod(0, "sodCast")
latestAuraFix = 0
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_CAST_START(args)
if args:IsSpellID(1002345) then --Song of Translocation
self:ScheduleMethod(0, "sotCast")
mod:alarmSound()
mod:kickThisCunt()
if castNumber == 0 then
castNumber = castNumber+1
elseif castNumber == 7 then
castNumber = castNumber+1
end
elseif args:IsSpellID(1002323) then --Dance of Translocation
self:ScheduleMethod(0, "dotCast")
mod:alarmSound()
mod:kickThisCunt()
if castNumber == 1 then
castNumber = castNumber+1
elseif castNumber == 8 then
castNumber = castNumber+1
end
elseif args:IsSpellID(1002346) then --Song of the Colossus
self:ScheduleMethod(0, "socCast")
if castNumber == 2 then
castNumber = castNumber+1
mod:alarmSound()
mod:kickThisCunt()
elseif castNumber == 9 then
castNumber = castNumber+1
mod:runBitch()
end
elseif args:IsSpellID(1002324) then --Dance of Haste
self:ScheduleMethod(0, "dohCast")
if castNumber == 3 then
castNumber = castNumber+1
elseif castNumber == 10 then
castNumber = castNumber+1
end
elseif args:IsSpellID(1002347) then --Song of Oppression
self:ScheduleMethod(0, "sooCast")
if castNumber == 4 then
castNumber = castNumber+1
mod:runBitch()
elseif castNumber == 11 then
castNumber = castNumber+1
mod:alarmSound()
mod:kickThisCunt()
end
elseif args:IsSpellID(1002325) then --Dance of the Hunt
self:ScheduleMethod(0, "dothCast")
if castNumber == 5 then
castNumber = castNumber+1
elseif castNumber == 12 then
castNumber = castNumber+1
mod:alarmSound()
mod:kickThisCunt()
end
elseif args:IsSpellID(1002348) then --Song of Death
self:ScheduleMethod(0, "sodCast")
mod:alarmSound()
mod:kickThisCunt()
if castNumber == 6 then
castNumber = castNumber+1
elseif castNumber == 13 then
castNumber = castNumber+1
mod:alarmSound()
mod:kickThisCunt()
end
end
end
function mod:initialSarturaCast()
local timer1 = 10
timerSTranslocation:Start(timer1)
self:ScheduleMethod(timer1-5, "preSTranslocation")
self:ScheduleMethod(timer1, "alertSTranslocation")
end
function mod:sodCast()
local timer1 = 50
timerSTranslocation:Start(timer1)
self:ScheduleMethod(timer1-5, "preSTranslocation")
self:ScheduleMethod(timer1, "alertSTranslocation")
end
function mod:sotCast()
local timer2 = 25
timerDTranslocation:Start(timer2)
self:ScheduleMethod(timer2-5, "preDTranslocation")
self:ScheduleMethod(timer2, "alertDTranslocation")
end
function mod:dotCast()
local timer3 = 25
timerSColossus:Start(timer3)
self:ScheduleMethod(timer3-5, "preSColossus")
self:ScheduleMethod(timer3, "alertSColossus")
end
function mod:socCast()
local timer4 = 25
timerDHaste:Start(timer4)
self:ScheduleMethod(timer4-5, "preDHaste")
self:ScheduleMethod(timer4, "alertDHaste")
end
function mod:dohCast()
local timer5 = 25
timerSOppression:Start(timer5)
self:ScheduleMethod(timer5-5, "preSOppression")
self:ScheduleMethod(timer5, "alertSOppression")
end
function mod:sooCast()
local timer6 = 25
timerDHunt:Start(timer6)
self:ScheduleMethod(timer6-5, "preDHunt")
self:ScheduleMethod(timer6, "alertDHunt")
end
function mod:dothCast()
local timer7 = 25
timerSDeath:Start(timer7)
self:ScheduleMethod(timer7-5, "preSDeath")
self:ScheduleMethod(timer7, "alertSDeath")
end
+42
View File
@@ -0,0 +1,42 @@
local mod = DBM:NewMod("Skeram", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 133 $"):sub(12, -3))
mod:SetCreatureID(15263)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE",
"UNIT_HEALTH"
)
local berserkTimer = mod:NewBerserkTimer(540)
local prewarnClones = mod:NewAnnounce("Skeram Clones Soon", 3, 1002181)
local check1
local check2
local check3
function mod:OnCombatStart(delay)
berserkTimer:Start()
check1 = 0
check2 = 0
check3 = 0
end
function mod:UNIT_HEALTH(args)
skeramHealth = math.max(0, UnitHealth("boss1")) / math.max(1, UnitHealthMax("boss1")) * 100;
if skeramHealth < 80 and check1 == 0 then
check1 = 1
prewarnClones:Show()
elseif skeramHealth < 55 and check2 == 0 then
check2 = 1
prewarnClones:Show()
elseif skeramHealth < 30 and check3 == 0 then
check3 = 1
prewarnClones:Show()
end
end
+50
View File
@@ -0,0 +1,50 @@
local mod = DBM:NewMod("ThreeBugs", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 184 $"):sub(12, -3))
mod:SetCreatureID(15544, 15511, 15543)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE"
)
mod:SetBossHealthInfo(
15543, L.Yauj,
15544, L.Vem,
15511, L.Kri
)
local berserkTimer = mod:NewBerserkTimer(540)
local prewarnBurrow = mod:NewAnnounce("Burrow Soon", 3, 1002251)
local warnBurrow = mod:NewAnnounce("Burrow Now", 2, 1002251)
local timerBurrow = mod:NewTimer(35, "Vem: Next Burrow", 1002251)
local timerCheck
function mod:OnCombatStart(delay)
berserkTimer:Start()
timerCheck = 1
self:ScheduleMethod(0.1, "checkIsVis")
end
function mod:preBurrow()
prewarnBurrow:Show()
end
function mod:alertBurrow()
warnBurrow:Show()
self:ScheduleMethod(0, "alarmSound")
end
function mod:checkIsVis()
if UnitIsVisible(15544) and timerCheck == 1 then
elseif UnitIsVisible(15544) and timerCheck == 2 then
timerCheck = 1
local timera = 35
timerBurrow:Show(timera)
self:ScheduleMethod(timera-5, "preBurrow")
self:ScheduleMethod(timera, "alertBurrow")
elseif not UnitIsVisible(15544) then
timerCheck = 2
end
self:ScheduleMethod(0.1, "checkIsVis")
end
+80
View File
@@ -0,0 +1,80 @@
local mod = DBM:NewMod("TwinEmpsAQ", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15276, 15275)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE"
)
mod:SetBossHealthInfo(
15276, L.Veklor,
15275, L.Veknil
)
local warnTeleportSoon = mod:NewSoonAnnounce(800, 2)
local warnTeleport = mod:NewSpellAnnounce(800, 3)
local timerTeleport = mod:NewNextTimer(30, 800)
local berserkTimer = mod:NewBerserkTimer(600)
local specWarnBlizzard = mod:NewSpecialWarningMove(26607, true, "Special warning when standing in Blizzard", true)
function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
self:ScheduleMethod(-delay, "twinTeleport")
self:ScheduleMethod(30-delay, "twinTeleport")
self:ScheduleMethod(60-delay, "twinTeleport")
self:ScheduleMethod(90-delay, "twinTeleport")
self:ScheduleMethod(120-delay, "twinTeleport")
self:ScheduleMethod(150-delay, "twinTeleport")
self:ScheduleMethod(180-delay, "twinTeleport")
self:ScheduleMethod(210-delay, "twinTeleport")
self:ScheduleMethod(240-delay, "twinTeleport")
self:ScheduleMethod(270-delay, "twinTeleport")
self:ScheduleMethod(300-delay, "twinTeleport")
self:ScheduleMethod(330-delay, "twinTeleport")
self:ScheduleMethod(360-delay, "twinTeleport")
self:ScheduleMethod(390-delay, "twinTeleport")
self:ScheduleMethod(420-delay, "twinTeleport")
self:ScheduleMethod(450-delay, "twinTeleport")
self:ScheduleMethod(480-delay, "twinTeleport")
self:ScheduleMethod(510-delay, "twinTeleport")
self:ScheduleMethod(540-delay, "twinTeleport")
self:ScheduleMethod(570-delay, "twinTeleport")
self:ScheduleMethod(600-delay, "twinTeleport")
end
function mod:teleSoon()
warnTeleportSoon:Show()
end
function mod:teleNow()
warnTeleport:Show()
self:ScheduleMethod(0, "alarmSound")
end
function mod:twinTeleport()
timer = 30
timerTeleport:Start(timer)
self:ScheduleMethod(timer-5, "teleSoon")
self:ScheduleMethod(timer, "teleNow")
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(26607) then
if args:IsPlayer() then
specWarnBlizzard:Show();
end
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(26607) then -- Miasma (Eye Tentacles)
if args:IsPlayer() then
specWarnBlizzard:Show();
end
end
end
+18
View File
@@ -0,0 +1,18 @@
local mod = DBM:NewMod("Viscidus", "DBM-AQ40", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 132 $"):sub(12, -3))
mod:SetCreatureID(15299)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"PLAYER_ALIVE"
)
local berserkTimer = mod:NewBerserkTimer(420)
function mod:OnCombatStart(delay)
berserkTimer:Start()
end
+140
View File
@@ -0,0 +1,140 @@
local L
------------
-- Skeram --
------------
L = DBM:GetModLocalization("Skeram")
L:SetGeneralLocalization{
name = "The Prophet Skeram"
}
L:SetOptionLocalization{
SetIconOnMC = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(785)
}
----------------
-- Three Bugs --
----------------
L = DBM:GetModLocalization("ThreeBugs")
L:SetGeneralLocalization{
name = "Bug Trio"
}
L:SetMiscLocalization{
Yauj = "Princess Yauj",
Vem = "Vem",
Kri = "Lord Kri"
}
-------------
-- Sartura --
-------------
L = DBM:GetModLocalization("Sartura")
L:SetGeneralLocalization{
name = "Battleguard Sartura"
}
--------------
-- Fankriss --
--------------
L = DBM:GetModLocalization("Fankriss")
L:SetGeneralLocalization{
name = "Fankriss the Unyielding"
}
L:SetWarningLocalization{
WarnWound = "%s on >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown")
}
--------------
-- Viscidus --
--------------
L = DBM:GetModLocalization("Viscidus")
L:SetGeneralLocalization{
name = "Viscidus"
}
L:SetWarningLocalization{
WarnFreeze = "Freeze: %d/3",
WarnShatter = "Shatter: %d/3"
}
L:SetOptionLocalization{
WarnFreeze = "Announce Freeze status",
WarnShatter = "Announce Shatter status",
}
L:SetMiscLocalization{
Phase4 = "begins to crack",
Phase5 = "looks ready to shatter",
Phase6 = "Explodes."
}
-------------
-- Huhuran --
-------------
L = DBM:GetModLocalization("Huhuran")
L:SetGeneralLocalization{
name = "Princess Huhuran"
}
L:SetWarningLocalization{
WarnAcid = "%s on >%s< (%s)"
}
L:SetOptionLocalization{
WarnAcid = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(26180, GetSpellInfo(26180) or "unknown")
}
---------------
-- Twin Emps --
---------------
L = DBM:GetModLocalization("TwinEmpsAQ")
L:SetGeneralLocalization{
name = "Twin Emperors"
}
L:SetMiscLocalization{
Veklor = "Emperor Vek'lor",
Veknil = "Emperor Vek'nilash"
}
------------
-- C'Thun --
------------
L = DBM:GetModLocalization("CThun")
L:SetGeneralLocalization{
name = "C'Thun"
}
L:SetOptionLocalization{
RangeFrame = "Show range frame"
}
----------------
-- Ouro --
----------------
L = DBM:GetModLocalization("Ouro")
L:SetGeneralLocalization{
name = "Ouro"
}
L:SetMiscLocalization{
Shard = "Mind-Corrupting Shard"
}
L:SetWarningLocalization{
WarnSubmerge = "Submerge",
WarnEmerge = "Emerge",
WarnSubmergeSoon = "Submerge soon",
WarnEmergeSoon = "Emerge soon"
}
L:SetTimerLocalization{
TimerSubmerge = "Submerge",
TimerEmerge = "Emerge"
}
L:SetOptionLocalization{
WarnSubmerge = "Show warning for submerge",
WarnSubmergeSoon = "Show pre-warning for submerge",
TimerSubmerge = "Show timer for submerge",
WarnEmerge = "Show warning for emerge",
WarnEmergeSoon = "Show pre-warning for emerge",
TimerEmerge = "Show timer for emerge"
}
+138
View File
@@ -0,0 +1,138 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
local L
------------
-- Skeram --
------------
L = DBM:GetModLocalization("Skeram")
L:SetGeneralLocalization{
name = "El profeta Skeram"
}
L:SetOptionLocalization{
SetIconOnMC = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(785)
}
----------------
-- Three Bugs --
----------------
L = DBM:GetModLocalization("ThreeBugs")
L:SetGeneralLocalization{
name = "Los tres bichos"
}
L:SetMiscLocalization{
Yauj = "Princesa Yauj",
Vem = "Vem",
Kri = "Lord Kri"
}
-------------
-- Sartura --
-------------
L = DBM:GetModLocalization("Sartura")
L:SetGeneralLocalization{
name = "Guardia de batalla Sartura"
}
--------------
-- Fankriss --
--------------
L = DBM:GetModLocalization("Fankriss")
L:SetGeneralLocalization{
name = "Fankriss el Implacable"
}
L:SetWarningLocalization{
WarnWound = "%s en >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown")
}
--------------
-- Viscidus --
--------------
L = DBM:GetModLocalization("Viscidus")
L:SetGeneralLocalization{
name = "Viscidus"
}
L:SetWarningLocalization{
WarnFreeze = "Congelación: %d/3",
WarnShatter = "Roto: %d/3"
}
L:SetOptionLocalization{
WarnFreeze = "Anunciar el estado de Congelación",
WarnShatter = "Anunciar el estado de rotura",
}
L:SetMiscLocalization{
Phase4 = "empieza a agrietarse",
Phase5 = "parece listo para romper",
Phase6 = "explota"
}
-------------
-- Huhuran --
-------------
L = DBM:GetModLocalization("Huhuran")
L:SetGeneralLocalization{
name = "Princesa Huhuran"
}
L:SetWarningLocalization{
WarnAcid = "%s en >%s< (%s)"
}
L:SetOptionLocalization{
WarnAcid = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(26180, GetSpellInfo(26180) or "unknown")
}
---------------
-- Twin Emps --
---------------
L = DBM:GetModLocalization("TwinEmpsAQ")
L:SetGeneralLocalization{
name = "Gemelos emperadores"
}
L:SetMiscLocalization{
Veklor = "Emperador Vek'lor",
Veknil = "Emperador Vek'nilash"
}
------------
-- C'Thun --
------------
L = DBM:GetModLocalization("CThun")
L:SetGeneralLocalization{
name = "C'Thun"
}
L:SetOptionLocalization{
RangeFrame = "Mostrar distancia"
}
----------------
-- Ouro --
----------------
L = DBM:GetModLocalization("Ouro")
L:SetGeneralLocalization{
name = "Ouro"
}
L:SetWarningLocalization{
WarnSubmerge = "Se Sumerge",
WarnEmerge = "Emerge",
WarnSubmergeSoon = "Se Sumerge pronto",
WarnEmergeSoon = "Emerge pronto"
}
L:SetTimerLocalization{
TimerSubmerge = "Se Sumerge",
TimerEmerge = "Emerge"
}
L:SetOptionLocalization{
WarnSubmerge = "Mostrar aviso para sumersión",
WarnSubmergeSoon = "Mostrar pre-aviso para sumersión",
TimerSubmerge = "Mostrar tiempo para sumersión",
WarnEmerge = "Mostrar aviso para emersión",
WarnEmergeSoon = "Mostrar pre-aviso para emersión",
TimerEmerge = "Mostrar tiempo para emersión"
}
+153
View File
@@ -0,0 +1,153 @@
if GetLocale() ~= "ruRU" then return end
local L
------------
-- Skeram --
------------
L = DBM:GetModLocalization("Skeram")
L:SetGeneralLocalization{
name = "Пророк Скерам"
}
L:SetOptionLocalization{
SetIconOnMC = DBM_CORE_AUTO_ICONS_OPTION_TEXT:format(785)
}
----------------
-- Three Bugs --
----------------
L = DBM:GetModLocalization("ThreeBugs")
L:SetGeneralLocalization{
name = "Семейство жуков"
}
L:SetMiscLocalization{
Yauj = "Принцесса Яудж",
Vem = "Вем",
Kri = "Лорд Кри"
}
-------------
-- Sartura --
-------------
L = DBM:GetModLocalization("Sartura")
L:SetGeneralLocalization{
name = "Боевой страж Сартура"
}
--------------
-- Fankriss --
--------------
L = DBM:GetModLocalization("Fankriss")
L:SetGeneralLocalization{
name = "Фанкрисс Непреклонный"
}
L:SetWarningLocalization{
WarnWound = "%s на >%s< (%s)"
}
L:SetOptionLocalization{
WarnWound = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(25646, GetSpellInfo(25646) or "unknown")
}
--------------
-- Viscidus --
--------------
L = DBM:GetModLocalization("Viscidus")
L:SetGeneralLocalization{
name = "Нечистотон"
}
L:SetWarningLocalization{
WarnFreeze = "Заморожен: %d/3",
WarnShatter = "Shatter: %d/3"
}
L:SetOptionLocalization{
WarnFreeze = "Announce Freeze status",
WarnShatter = "Announce Shatter status",
}
L:SetMiscLocalization{
Phase4 = "Нечистотон начинает раскалываться!",
Phase5 = "Нечистотон едва держится!",
Phase6 = "Explodes."
}
-------------
-- Huhuran --
-------------
L = DBM:GetModLocalization("Huhuran")
L:SetGeneralLocalization{
name = "Принцесса Хухуран"
}
L:SetWarningLocalization{
WarnAcid = "%s на >%s< (%s)"
}
L:SetOptionLocalization{
WarnAcid = DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell:format(26180, GetSpellInfo(26180) or "unknown")
}
---------------
-- Twin Emps --
---------------
L = DBM:GetModLocalization("TwinEmpsAQ")
L:SetGeneralLocalization{
name = "Императоры-близнецы"
}
L:SetMiscLocalization{
Veklor = "Император Век'лор",
Veknil = "Император Век'нилаш"
}
------------
-- C'Thun --
------------
L = DBM:GetModLocalization("CThun")
L:SetGeneralLocalization{
name = "К'Тун"
}
L:SetWarningLocalization{
WarnEyeTentacle = "Появляются глазные отростки!",
WarnClawTentacle = "Появляется когтещупальце!",
WarnGiantEyeTentacle = "Появляется гигантский глазной отросток!",
WarnGiantClawTentacle = "Появляется гигантское когтещупальце!",
WarnWeakened = "К'Тун ослаблен! Бейте его!"
}
L:SetTimerLocalization{
TimerEyeTentacle = "Глазных отроски",
TimerGiantEyeTentacle = "Гигантский глазной отросток",
TimerClawTentacle = "Когтещупальце",
TimerGiantClawTentacle = "Гигантское когтещупальце",
TimerWeakened = "К'Тун ослаблен"
}
L:SetOptionLocalization{
RangeFrame = "Показывать окно дистанции"
}
----------------
-- Ouro --
----------------
L = DBM:GetModLocalization("Ouro")
L:SetGeneralLocalization{
name = "Оуро"
}
L:SetWarningLocalization{
WarnSubmerge = "Закапывание",
WarnEmerge = "Появление",
WarnSubmergeSoon = "Скоро закапывание",
WarnEmergeSoon = "Скоро появление"
}
L:SetTimerLocalization{
TimerSubmerge = "Закапывание",
TimerEmerge = "Появление"
}
L:SetOptionLocalization{
WarnSubmerge = "Показывать предупреждение о закапывании",
WarnSubmergeSoon = "Предупреждать заранее о закапывании",
TimerSubmerge = "Показывать таймер до закапывания",
WarnEmerge = "Показывать предупреждение о появлении",
WarnEmergeSoon = "Предупреждать заранее о появлении",
TimerEmerge = "Показывать таймер до появления"
}
+39
View File
@@ -0,0 +1,39 @@
local mod = DBM:NewMod("Broodlord", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 168 $"):sub(12, -3))
mod:SetCreatureID(12017)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED"
)
local warnBlastWave = mod:NewSpellAnnounce(23331)
local warnKnockAway = mod:NewSpellAnnounce(18670)
local warnMortal = mod:NewTargetAnnounce(24573)
local timerMortal = mod:NewTargetTimer(5, 24573)
function mod:OnCombatStart(delay)
end
--It's unfortunate this is a shared spellid.
--cause you are almost always in combat before pulling this boss which breaks "IsInCombat" detection
--these 2 of these warnings will never work.
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(23331) then
warnBlastWave:Show()
elseif args:IsSpellID(18670) and self:IsInCombat() then
warnKnockAway:Show()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(24573) and self:IsInCombat() then
warnMortal:Show(args.destName)
timerMortal:Start(args.destName)
end
end
+90
View File
@@ -0,0 +1,90 @@
local mod = DBM:NewMod("Chromaggus", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 188 $"):sub(12, -3))
mod:SetCreatureID(14020)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH"
)
local warnBreathSoon = mod:NewAnnounce("WarnBreathSoon", 1, 23316)
local warnBreath = mod:NewAnnounce("WarnBreath", 2, 23316)
local warnRed = mod:NewTargetAnnounce(23155, 2, nil, false)
local warnGreen = mod:NewTargetAnnounce(23169, 2, nil, false)
local warnBlue = mod:NewTargetAnnounce(23153, 2, nil, false)
local warnBlack = mod:NewTargetAnnounce(23154, 2, nil, false)
local warnBronze = mod:NewSpellAnnounce(23170, 2)
local warnEnrage = mod:NewSpellAnnounce(23128)
local warnPhase2Soon = mod:NewAnnounce("WarnPhase2Soon")
local warnPhase2 = mod:NewPhaseAnnounce(2)
local specWarnBronze = mod:NewSpecialWarningYou(23170)
local timerBreath = mod:NewTimer(2, "TimerBreath")
local timerBreathCD = mod:NewTimer(60, "TimerBreathCD")
local timerEnrage = mod:NewBuffActiveTimer(8, 23128)
local prewarn_P2
function mod:OnCombatStart(delay)
warnBreathSoon:Schedule(25-delay)
timerBreathCD:Start(30-delay, "Breath 1")
timerBreathCD:Start(-delay, "Breath 2")
prewarn_P2 = false;
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(23309, 23313, 23189, 23316) or args:IsSpellID(23312) then
warnBreathSoon:Cancel()
warnBreathSoon:Schedule(25)
warnBreath:Show(args.spellName)
timerBreath:Start(args.spellName)
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(23170) then
warnBronze:Show()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(23155) then
warnRed:Show(args.destName)
elseif args:IsSpellID(23169) then
warnGreen:Show(args.destName)
elseif args:IsSpellID(23153) then
warnBlue:Show(args.destName)
elseif args:IsSpellID(23154) then
warnBlack:Show(args.destName)
elseif args:IsSpellID(23170) then
warnBronze:Show()
if args:IsPlayer() then
specWarnBronze:Show()
end
elseif args:IsSpellID(23128) then
warnEnrage:Show()
timerEnrage:Start()
elseif args:IsSpellID(23537) then
warnPhase2:Show()
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(23128) then
timerEnrage:Cancel()
end
end
function mod:UNIT_HEALTH(uId)
if UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and self:GetUnitCreatureId(uId) == 14020 and not prewarn_P2 then
warnPhase2Soon:Show()
prewarn_P2 = true
end
end
+34
View File
@@ -0,0 +1,34 @@
## Interface: 30300
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Blackwing Lair|r
## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida Alanegra|r
## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Логово Крыла Тьмы|r
## LoadOnDemand: 1
## RequiredDeps: DBM-Core
## SavedVariablesPerCharacter: DBMBWL_SavedVars, DBMBWL_SavedStats
## X-DBM-Mod: 1
## X-DBM-Mod-Category: Vanilla
## X-DBM-Mod-Has-Heroic-Mode: 0
## X-DBM-Mod-Name: Blackwing Lair
## X-DBM-Mod-Name-esES: Guarida Alanegra
## X-DBM-Mod-Name-ruRU: Логово Крыла Тьмы
## X-DBM-Mod-Sort: 113
## X-DBM-Mod-LoadZone: Blackwing Lair
## X-DBM-Mod-LoadZone-esES: Guarida Alanegra
## X-DBM-Mod-LoadZone-ruRU: Логово Крыла Тьмы
## X-DBM-Mod-LoadZone-frFR: Repaire de l'Aile noire
## X-DBM-Mod-LoadZone-esMX: Guarida Alanegra
## X-DBM-Mod-LoadZone-zhTW: 黑翼之巢
## X-DBM-Mod-LoadZone-zhCN: 黑翼之巢
## X-DBM-Mod-LoadZone-koKR: 검은날개 둥지
## X-DBM-Mod-LoadZone-deDE: Pechschwingenhort
localization.en.lua
localization.es.lua
localization.ru.lua
Razorgore.lua
Vaelastrasz.lua
Broodlord.lua
Firemaw.lua
Ebonroc.lua
Flamegor.lua
Chromaggus.lua
Nefarian.lua
+47
View File
@@ -0,0 +1,47 @@
local mod = DBM:NewMod("Ebonroc", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 168 $"):sub(12, -3))
mod:SetCreatureID(14601)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED"
)
local warnWingBuffet = mod:NewCastAnnounce(23339)
local warnShadowFlame = mod:NewCastAnnounce(22539)
local warnShadow = mod:NewTargetAnnounce(23340)
local timerWingBuffet = mod:NewNextTimer(31, 23339)
local timerShadowFlame = mod:NewCastTimer(2, 22539)
local timerShadow = mod:NewTargetTimer(8, 23340)
function mod:OnCombatStart(delay)
timerWingBuffet:Start(-delay)
end
function mod:SPELL_CAST_START(args)--did not see ebon use any of these abilities
if args:IsSpellID(23339) and self:IsInCombat() then
warnWingBuffet:Show()
timerWingBuffet:Start()
elseif args:IsSpellID(22539) and self:IsInCombat() then
timerShadowFlame:Start()
warnShadowFlame:Show()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(23340) then
warnShadow:Show(args.destName)
timerShadow:Start(args.destName)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(23340) then
timerShadow:Cancel(args.destName)
end
end
+39
View File
@@ -0,0 +1,39 @@
local mod = DBM:NewMod("Firemaw", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 168 $"):sub(12, -3))
mod:SetCreatureID(11983)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS"
)
local warnWingBuffet = mod:NewCastAnnounce(23339)
local warnShadowFlame = mod:NewCastAnnounce(22539)
local warnFlameBuffet = mod:NewSpellAnnounce(23341)
local timerWingBuffet = mod:NewNextTimer(31, 23339)
local timerShadowFlame = mod:NewCastTimer(2, 22539)
--local timerFlameBuffetCD = mod:NewCDTimer(10, 23341)
function mod:OnCombatStart(delay)
timerWingBuffet:Start(-delay)
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(23339) and self:IsInCombat() then
warnWingBuffet:Show()
timerWingBuffet:Start()
elseif args:IsSpellID(22539) and self:IsInCombat() then
timerShadowFlame:Start()
warnShadowFlame:Show()
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(23341) then
warnFlameBuffet:Show()
end
end
+40
View File
@@ -0,0 +1,40 @@
local mod = DBM:NewMod("Flamegor", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 168 $"):sub(12, -3))
mod:SetCreatureID(11981)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS"
)
local warnWingBuffet = mod:NewCastAnnounce(23339)
local warnShadowFlame = mod:NewCastAnnounce(22539)
local warnEnrage = mod:NewSpellAnnounce(23342)
local timerWingBuffet = mod:NewNextTimer(31, 23339)
local timerShadowFlame = mod:NewCastTimer(2, 22539)
local timerEnrageNext = mod:NewNextTimer(10, 23342)
function mod:OnCombatStart(delay)
timerWingBuffet:Start(-delay)
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(23339) and self:IsInCombat() then
warnWingBuffet:Show()
timerWingBuffet:Start()
elseif args:IsSpellID(22539) and self:IsInCombat() then
timerShadowFlame:Start()
warnShadowFlame:Show()
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(23342) then
warnEnrage:Show()
timerEnrageNext:Start()
end
end
+106
View File
@@ -0,0 +1,106 @@
local mod = DBM:NewMod("Nefarian", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 188 $"):sub(12, -3))
mod:SetCreatureID(11583)
mod:RegisterCombat("yell", L.YellPull)
mod:SetWipeTime(25)--guesswork
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"CHAT_MSG_MONSTER_YELL"
)
local warnClassCallSoon = mod:NewAnnounce("WarnClassCallSoon", 2)
local warnClassCall = mod:NewAnnounce("WarnClassCall", 3)
local warnPhaseSoon = mod:NewAnnounce("WarnPhaseSoon", 2)
local warnPhase = mod:NewAnnounce("WarnPhase", 3)
local warnShadowFlame = mod:NewCastAnnounce(22539, 2)
local warnFear = mod:NewCastAnnounce(22686, 2)
local warnVeilShadow = mod:NewTargetAnnounce(22687, 3)
local warnMC = mod:NewTargetAnnounce(22667, 4)
local timerClassCall = mod:NewTimer(30, "TimerClassCall")
local timerShadowFlame = mod:NewCastTimer(2, 22539)
local timerFearNext = mod:NewNextTimer(30, 22686)
local timerVeilShadow = mod:NewTargetTimer(6, 22687)
local timerMC = mod:NewTargetTimer(15, 22667)
local prewarn_P3
function mod:OnCombatStart(delay)
prewarn_P3 = false
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(22539) and self:IsInCombat() then
warnShadowFlame:Show()
timerShadowFlame:Start()
elseif args:IsSpellID(22686) and self:IsInCombat() then
warnFear:Show()
timerFearNext:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(22687) then
warnVeilShadow:Show(args.destName)
timerVeilShadow:Start(args.destName)
elseif args:IsSpellID(22667) then
warnMC:Show(args.destName)
timerMC:Start(args.destName)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(22687) then
timerVeilShadow:Cancel(args.destName)
end
end
function mod:UNIT_HEALTH(uId)
if UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and self:GetUnitCreatureId(uId) == 11583 and not prewarn_P3 then
warnPhaseSoon:Show("3")
prewarn_P3 = true
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg == L.YellDK then
self:SendSync("ClassCall", "DK")
elseif msg == L.YellDruid then
self:SendSync("ClassCall", "Druid")
elseif msg == L.YellHunter then
self:SendSync("ClassCall", "Hunter")
elseif msg == L.YellMage then
self:SendSync("ClassCall", "Mage")
elseif msg == L.YellPaladin then
self:SendSync("ClassCall", "Paladin")
elseif msg == L.YellPriest then
self:SendSync("ClassCall", "Priest")
elseif msg == L.YellRogue then
self:SendSync("ClassCall", "Rogue")
elseif msg == L.YellShaman then
self:SendSync("ClassCall", "Shaman")
elseif msg == L.YellWarlock then
self:SendSync("ClassCall", "Warlock")
elseif msg == L.YellWarrior then
self:SendSync("ClassCall", "Warrior")
elseif msg == L.YellPhase2 then
self:SendSync("Phase", 2)
elseif msg == L.YellPhase3 then
self:SendSync("Phase", 3)
end
end
function mod:OnSync(msg, arg)
if msg == "ClassCall" then
warnClassCallSoon:Schedule(25)
warnClassCall:Show(arg)
timerClassCall:Start(arg)
elseif msg == "Phase" then
warnPhase:Show(arg)
end
end
+35
View File
@@ -0,0 +1,35 @@
local mod = DBM:NewMod("Razorgore", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 188 $"):sub(12, -3))
mod:SetCreatureID(12435)
mod:SetMinSyncRevision(168)
mod:RegisterCombat("yell", L.YellPull)--Will fail if msg find isn't used, msg match won't find yell since a line break is omitted
mod:SetWipeTime(45)--guesswork
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED"
)
local warnConflagration = mod:NewTargetAnnounce(23023)
local timerConflagration = mod:NewTargetTimer(10, 23023)
local timerAddsSpawn = mod:NewTimer(47, "TimerAddsSpawn", 19879)--Only for start of adds, not adds after the adds heh.
function mod:OnCombatStart(delay)
timerAddsSpawn:Start()
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(23023) and args:IsDestTypePlayer() then
warnConflagration:Show(args.destName)
timerConflagration:Start(args.destName)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(23023) then
timerConflagration:Start(args.destName)
end
end
+47
View File
@@ -0,0 +1,47 @@
local mod = DBM:NewMod("Vaelastrasz", "DBM-BWL", 1)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 175 $"):sub(12, -3))
mod:SetCreatureID(13020)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"CHAT_MSG_MONSTER_YELL"
)
local warnBreath = mod:NewCastAnnounce(23461)
local warnAdrenaline = mod:NewTargetAnnounce(18173)
local specWarnAdrenaline = mod:NewSpecialWarningYou(18173)
local timerBreath = mod:NewCastTimer(2, 23461)
local timerAdrenaline = mod:NewTargetTimer(20, 18173)
local timerCombatStart = mod:NewTimer(43, "TimerCombatStart", 2457)
function mod:OnCombatStart(delay)
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(23461) then
warnBreath:Show()
timerBreath:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(18173) then
warnAdrenaline:Show(args.destName)
timerAdrenaline:Start(args.destName)
if args:IsPlayer() then
specWarnAdrenaline:Show()
end
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg == L.Event or msg:find(L.Event) then
timerCombatStart:Start()
end
end
+136
View File
@@ -0,0 +1,136 @@
local L
-----------------
-- Razorgore --
-----------------
L = DBM:GetModLocalization("Razorgore")
L:SetGeneralLocalization{
name = "Razorgore the Untamed"
}
L:SetTimerLocalization{
TimerAddsSpawn = "Adds spawning"
}
L:SetOptionLocalization{
TimerAddsSpawn = "Show timer for first adds spawning"
}
L:SetMiscLocalization{
YellPull = "Intruders have breached the hatchery! Sound the alarm! Protect the eggs at all costs!\r\n"--Yes this yell actually has a return and new line in it. as grabbed by transcriptor
}
-------------------
-- Vaelastrasz --
-------------------
L = DBM:GetModLocalization("Vaelastrasz")
L:SetGeneralLocalization{
name = "Vaelastrasz the Corrupt"
}
L:SetTimerLocalization{
TimerCombatStart = "Combat starts"
}
L:SetOptionLocalization{
TimerCombatStart = "Show time for start of combat"
}
L:SetMiscLocalization{
Event = "Too late, friends! Nefarius' corruption has taken hold...I cannot...control myself."
}
-----------------
-- Broodlord --
-----------------
L = DBM:GetModLocalization("Broodlord")
L:SetGeneralLocalization{
name = "Broodlord Lashlayer"
}
---------------
-- Firemaw --
---------------
L = DBM:GetModLocalization("Firemaw")
L:SetGeneralLocalization{
name = "Firemaw"
}
---------------
-- Ebonroc --
---------------
L = DBM:GetModLocalization("Ebonroc")
L:SetGeneralLocalization{
name = "Ebonroc"
}
----------------
-- Flamegor --
----------------
L = DBM:GetModLocalization("Flamegor")
L:SetGeneralLocalization{
name = "Flamegor"
}
------------------
-- Chromaggus --
------------------
L = DBM:GetModLocalization("Chromaggus")
L:SetGeneralLocalization{
name = "Chromaggus"
}
L:SetWarningLocalization{
WarnBreathSoon = "Breath soon",
WarnBreath = "%s",
WarnPhase2Soon = "Phase 2 soon"
}
L:SetTimerLocalization{
TimerBreathCD = "%s CD"
}
L:SetOptionLocalization{
WarnBreathSoon = "Show pre-warning for Chromaggus' Breaths",
WarnBreath = "Show warning when Chromaggus casts one of his Breaths",
TimerBreathCD = "Show Breath CD",
WarnPhase2Soon = "Announce when phase 2 is about to start"
}
----------------
-- Nefarian --
----------------
L = DBM:GetModLocalization("Nefarian")
L:SetGeneralLocalization{
name = "Nefarian"
}
L:SetWarningLocalization{
WarnClassCallSoon = "Class call soon",
WarnClassCall = "%s call",
WarnPhaseSoon = "Phase %s soon",
WarnPhase = "Phase %s"
}
L:SetTimerLocalization{
TimerClassCall = "%s call"
}
L:SetOptionLocalization{
TimerClassCall = "Show timer for class call duration",
WarnClassCallSoon = "Pre-warn class calls",
WarnClassCall = "Announce class calls",
WarnPhaseSoon = "Announce when a new phase is about to start",
WarnPhase = "Announce phase change"
}
L:SetMiscLocalization{
YellPull = "Let the games begin!",
YellP2 = "Well done, my minions. The mortals' courage begins to wane! Now, let's see how they contend with the true Lord of Blackrock Spire!!!",
YellP3 = "Impossible! Rise my minions! Serve your master once more!",
YellShaman = "Shamans, show me",
YellPaladin = "Paladins... I've heard you have many lives. Show me.",
YellDruid = "Druids and your silly shapeshifting. Lets see it in action!",
YellPriest = "Priests! If you're going to keep healing like that, we might as well make it a little more interesting!",
YellWarrior = "Warriors, I know you can hit harder than that! Lets see it!",
YellRogue = "Rogues? Stop hiding and face me!",
YellWarlock = "Warlocks, you shouldn't be playing with magic you don't understand. See what happens?",
YellHunter = "Hunters and your annoying pea-shooters!",
YellMage = "Mages too? You should be more careful when you play with magic..."
}
+125
View File
@@ -0,0 +1,125 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
local L
-----------------
-- Razorgore --
-----------------
L = DBM:GetModLocalization("Razorgore")
L:SetGeneralLocalization{
name = "Sangrevaja el Indomable"
}
L:SetTimerLocalization{
TimerAddsSpawn = "Salen adds"
}
L:SetOptionLocalization{
TimerAddsSpawn = "Mostrar tiempo para que salgan los primeros adds"
}
-------------------
-- Vaelastrasz --
-------------------
L = DBM:GetModLocalization("Vaelastrasz")
L:SetGeneralLocalization{
name = "Vaelastrasz el Corrupto"
}
-----------------
-- Broodlord --
-----------------
L = DBM:GetModLocalization("Broodlord")
L:SetGeneralLocalization{
name = "Señor de linaje Capazote"
}
---------------
-- Firemaw --
---------------
L = DBM:GetModLocalization("Firemaw")
L:SetGeneralLocalization{
name = "Faucefogo"
}
---------------
-- Ebonroc --
---------------
L = DBM:GetModLocalization("Ebonroc")
L:SetGeneralLocalization{
name = "Ebanorroca"
}
----------------
-- Flamegor --
----------------
L = DBM:GetModLocalization("Flamegor")
L:SetGeneralLocalization{
name = "Flamagor"
}
------------------
-- Chromaggus --
------------------
L = DBM:GetModLocalization("Chromaggus")
L:SetGeneralLocalization{
name = "Chromaggus"
}
L:SetWarningLocalization{
WarnBreathSoon = "Aliento pronto",
WarnBreath = "%s",
WarnPhase2Soon = "Fase 2 pronto"
}
L:SetTimerLocalization{
TimerBreathCD = "%s CD"
}
L:SetOptionLocalization{
WarnBreathSoon = "Mostrar pre-aviso para los Alientos",
WarnBreath = "Mostrar aviso cuando castea Aliento",
TimerBreathCD = "Mostrar tiempo para siguiente Aliento",
WarnPhase2Soon = "Mostrar pre-aviso para la fase 2"
}
----------------
-- Nefarian --
----------------
L = DBM:GetModLocalization("Nefarian")
L:SetGeneralLocalization{
name = "Nefarian"
}
L:SetWarningLocalization{
WarnClassCallSoon = "Debuff de clase pronto",
WarnClassCall = "Debuff de %s",
WarnPhaseSoon = "Fase %s pronto",
WarnPhase = "Fase %s"
}
L:SetTimerLocalization{
TimerClassCall = "%s Debuff de clase"
}
L:SetOptionLocalization{
TimerClassCall = "Mostrar duración de debuff de clase",
WarnClassCallSoon = "Mostrar pre-aviso para debuff de clase",
WarnClassCall = "Mostrar aviso para debuff de clase",
WarnPhaseSoon = "Mostrar pre-aviso para cambio de fase",
WarnPhase = "Mostrar aviso al cambiar de fase"
}
L:SetMiscLocalization{
YellPull = "¡Que comiencen los juegos!",
YellP2 = "Bien hecho, mis esbirros. El coraje de los mortales empieza a mermar. ¡Veamos ahora cómo se enfrentan al verdadero Señor de la Cubre de Roca Negra!",
YellP3 = "¡Imposible! ¡Erguíos, mis esbirros! ¡Servid a vuestro maestro una vez más!",
YellShaman = "Shamans, show me",--translate
YellPaladin = "Paladins... I've heard you have many lives. Show me.",--translate
YellDruid = "Druids and your silly shapeshifting. Lets see it in action!",--translate
YellPriest = "¡Sacerdotes! Si vais a seguir curando de esa forma, ¡podíamos hacerlo más interesante!",
YellWarrior = "¡Vamos guerreros, sé que podéis golpear más fuerte que eso! ¡Veámoslo!",
YellRogue = "Rogues? Stop hiding and face me!",--translate
YellWarlock = "Warlocks, you shouldn't be playing with magic you don't understand. See what happens?",--translate
YellHunter = "Hunters and your annoying pea-shooters!",--translate
YellMage = "¿Magos también? Deberíais tener más cuidado cuando jugáis con la magia...",
YellDK = "Caballero de la muerte"--translate
}
+125
View File
@@ -0,0 +1,125 @@
if GetLocale() ~= "ruRU" then return end
local L
-----------------
-- Razorgore --
-----------------
L = DBM:GetModLocalization("Razorgore")
L:SetGeneralLocalization{
name = "Бритвосмерт Неукротимый"
}
L:SetTimerLocalization{
TimerAddsSpawn = "Появление аддов"
}
L:SetOptionLocalization{
TimerAddsSpawn = "Показывать таймер до первого появления аддов"
}
-------------------
-- Vaelastrasz --
-------------------
L = DBM:GetModLocalization("Vaelastrasz")
L:SetGeneralLocalization{
name = "Валестраз Порочный"
}
-----------------
-- Broodlord --
-----------------
L = DBM:GetModLocalization("Broodlord")
L:SetGeneralLocalization{
name = "Предводитель драконов Разящий Бич"
}
---------------
-- Firemaw --
---------------
L = DBM:GetModLocalization("Firemaw")
L:SetGeneralLocalization{
name = "Огнечрев"
}
---------------
-- Ebonroc --
---------------
L = DBM:GetModLocalization("Ebonroc")
L:SetGeneralLocalization{
name = "Черноскал"
}
----------------
-- Flamegor --
----------------
L = DBM:GetModLocalization("Flamegor")
L:SetGeneralLocalization{
name = "Пламегор"
}
------------------
-- Chromaggus --
------------------
L = DBM:GetModLocalization("Chromaggus")
L:SetGeneralLocalization{
name = "Хромаггус"
}
L:SetWarningLocalization{
WarnBreathSoon = "Скоро дыхание",
WarnBreath = "%s",
WarnPhase2Soon = "Скоро 2-ая фаза"
}
L:SetTimerLocalization{
TimerBreathCD = "%s восстановление"
}
L:SetOptionLocalization{
WarnBreathSoon = "Предварительное предупреждение Дыхания Хромаггуса",
WarnBreath = "Показывать предупреждение о дыханиях Хромаггуса",
TimerBreathCD = "Показывать время восстановления дыханий",
WarnPhase2Soon = "Предупреждать о второй фазе"
}
----------------
-- Nefarian --
----------------
L = DBM:GetModLocalization("Nefarian")
L:SetGeneralLocalization{
name = "Нефариан"
}
L:SetWarningLocalization{
WarnClassCallSoon = "Скоро вызов класса",
WarnClassCall = "Дебафф на %s",
WarnPhaseSoon = "Скоро фаза %s",
WarnPhase = "Фаза %s"
}
L:SetTimerLocalization{
TimerClassCall = "%s зов"
}
L:SetOptionLocalization{
TimerClassCall = "Показывать таймер классовых вызовов",
WarnClassCallSoon = "Предупреждение классовых вызовов",
WarnClassCall = "Объявлять классовый вызов",
WarnPhaseSoon = "Объявлять, когда следующая фаза скоро начнется",
WarnPhase = "Объявлять смену фаз"
}
L:SetMiscLocalization{
YellPull = "Ну что ж, поиграем!",
YellP2 = "Браво, слуги мои! Смертные утрачивают мужество! Поглядим же, как они справятся с истинным Повелителем Черной горы!!!",
YellP3 = "Не может быть! Восстаньте, мои прислужники! Послужите господину еще раз!",
YellShaman = "Шаманы, покажите, на что способны ваши тотемы!",
YellPaladin = "Паладины… Я слышал, у вас несколько жизней. Докажите.",
YellDruid = "Друиды и их дурацкие превращения… Ну что ж, поглядим!",
YellPriest = "Жрецы! Если вы собираетесь продолжать так лечить, то давайте хоть немного разнообразим процесс!",
YellWarrior = "Воины! Я знаю, вы можете бить сильнее! Ну-ка, покажите!",
YellRogue = "Rogues? Stop hiding and face me!",
YellWarlock = "Чернокнижники, ну не беритесь вы за волшебство, которого сами не понимаете! Видите, что получилось?",
YellHunter = "Охотники со своими жалкими пугачами!",
YellMage = "И маги тоже? Осторожнее надо быть, когда играешь с магией…"
}
+13
View File
@@ -0,0 +1,13 @@
## Interface: 30300
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Burning Crusade|r
## SavedVariablesPerCharacter: DBMBurningCrusade_SavedModOptions
## LoadOnDemand: 0
## RequiredDeps: DBM-Core
## DefaultState: enabled
## Author: Tandanu and Nitram, updated by Junior and Szyler.
## X-Website: https://discord.gg/4ZHfgskSvM
localization.en.lua
localization.cn.lua
localization.tw.lua
localization.es.lua
DBMv3-Compatibility.lua
+466
View File
@@ -0,0 +1,466 @@
-- *********************************************************
-- ** Deadly Boss Mods - Core **
-- ** http://www.deadlybossmods.com **
-- *********************************************************
--
-- This addon is written and copyrighted by:
-- * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)
-- * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)
--
-- The localizations are written by:
-- * deDE: Tandanu/Nitram
-- * enGB: Nitram/Tandanu
-- * zhCN: yleaf(yaroot@gmail.com)
-- * zhTW: yleaf(yaroot@gmail.com)
-- * (add your names here!)
--
--
-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)
-- All included textures and sounds are copyrighted by their respective owners.
--
--
-- You are free:
-- * to Share — to copy, distribute, display, and perform the work
-- * to Remix — to make derivative works
-- Under the following conditions:
-- * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
-- * Noncommercial. You may not use this work for commercial purposes.
-- * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.
---------------
-- Globals --
---------------
DBMBurningCrusade_SavedModOptions = {}
DBMBC = {}
DBM_SBT = {}
--------------
-- Locals --
--------------
local frame = CreateFrame("Frame")
local function checkEntry(t, val)
for i, v in ipairs(t) do
if v == val then
return true
end
end
return false
end
----------------------
-- Event Handling --
----------------------
local function registerEvents(...)
for i = 1, select("#", ...) do
frame:RegisterEvent(select(i, ...))
end
end
frame:SetScript("OnEvent", function(self, event, ...) if DBMBC[event] then DBMBC[event](DBMBC, ...) end end)
registerEvents("ADDON_LOADED")
---------------
-- Options --
---------------
local function loadModOptions(mod)
end
--------------
-- OnLoad --
--------------
local bannedMods = { -- a list of "banned" (meaning they are replaced by another mod like DBM-Battlegrounds (replaced by DBM-PvP)) boss mods, these mods will not be loaded by DBM (and they wont show up in the GUI)
"DBM_Auchindoun", -- replaced by DBM-Party-BC
"DBM_Coilfang", -- replaced by DBM-Party-BC
"DBM_CoT", -- replaced by DBM-Party-BC
"DBM_TempestKeep", -- replaced by DBM-Party-BC
"DBM_Terrace", -- replaced by DBM-Party-BC
}
function DBMBC:ADDON_LOADED(mod)
if mod ~= "DBM-BurningCrusade" then return end
for i = 1, GetNumAddOns() do
if GetAddOnMetadata(i, "X-DBM-BC-AddOn") and not checkEntry(bannedMods, GetAddOnInfo(i)) then
table.insert(DBM.AddOns, {
sort = tonumber(GetAddOnMetadata(i, "X-DBM-Tab-Sort") or math.huge) or math.huge,
category = "BC",
name = GetAddOnMetadata(i, "X-DBM-Name") or "",
zone = {strsplit(",", GetAddOnMetadata(i, "X-DBM-Tab-LoadZone") or "")},
zoneId = {strsplit(",", GetAddOnMetadata(i, "X-DBM-Mod-LoadZoneID") or "")},
v3Tab = GetAddOnMetadata(i, "X-DBM-Tab-ID"),
modId = GetAddOnInfo(i),
})
end
for i = #DBM.AddOns[#DBM.AddOns].zoneId, 1, -1 do
local id = tonumber(DBM.AddOns[#DBM.AddOns].zoneId[i])
if id then
DBM.AddOns[#DBM.AddOns].zoneId[i] = id
else
table.remove(DBM.AddOns[#DBM.AddOns].zoneId, i)
end
end
end
table.sort(DBM.AddOns, function(v1, v2) return v1.sort < v2.sort end)
registerEvents("RAID_ROSTER_UPDATE")
DBM:ZONE_CHANGED_NEW_AREA()
end
-------------------------------
-- (Faked) Boss Mod Object --
-------------------------------
local proxy = {}
-----------------------
-- General Methods --
-----------------------
function proxy:RegisterEvents(...)
self.mod:RegisterEvents(...)
for i = 1, select("#", ...) do
local event = select(i, ...)
self.mod[event] = function(self, ...)
if self.proxy.OnEvent then self.proxy:OnEvent(event, ...) end
end
end
end
function proxy:SendSync(...)
self.mod:SendSync(...)
end
function proxy:AddMsg(...)
self.mod:AddMsg(...)
end
function proxy:AddOption(id, default, name, func)
self.mod:AddBoolOption(id, default, "announce", func)
DBM:GetModLocalization(self.mod.id):SetOptionLocalization({
[id] = name
})
end
function proxy:AddBarOption(bar, default)
self.mod:AddBoolOption(bar:gsub("%(%.%*%)", DBM_BC_TARGET), default, "timer")
if DBM_SBT[bar] then
DBM:GetModLocalization(self.mod.id):SetOptionLocalization({
[bar] = DBM_SBT[bar]
})
end
end
function proxy:IsWipe()
local dead = 0
for i = 1, GetNumRaidMembers() do
dead = dead + ((UnitIsDeadOrGhost("raid"..i) and 1) or 0)
end
return dead >= 18
end
function proxy:SetBossHealthInfo(...)
self.mod:SetBossHealthInfo(...)
end
--------------
-- Combat --
--------------
function proxy:RegisterCombat(type, ...)
self.mod:RegisterCombat(((type and type:lower()) or "combat"), ...)
end
function proxy:SetMinCombatTime(...)
self.mod:SetMinCombatTime(...)
end
function proxy:SetCreatureID(...)
self.mod:SetCreatureID(...)
end
-------------------
-- Range Check --
-------------------
function DBM_Gui_DistanceFrame_Show()
DBM.RangeCheck:Show()
end
function DBM_Gui_DistanceFrame_Hide()
DBM.RangeCheck:Hide()
end
function DBM_Gui_DistanceFrame_SetDistance(distance)
DBM.RangeCheck:Show(distance)
end
-----------------
-- Announces --
-----------------
local lastWarning
local lastWarningTime = 0
function proxy:Announce(msg, color, noBroadcast)
local warning = self["warning"..(color or 1)]
if not warning then return end
msg = msg:gsub("%s*%*%*%*%s*", "")
if msg ~= lastWarning or GetTime() - lastWarningTime > 1.5 then
lastWarning = msg
lastWarningTime = GetTime()
warning:Show(msg)
end
end
function proxy:ScheduleAnnounce(timer, msg, color)
local warning = self["warning"..(color or 1)]
if not warning then return end
warning:Schedule(timer, msg)
end
function proxy:UnScheduleAnnounce(msg, color)
local warning = self["warning"..(color or 1)]
if not warning then return end
warning:Cancel(msg)
end
function proxy:AddSpecialWarning(text)
self.specWarning:Show(text)
end
function proxy:SendHiddenWhisper(msg, player)
self.mod:SendWhisper(msg, player)
end
----------------
-- Schedule --
----------------
function proxy:Schedule(timer, func, ...)
self.mod:Schedule(timer, func, ...)
end
function proxy:ScheduleEvent(timer, ...)
self.mod:Schedule(timer, self.OnEvent, self, ...)
end
proxy.ScheduleSelf = proxy.ScheduleEvent
function proxy:ScheduleMethod(timer, method, ...)
self.mod:Schedule(timer, self[method], self, ...)
end
function proxy:UnSchedule(...)
self.mod:Unschedule(...)
end
function proxy:UnScheduleEvent(...)
self.mod:Unschedule(self.OnEvent, self, ...)
end
proxy.UnScheduleSelf = proxy.UnScheduleEvent
function proxy:UnScheduleMethod(method, ...)
self.mod:Unschedule(self[method], self, ...)
end
function proxy:UnScheduleAll()
self.mod:Unschedule()
end
function proxy:GetEventScheduleTimeLeft()
return 0
end
proxy.GetSelfScheduleTimeLeft = proxy.GetEventScheduleTimeLeft
function proxy:GetAnnounceScheduleTimeLeft()
return 0
end
function proxy:GetMethodScheduleTimeLeft()
return 0
end
------------
-- Bars --
------------
function proxy:StartStatusBarTimer(timer, name, icon, noBroadcast, repetitions, colorR, colorG, colorB, colorA)
if self.Options[name] == false then return end
self.timer:Start(timer, name)
self.timer:UpdateIcon(icon, name)
end
function proxy:UpdateStatusBarTimer(name, elapsed, timer, newName, newIcon, noBroadcast)
self.timer:Update(elapsed, timer, name)
if newIcon then self.timer:UpdateIcon(newIcon, name) end
if newName then self.timer:UpdateName(newName, name) end
end
function proxy:GetStatusBarTimerTimeLeft(name)
self.timer:GetTime(name)
end
function proxy:EndStatusBarTimer(name)
self.timer:Stop(name)
end
-------------
-- Icons --
-------------
function proxy:SetIcon(target, timer, icon)
self.mod:SetIcon(target, icon, timer)
end
function proxy:RemoveIcon(...)
self.mod:RemoveIcon(...)
end
function proxy:RemoveAllIcons()
return 0
end
--------------------------
-- Callback Functions --
--------------------------
local function onSync(self, ...)
if self.proxy.OnSync then self.proxy:OnSync(...) end
end
local function onCombatStart(self, delay, ...)
self.proxy.InCombat = true
if self.proxy.OnCombatStart then self.proxy:OnCombatStart(delay or 0, ...) end
end
local function onCombatEnd(self, ...)
if self.proxy.OnCombatEnd then self.proxy:OnCombatEnd(...) end
self.proxy.InCombat = false
end
local function onUpdate(self, elapsed)
if self.proxy.OnUpdate then self.proxy:OnUpdate(elapsed) end
end
local function onInitialize(self)
if self.proxy.OnUpdate then self:RegisterOnUpdateHandler(onUpdate, self.proxy.UpdateInterval or 0.2) end
self.proxy.Options = self.Options
end
-------------------
-- Constructor --
-------------------
do
local function getAddOnIDByTab(tab)
for i, v in ipairs(DBM.AddOns) do
if tab == v.v3Tab then
return v.modId
end
end
end
local mt = {__index = proxy}
function DBM:NewBossMod(id, name, _, zone, tab)
local obj = setmetatable({}, mt)
local mod = DBM:NewMod(id, getAddOnIDByTab(tab))
mod:SetRevision(1)
mod:SetZone(zone)
obj.timer = mod:NewTimer(10, "%s", nil, nil, false)
obj.warning1 = mod:NewAnnounce("%s", 1, nil, nil, false)
obj.warning2 = mod:NewAnnounce("%s", 2, nil, nil, false)
obj.warning3 = mod:NewAnnounce("%s", 3, nil, nil, false)
obj.warning4 = mod:NewAnnounce("%s", 4, nil, nil, false)
obj.specWarning = mod:NewSpecialWarning("%s", nil, false)
DBM:GetModLocalization(id):SetGeneralLocalization({
name = name
})
obj.mod = mod
obj.Options = mod.Options
mod.proxy = obj
mod.OnSync = onSync
mod.OnCombatStart = onCombatStart
mod.OnCombatEnd = onCombatEnd
mod.OnInitialize = onInitialize
return obj
end
end
----------------------
-- Misc functions --
----------------------
function DBM:GetMod(id)
return DBM:GetModByName(id) and DBM:GetModByName(id).proxy
end
function DBM.SecondsToTime(t)
if t <= 60 then
return ("%.1f"):format(t)
else
return ("%d:%0.2d"):format(t/60, math.fmod(t, 60))
end
end
function DBM.GetBuff(unitID, buff)
local i = 1
while UnitBuff(unitID, i) do
if UnitBuff(unitID, i) == buff then
return i
end
i = i + 1
end
end
function DBM.GetDebuff(unitID, buff)
local i = 1
while UnitDebuff(unitID, i) do
if UnitDebuff(unitID, i) == buff then
return i
end
i = i + 1
end
end
DBM.Rank = 0
do
local function updateRank()
DBM.Rank = DBM:GetRaidRank() or 0
end
function DBMBC:RAID_ROSTER_UPDATE()
DBM:Schedule(0, updateRank)
end
end
-------------------------------
-- Schedule function hooks --
-------------------------------
do
local old = DBM.Schedule
function DBM:Schedule(t, ...)
if type(self) == "number" then
return old(DBM, self, t, ...)
else
return old(self, t, ...)
end
end
end
do
local old = DBM.Unschedule
function DBM:Unschedule(...)
if type(self) == "function" then
return old(DBM, self, ...)
else
return old(self, ...)
end
end
end
function DBM.UnSchedule(...)
return DBM:Unschedule(...)
end
+34
View File
@@ -0,0 +1,34 @@
-- yleaf(yaroot@gmail.com)
if GetLocale() ~= "zhCN" then return end
DBM_BC_TARGET = "<目标>"
DBM_GRUULS_LAIR = "格鲁尔的巢穴"
DBM_MAGS_LAIR = "玛瑟里顿的巢穴"
DBM_HELLFIRE = "地狱火半岛"
DBM_SHADOWMOON = "影月谷"
DBM_GENERIC_ENRAGE_WARN = "%s%s后激怒"
DBM_GENERIC_PHASE_MSG = "第%s阶段"
DBM_GENERIC_PHASE_MSG2 = "第%s阶段"
DBM_PHASE = "第%s阶段"
DBM_WAVE = "第%s波"
DBM_SET_ICON = "设置图标"
DBM_SEND_WHISPER = "发送密语"
DBM_HP_UNKNOWN = "未知血量"
DBM_NO_TARGET = "<没有目标>"
DBM_UPGRADE = "升级"
DBM_MISC = "其他"
DBM_IS = ""
DBM_OR = ""
DBM_AND = ""
DBM_UNKNOWN = "未知"
DBM_LOCAL = "本地"
DBM_SEC = ""
DBM_MIN = ""
DBM_SECOND = ""
DBM_SECONDS = ""
DBM_MINUTES = "分钟"
DBM_MINUTE = "分钟"
DBM_DEAD = "死亡"
DBM_OFFLINE = "离线"
+31
View File
@@ -0,0 +1,31 @@
DBM_BC_TARGET = "<target>"
DBM_GRUULS_LAIR = "Gruul's Lair"
DBM_MAGS_LAIR = "Magtheridon's Lair"
DBM_HELLFIRE = "Hellfire Peninsula"
DBM_SHADOWMOON = "Shadowmoon Valley"
DBM_GENERIC_ENRAGE_WARN = "Enrage in %s %s"
DBM_GENERIC_PHASE_MSG = "Phase %s"
DBM_GENERIC_PHASE_MSG2 = "%s phase"
DBM_PHASE = "Phase %s"
DBM_WAVE = "Wave %s"
DBM_SET_ICON = "Set icon"
DBM_SEND_WHISPER = "Send whisper"
DBM_HP_UNKNOWN = "HP unknown"
DBM_NO_TARGET = "<no target>"
DBM_UPGRADE = "upgrade"
DBM_MISC = "miscellaneous"
DBM_IS = "is"
DBM_OR = "or"
DBM_AND = "and"
DBM_UNKNOWN = "unknown"
DBM_LOCAL = "local"
DBM_SEC = "sec"
DBM_MIN = "min"
DBM_SECOND = "second"
DBM_SECONDS = "seconds"
DBM_MINUTES = "minutes"
DBM_MINUTE = "minute"
DBM_DEAD = "Dead"
DBM_OFFLINE = "Offline"
+33
View File
@@ -0,0 +1,33 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
DBM_BC_TARGET = "<target>"
DBM_GRUULS_LAIR = "Guarida de Gruul"
DBM_MAGS_LAIR = "Guarida de Magtheridon"
DBM_HELLFIRE = "Península del Fuego Infernal"
DBM_SHADOWMOON = "Valle Sombraluna"
DBM_GENERIC_ENRAGE_WARN = "Enrage en %s %s"
DBM_GENERIC_PHASE_MSG = "Fase %s"
DBM_GENERIC_PHASE_MSG2 = "%s fase"
DBM_PHASE = "Fase %s"
DBM_WAVE = "Oleada %s"
DBM_SET_ICON = "Poner icono"
DBM_SEND_WHISPER = "Enviar susurro"
DBM_HP_UNKNOWN = "HP Desconocida"
DBM_NO_TARGET = "<no target>"
DBM_UPGRADE = "actualizar"
DBM_MISC = "miscelanea"
DBM_IS = "es"
DBM_OR = "o"
DBM_AND = "y"
DBM_UNKNOWN = "desconocido"
DBM_LOCAL = "local"
DBM_SEC = "seg"
DBM_MIN = "min"
DBM_SECOND = "segundo"
DBM_SECONDS = "segundos"
DBM_MINUTES = "minutos"
DBM_MINUTE = "minuto"
DBM_DEAD = "Muerto"
DBM_OFFLINE = "Desconectado"
+34
View File
@@ -0,0 +1,34 @@
-- yleaf(yaroot@gmail.com)
if GetLocale() ~= "zhTW" then return end
DBM_BC_TARGET = "<目標>"
DBM_GRUULS_LAIR = "戈魯爾之巢"
DBM_MAGS_LAIR = "瑪瑟里頓的巢穴"
DBM_HELLFIRE = "地獄火半島"
DBM_SHADOWMOON = "影月谷"
DBM_GENERIC_ENRAGE_WARN = "%s%s后激怒"
DBM_GENERIC_PHASE_MSG = "第%s階段"
DBM_GENERIC_PHASE_MSG2 = "第%s階段"
DBM_PHASE = "第%s階段"
DBM_WAVE = "第%s波"
DBM_SET_ICON = "設置圖標"
DBM_SEND_WHISPER = "發送密語"
DBM_HP_UNKNOWN = "未知血量"
DBM_NO_TARGET = "<沒有目標>"
DBM_UPGRADE = "升級"
DBM_MISC = "其他"
DBM_IS = ""
DBM_OR = ""
DBM_AND = ""
DBM_UNKNOWN = "未知"
DBM_LOCAL = "本地"
DBM_SEC = ""
DBM_MIN = ""
DBM_SECOND = ""
DBM_SECONDS = ""
DBM_MINUTES = "分鐘"
DBM_MINUTE = "分鐘"
DBM_DEAD = "死亡"
DBM_OFFLINE = "離線"
+218
View File
@@ -0,0 +1,218 @@
v5.00 29/12/2020
- Initial release
----------------------------------------------------------------------------------------------------
v5.01 13/01/2021
- Added hateful strikes to Gruul/Curator
- Added Magtheridon Heroic
- Added Enrage timer on Maulgar
- Added Yell on Gruul Cave In
- Added Heroic version of Gruul's Cave In
- Fixed Heroic Prince
- Fixed Heroic Illhoof
- SpellTimers (player cooldowns) are now separate bars from boss timers
- Added vanilla mods from ABM
----------------------------------------------------------------------------------------------------
v5.02 06/03/2021
- Added Animal bosses in Karazhan
- Added warning for Magtheridon debris
- Added timer for Infernals on Magtheridon
- Added sunder armor stacks on Prince
- Improved heroic Magtheridon targeting search for fingers and hands casts.
- Fixed Moroes PWS cast trigger
- Fixed new Gruul timers
- Fixed timers running too long on Illhoof
- Fixed the timers on Maulgar
- Fixed the berserk timer on Kazzak
- Raidleaders/assist can now opt in to autmatically whisper the target of the Kazzak bomb
----------------------------------------------------------------------------------------------------
v5.03 09/04/2021
- Added Heroic Romulo and Julianne mechanic
- Added missing onyxia vanilla module
- Fixed error on Magtheridon's Infernals
- Fixed wrong spell name on Rokad (Animal boss)
- Fixed the first infernal timer of Prince
- Fixed an error on Heroic Aran
- Fixed a missing translation on Opera in Karazhan
- Fixed timer for Holy Wrath on Maiden
- Fixed the Black Morass portal timer
----------------------------------------------------------------------------------------------------
v5.04 05/05/2021
- Added support for phases for vanilla and T4 bosses in Details!
- Added support for Raid Ability Timeline (WeakAura2)
- Added support for /Pull as an alias for /dbm pull
- Added a backup CD timer for Maiden's Holy Wrath
- Fixed a bunch of bosses for Naxxramas
- Fixed a bunch of lua errors in vanilla raids
- Fixed Whirlwind timers for Maulgar
- Fixed Magtheridon back to working state
- Fixed missing start timers on Prince
- Fixed broken Sunder warning on Prince
- Fixed Into Shadow Realm timer for Heroic 25 man Prince
- Fixed heroic Romulo and Julianne mechanic
- Fixed Boulder and Cave in CD timers for Gruul
- Added different versions for heroic Hateful Strike/Hateful Bolt on Gruul/Curator
----------------------------------------------------------------------------------------------------
v5.05 23/05/2021
- Added special warning to purge Power word: Shield on Maulgar
- Added Repentance cast timer to Maiden
- Added Moroes enrage timer
- Added a phase 2 warning on Moroes
- Fixed whirlwind timers on Maulgar
- Fixed Fingers and Hands timer on Magtheridon to only show on Ascended
- Added a timer for Attumen curse
- Fixed Moroes Vanish timer
- Fixed Desperate prayer on heroic Flex
- Fixed Romulo and Julianne lua error
- Fixed timers for Howl and Red riding hood on Big Bad Wolf
- Fixed Julianne heal cast time per difficutly
- Fixed Hateful timer in phase 2 Curator
- Fixed Smoldering announce text
- Fixed Illhoof curse timer
- Fixed cast timer on Netherspite's Breath
- Fixed Aran Flame Wreath cast timer
- Fixed Phase 3 warning on Prince
- Fixed different timers on Prince per difficulty
- Fixed Infernal timers on Prince
- Fixed Sunder armor announce on Prince
----------------------------------------------------------------------------------------------------
v5.06 13/06/2021
- Added "/pull 0" and "/pull cancel" as commands to stop a pull timer.
(Requires everyone to update for everyone to see the timer cancelled)
- Added mechanics in the following Mythic Dungeons:
- Shattered Halls
- Underbog
- Steamvault
- Auchenai Crypts
- Mana Tombs
- Sethekk Halls
- Shadow Labs
- Fixed missing timers on Maiden
- Fixed the timer on Curator being off after the first Evocate
- Fixed Big Bad Wolf timers of Red Riding Hood mechanic
----------------------------------------------------------------------------------------------------
v5.07 05/08/2021
- Added all SSC bosses
- Fixed icon for Big Bad Wolf opera event's Red Riding Hood target in Karazhan
- Fixed Magtheridon's Hand and Fingers timers to only appear in Ascended
- Added warning for standing in Conflaguration on Magtheridon
- Fixed lua error in Shadow Labs
- Removed warning for Immolate on Garr (casts too often with no danger)
----------------------------------------------------------------------------------------------------
v5.07.14 17/08/2021
- Rework of Lady Vashj module, all timers fixed.
- Ascended mechanics added for Lady Vashj.
- Fixed Free for All not activating correctly on Lady Vashj.
- Added Toxic Sporebat timer for Phase 3.
- Fixed Tainted Core not being correctly tracked.
- Fixed Coilfang Enchantress spam.
- Fixed Static Charge targets not being shown on Lady Vashj.
- Added missing icons for Phase 2 timers on Lady Vashj.
- Added absent Special Warning for standing in Toxic Spore.
- Fixed Berserk timer being incorrect for Lady Vashj.
----------------------------------------------------------------------------------------------------
v5.08 20/08/2021
- Fixed timers for Ascended Fathomlord
- Fixed timers for Ascended Tidewalker
- Fixed Generator timer on Vashj in phase 3
- Added tentacle for Lurker
- Fixed Geyser timer stop on breath on Lurker
- Added new Hakkar mechanics
- Added new mechanics to several other ZG bosses
----------------------------------------------------------------------------------------------------
v5.08.1 25/09/2021
- Added new Mechancis to MC bosses:
- Lucifron
- Magmadar
- Gehennas
- Garr
- Baron
- Golemagg
----------------------------------------------------------------------------------------------------
v5.08.2 27/09/2021
- Added new Mechancis to MC bosses:
- Shazzrah
- Ragnaros
- Adding all difficulty IDs to Geddon
- Fixed the spam on Reverb on Garr
- Added timers to Golemagg's cave in
- Removed spammy abilities from Sulfuron
----------------------------------------------------------------------------------------------------
v5.09 20/10/2021
- Added new mechanics to Onyxia Ascended
- Added warning for Poison pool on Hakkar
- Fixed lua error on Tidewalker
- Fixed timer for Son of Hakkar on Hakkar
- Fixed lua error in Black Morass
----------------------------------------------------------------------------------------------------
v5.10 24/01/2022
- Added all Tempest Keep bosses
- Fixed lua error on Tidewalker
----------------------------------------------------------------------------------------------------
v5.11 17/02/2022
- Fixed combatstop on Al'ar
- Fixed repeat timer of Pound on Void Reaver
- Fixed Void Reaver fire warning to only show on self
- Fixed timer on Solarian's Lunar/Solar Wrath
- Fixed timer on Solarian's Void Spawn (New timer on killing Void Spawn)
----------------------------------------------------------------------------------------------------
v5.12 19/04/2022
- Fixed Dive Bomb timers on Al'ar
- Fixed Flame Cascade (fire tornado) timer on Al'ar
- Fixed Next Breath timer on Al'ar
- Fixed platform change timer on Al'ar
- Fixed Phasing issues on Al'ar
- Fixed error on Feather refresh on Al'ar
- Added Opt-In option to yell on receiving Living Bomb on Al'ar
- Removed unused code, combat log events and simplified codings on Void Reaver
- Fixed the wording of upcoming priest announcements on High Astromancer Solarian
- Fixed timers for Solar and Lunar Wrath yells on High Astromancer Solarian
- Changed the warning level of Solar and Lunar stacks from 3 to 5 on High Astromancer Solarian
- Added timer and warning for Void Seed on High Astromancer Solarian
- Added Opt-In option to yell on receiving Panic on High Astromancer Solarian
- Added Opt-In option to set icon on Ascended Orbital Blast target on High Astromancer Solarian
- Fixed the combat entry point on Kael'thas Sunstrider
- Fixed the timer delays in last phase for Ascended difficulty on Kael'thas Sunstrider
- Fixed first pull timer for Telonicus on Kael'thas Sunstrider
- Fixed timers for council resurrection on Kael'thas Sunstrider
- Fixed timer for Kael'thas Sunstrider activation on Kael'thas Sunstrider
- Fixed Thaladred the Darkener's Gaze and Bladestorm mechanic change timers and warnings on Ascended difficulties on Kael'thas Sunstrider
- Added warnings and timers for Focused Burst on Kael'thas Sunstrider
- Added warnings and timers for World in Flames on Kael'thas Sunstrider
- Added warnings and timers for Bladestorm on Kael'thas Sunstrider
- Added warnings and timers for Blood Leech on Kael'thas Sunstrider
- Added warnings and timers for Mana Shield on Kael'thas Sunstrider
- Added warnings and timers for Rebirth on Kael'thas Sunstrider
- Added warnings and timers for Flamestrike on Kael'thas Sunstrider
- Added warnings and timers for Form Dying Star on Kael'thas Sunstrider
- Added warnings and timers for Gravity Lapse on Kael'thas Sunstrider
- Added Opt-In option to set icon on Gaze of the Darkener target on Kael'thas Sunstrider
- Added Opt-In option to set icon on Focused Burst target on Kael'thas Sunstrider
- Added checks for ascended only mechanics to only show on Ascended difficulties in Tempest Keep
----------------------------------------------------------------------------------------------------
v5.13 dd/mm/yyyy
- Fixed the combat entry point for long and short intro on Kael'thas Sunstrider
- Fixed a LUA error on Solarian
- Fixed the "Lunar Fire (Unknown" bug on Solarion
- Fixed double Voidspawn timers going off on Solarion
- Fixed Lunar Wrath yell countdown timer on Solarion
- Added some of the mechanics for the mobs in Tempest Keep
----------------------------------------------------------------------------------------------------
v5.14 08/08/2022
- Added failsafe to avoid double triggers going into Phase 2
- Redid timers for Finger and Hand of Death
- Fixed Phase 3 timers
- Added timer for the Debris damage going into Phase 3
- Added a proper target function to always show who's the target of Finger and Hand of Death
----------------------------------------------------------------------------------------------------
v5.15 16/10/2022
- Added all Zul'Aman bosses and timers for Normal and Heroic
- Fixed pull cancel message to no longer have an extra "0" at the end
- Fixed and improved yellLivingBomb on Alar. This option is now turned on by default and will now count down from 3 before you drop it.
- Fixed warnFlameBreath on Alar not working for all difficulties
- Solarion now warns stack number at 4 instead of 5
----------------------------------------------------------------------------------------------------
+250
View File
@@ -0,0 +1,250 @@
-- This file uses models and textures taken from TomTom. The 3d arrow model was created by Guillotine (curse.guillotine@gmail.com) and 2d minimap textures by Cladhaire.
----------------------------
-- Initialize variables --
----------------------------
-- globals
DBM.Arrow = {}
-- locals
local runAwayArrow
local targetType
local targetPlayer
local targetX, targetY
local hideTime, hideDistance
-- cached variables
local pi, pi2 = math.pi, math.pi * 2
local floor = math.floor
local sin, cos, atan2, sqrt, min = math.sin, math.cos, math.atan2, math.sqrt, math.min
local GetPlayerMapPosition = GetPlayerMapPosition
--------------------
-- Create Frame --
--------------------
local frame = CreateFrame("Button", nil, UIParent)
frame:Hide()
frame:SetFrameStrata("HIGH")
frame:SetWidth(56)
frame:SetHeight(42)
frame:SetMovable(true)
frame:EnableMouse(false)
frame:RegisterForDrag("LeftButton", "RightButton")
frame:SetScript("OnDragStart", function(self)
self:StartMoving()
end)
frame:SetScript("OnDragStop", function(self)
self:StopMovingOrSizing()
local point, _, _, x, y = self:GetPoint(1)
DBM.Options.ArrowPoint = point
DBM.Options.ArrowPosX = x
DBM.Options.ArrowPosY = y
end)
local arrow = frame:CreateTexture(nil, "OVERLAY")
arrow:SetTexture("Interface\\AddOns\\DBM-Core\\textures\\arrows\\Arrow.blp")
arrow:SetAllPoints(frame)
---------------------
-- Map Utilities --
---------------------
local SetMapToCurrentZone -- throttled SetMapToCurrentZone function to prevent lag issues with unsupported WorldMap addons
do
local lastMapUpdate = 0
function SetMapToCurrentZone(...)
if GetTime() - lastMapUpdate > 1 then
lastMapUpdate = GetTime()
return _G.SetMapToCurrentZone(...)
end
end
end
local calculateDistance
do
local mapSizes = DBM.MapSizes
function calculateDistance(x1, y1, x2, y2)
local mapName = GetMapInfo()
local floors = mapSizes[mapName]
if not floors then
return
end
local dims = floors[GetCurrentMapDungeonLevel()]
if not dims and levels and GetCurrentMapDungeonLevel() == 0 then -- we are in a known zone but the dungeon level seems to be wrong
SetMapToCurrentZone() -- fixes the dungeon level (if it was wrong for some reason)
dims = levels[GetCurrentMapDungeonLevel()] -- try again
end
if not dims then -- we are in an unknown dungeon :(
return
end
local dX = (x1 - x2) * dims[1]
local dY = (y1 - y2) * dims[2]
return sqrt(dX * dX + dY * dY)
end
end
-- GetPlayerFacing seems to return values between -pi and pi instead of 0 - 2pi sometimes since 3.3.3
local GetPlayerFacing = function(...)
local result = GetPlayerFacing(...)
if result < 0 then
result = result + pi2
end
return result
end
------------------------
-- Update the arrow --
------------------------
local updateArrow
do
local currentCell
function updateArrow(direction, distance)
local cell = floor(direction / pi2 * 108 + 0.5) % 108
if cell ~= currentCell then
currentCell = cell
local column = cell % 9
local row = floor(cell / 9)
local xStart = (column * 56) / 512
local yStart = (row * 42) / 512
local xEnd = ((column + 1) * 56) / 512
local yEnd = ((row + 1) * 42) / 512
arrow:SetTexCoord(xStart, xEnd, yStart, yEnd)
end
if distance then
if runAwayArrow then
local perc = distance / hideDistance
arrow:SetVertexColor(1 - perc, perc, 0)
if distance >= hideDistance then
frame:Hide()
end
else
local perc = min(distance, 100) / 100
arrow:SetVertexColor(1, 1 - perc, 0)
if distance <= hideDistance then
frame:Hide()
end
end
else
if runAwayArrow then
arrow:SetVertexColor(1, 0.3, 0)
else
arrow:SetVertexColor(1, 1, 0)
end
end
end
end
------------------------
-- OnUpdate Handler --
------------------------
do
local rotateState = 0
-- local skipFrame -- todo: skipping frames makes the arrow laggy, maybe skip frames if frame rate >= 45
frame:SetScript("OnUpdate", function(self, elapsed)
if WorldMapFrame:IsShown() then -- it doesn't work while the world map frame is shown
arrow:Hide()
return
end
-- skipFrame = not skipFrame
-- if skipFrame then
-- return
-- end
if hideTime and GetTime() > hideTime then
frame:Hide()
end
arrow:Show()
local x, y = GetPlayerMapPosition("player")
if x == 0 and y == 0 then
SetMapToCurrentZone()
x, y = GetPlayerMapPosition("player")
if x == 0 and y == 0 then
self:Hide() -- hide the arrow if you enter a zone without a map
return
end
end
if targetType == "player" then
targetX, targetY = GetPlayerMapPosition(targetPlayer)
if targetX == 0 and targetY == 0 then
self:Hide() -- hide the player if the target doesn't exist. TODO: just hide the texture and add a timeout
end
elseif targetType == "rotate" then
rotateState = rotateState + elapsed
targetX = x + cos(rotateState)
targetY = y + sin(rotateState)
end
if not targetX or not targetY then
return
end
local angle = atan2(x - targetX, targetY - y)
if angle <= 0 then -- -pi < angle < pi but we need/want a value between 0 and 2 pi
if runAwayArrow then
angle = -angle -- 0 < angle < pi
else
angle = pi - angle -- pi < angle < 2pi
end
else
if runAwayArrow then
angle = pi2 - angle -- pi < angle < 2pi
else
angle = pi - angle -- 0 < angle < pi
end
end
updateArrow(angle - GetPlayerFacing(), calculateDistance(x, y, targetX, targetY))
end)
end
----------------------
-- Public Methods --
----------------------
local function show(runAway, x, y, distance, time)
local player
if type(x) == "string" then
player, hideDistance, hideTime = x, y, hideDistance
end
frame:Show()
runAwayArrow = runAway
hideDistance = distance or runAway and 100 or 3
if time then
hideTime = time + GetTime()
else
hideTime = nil
end
if player then
targetType = "player"
targetPlayer = player
else
targetType = "fixed"
targetX, targetY = x, y
end
end
function DBM.Arrow:ShowRunTo(...)
return show(false, ...)
end
function DBM.Arrow:ShowRunAway(...)
return show(true, ...)
end
function DBM.Arrow:Hide(autoHide)
frame:Hide()
end
local function endMove()
frame:EnableMouse(false)
DBM.Arrow:Hide()
end
function DBM.Arrow:Move()
targetType = "rotate"
runAwayArrow = false
hideDistance = 5
frame:EnableMouse(true)
frame:Show()
DBM.Bars:CreateBar(25, DBM_ARROW_MOVABLE, "Interface\\Icons\\Spell_Holy_BorrowedTime")
DBM:Unschedule(endMove)
DBM:Schedule(25, endMove)
end
function DBM.Arrow:LoadPosition()
frame:SetPoint(DBM.Options.ArrowPoint, DBM.Options.ArrowPosX, DBM.Options.ArrowPosY)
end
+284
View File
@@ -0,0 +1,284 @@
---------------
-- Globals --
---------------
DBM.BossHealth = {}
-------------
-- Locals --
-------------
local bossHealth = DBM.BossHealth
local bars = {}
local barCache = {}
local updateFrame
local getBarId
local updateBar
local anchor
local header
local dropdownFrame
--local sortingEnabled
do
local id = 0
function getBarId()
id = id + 1
return id
end
end
------------
-- Menu --
------------
local menu
menu = {
{
text = DBM_CORE_RANGECHECK_LOCK,
checked = false, -- requires DBM.Options which is not available yet
func = function()
menu[1].checked = not menu[1].checked
DBM.Options.HealthFrameLocked = menu[1].checked
end
},
{
text = DBM_CORE_BOSSHEALTH_HIDE_FRAME,
notCheckable = true,
func = function() bossHealth:Hide() end
}
}
-----------------------
-- Script Handlers --
-----------------------
local function onMouseDown(self, button)
if button == "LeftButton" and not DBM.Options.HealthFrameLocked then
anchor.moving = true
anchor:StartMoving()
end
end
local function onMouseUp(self, button)
anchor.moving = nil
anchor:StopMovingOrSizing()
local point, _, _, x, y = anchor:GetPoint(1)
DBM.Options.HPFramePoint = point
DBM.Options.HPFrameX = x
DBM.Options.HPFrameY = y
if button == "RightButton" then
EasyMenu(menu, dropdownFrame, "cursor", nil, nil, "MENU")
end
end
local onHide = onMouseUp
-----------------
-- Apply Style --
-----------------
local function updateBarStyle(bar, id)
bar:ClearAllPoints()
if DBM.Options.HealthFrameGrowUp then
bar:SetPoint("BOTTOM", bars[id - 1] or anchor, "TOP", 0, 0)
else
bar:SetPoint("TOP", bars[id - 1] or anchor, "BOTTOM", 0, 0)
end
local barborder = _G[bar:GetName().."BarBorder"]
local barbar = _G[bar:GetName().."Bar"]
local width = DBM.Options.HealthFrameWidth
if width < 175 then -- these health frames really suck :(
barbar:ClearAllPoints()
barbar:SetPoint("CENTER", barbar:GetParent(), "CENTER", -6, 0)
bar:SetWidth(DBM.Options.HealthFrameWidth)
barborder:SetWidth(DBM.Options.HealthFrameWidth * 0.99)
barbar:SetWidth(DBM.Options.HealthFrameWidth * 0.95)
elseif width >= 225 then
barbar:ClearAllPoints()
barbar:SetPoint("CENTER", barbar:GetParent(), "CENTER", 5, 0)
bar:SetWidth(DBM.Options.HealthFrameWidth)
barborder:SetWidth(DBM.Options.HealthFrameWidth * 0.995)
barbar:SetWidth(DBM.Options.HealthFrameWidth * 0.965)
else
bar:SetWidth(DBM.Options.HealthFrameWidth)
barborder:SetWidth(DBM.Options.HealthFrameWidth * 0.99)
barbar:SetWidth(DBM.Options.HealthFrameWidth * 0.95)
end
end
-----------------------
-- Create the Frame --
-----------------------
local function createFrame(self)
anchor = CreateFrame("Frame", nil, UIParent)
anchor:SetWidth(60)
anchor:SetHeight(10)
anchor:SetMovable(1)
anchor:EnableMouse(1)
anchor:SetPoint(DBM.Options.HPFramePoint, UIParent, DBM.Options.HPFramePoint, DBM.Options.HPFrameX, DBM.Options.HPFrameY)
header = anchor:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall")
header:SetPoint("BOTTOM", anchor, "BOTTOM")
anchor:SetScript("OnUpdate", updateFrame)
anchor:SetScript("OnMouseDown", onMouseDown)
anchor:SetScript("OnMouseUp", onMouseUp)
anchor:SetScript("OnHide", onHide)
dropdownFrame = CreateFrame("Frame", "DBMBossHealthDropdown", anchor, "UIDropDownMenuTemplate")
menu[1].checked = DBM.Options.HealthFrameLocked
end
local function createBar(self, cId, name)
local bar = table.remove(barCache, #barCache) or CreateFrame("Frame", "DBM_BossHealth_Bar_"..getBarId(), anchor, "DBMBossHealthBarTemplate")
bar:Show()
local bartext = _G[bar:GetName().."BarName"]
local barborder = _G[bar:GetName().."BarBorder"]
local barbar = _G[bar:GetName().."Bar"]
barborder:SetScript("OnMouseDown", onMouseDown)
barborder:SetScript("OnMouseUp", onMouseUp)
barborder:SetScript("OnHide", onHide)
bar.id = cId
bar.hidden = false
bar:ClearAllPoints()
bartext:SetText(name)
updateBar(bar, 100)
return bar
end
------------------
-- Bar Update --
------------------
function updateBar(bar, percent, dontShowDead)
local bartimer = _G[bar:GetName().."BarTimer"]
local barbar = _G[bar:GetName().."Bar"]
bartimer:SetText((percent > 0 or dontShowDead) and math.floor(percent).."%" or DBM_CORE_DEAD)
barbar:SetValue(percent)
barbar:SetStatusBarColor((100 - percent) / 100, percent/100, 0)
bar.value = percent
local bossAlive = false
for i = 1, #bars do
if bars[i].value > 0 then
bossAlive = true
break
end
end
if not bossAlive and #bars > 0 then
bossHealth:Hide()
end
end
do
local t = 0
local targetCache = {}
local function getCIDfromGUID(guid)
if not guid then
return -1
end
local cType = bit.band(guid:sub(0, 5), 0x00F)
return (cType == 3 or cType == 5) and tonumber(guid:sub(9, 12), 16) or -1
end
-- local function compareBars(b1, b2)
-- return b1.value > b2.value
-- end
function updateFrame(self, e)
t = t + e
if t >= 0.5 then
t = 0
-- if #bars > DBM.Options.HPFrameMaxEntries then
-- sortingEnabled = true
-- end
-- if sortingEnabled then
-- table.sort(bars, compareBars)
-- end
for i, v in ipairs(bars) do
-- if i > DBM.Options.HPFrameMaxEntries then
-- v:Hide()
-- else
-- v:Show()
-- end
if type(v.id) == "number" then
local id = targetCache[v.id] -- ask the cache if we already know where the mob is
if getCIDfromGUID(UnitGUID(id or "")) ~= v.id then -- the cache doesn't know it, update the cache
targetCache[v.id] = nil
-- check focus target
if getCIDfromGUID(UnitGUID("focus")) == v.id then
targetCache[v.id] = "focus"
else
-- check target and raid/party targets
local uId = ((GetNumRaidMembers() == 0) and "party") or "raid"
for i = 0, math.max(GetNumRaidMembers(), GetNumPartyMembers()) do
id = (i == 0 and "target") or uId..i.."target"
if getCIDfromGUID(UnitGUID(id or "")) == v.id then
targetCache[v.id] = id
break
end
end
end
end
if getCIDfromGUID(UnitGUID(id or "")) == v.id then -- did we find the mob? if yes: update the health bar
updateBar(v, ((UnitHealth(id)) / (UnitHealthMax(id)) * 100 or 100))
end
elseif type(v.id) == "function" then -- generic bars
updateBar(v, v.id(), true)
end
end
end
end
end
-----------------------
-- General Methods --
-----------------------
function bossHealth:Show(name)
if not anchor then createFrame(bossHealth) end
header:SetText(name)
anchor:Show()
bossHealth:Clear()
end
function bossHealth:Clear()
if not anchor or not anchor:IsShown() then return end
for i = #bars, 1, -1 do
local bar = bars[i]
bar:Hide()
bar:ClearAllPoints()
barCache[#barCache + 1] = bar
bars[i] = nil
end
-- sortingEnabled = false
end
function bossHealth:Hide()
if anchor then anchor:Hide() end
end
function bossHealth:AddBoss(cId, name)
if not anchor or not anchor:IsShown() then return end
table.insert(bars, createBar(self, cId, name))
updateBarStyle(bars[#bars], #bars)
end
function bossHealth:RemoveBoss(cId)
if not anchor or not anchor:IsShown() then return end
for i = #bars, 1, -1 do
local bar = bars[i]
if bar.id == cId then
if bars[i + 1] then
local next = bars[i + 1]
next:SetPoint("TOP", bars[i - 1] or anchor, "BOTTOM", 0, 0)
end
bar:Hide()
bar:ClearAllPoints()
barCache[#barCache + 1] = bar
table.remove(bars, i)
end
end
end
function bossHealth:UpdateSettings()
if not anchor then createFrame(bossHealth) end
anchor:SetPoint(DBM.Options.HPFramePoint, UIParent, DBM.Options.HPFramePoint, DBM.Options.HPFrameX, DBM.Options.HPFrameY)
for i, v in ipairs(bars) do
updateBarStyle(v, i)
end
end
+71
View File
@@ -0,0 +1,71 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Frame name="DBMBossHealthBarTemplate" enableMouse="true" virtual="true" frameStrata="MEDIUM" topLevel="true">
<Size>
<AbsDimension x="200" y="20"/>
</Size>
<Frames>
<StatusBar name="$parentBar">
<Size>
<AbsDimension x="190" y="12"/>
</Size>
<Anchors>
<Anchor point="CENTER" relativePoint="CENTER">
<Offset>
<AbsDimension x="2" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentBackground">
<Color r="0" g="0" b="0" a="0.3"/>
</Texture>
</Layer>
<Layer level="OVERLAY">
<FontString name="$parentName" inherits="GameFontHighlightSmall" text="">
<Anchors>
<Anchor point="LEFT" relativePoint="LEFT">
<Offset>
<AbsDimension x="2" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<FontString name="$parentTimer" inherits="GameFontHighlightSmall" text="">
<Anchors>
<Anchor point="RIGHT" relativePoint="RIGHT">
<Offset>
<AbsDimension x="-2" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentBorder">
<Size>
<AbsDimension x="198" y="32"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="-4" y="0"/>
</Offset>
</Anchor>
</Anchors>
<NormalTexture name="$parentTextureNormal" file="Interface\PaperDollInfoFrame\UI-Character-Skills-BarBorder"/>
</Button>
</Frames>
<BarTexture name="$parentTextureBar" file="Interface\PaperDollInfoFrame\UI-Character-Skills-Bar"/>
<BarColor r="1.0" g="0.7" b="0.0"/>
<Scripts>
<OnLoad>
self:SetMinMaxValues(0, 100)
</OnLoad>
</Scripts>
</StatusBar>
</Frames>
</Frame>
</Ui>
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
## Interface: 30300
## Title:|cffffd200Deadly Boss Mods|r |cff69ccf0Core|r
## Title-zhCN: |cffffd200Deadly Boss Mods|r |cff69ccf0核心|r
## Title-ruRU:|cffffd200Deadly Boss Mods|r |cff69ccf0Основной|r
## Title-zhTW:|cffffd200Deadly Boss Mods|r |cff69ccf0核心|r
## Title-koKR:|cffffd200Deadly Boss Mods|r |cff69ccf0핵심 모듈|r
## Title-esES:|cffffd200Deadly Boss Mods|r |cff69ccf0Proceso|r
## Title-esMX:|cffffd200Deadly Boss Mods|r |cff69ccf0Proceso|r
## Notes: Deadly Boss Mods - heavily modified to suit Project Ascension raid fights.
## SavedVariablesPerCharacter: DBM_SavedOptions, DBT_SavedOptions
## LoadOnDemand: 0
## DefaultState: enabled
## Author: Tandanu and Nitram, updated by Junior and Szyler.
## X-Website: https://discord.gg/4ZHfgskSvM
localization.en.lua
localization.de.lua
localization.cn.lua
localization.ru.lua
localization.fr.lua
localization.tw.lua
localization.kr.lua
localization.es.lua
DBT-Template.xml
DBT.lua
DBM-Core.lua
DBM-Arrow.lua
DBM-RangeCheck.lua
DBM-BossHealth.lua
DBM-BossHealth.xml
+569
View File
@@ -0,0 +1,569 @@
--[[
********************************************************************
********************************************************************
Help Constants at top
Help functions:
DBM_GetGroupNr(name)
DBM_GetRaidId(name)
DBM_GetClass(name)
DBM_GetRank(name)
DBM_GetSmoothColor(percent)
DBM_GetTextClassColor(class)
DBM_GetColorText(r,g,b)
DBM_StringIcon(icon)
DBM_StringTexture(texture)
DBM_GetTextReactionColor(reaction)
DBM_GetRealBossName(boss)
DBM_GetMarkNameFromNumber(marknr)
DBM_round(tal)
DBM_UnitHealthPercent(unitid,CountOneHpAsZero = false)
DBM_UnitPowerPercent(unitid)
DBM_PlaySoundFile(file)
DBM_UnitClassification(uid)
DBM_BoostPlaySound(file,boost,duration);
DBM_CheckForBuff(buffname, unit)
DBM_CheckForDebuff(buffname, unit)
DBM_GetBuffText(buffindex, unit)
DBM_GetDeBuffText(buffindex, unit)
DBM_band(mask,...) bitands all args with mask and return true or false
DBM_bor(b1,...) bitors all args
DBM_linebreakStr(str,b,tryspace) tryspace if try to break the line at spaces isntead
DBM_SetTrue(varname)
DBM_SetFalse(varname)
DBM_SearchBags(itemname)
DBM_SplitItemToEmptySlots(bag,item,stacksize)
DBM_FormatMoney(money)
DBM_FlagsColor(flags)
DBM_CPUWarning()
DBM_NoneEnglish()
DBM_CreateExtraMenuFrames(nrFrames,nrButtons)
Sync functions:
DBM_GetPlayerMapPosition(uid)
********************************************************************
********************************************************************
]]--
DBM_c_w = "|cFFFFFFFF";
DBM_c_r = "|cFFFF0000";
DBM_c_g = "|cFF00FF00";
DBM_c_dg = "|cFF007F00";
DBM_c_b = "|cFF0000FF";
DBM_c_lb = "|cFF66AAFF";
DBM_c_t = "|cFF00FFFF";
DBM_c_y = "|cFFFFFF00";
DBM_c_purple = "|cFFFF00FF";
DBM_c_p = "|cFF8888CC";
DBM_c_v = "|cFF4444CC";
DBM_c_tt = "|cFFFED100";
DBM_c_bronze = "|cFFFF8800";
DBM_c_black = "|cFF000000";
DBM_c_grey = "|cFFB4B4B4";
DBM_c_pink = "|cFFFFA3B1";
DBM_c_ = "|r"; DBM_c = "|r";
DBM_ICONS = "Interface\\Icons\\";
DBM_FONT_TVCENMT = "Interface\\AddOns\\AscensionBuffFrames\\Fonts\\Tw_Cen_MT_Bold.ttf";
DBM_FONT_DBM = "Interface\\AddOns\\AscensionBuffFrames\\Fonts\\DBM.ttf";
DBM_TEXTURE_BANTOBAR = "Interface\\AddOns\\AscensionBuffFrames\\Textures\\BantoBar";
function DBM_GetGroupNr(name)
local i,n,g;
for i=1,GetNumRaidMembers() do
n,_,g = GetRaidRosterInfo(i);
if(n==name) then
return g;
end
end
return false;
end
function DBM_GetRaidId(name)
local i,n;
for i=1,GetNumRaidMembers() do
n = GetRaidRosterInfo(i);
if(string.lower(n)==string.lower(name)) then
return i;
end
end
return false;
end
function DBM_GetClass(name)
local i,n,c;
for i=1,GetNumRaidMembers() do
n,_,_,_,c = GetRaidRosterInfo(i);
if(n==name) then
return c;
end
end
return "";
end
function DBM_GetRank(name)
local i,n,c;
for i=1,GetNumRaidMembers() do
n,c = GetRaidRosterInfo(i);
if(n==name) then
return c;
end
end
return false;
end
function DBM_GetSmoothColor(percent)
local r, g, b;
if(percent > 0.5) then
r = (1.0 - percent) * 2;
g = 1.0;
else
r = 1.0;
g = percent * 2;
end
b = 0.0;
return r,g,b;
end
function DBM_GetTextClassColor(class)
local color = RAID_CLASS_COLORS[string.gsub(string.upper(class)," ","")];
if(color) then
local colorText = ("|cff%.2x%.2x%.2x"):format(color.r*255,color.g*255,color.b*255);
return colorText;
end
return "|cFFFFFFFF";
end
function DBM_GetColorText(r,g,b)
local colorText = ("|cff%.2x%.2x%.2x"):format(r*255,g*255,b*255);
return colorText;
end
function DBM_StringIcon(icon)
return DBM_StringTexture(DBM_ICONS..icon)
end
function DBM_StringTexture(texture)
return "|T"..texture..":0|t";
end
function DBM_GetTextReactionColor(reaction)
if(reaction<4) then
return DBM_c_r;
elseif(reaction==4) then
return DBM_c_y;
else
return DBM_c_g;
end
end
function DBM_GetRealBossName(boss)
local n;
if(DBM_BOSS_DATA[boss].realname) then
n = DBM_BOSS_DATA[boss].realname;
else
n = boss;
end
return n;
end
function DBM_GetMarkNameFromNumber(marknr)
if(marknr==1) then
return "star";
elseif(marknr==2) then
return "circle";
elseif(marknr==3) then
return "diamond";
elseif(marknr==4) then
return "triangle";
elseif(marknr==5) then
return "moon";
elseif(marknr==6) then
return "square";
elseif(marknr==7) then
return "cross";
elseif(marknr==8) then
return "skull";
end
end
function DBM_round(tal)
if (tal < 0) then
return math.ceil(tal-0.5)
else
return math.floor(tal+0.5)
end
end
function DBM_UnitHealthPercent(unit,CountOneHpAsZero)
if(UnitExists(unit)) then
local hp = UnitHealth(unit) / UnitHealthMax(unit) * 100;
if(CountOneHpAsZero and UnitHealth(unit)==1) then
return 0;
elseif(hp == 0) then
return 0;
elseif(hp < 1) then
return 1;
else
return math.floor(hp);
end
else
return 0;
end
end
function DBM_UnitPowerPercent(unitid)
if(UnitExists(unitid)) then
return math.floor(UnitPower(unitid) / UnitPowerMax(unitid) * 100);
else
return 0;
end
end
function DBM_PlaySoundFile(file)
if(DBM_GetS("SoundWarnings")) then
PlaySoundFile(file);
end
end
function DBM_UnitClassification(uid)
local c = UnitClassification(uid);
local name = UnitName(uid);
if(DBM_ZONE and (name == "Captain Qeez" or name == "Captain Tuubid" or name == "Captain Xurrem" or name == "Major Pakkon" or name =="Colonel Zerran" or name == "Major Yeggeth" or name == "Captain Drenn")) then
return "worldboss";
end
if(DBM_ZONE and c=="elite" and UnitLevel(uid)==-1) then
return "worldboss";
end
return c;
end
function DBM_BoostPlaySound(file,boost,duration)
local savemaster = GetCVar("Sound_MasterVolume");
DBM_debug("Boosting Master Volume to: "..savemaster + boost);
SetCVar("Sound_MasterVolume",savemaster + boost);
DBM_PlaySoundFile(file);
DBM_Delay(duration,function()
DBM_debug("Restoring Master to: "..savemaster);
SetCVar("Sound_MasterVolume",savemaster);
end);
end
function DBM_CheckForBuff(buffname, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return; end
local name = UnitBuff(unit,buffname);
if(name) then
return true;
end
return false;
end
function DBM_CheckForDebuff(buffname, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return; end
local name = UnitDebuff(unit,buffname);
if(name) then
return true;
end
return false;
end
function DBM_GetBuffText(buffindex, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return nil; end
AscensionBuffFrames_TTTextLeft2:SetText();
AscensionBuffFrames_TT:SetUnitBuff(unit, buffindex);
return AscensionBuffFrames_TTTextLeft2:GetText();
end
function DBM_GetDeBuffText(buffindex, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return nil; end
AscensionBuffFrames_TTTextLeft2:SetText();
AscensionBuffFrames_TT:SetUnitDeBuff(unit, buffindex);
return AscensionBuffFrames_TTTextLeft2:GetText();
end
function DBM_band(mask,...)
args = {...};
local i;
for i=1,#args do
if(bit.band(mask,args[i]) == 0) then
return false;
end
end
return true;
end
function DBM_bor(b1,...)
args = {...};
local i;
for i=1,#args do
b1 = bit.bor(b1,args[i]);
end
return b1;
end
function DBM_linebreakStr(str,b,tryspace)
local l = {};
local t;
while(string.len(str) > 0) do
if(tryspace) then
if(string.len(str) <= b) then
--if the full line fits, just take it all
l[#l+1] = str;
break;
end
t = string.find(string.reverse(string.sub(str,1,b+1))," ",1,true);
if(not t) then
--just break the line
l[#l+1] = string.sub(str,1,b);
str = string.sub(str,b+1);
else
--break the line and remove the space
l[#l+1] = string.sub(str,1,b-(t-1));
str = string.sub(str,b+2-(t-1));
end
else
l[#l+1] = string.sub(str,1,b);
str = string.sub(str,b+1);
end
end
return table.concat(l,"\n");
end
function DBM_SetTrue(varname)
_G[varname] = true;
end
function DBM_SetFalse(varname)
_G[varname] = false;
end
function DBM_SearchBags(itemname)
local bag,slot;
for bag=0,NUM_BAG_SLOTS do
for slot=1,GetContainerNumSlots(bag) do
if (GetContainerItemLink(bag,slot) and string.find(GetContainerItemLink(bag,slot), itemname)) then
return bag,slot;
end
end
end
return false,false;
end
function DBM_SplitItemToEmptySlots(bag,item,stacksize)
local valid = GetContainerItemLink(bag,item);
if(valid and stacksize > 0) then
local _,itemcount,locked = GetContainerItemInfo(bag,item);
--it not locked searchbags for free slots
if(not locked) then
local sbag,sslot;
for sbag=0,NUM_BAG_SLOTS do
for sslot=1,GetContainerNumSlots(sbag) do
if(GetContainerItemLink(sbag,sslot)==nil) then
--free slot found split stack into this slot
if(itemcount > stacksize) then
SplitContainerItem(bag,item,stacksize);
itemcount = itemcount - stacksize;
--find correct bag to click
for i=1, NUM_CONTAINER_FRAMES do
local bagframe = getglobal("ContainerFrame"..i);
if ( bagframe:IsShown() and bagframe:GetID() == sbag ) then
--bag found, now find slot
for j=1, GetContainerNumSlots(sbag) do
local slotframe = getglobal(bagframe:GetName().."Item"..j);
if(slotframe:GetID()==sslot) then
--found correct slot, click it
slotframe:Click();
DBM_Delay(0.6,DBM_SplitItemToEmptySlots,bag,item,stacksize);
return;
end
end
end
end
end
end
end
end
end
end
end
function DBM_FormatMoney(money)
local SILVER = "|cFFC0C0C0";
local COPPER = "|cFFCC9900";
local GOLD = "|cFFFFFF66";
local WHITE = "|cFFFFFFFF";
local c,s,g;
local retstr = "";
g = floor(money/10000);
s = mod(floor(money/100),100);
c = mod(money,100);
if(g>0) then
retstr = retstr..WHITE..g..GOLD.." Gold";
end
if(s>0) then
if ( retstr ~= "" ) then retstr = retstr .. " " end;
retstr = retstr..WHITE..s..SILVER.." Silver";
end
if(c>0) then
if ( retstr ~= "" ) then retstr = retstr .. " " end;
retstr = retstr..WHITE..c..COPPER.." Copper";
end
return retstr;
end
function DBM_FlagsColor(flags)
if(DBM_band(flags,COMBATLOG_OBJECT_REACTION_HOSTILE) ) then
return "|cFFFF0000";
elseif(DBM_band(flags,COMBATLOG_OBJECT_REACTION_NEUTRAL) ) then
return "|cFFFFFF00";
elseif(DBM_band(flags,COMBATLOG_OBJECT_REACTION_FRIENDLY) ) then
return "|cFF00FF00";
end
end
function DBM_StripNames(name)
name = string.gsub(name,"%'","");
name = string.gsub(name," ","_");
return name;
end
function DBM_NoneEnglish()
if(GetLocale() ~= "enUS") then
DBM_printc("AscensionBuffFramess text parsing is made for the english client only, so some features may not work for you.");
end
end
function DBM_CPUWarning()
if(GetCVar("scriptProfile")=="1") then
DBM_printc("|cFFFFFFFFWarning|cFF8888CC CPU Profileing is on, this may have a huge performance impact on gameplay");
DBM_printc("If this is unintentional you can disable it by typing /DBMcpuoff");
end
end
function DBM_CPUPOff()
if(GetCVar("scriptProfile")~="0") then
SetCVar("scriptProfile", "0");
ReloadUI();
end
end
function DBM_CreateExtraMenuFrames(nrFrames,nrButtons)
--[[
for i=UIDROPDOWNMENU_MAXLEVELS+1,nrFrames do
UIDropDownMenu_CreateFrames(i, 0);
end]]--
--[[
local i,j;
for i=3,nrFrames do
--first check if frame exists
if(not getglobal("DropDownList"..i)) then
--Create the frame
local frame = CreateFrame("Button","DropDownList"..i,UIParent,"UIDropDownListTemplate");
frame:SetToplevel(true);
frame:SetID(i);
frame:SetFrameStrata("FULLSCREEN_DIALOG");
frame:Hide();
end
--now add extra buttons if they dont exists
for j=9,nrButtons do
if(not getglobal("DropDownList"..i.."Button"..j)) then
local frame = CreateFrame("Button","DropDownList"..i.."Button"..j,getglobal("DropDownList"..i),"UIDropDownMenuButtonTemplate");
frame:SetID(j);
end
end
end]]--
end
--[[
********************************************************************
********************************************************************
Sync Functions
********************************************************************
********************************************************************
]]--
--[[ ********************************
Position Sync
********************************]]--
local pos_sync_table = {};
local pos_last_asked_sync = {};
local pos_send_my_until = 0;
local pos_dont_send_to_fast = 0;
local function send_position_sync()
SetMapToCurrentZone();
local x,y = GetPlayerMapPosition("player");
local zone = GetRealZoneText();
DBM_send_mess("MYPOS "..x.."@"..y.."@"..zone);
end
function DBM_PositionSync_OnUpdate()
--runs 20 times each second
if(pos_send_my_until > GetTime()) then
--dont send to fast
if(pos_dont_send_to_fast + 1 > GetTime()) then
return;
end
pos_dont_send_to_fast = GetTime();
--send
send_position_sync();
end
end
function DBM_PositionSyncRequest_Recive(msg,from)
if(msg==DBM_YOU) then
pos_send_my_until = GetTime()+8;
end
end
function DBM_PositionSync_Recive(msg,from)
local found,_,x,y,zone = string.find(msg,"(.+)@(.+)@(.+)");
if(found) then
pos_sync_table[from] = {
x = tonumber(x),
y = tonumber(y),
zone = zone,
};
end
end
function DBM_GetPlayerMapPosition(uid)
if(UnitExists(uid)) then
--fix your own coords
SetMapToCurrentZone();
--get coords
local x,y = GetPlayerMapPosition(uid);
--if we got coords from blizz UI just pass them
if(x+y > 0) then
return x,y;
end
--get coords from sync
local name = UnitName(uid);
--check if we should ask for new sync
if(not pos_last_asked_sync[name]) then pos_last_asked_sync[name] = 0; end --to be failsafe
if(pos_last_asked_sync[name]+5 < GetTime()) then
pos_last_asked_sync[name] = GetTime();
DBM_send_mess("REQUESTPOS "..name);
end
--okay no fetch from table
if(not pos_sync_table[name]) then
--not updated yet or no DBM
return 0,0;
end
--check if we are in same zone
if(GetRealZoneText()==pos_sync_table[name].zone) then
return pos_sync_table[name].x,pos_sync_table[name].y;
else
return 0,0;
end
end
return GetPlayerMapPosition(uid);
end
+440
View File
@@ -0,0 +1,440 @@
-- ***************************************************
-- ** DBM Range Check Frame **
-- ** http://www.deadlybossmods.com **
-- ***************************************************
--
-- This addon is written and copyrighted by:
-- * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)
-- * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)
--
-- The localizations are written by:
-- * enGB/enUS: Tandanu
-- * deDE: Tandanu/Nitram
-- * ruRU: BootWin
-- * zhTW: Azael/kc10577
-- * (add your names here!)
--
-- Special thanks to:
-- * Arta (DBM-Party)
--
--
-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)
-- All included textures and sounds are copyrighted by their respective owners.
--
--
-- You are free:
-- * to Share — to copy, distribute, display, and perform the work
-- * to Remix — to make derivative works
-- Under the following conditions:
-- * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
-- * Noncommercial. You may not use this work for commercial purposes.
-- * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.
--
--
-- This file makes use of the following free (Creative Commons Sampling Plus 1.0) sounds:
-- * alarmclockbeeps.ogg by tedthetrumpet (http://www.freesound.org/usersViewSingle.php?id=177)
-- * blip_8.ogg by Corsica_S (http://www.freesound.org/usersViewSingle.php?id=7037)
-- The full of text of the license can be found in the file "Sounds\Creative Commons Sampling Plus 1.0.txt".
---------------
-- Globals --
---------------
DBM.RangeCheck = {}
--------------
-- Locals --
--------------
local rangeCheck = DBM.RangeCheck
local checkFuncs = {}
local frame
local createFrame
local onUpdate
local dropdownFrame
local initializeDropdown
local initRangeCheck -- initializes the range check for a specific range (if necessary), returns false if the initialization failed (because of a map range check in an unknown zone)
-- for Phanx' Class Colors
local RAID_CLASS_COLORS = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS
---------------------
-- Dropdown Menu --
---------------------
-- todo: this dropdown menu is somewhat ugly and unflexible....
do
local function setRange(self, range)
rangeCheck:Show(range)
end
local sound0 = "none"
local sound1 = "Interface\\AddOns\\DBM-Core\\Sounds\\blip_8.ogg"
local sound2 = "Interface\\AddOns\\DBM-Core\\Sounds\\alarmclockbeeps.ogg"
local function setSound(self, option, sound)
DBM.Options[option] = sound
if sound ~= "none" then
PlaySoundFile(sound)
end
end
local function toggleLocked()
DBM.Options.RangeFrameLocked = not DBM.Options.RangeFrameLocked
end
function initializeDropdown(dropdownFrame, level, menu)
local info
if level == 1 then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE
info.notCheckable = true
info.hasArrow = true
info.menuList = "range"
UIDropDownMenu_AddButton(info, 1)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUNDS
info.notCheckable = true
info.hasArrow = true
info.menuList = "sounds"
UIDropDownMenu_AddButton(info, 1)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_LOCK
if DBM.Options.RangeFrameLocked then
info.checked = true
end
info.func = toggleLocked
UIDropDownMenu_AddButton(info, 1)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_HIDE
info.notCheckable = true
info.func = rangeCheck.Hide
info.arg1 = rangeCheck
UIDropDownMenu_AddButton(info, 1)
elseif level == 2 then
if menu == "range" then
if initRangeCheck() then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(6)
info.func = setRange
info.arg1 = 6
info.checked = (frame.range == 6)
UIDropDownMenu_AddButton(info, 2)
end
if initRangeCheck() then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(8)
info.func = setRange
info.arg1 = 8
info.checked = (frame.range == 8)
UIDropDownMenu_AddButton(info, 2)
end
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(10)
info.func = setRange
info.arg1 = 10
info.checked = (frame.range == 10)
UIDropDownMenu_AddButton(info, 2)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(11)
info.func = setRange
info.arg1 = 11
info.checked = (frame.range == 11)
UIDropDownMenu_AddButton(info, 2)
if initRangeCheck() then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(12)
info.func = setRange
info.arg1 = 12
info.checked = (frame.range == 12)
UIDropDownMenu_AddButton(info, 2)
end
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(15)
info.func = setRange
info.arg1 = 15
info.checked = (frame.range == 15)
UIDropDownMenu_AddButton(info, 2)
if initRangeCheck() then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(20)
info.func = setRange
info.arg1 = 20
info.checked = (frame.range == 20)
UIDropDownMenu_AddButton(info, 2)
end
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SETRANGE_TO:format(28)
info.func = setRange
info.arg1 = 28
info.checked = (frame.range == 28)
UIDropDownMenu_AddButton(info, 2)
elseif menu == "sounds" then
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUND_OPTION_1
info.notCheckable = true
info.hasArrow = true
info.menuList = "RangeFrameSound1"
UIDropDownMenu_AddButton(info, 2)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUND_OPTION_2
info.notCheckable = true
info.hasArrow = true
info.menuList = "RangeFrameSound2"
UIDropDownMenu_AddButton(info, 2)
end
elseif level == 3 then
local option = menu
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUND_0
info.func = setSound
info.arg1 = option
info.arg2 = sound0
info.checked = (DBM.Options[option] == sound0)
UIDropDownMenu_AddButton(info, 3)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUND_1
info.func = setSound
info.arg1 = option
info.arg2 = sound1
info.checked = (DBM.Options[option] == sound1)
UIDropDownMenu_AddButton(info, 3)
info = UIDropDownMenu_CreateInfo()
info.text = DBM_CORE_RANGECHECK_SOUND_2
info.func = setSound
info.arg1 = option
info.arg2 = sound2
info.checked = (DBM.Options[option] == sound2)
UIDropDownMenu_AddButton(info, 3)
end
end
end
-----------------
-- Play Sounds --
-----------------
local function updateSound(numPlayers) -- called every 5 seconds
if not UnitAffectingCombat("player") then
return
end
if numPlayers == 1 then
if DBM.Options.RangeFrameSound1 ~= "none" then
PlaySoundFile(DBM.Options.RangeFrameSound1)
end
elseif numPlayers > 1 then
if DBM.Options.RangeFrameSound2 ~= "none" then
PlaySoundFile(DBM.Options.RangeFrameSound2)
end
end
end
------------------------
-- Create the frame --
------------------------
function createFrame()
local elapsed = 0
local frame = CreateFrame("GameTooltip", "DBMRangeCheck", UIParent, "GameTooltipTemplate")
dropdownFrame = CreateFrame("Frame", "DBMRangeCheckDropdown", frame, "UIDropDownMenuTemplate")
frame:SetFrameStrata("DIALOG")
frame:SetPoint(DBM.Options.RangeFramePoint, UIParent, DBM.Options.RangeFramePoint, DBM.Options.RangeFrameX, DBM.Options.RangeFrameY)
frame:SetHeight(64)
frame:SetWidth(64)
frame:EnableMouse(true)
frame:SetToplevel(true)
frame:SetMovable()
GameTooltip_OnLoad(frame)
frame:SetPadding(16)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self)
if not DBM.Options.RangeFrameLocked then
self:StartMoving()
end
end)
frame:SetScript("OnDragStop", function(self)
self:StopMovingOrSizing()
ValidateFramePosition(self)
local point, _, _, x, y = self:GetPoint(1)
DBM.Options.RangeFrameX = x
DBM.Options.RangeFrameY = y
DBM.Options.RangeFramePoint = point
end)
frame:SetScript("OnUpdate", function(self, e)
elapsed = elapsed + e
if elapsed >= 0.5 and self.checkFunc then
onUpdate(self, elapsed)
elapsed = 0
end
end)
frame:SetScript("OnMouseDown", function(self, button)
if button == "RightButton" then
UIDropDownMenu_Initialize(dropdownFrame, initializeDropdown, "MENU")
ToggleDropDownMenu(1, nil, dropdownFrame, "cursor", 5, -10)
end
end)
return frame
end
----------------
-- OnUpdate --
----------------
local soundUpdate = 0
function onUpdate(self, elapsed)
local color
local j = 0
self:ClearLines()
self:SetText(DBM_CORE_RANGECHECK_HEADER:format(self.range), 1, 1, 1)
if initRangeCheck(self.range) then
for i = 1, GetNumRaidMembers() do
local uId = "raid"..i
if not UnitIsUnit(uId, "player") and not UnitIsDeadOrGhost(uId) and self.checkFunc(uId, self.range) and (not self.filter or self.filter(uId)) then
j = j + 1
color = RAID_CLASS_COLORS[select(2, UnitClass(uId))] or NORMAL_FONT_COLOR
local icon = GetRaidTargetIndex(uId)
local text = icon and ("|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_%d:0|t %s"):format(icon, UnitName(uId)) or UnitName(uId)
self:AddLine(text, color.r, color.g, color.b)
if j >= 5 then
break
end
end
end
else
self:AddLine(DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED:format(self.range))
end
soundUpdate = soundUpdate + elapsed
if soundUpdate >= 5 and j > 0 then
updateSound(j)
soundUpdate = 0
end
self:Show()
end
-----------------------
-- Check functions --
-----------------------
checkFuncs[11] = function(uId)
return CheckInteractDistance(uId, 2)
end
checkFuncs[10] = function(uId)
return CheckInteractDistance(uId, 3)
end
checkFuncs[28] = function(uId)
return CheckInteractDistance(uId, 4)
end
local getDistanceBetween
do
local mapSizes = DBM.MapSizes
function getDistanceBetween(uId, x, y)
local startX, startY = GetPlayerMapPosition(uId)
local mapName = GetMapInfo()
local dims = mapSizes[mapName] and mapSizes[mapName][GetCurrentMapDungeonLevel()]
if not dims then
return
end
local dX = (startX - x) * dims[1]
local dY = (startY - y) * dims[2]
return math.sqrt(dX * dX + dY * dY)
end
local function mapRangeCheck(uId, range)
return getDistanceBetween(uId, GetPlayerMapPosition("player")) < range
end
function initRangeCheck(range)
if checkFuncs[range] ~= mapRangeCheck then
return true
end
local pX, pY = GetPlayerMapPosition("player")
if pX == 0 and pY == 0 then
SetMapToCurrentZone()
pX, pY = GetPlayerMapPosition("player")
end
local levels = mapSizes[GetMapInfo()]
if not levels then
return false
end
local dims = levels[GetCurrentMapDungeonLevel()]
if not dims and levels and GetCurrentMapDungeonLevel() == 0 then -- we are in a known zone but the dungeon level seems to be wrong
SetMapToCurrentZone() -- fixes the dungeon level
dims = levels[GetCurrentMapDungeonLevel()] -- try again
if not dims then -- there is actually a level 0 in this zone but we don't know about it...too bad :(
return false
end
elseif not dims then
return false
end
return true -- everything ok!
end
setmetatable(checkFuncs, {
__index = function(t, k)
return mapRangeCheck
end
})
end
do
local bandages = {21991, 34721, 38643, 34722, 34721, 34722} -- you should have one of these bandages in your cache
checkFuncs[15] = function(uId)
for i, v in ipairs(bandages) do
if IsItemInRange(v, uId) == 1 then
return true
elseif IsItemInRange(v, uId) == 0 then
return false
end
end
end
end
---------------
-- Methods --
---------------
function rangeCheck:Show(range, filter)
if type(range) == "function" then -- the first argument is optional
return self:Show(nil, range)
end
range = range or 10
frame = frame or createFrame()
frame.checkFunc = checkFuncs[range] or error(("Range \"%d yd\" is not supported."):format(range), 2)
frame.range = range
frame.filter = filter
frame:Show()
frame:SetOwner(UIParent, "ANCHOR_PRESERVE")
onUpdate(frame, 0)
end
function rangeCheck:Hide()
if frame then frame:Hide() end
end
function rangeCheck:IsShown()
return frame and frame:IsShown()
end
function rangeCheck:GetDistance(...)
if initRangeCheck() then
return getDistanceBetween(...)
end
end
+96
View File
@@ -0,0 +1,96 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Frame name="DBTBarTemplate" virtual="true" frameStrata="MEDIUM" topLevel="true">
<Size>
<AbsDimension x="195" y="20"/>
</Size>
<Frames>
<StatusBar name="$parentBar">
<Size>
<AbsDimension x="195" y="20"/>
</Size>
<Anchors>
<Anchor point="CENTER" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentBackground">
<Color r="0" g="0" b="0" a="0.3"/>
</Texture>
</Layer>
<Layer level="OVERLAY">
<Texture name="$parentSpark" file="Interface\AddOns\DBM-Core\textures\Spark.blp" alphaMode="ADD">
<Size>
<AbsDimension x="32" y="64"/>
</Size>
<Anchors>
<Anchor point="CENTER">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Texture>
<FontString name="$parentName" inherits="GameFontHighlightSmall" text="">
<Anchors>
<Anchor point="LEFT" relativePoint="LEFT">
<Offset>
<AbsDimension x="7" y="0.5"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<FontString name="$parentTimer" inherits="GameFontHighlightSmall" text="">
<Anchors>
<Anchor point="RIGHT" relativePoint="RIGHT">
<Offset>
<AbsDimension x="-1" y="0.5"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<Texture name="$parentIcon1">
<Size>
<AbsDimension x="20" y="20"/>
</Size>
<Anchors>
<Anchor point="RIGHT" relativePoint="LEFT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Texture>
<Texture name="$parentIcon2">
<Size>
<AbsDimension x="20" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Texture>
</Layer>
</Layers>
<BarTexture name="$parentTexture" file="Interface\AddOns\DBM-Core\textures\default.tga"/>
<BarColor r="1.0" g="0.7" b="0.0"/>
<Scripts>
<OnLoad function="DBT_Bar_OnLoad"/>
</Scripts>
</StatusBar>
</Frames>
<Scripts>
<OnUpdate function="DBT_Bar_OnUpdate"/>
<OnMouseDown function="DBT_Bar_OnMouseDown"/>
<OnMouseUp function="DBT_Bar_OnMouseUp"/>
<OnHide function="DBT_Bar_OnHide"/>
</Scripts>
</Frame>
</Ui>
+990
View File
@@ -0,0 +1,990 @@
-- ***************************************************
-- ** Deadly Bar Timers **
-- ** http://www.deadlybossmods.com **
-- ***************************************************
--
-- This addon is written and copyrighted by:
-- * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)
-- * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)
--
-- The localizations are written by:
-- * enGB/enUS: Tandanu http://www.deadlybossmods.com
-- * deDE: Tandanu http://www.deadlybossmods.com
-- * zhCN: Diablohu http://wow.gamespot.com.cn
-- * ruRU: BootWin bootwin@gmail.com
-- * zhTW: Azael/kc10577 kc10577@hotmail.com
-- * esES: Interplay/1nn7erpLaY http://www.1nn7erpLaY.com
-- * (add your names here!)
--
-- Special thanks to:
-- * Arta (DBM-Party)
--
--
-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)
-- All included textures and sounds are copyrighted by their respective owners.
--
--
-- You are free:
-- * to Share ?to copy, distribute, display, and perform the work
-- * to Remix ?to make derivative works
-- Under the following conditions:
-- * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
-- * Noncommercial. You may not use this work for commercial purposes.
-- * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.
---------------
-- Globals --
---------------
DBT = {}
DBT_SavedOptions = {}
--------------
-- Locals --
--------------
local fCounter = 1
local barPrototype = {}
local unusedBars = {}
local unusedBarObjects = setmetatable({}, {__mode = "kv"})
local instances = {}
local updateClickThrough
local options
local function stringFromTimer(t)
if t <= 60 then
return ("%.1f"):format(t)
else
return ("%d:%0.2d"):format(t/60, math.fmod(t, 60))
end
end
-----------------------
-- Default Options --
-----------------------
options = {
BarXOffset = {
type = "number",
default = 0,
},
BarYOffset = {
type = "number",
default = 0,
},
HugeBarXOffset = {
type = "number",
default = 0,
},
HugeBarYOffset = {
type = "number",
default = 0,
},
ExpandUpwards = {
type = "boolean",
default = false,
},
Flash = {
type = "boolean",
default = true,
},
FadeIn = {
type = "boolean",
default = true,
},
Break = {
type = "boolean",
default = true,
},
IconLeft = {
type = "boolean",
default = true,
},
IconRight = {
type = "boolean",
default = false,
},
Texture = {
type = "string",
default = "Interface\\AddOns\\DBM-Core\\textures\\default.tga",
},
StartColorR = {
type = "number",
default = 1,
},
StartColorG = {
type = "number",
default = 0.7,
},
StartColorB = {
type = "number",
default = 0,
},
EndColorR = {
type = "number",
default = 1,
},
EndColorG = {
type = "number",
default = 0,
},
EndColorB = {
type = "number",
default = 0,
},
TextColorR = {
type = "number",
default = 1,
},
TextColorG = {
type = "number",
default = 1,
},
TextColorB = {
type = "number",
default = 1,
},
DynamicColor = {
type = "boolean",
default = true,
},
Width = {
type = "number",
default = 183,
},
Scale = {
type = "number",
default = 0.9,
},
HugeBarsEnabled = {
type = "boolean",
default = true,
},
HugeWidth = {
type = "number",
default = 200,
},
HugeScale = {
type = "number",
default = 1.03,
},
TimerPoint = {
type = "string",
default = "TOPRIGHT",
},
TimerX = {
type = "number",
default = -223,
},
TimerY = {
type = "number",
default = -260,
},
HugeTimerPoint = {
type = "string",
default = "CENTER",
},
HugeTimerX = {
type = "number",
default = 0,
},
HugeTimerY = {
type = "number",
default = -120,
},
EnlargeBarsTime = {
type = "number",
default = 8,
},
EnlargeBarsPercent = {
type = "number",
default = 0.125,
},
FillUpBars = {
type = "boolean",
default = true,
},
ClickThrough = {
type = "boolean",
default = false,
},
Font = {
type = "string",
default = STANDARD_TEXT_FONT,
},
FontSize = {
type = "number",
default = 10
}
}
--------------------------
-- Double Linked List --
--------------------------
--
-- this linked list can only contain tables that do not use the fields "prev" and "next"
-- this restriction especially means that an object must not be in two different linked lists at the same time
-- but this is sufficient for DBT here, having a wrapper object would just be an unnecessary overhead
-- special table keys for "prev"/"next" (e.g. userdata values) would add unnecessary complexity
local DLL = {}
DLL.__index = DLL
function DLL:Append(obj)
if self.first == nil then -- list is empty
self.first = obj
self.last = obj
else -- list is not empty
obj.prev = self.last
self.last.next = obj
self.last = obj
end
return obj
end
function DLL:Remove(obj)
if self.first == nil then -- list is empty...
-- ...meaning the object is not even in the list, nothing we can do here expect for removing the "prev" and "next" entries from obj
elseif self.first == obj and self.last == obj then -- list has only one element
self.first = nil
self.last = nil
elseif self.first == obj then -- trying to remove the first element
self.first = obj.next
self.first.prev = nil
elseif self.last == obj then -- trying to remove the last element
self.last = obj.prev
self.last.next = nil
elseif obj.prev and obj.next then -- trying to remove something in the middle of the list
obj.prev.next, obj.next.prev = obj.next, obj.prev
end
obj.prev = nil
obj.next = nil
end
function DLL:New()
return setmetatable({
first = nil,
last = nil
}, self)
end
setmetatable(DLL, {__call = DLL.New})
-------------------------------
-- DBT Constructor/Options --
-------------------------------
do
local mt = {__index = DBT}
local optionMT = {
__index = function(t, k)
if options[k] then
return options[k].default
else
return nil
end
end
}
function DBT:New()
local obj = setmetatable(
{
options = setmetatable({}, optionMT),
defaultOptions = setmetatable({}, optionMT),
mainAnchor = CreateFrame("Frame", nil, UIParent),
secAnchor = CreateFrame("Frame", nil, UIParent),
bars = {},
smallBars = DLL(),
hugeBars = DLL()
},
mt
)
obj.mainAnchor:SetHeight(1)
obj.mainAnchor:SetWidth(1)
obj.mainAnchor:SetPoint("TOPRIGHT", 223, -260)
obj.mainAnchor:SetClampedToScreen(true)
obj.mainAnchor:SetMovable(true)
obj.mainAnchor:Show()
obj.secAnchor:SetHeight(1)
obj.secAnchor:SetWidth(1)
obj.secAnchor:SetPoint("CENTER", 0, -120)
obj.secAnchor:SetClampedToScreen(true)
obj.secAnchor:SetMovable(true)
obj.secAnchor:Show()
table.insert(instances, obj)
return obj
end
function DBT:LoadOptions(id)
local savedOptions;
if type(id) == "table" then
savedOptions = id;
else
DBT_SavedOptions[id] = DBT_SavedOptions[id] or {};
savedOptions = DBT_SavedOptions[id];
end
self.options = setmetatable(savedOptions, optionMT)
self.mainAnchor:ClearAllPoints()
self.secAnchor:ClearAllPoints()
self.mainAnchor:SetPoint(self.options.TimerPoint, UIParent, self.options.TimerPoint, self.options.TimerX, self.options.TimerY)
self.secAnchor:SetPoint(self.options.HugeTimerPoint, UIParent, self.options.HugeTimerPoint, self.options.HugeTimerX, self.options.HugeTimerY)
end
end
function DBT:SetOption(option, value)
if not options[option] then
error(("Invalid option: %s"):format(tostring(option)), 2)
elseif options[option].type and type(value) ~= options[option].type then
error(("The option %s requires a %s value. (tried to assign a %s value)"):format(tostring(option), tostring(options[option].type), tostring(type(value))), 2)
elseif options[option].checkFunc then
local ok, errMsg = options[option].checkFunc(self, option, value)
if not ok then
error(("Error while setting option %s to %s: %s"):format(tostring(option), tostring(value), tostring(errMsg)), 2)
end
end
local oldValue = self.options[option]
self.options[option] = value
if options[option].onChange then
options[option].onChange(self, value, oldValue)
end
self:ApplyStyle()
end
function DBT:GetOption(option)
return self.options[option]
end
function DBT:GetDefaultOption(option)
return self.defaultOptions[option]
end
-----------------------
-- Bar Constructor --
-----------------------
do
local function createBarFrame(self)
local frame
if unusedBars[#unusedBars] then
frame = unusedBars[#unusedBars]
unusedBars[#unusedBars] = nil
frame:Show()
else
frame = CreateFrame("Frame", "DBT_Bar_"..fCounter, self.mainAnchor, "DBTBarTemplate")
fCounter = fCounter + 1
end
frame:EnableMouse(not self.options.ClickThrough or self.movable)
return frame
end
local mt = {__index = barPrototype}
function DBT:CreateBar(timer, id, icon, huge, small, color, isDummy)
if timer <= 0 then return end
if (self.numBars or 0) >= 15 and not isDummy then return end
local newBar = self:GetBar(id)
if newBar then -- update an existing bar
newBar:SetTimer(timer) -- this can kill the timer and the timer methods don't like dead timers
if newBar.dead then return end
newBar:SetElapsed(0) -- same
if newBar.dead then return end
newBar:ApplyStyle()
newBar:SetText(id)
newBar:SetIcon(icon)
else -- create a new one
newBar = next(unusedBarObjects, nil)
local newFrame = createBarFrame(self)
if newBar then
unusedBarObjects[newBar] = nil
newBar.dead = nil -- resurrected it :)
newBar.frame = newFrame
newBar.id = id
newBar.timer = timer
newBar.totalTime = timer
newBar.owner = self
newBar.moving = nil
newBar.enlarged = nil
newBar.fadingIn = 0
newBar.small = small
newBar.color = color
newBar.flashing = nil
else -- duplicate code ;(
newBar = setmetatable({
frame = newFrame,
id = id,
timer = timer,
totalTime = timer,
owner = self,
moving = nil,
enlarged = nil,
fadingIn = 0,
small = small,
color = color,
flashing = nil
}, mt)
end
newFrame.obj = newBar
self.numBars = (self.numBars or 0) + 1
if (timer <= self.options.EnlargeBarsTime or huge) and self:GetOption("HugeBarsEnabled") then -- starts enlarged?
newBar.enlarged = true
self.hugeBars:Append(newBar)
else
self.smallBars:Append(newBar)
end
newBar:ApplyStyle()
newBar:SetText(id)
newBar:SetIcon(icon)
newBar:SetPosition()
newBar:Update(0)
self.bars[newBar] = true
end
return newBar
end
end
-----------------
-- Dummy Bar --
-----------------
do
local dummyBars = 0
local function dummyCancel(self)
self.timer = self.totalTime
self.flashing = nil
self:Update(0)
self.flashing = nil
getglobal(self.frame:GetName().."BarSpark"):SetAlpha(1)
end
function DBT:CreateDummyBar()
dummyBars = dummyBars + 1
local dummy = self:CreateBar(25, "dummy"..dummyBars, "Interface\\Icons\\Spell_Nature_WispSplode", nil, true, nil, true)
dummy:SetText("Dummy")
dummy:Cancel()
self.bars[dummy] = true
unusedBars[#unusedBars] = nil
unusedBarObjects[dummy] = nil
dummy.frame.obj = dummy
dummy.frame:SetParent(UIParent)
dummy.frame:ClearAllPoints()
dummy.frame:SetScript("OnUpdate", nil)
dummy.Cancel = dummyCancel
dummy:ApplyStyle()
dummy.dummy = true
return dummy
end
end
-----------------------------
-- General Bar Functions --
-----------------------------
--do
-- local function iterator(self, frame)
-- return not frame and self.mainFirstBar or frame and frame.next
-- end
--
-- local function reverseIterator(self, frame)
-- return (not frame and self.mainLastBar) or frame and frame.prev
-- end
--
-- function DBT:GetBarIterator(reverse)
-- return (reverse and reverseIterator) or iterator, self, nil
-- end
--end
function DBT:GetBarIterator()
return pairs(self.bars)
end
function DBT:GetBar(id)
for bar in self:GetBarIterator() do
if id == bar.id then
return bar
end
end
end
function DBT:CancelBar(id)
for bar in self:GetBarIterator() do
if id == bar.id then
bar:Cancel()
return true
end
end
return false
end
function DBT:UpdateBar(id, elapsed, totalTime)
for bar in self:GetBarIterator() do
if id == bar.id then
bar:SetTimer(totalTime or bar.totalTime)
bar:SetElapsed(elapsed or self.totalTime - self.timer)
return true
end
end
return false
end
---------------------------
-- General Bar Methods --
---------------------------
function DBT:ShowTestBars()
self:CreateBar(10, "Test 1", "Interface\\Icons\\Spell_Nature_WispSplode")
self:CreateBar(14, "Test 2", "Interface\\Icons\\Spell_Nature_WispSplode")
self:CreateBar(20, "Test 3", "Interface\\Icons\\Spell_Nature_WispSplode")
self:CreateBar(12, "Test 4", "Interface\\Icons\\Spell_Nature_WispSplode")
self:CreateBar(21.5, "Test 5", "Interface\\Icons\\Spell_Nature_WispSplode")
end
function barPrototype:SetTimer(timer)
self.totalTime = timer
self:Update(0)
end
function barPrototype:SetElapsed(elapsed)
self.timer = self.totalTime - elapsed
if (self.enlarged or self.moving == "enlarge") and not (self.timer <= self.owner.options.EnlargeBarsTime or (self.timer/self.totalTime) <= self.owner.options.EnlargeBarsPercent) then
local next = self.next
self:RemoveFromList()
self.enlarged = nil
self.moving = nil
if next then
next:MoveToNextPosition()
end
self.owner.smallBars:Append(self)
self:SetPosition()
end
self:Update(0)
end
function barPrototype:SetText(text)
getglobal(self.frame:GetName().."BarName"):SetText(text)
end
function barPrototype:SetIcon(icon)
getglobal(self.frame:GetName().."BarIcon1"):SetTexture("")
getglobal(self.frame:GetName().."BarIcon1"):SetTexture(icon)
getglobal(self.frame:GetName().."BarIcon2"):SetTexture("")
getglobal(self.frame:GetName().."BarIcon2"):SetTexture(icon)
end
function barPrototype:SetColor(color)
self.color = color
getglobal(self.frame:GetName().."Bar"):SetStatusBarColor(color.r, color.g, color.b)
getglobal(self.frame:GetName().."BarSpark"):SetVertexColor(color.r, color.g, color.b)
end
------------------
-- Bar Update --
------------------
function barPrototype:Update(elapsed)
local frame = self.frame
local bar = getglobal(frame:GetName().."Bar")
local texture = getglobal(frame:GetName().."BarTexture")
local spark = getglobal(frame:GetName().."BarSpark")
local timer = getglobal(frame:GetName().."BarTimer")
local obj = self.owner
self.timer = self.timer - elapsed
if obj.options.DynamicColor and not self.color then
local r = obj.options.StartColorR + (obj.options.EndColorR - obj.options.StartColorR) * (1 - self.timer/self.totalTime)
local g = obj.options.StartColorG + (obj.options.EndColorG - obj.options.StartColorG) * (1 - self.timer/self.totalTime)
local b = obj.options.StartColorB + (obj.options.EndColorB - obj.options.StartColorB) * (1 - self.timer/self.totalTime)
bar:SetStatusBarColor(r, g, b)
spark:SetVertexColor(r, g, b)
end
if self.timer <= 0 then
return self:Cancel()
else
if obj.options.FillUpBars then
bar:SetValue(1 - self.timer/self.totalTime)
else
bar:SetValue(self.timer/self.totalTime)
end
spark:ClearAllPoints()
spark:SetPoint("CENTER", bar, "LEFT", bar:GetValue() * bar:GetWidth(), -1)
timer:SetText(stringFromTimer(self.timer))
end
if obj.options.FadeIn and self.fadingIn and self.fadingIn < 0.5 then
self.fadingIn = self.fadingIn + elapsed
frame:SetAlpha((self.fadingIn) / 0.5)
elseif self.fadingIn then
self.fadingIn = nil
end
if self.timer <= 7.75 and not self.flashing and obj.options.Flash then
self.flashing = true
self.ftimer = 0
end
if self.flashing then
local ftime = self.ftimer % 1.25
if ftime >= 0.5 then
texture:SetAlpha(1)
spark:SetAlpha(1)
elseif ftime >= 0.25 then
texture:SetAlpha(1 - (0.5 - ftime) / 0.25)
spark:SetAlpha(1 - (0.5 - ftime) / 0.25)
else
texture:SetAlpha(1 - (ftime / 0.25))
spark:SetAlpha(1 - (ftime / 0.25))
end
self.ftimer = self.ftimer + elapsed
end
if self.moving == "move" and self.moveElapsed <= 0.5 then
self.moveElapsed = self.moveElapsed + elapsed
local newX = self.moveOffsetX + (obj.options.BarXOffset - self.moveOffsetX) * (self.moveElapsed / 0.5)
local newY
if self.owner.options.ExpandUpwards then
newY = self.moveOffsetY + 40 + (obj.options.BarYOffset - self.moveOffsetY) * (self.moveElapsed / 0.5)
else
newY = self.moveOffsetY + (-obj.options.BarYOffset - self.moveOffsetY) * (self.moveElapsed / 0.5)
end
frame:ClearAllPoints()
frame:SetPoint(self.movePoint, self.moveAnchor, self.moveRelPoint, newX, newY)
elseif self.moving == "move" then
self.moving = nil
self:SetPosition()
elseif self.moving == "enlarge" and self.moveElapsed <= 1 then
self:AnimateEnlarge(elapsed)
elseif self.moving == "enlarge" then
self.moving = nil
self.enlarged = true
self.owner.hugeBars:Append(self)
self:ApplyStyle()
self:SetPosition()
end
if (self.timer <= self.owner.options.EnlargeBarsTime or (self.timer/self.totalTime) <= self.owner.options.EnlargeBarsPercent) and (not self.small) and not self.enlarged and self.moving ~= "enlarge" and self.owner:GetOption("HugeBarsEnabled") then
local next = self.next
self:RemoveFromList()
if next then
local oldX = next.frame:GetRight() - next.frame:GetWidth()/2 -- the next frame's point needs to be cleared before we enlarge the bar to prevent the frame from "jumping around"
local oldY = next.frame:GetTop() -- so we need to save the old point for :MoveToNextPosition() as :GetTop() and :GetRight() might return nil (sometimes? happened only once in 2 weeks of raiding...but it crashed DBT...) after :ClearAllPoints()
next.frame:ClearAllPoints()
end
self:Enlarge()
if next then
next:MoveToNextPosition(oldX, oldY) -- ugly?
end
end
end
do
local frame = CreateFrame("Frame")
frame:SetScript("OnUpdate", function(self, elapsed)
if UIParent:IsShown() then return end
for i, v in ipairs(instances) do
for bar in v:GetBarIterator() do
bar:Update(elapsed)
end
end
end)
end
-------------------
-- Movable Bar --
-------------------
function DBT:SavePosition()
local point, _, _, x, y = self.mainAnchor:GetPoint(1)
self:SetOption("TimerPoint", point)
self:SetOption("TimerX", x)
self:SetOption("TimerY", y)
local point, _, _, x, y = self.secAnchor:GetPoint(1)
self:SetOption("HugeTimerPoint", point)
self:SetOption("HugeTimerX", x)
self:SetOption("HugeTimerY", y)
end
do
local function moveEnd(self)
updateClickThrough(self, self:GetOption("ClickThrough"))
self.movable = false
end
function DBT:ShowMovableBar(small, large)
if small or small == nil then
local bar1 = self:CreateBar(20, "Move1", "Interface\\Icons\\Spell_Nature_WispSplode", nil, true)
bar1:SetText(DBM_CORE_MOVABLE_BAR)
end
if large or large == nil then
local bar2 = self:CreateBar(20, "Move2", "Interface\\Icons\\Spell_Nature_WispSplode", true)
bar2:SetText(DBM_CORE_MOVABLE_BAR)
end
updateClickThrough(self, false)
self.movable = true
DBM:Unschedule(moveEnd, self)
DBM:Schedule(20, moveEnd, self)
end
end
--------------------
-- Bar Handling --
--------------------
function barPrototype:RemoveFromList()
if self.moving ~= "enlarge" then
(self.enlarged and self.owner.hugeBars or self.owner.smallBars):Remove(self)
end
end
------------------
-- Bar Cancel --
------------------
function barPrototype:Cancel()
local next = self.next
table.insert(unusedBars, self.frame)
self.frame:Hide()
self.frame.obj = nil
self:RemoveFromList()
if next then
next:MoveToNextPosition()
end
self.owner.bars[self] = nil
unusedBarObjects[self] = self
self.dead = true
self.owner.numBars = (self.owner.numBars or 1) - 1
end
-----------------
-- Bar Style --
-----------------
function DBT:ApplyStyle()
for bar in self:GetBarIterator() do
bar:ApplyStyle()
end
end
function barPrototype:ApplyStyle()
local frame = self.frame
local bar = getglobal(frame:GetName().."Bar")
local spark = getglobal(frame:GetName().."BarSpark")
local texture = getglobal(frame:GetName().."BarTexture")
local icon1 = getglobal(frame:GetName().."BarIcon1")
local icon2 = getglobal(frame:GetName().."BarIcon2")
local name = getglobal(frame:GetName().."BarName")
local timer = getglobal(frame:GetName().."BarTimer")
texture:SetTexture(self.owner.options.Texture)
if self.color then
bar:SetStatusBarColor(self.color.r, self.color.g, self.color.b)
spark:SetVertexColor(self.color.r, self.color.g, self.color.b)
else
bar:SetStatusBarColor(self.owner.options.StartColorR, self.owner.options.StartColorG, self.owner.options.StartColorB)
spark:SetVertexColor(self.owner.options.StartColorR, self.owner.options.StartColorG, self.owner.options.StartColorB)
end
name:SetTextColor(self.owner.options.TextColorR, self.owner.options.TextColorG, self.owner.options.TextColorB)
timer:SetTextColor(self.owner.options.TextColorR, self.owner.options.TextColorG, self.owner.options.TextColorB)
if self.owner.options.IconLeft then icon1:Show() else icon1:Hide() end
if self.owner.options.IconRight then icon2:Show() else icon2:Hide() end
if self.enlarged then frame:SetWidth(self.owner.options.HugeWidth) else frame:SetWidth(self.owner.options.Width) end
if self.enlarged then bar:SetWidth(self.owner.options.HugeWidth) else bar:SetWidth(self.owner.options.Width) end
if self.enlarged then frame:SetScale(self.owner.options.HugeScale) else frame:SetScale(self.owner.options.Scale) end
self.frame:Show()
spark:SetAlpha(1)
texture:SetAlpha(1)
bar:SetAlpha(1)
frame:SetAlpha(1)
name:SetFont(self.owner.options.Font, self.owner.options.FontSize)
timer:SetFont(self.owner.options.Font, self.owner.options.FontSize)
self:Update(0)
end
local function updateOrientation(self)
for bar in self:GetBarIterator() do
if not bar.dummy then
if bar.moving == "enlarge" then
bar.enlarged = true
bar.moving = false
self.owner.hugeBars:Append(self)
bar:ApplyStyle()
end
bar.moving = nil
bar:SetPosition()
end
end
end
options.ExpandUpwards.onChange = updateOrientation
options.BarYOffset.onChange = updateOrientation
options.BarXOffset.onChange = updateOrientation
function updateClickThrough(self, newValue)
if not self.movable then
for bar in self:GetBarIterator() do
if not bar.dummy then
bar.frame:EnableMouse(not newValue)
end
end
end
end
options.ClickThrough.onChange = updateClickThrough
--------------------
-- Bar Announce --
--------------------
function barPrototype:Announce()
local msg
if self.owner.announceHook then
msg = self.owner.announceHook(self)
end
msg = msg or ("%s %d:%02d"):format(getglobal(self.frame:GetName().."BarName"):GetText(), math.floor(self.timer / 60), self.timer % 60)
local chatWindow = ChatEdit_GetActiveWindow()
if chatWindow then
chatWindow:Insert(msg)
else
SendChatMessage(msg, (select(2, IsInInstance()) == "pvp" and "BATTLEGROUND") or (GetNumRaidMembers() > 0 and "RAID") or "PARTY")
end
end
function DBT:SetAnnounceHook(f)
self.announceHook = f
end
-----------------------
-- Bar Positioning --
-----------------------
function barPrototype:SetPosition()
if self.moving == "enlarge" then return end
local anchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
self.frame:ClearAllPoints()
if self.owner.options.ExpandUpwards then
self.frame:SetPoint("TOP", anchor, "BOTTOM", self.owner.options.BarXOffset, 40 + self.owner.options.BarYOffset)
else
self.frame:SetPoint("TOP", anchor, "BOTTOM", self.owner.options.BarXOffset, -self.owner.options.BarYOffset)
end
end
function barPrototype:MoveToNextPosition(oldX, oldY)
if self.moving == "enlarge" then return end
local newAnchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
local oldX = oldX or (self.frame:GetRight() - self.frame:GetWidth()/2)
local oldY = oldY or (self.frame:GetTop())
self.frame:ClearAllPoints()
if self.owner.options.ExpandUpwards then
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options.BarXOffset, 40 + self.owner.options.BarYOffset)
else
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options.BarXOffset, -self.owner.options.BarYOffset)
end
local newX = self.frame:GetRight() - self.frame:GetWidth()/2
local newY = self.frame:GetTop()
self.frame:ClearAllPoints()
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", -(newX - oldX), -(newY - oldY))
self.moving = "move"
self.movePoint = "TOP"
self.moveRelPoint = "BOTTOM"
self.moveAnchor = newAnchor
self.moveOffsetX = -(newX - oldX)
self.moveOffsetY = -(newY - oldY)
self.moveElapsed = 0
end
function barPrototype:Enlarge()
local newAnchor = (self.owner.hugeBars.last and self.owner.hugeBars.last.frame) or self.owner.secAnchor
local oldX = self.frame:GetRight() - self.frame:GetWidth()/2
local oldY = self.frame:GetTop()
self.frame:ClearAllPoints()
if self.owner.options.ExpandUpwards then
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options.BarXOffset, 40 + self.owner.options.BarYOffset)
else
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options.BarXOffset, -self.owner.options.BarYOffset)
end
local newX = self.frame:GetRight() - self.frame:GetWidth()/2
local newY = self.frame:GetTop()
self.frame:ClearAllPoints()
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", -(newX - oldX), -(newY - oldY))
self.moving = "enlarge"
self.movePoint = "TOP"
self.moveRelPoint = "BOTTOM"
self.moveAnchor = newAnchor
self.moveOffsetX = -(newX - oldX)
self.moveOffsetY = -(newY - oldY)
self.moveElapsed = 0
end
---------------------------
-- Bar Special Effects --
---------------------------
function barPrototype:AnimateEnlarge(elapsed)
self.moveElapsed = self.moveElapsed + elapsed
local newX = self.moveOffsetX + (self.owner.options.BarXOffset - self.moveOffsetX) * (self.moveElapsed / 1)
local newY
if self.owner.options.ExpandUpwards then
newY = self.moveOffsetY + 50 + (self.owner.options.BarYOffset - self.moveOffsetY) * (self.moveElapsed / 1)
else
newY = self.moveOffsetY + (self.owner.options.BarYOffset - self.moveOffsetY) * (self.moveElapsed / 1)
end
local newWidth = self.owner.options.Width + (self.owner.options.HugeWidth - self.owner.options.Width ) * (self.moveElapsed / 1)
local newScale = self.owner.options.Scale + (self.owner.options.HugeScale - self.owner.options.Scale) * (self.moveElapsed / 1)
if (self.moveOffsetY > 0 and newY > self.owner.options.BarYOffset) or (self.moveOffsetY < 0 and newY < self.owner.options.BarYOffset) then
self.frame:ClearAllPoints()
self.frame:SetPoint(self.movePoint, self.moveAnchor, self.moveRelPoint, newX, newY)
self.frame:SetScale(newScale)
self.frame:SetWidth(newWidth)
getglobal(self.frame:GetName().."Bar"):SetWidth(newWidth)
else
self.moving = nil
self.enlarged = true
self.owner.hugeBars:Append(self)
self:ApplyStyle()
self:SetPosition()
end
end
--[[
do
local breakFrames = {}
function barPrototype:Break() -- coming soon
local frame = table.remove(breakTextures, #breakTextures) or CreateFrame("Frame", nil, self.owner.mainAnchor)
frame:SetParent(self.owner.mainAnchor)
frame.tex1 = frame.tex1 or frame:CreateTexture(nil, "OVERLAY")
frame.tex2 = frame.tex2 or frame:CreateTexture(nil, "OVERLAY")
local tex1 = frame.tex1
local tex2 = frame.tex2
tex1:SetTexture(self.owner.options.Texture)
tex2:SetTexture(self.owner.options.Texture)
-- tex1:SetTexCoordModifiesRect(true)
tex1:SetHorizTile(true)
tex1:SetVertTile(true)
tex1:SetTexCoord(0, 0.5, 0, 1)
end
end
]]--
----------------------------------------
-- Functions used by the XML Template --
----------------------------------------
function DBT_Bar_OnLoad(self)
self:SetMinMaxValues(0, 1)
self:SetValue(1)
end
function DBT_Bar_OnUpdate(self, elapsed)
self.obj:Update(elapsed)
end
function DBT_Bar_OnMouseDown(self, btn)
if self.obj.owner.movable and btn == "LeftButton" then
if self.obj.enlarged then
self.obj.owner.secAnchor:StartMoving()
else
self.obj.owner.mainAnchor:StartMoving()
end
end
end
function DBT_Bar_OnMouseUp(self, btn)
self.obj.owner.mainAnchor:StopMovingOrSizing()
self.obj.owner.secAnchor:StopMovingOrSizing()
self.obj.owner:SavePosition()
if btn == "RightButton" then
self.obj:Cancel()
elseif btn == "LeftButton" and IsShiftKeyDown() then
self.obj:Announce()
end
end
function DBT_Bar_OnHide(self)
if self.obj then
self.obj.owner.mainAnchor:StopMovingOrSizing()
self.obj.owner.secAnchor:StopMovingOrSizing()
end
end
+61
View File
@@ -0,0 +1,61 @@
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
c. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
d. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
f. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
g. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
h. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
i. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
j. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).
4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.
d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
iii. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
f. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+134
View File
@@ -0,0 +1,134 @@
-- Simplified Chinese by Diablohu/yleaf(yaroot@gmail.com)
-- http://wow.gamespot.com.cn
-- Last Update: 12/13/2008
-- yleaf (yaroot@gmail.com) 9-19-2009
if GetLocale() ~= "zhCN" then return end
DBM_CORE_LOAD_MOD_ERROR = "读取%s模块时发生错误:%s"
DBM_CORE_LOAD_MOD_SUCCESS = "成功读取%s模块!"
DBM_CORE_LOAD_GUI_ERROR = "无法读取图形界面:%s"
DBM_CORE_COMBAT_STARTED = "%s作战开始,祝你走运 :)";
DBM_CORE_BOSS_DOWN = "%s被击杀!用时%s。"
DBM_CORE_BOSS_DOWN_LONG = "%s被击杀!本次用时%s,上次用时%s,最快击杀用时%s。"
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s被击杀!用时%s,新的击杀纪录诞生了!(原纪录为%s)"
DBM_CORE_COMBAT_ENDED = "%s作战结束,用时%s。"
DBM_CORE_TIMER_FORMAT_SECS = "%d秒"
DBM_CORE_TIMER_FORMAT_MINS = "%d分钟"
DBM_CORE_TIMER_FORMAT = "%d分%d秒"
DBM_CORE_MIN = ""
DBM_CORE_MIN_FMT = "%d 分"
DBM_CORE_SEC = ""
DBM_CORE_SEC_FMT = "%d 秒"
DBM_CORE_DEAD = "死亡"
DBM_CORE_OK = "确定"
DBM_CORE_GENERIC_WARNING_BERSERK = "%s%s后激怒"
DBM_CORE_GENERIC_TIMER_BERSERK = "激怒"
DBM_CORE_OPTION_TIMER_BERSERK = "显示激怒倒计时"
DBM_CORE_OPTION_HEALTH_FRAME = "显示首领生命值窗口"
DBM_CORE_OPTION_CATEGORY_TIMERS = "计时条"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "警报"
DBM_CORE_OPTION_CATEGORY_MISC = "其它"
DBM_CORE_AUTO_RESPONDED = "已自动回复密语。"
DBM_CORE_STATUS_WHISPER = "%s%s%d/%d存活"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s正在与%s交战,(当前%s,%d/%d存活)"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - 版本检测"
DBM_CORE_VERSIONCHECK_ENTRY = "%s%s(r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s:尚未安装DBM"
DBM_CORE_VERSIONCHECK_FOOTER = "团队中有%d名成员正在使用Deadly Boss Mods"
DBM_CORE_UPDATEREMINDER_HEADER = "你的Deadly Boss Mods版本已过期。\n你可以在如下地址下载到新版本%s(r%d):"
DBM_CORE_UPDATEREMINDER_FOOTER = "Ctrl-C:复制下载地址到剪切板。"
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "发现新版本后弹出提示框"
DBM_CORE_MOVABLE_BAR = "拖动我!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h向你发送了一个倒计时:'%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[取消该计时]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[忽略来自%1$s的计时]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "是否要在该次游戏连接中屏蔽来自%s的计时?"
DBM_PIZZA_ERROR_USAGE = "命令:/dbm [broadcast] timer <时间(秒)> <文本>"
DBM_CORE_ERROR_DBMV3_LOADED = "目前有2个版本的Deadly Boss Mods正在运行:DBMv3和DBMv4。\n单击“确定”按钮可将DBMv3关闭并重载用户界面。\n我们建议将插件目录下的DBMv3删除。"
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+单击或右键点击即可移动"
DBM_CORE_RANGECHECK_HEADER = "距离监视(%d码)"
DBM_CORE_RANGECHECK_SETRANGE = "设置距离"
DBM_CORE_RANGECHECK_SOUNDS = "声音"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "当有玩家接近时播放声音提示"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "多名玩家接近提示"
DBM_CORE_RANGECHECK_SOUND_0 = ""
DBM_CORE_RANGECHECK_SOUND_1 = "默认声音"
DBM_CORE_RANGECHECK_SOUND_2 = "蜂鸣"
DBM_CORE_RANGECHECK_HIDE = "隐藏"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d码"
DBM_CORE_SLASHCMD_HELP = {
"可用命令:",
"/dbm version:进行团队范围的DBM版本检测(也可使用:ver)",
"/dbm unlock:显示一个可移动的计时条,可通过对它来移动所有DBM计时条的位置(也可使用:move)",
"/dbm timer <x> <文本>:开始一个以<文本>为名称的时间为<x>秒的倒计时",
"/dbm broadcast timer <x> <文本>:向团队广播一个以<文本>为名称的时间为<x>秒的倒计时(需要团队领袖或助理权限)",
"/dbm help:显示该帮助信息",
}
DBM_ERROR_NO_PERMISSION = "无权进行该操作。"
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "隐藏"
DBM_CORE_ALLIANCE = "联盟"
DBM_CORE_HORDE = "部落"
DBM_CORE_UNKNOWN = "未知"
DBM_CORE_TIMER_PULL = "开怪倒计时"
DBM_CORE_ANNOUNCE_PULL = "%d 秒后开怪"
DBM_CORE_ANNOUNCE_PULL_NOW = "开怪!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "快速击杀"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS.target = "%s: %%s"
DBM_CORE_AUTO_TIMER_TEXTS.cast = "%s"
DBM_CORE_AUTO_TIMER_TEXTS.active = "%s"
DBM_CORE_AUTO_TIMER_TEXTS.cd = "%s 冷却"
DBM_CORE_AUTO_TIMER_TEXTS.next = "下一次 %s"
DBM_CORE_AUTO_TIMER_TEXTS.achievement = "%s"
DBM_CORE_AUTO_TIMER_OPTIONS.target = "显示 |cff71d5ff|Hspell:%d|h%s|h|r debuff计时"
DBM_CORE_AUTO_TIMER_OPTIONS.cast = "显示 |cff71d5ff|Hspell:%d|h%s|h|r 施法计时"
DBM_CORE_AUTO_TIMER_OPTIONS.active = "显示 |cff71d5ff|Hspell:%d|h%s|h|r 持续计时"
DBM_CORE_AUTO_TIMER_OPTIONS.cd = "显示 |cff71d5ff|Hspell:%d|h%s|h|r 冷却计时"
DBM_CORE_AUTO_TIMER_OPTIONS.next = "显示下一次 |cff71d5ff|Hspell:%d|h%s|h|r 计时"
DBM_CORE_AUTO_TIMER_OPTIONS.achievement = "显示成就: %s 计时"
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS.target = "%s 于 >%%s<"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.spell = "%s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.cast = "%s: %.1f sec"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.soon = "即将 %s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.prewarn = "%2$s 后 %1$s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.phase = "第 %d 阶段"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.target = "警报目标的: |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell = "显示警报: |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.cast = "施法提示: |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.soon = "提前警报 |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.prewarn = "提前警报 |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.phase = "显示阶段提示: %d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "移动特殊警报"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "特殊警报"
+193
View File
@@ -0,0 +1,193 @@
if GetLocale() ~= "deDE" then return end
DBM_CORE_NEED_SUPPORT = "Hey, bist du ein Programmierer oder gut in Fremdsprachen? Falls ja, benötigt das DBM-Team deine Hilfe, damit DBM das beste BossMod in WoW bleibt. Trete dem Team auf www.deadlybossmods.com bei oder sende eine E-Mail an tandanu@deadlybossmods.com oder nitram@deadlybossmods.com."
DBM_CORE_LOAD_MOD_ERROR = "Fehler beim Laden von Boss Mods für %s: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "Boss Mods für '%s' geladen, für weitere Optionen gib /dbm in deinem Chatfenster ein!"
DBM_CORE_LOAD_GUI_ERROR = "Konnte das GUI nicht laden: %s"
DBM_CORE_COMBAT_STARTED = "Kampf gegen %s hat begonnen. Viel Glück! :)";
DBM_CORE_BOSS_DOWN = "%s tot nach %s!"
DBM_CORE_BOSS_DOWN_LONG = "%s tot nach %s! Euer letzter kill hat %s gedauert und der schnellste %s."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s tot nach %s! Das ist ein neuer Rekord! (der alte Rekord war %s)"
DBM_CORE_COMBAT_ENDED = "Kampf gegen %s hat nach %s aufgehört."
DBM_CORE_TIMER_FORMAT_SECS = "%d |4Sekunde:Sekunden;"
DBM_CORE_TIMER_FORMAT_MINS = "%d |4Minute:Minuten;"
DBM_CORE_TIMER_FORMAT = "%d |4Minute:Minuten; und %d |4Sekunde:Sekunden;"
DBM_CORE_MIN = "Min"
DBM_CORE_MIN_FMT = "%d Min"
DBM_CORE_SEC = "Sek"
DBM_CORE_SEC_FMT = "%d Sek"
DBM_CORE_DEAD = "Tot"
DBM_CORE_OK = "Okay"
DBM_CORE_GENERIC_WARNING_BERSERK = "Berserker in %s %s"
DBM_CORE_GENERIC_TIMER_BERSERK = "Berserker"
DBM_CORE_OPTION_TIMER_BERSERK = "Berserker-Timer anzeigen"
DBM_CORE_OPTION_HEALTH_FRAME = "BossHealth-Frame anzeigen"
DBM_CORE_OPTION_CATEGORY_TIMERS = "Timer"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "Ansagen"
DBM_CORE_OPTION_CATEGORY_MISC = "Verschiedenes"
DBM_CORE_AUTO_RESPONDED = "Automatisch geantwortet."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d Spieler am Leben"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s ist damit beschäftigt, gegen %s zu kämpfen! (%s, %d/%d Spieler am Leben)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s hat %s besiegt!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s ist an %s gewipet"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - Versionen"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: DBM nicht installiert"
DBM_CORE_VERSIONCHECK_FOOTER = "%d Spieler mit Deadly Boss Mods gefunden"
DBM_CORE_YOUR_VERSION_OUTDATED = "Deine Version von Deadly Boss Mods ist veraltet! Bitte besuche www.deadlybossmods.com, um die neueste Version herunterzuladen."
DBM_CORE_DISABLED_ICON_FUNCTION = "Dein DBM setzt keine Zeichen mehr, weil deine Version veraltet ist. Bitte aktualisiere dein DBM so bald wie möglich und aktiviere die Zeichenfunktion wieder."
DBM_CORE_UPDATEREMINDER_HEADER = "Deine Version von Deadly Boss Mods ist veraltet.\n Version %s (r%d) ist hier zum Download verfügbar:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Drücke Strg+C um den Download-Link in die Zwischenablage zu kopieren"
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "Zeige Popup wenn eine neue Version verfügbar ist"
DBM_CORE_MOVABLE_BAR = "Zieh mich!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h hat dir einen DBM-Timer geschickt: '%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Diesen Timer abbrechen]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Pizza-Timer von %1$s ignorieren]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "Willst du wirklich DBM-Timer von %s für diese Session ignorieren?"
DBM_PIZZA_ERROR_USAGE = "Benutzung: /dbm [broadcast] timer <Sekunden> <text>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods läuft doppelt, da du DBMv3 und DBMv4 installiert und aktiviert hast!\nKlick auf \"Okay\" um DBMv3 zu deaktivieren und dein Interface neu zu laden.\nAußerdem solltest du deinen AddOn-Ordner aufräumen, indem du alle DBMv3 Mods löschst."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+Klick oder Rechtsklick zum Bewegen"
DBM_CORE_RANGECHECK_HEADER = "Abstandscheck (%d m)"
DBM_CORE_RANGECHECK_SETRANGE = "Abstand einstellen"
DBM_CORE_RANGECHECK_SOUNDS = "Sounds"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "Sound wenn ein Spieler in Reichweite ist"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "Sound wenn mehr als ein Spieler in Reichweite ist"
DBM_CORE_RANGECHECK_SOUND_0 = "Kein Sound"
DBM_CORE_RANGECHECK_SOUND_1 = "Standard-Sound"
DBM_CORE_RANGECHECK_SOUND_2 = "Nerviges Piepsen"
DBM_CORE_RANGECHECK_HIDE = "Verstecken"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d m"
DBM_CORE_RANGECHECK_LOCK = "Frame sperren"
DBM_CORE_SLASHCMD_HELP = {
"Verfügbare Slash-Commands:",
"/dbm version: führt einen raidweiten Versionscheck durch (alias: ver)",
"/dbm unlock: zeigt einen bewegbaren Timer an (alias: move)",
"/dbm timer <x> <text>: startet einen <x> Sekunden langen DBM-Timer mit dem Namen <text>",
"/dbm broadcast timer <x> <text>: schickt einen <x> Sekunden langen DBM-Timer mit dem Namen <text> an den Raid (benötigt (A) oder (L))",
"/dbm break <min>: startet einen Pause-Timer für <min> Minuten. Schickt allen Raidmitgliedern mit DBM einen Pause-Timer (benötigt (A) oder (L)).",
"/dbm help: zeigt diese Hilfe",
}
DBM_ERROR_NO_PERMISSION = "Du hast nicht die benötigte Berechtigung für diesen Befehl!"
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "Verstecken"
DBM_CORE_ALLIANCE = "Allianz"
DBM_CORE_HORDE = "Horde"
DBM_CORE_UNKNOWN = "unbekannt"
DBM_CORE_BREAK_START = "Pause startet jetzt -- du hast %s Minute(n)!"
DBM_CORE_BREAK_MIN = "Pause endet in %s Minute(n)!"
DBM_CORE_BREAK_SEC = "Pause endet in %s Sekunden!"
DBM_CORE_TIMER_BREAK = "Pause"
DBM_CORE_ANNOUNCE_BREAK_OVER = "Pause vorbei"
DBM_CORE_TIMER_PULL = "Pull in"
DBM_CORE_ANNOUNCE_PULL = "Pull in %d Sek"
DBM_CORE_ANNOUNCE_PULL_NOW = "Pull jetzt!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Speed-Kill"
-- Auto-generated Timer Localizations
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "%s CD",
next = "Nächster %s",
achievement = "%s",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "Debufftimer für |cff71d5ff|Hspell:%d|h%s|h|r anzeigen",
cast = "Casttimer für |cff71d5ff|Hspell:%d|h%s|h|r anzeigen",
active = "Timer während |cff71d5ff|Hspell:%d|h%s|h|r aktiv ist anzeigen",
cd = "Cooldowntimer für |cff71d5ff|Hspell:%d|h%s|h|r anzeigen",
next = "Timer für nächstes |cff71d5ff|Hspell:%d|h%s|h|r anzeigen",
achievement = "Timer für %s anzeigen",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s auf >%%s<",
spell = "%s",
cast = "%s in %.1f Sek",
soon = "%s bald",
prewarn = "%s in %s",
phase = "Phase %d",
}
local prewarnOption = "Zeige Vorwarnung für |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "Ziel von |cff71d5ff|Hspell:%d|h%s|h|r ansagen",
spell = "Zeige Warnung für |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Zeige Warnung wenn |cff71d5ff|Hspell:%d|h%s|h|r gezaubert wird",
soon = prewarnOption,
prewarn = prewarnOption,
phase = "Zeige Warnung für Phase %d"
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "Zeige Spezialwarnung für $spell:%d",
dispel = "Zeige Spezialwarnung zum Reinigen/Rauben von \n $spell:%d",
interupt = "Zeige Spezialwarnung zum Unterbrechen von $spell:%d",
you = "Zeige Spezialwarnung wenn du von \n $spell:%d betroffen bist",
target = "Zeige Spezialwarnung wenn jemand von \n $spell:%d betroffen ist",
close = "Zeige Spezialwarnung wenn jemand in deiner Nähe von \n $spell:%d betroffen ist",
move = "Zeige Spezialwarnung wenn du von \n $spell:%d betroffen bist",
run = "Zeige Spezialwarnung für $spell:%d",
cast = "Zeige Spezialwarnung für Zaubern von $spell:%d",
stack = "Zeige Spezialwarnung für >=%d Stacks von \n $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%s auf %%s - jetzt reinigen",
interupt = "%s - jetzt unterbrechen",
you = "%s auf dir",
target = "%s auf %%s",
close = "%s auf %%s in deiner Nähe",
move = "%s - geh weg",
run = "%s - lauf weg",
cast = "%s - stoppe Zauber",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "Setze Zeichen auf Ziele von $spell:%d"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "Spiele Sound bei $spell:%d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "Spezialwarnung beweglich"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "Spezialwarnung"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "Eine %d-m-Abstacksprüfung wird in dieser Zone nicht unterstützt.\nUnterstützte Abstände sind 10, 11, 15 und 28 m."
DBM_ARROW_MOVABLE = "Pfeil beweglich"
DBM_ARROW_NO_RAIDGROUP = "Diese Funktion steht nur in Schlachtzügen und innerhalb von Instanzen zu Verfügung."
DBM_ARROW_ERROR_USAGE = {
"Benutzung von DBM-Arrow:",
"/dbm arrow <x> <y> erzeugt einen Pfeil, der auf bestimmte Koordinaten zeigt (0 < x/y < 100)",
"/dbm arrow <player> erzeugt einen Pfeil, der auf einen bestimmten Spieler in deiner Gruppe oder deinem Schlachtzug zeigt",
"/dbm arrow hide versteckt den Pfeil",
"/dbm arrow move macht den Pfeil beweglich",
}
+221
View File
@@ -0,0 +1,221 @@
DBM_CORE_NEED_SUPPORT = "Are you good with programming or languages? If yes, the DBM team needs your help to keep DBM the best boss mod for WoW. Join the team by visiting https://discord.gg/4ZHfgskSvM or sending a message to Szyler on Discord or on Area52."
DBM_CORE_LOAD_MOD_ERROR = "Error while loading boss mods for %s: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "Loaded '%s' boss mods. For more options, type /dbm in your chat."
DBM_CORE_LOAD_GUI_ERROR = "Could not load GUI: %s"
DBM_CORE_COMBAT_STARTED = "%s engaged. Good luck and have fun! :)";
DBM_CORE_BOSS_DOWN = "%s down after %s!"
DBM_CORE_BOSS_DOWN_LONG = "%s down after %s! Your last kill took %s and your fastest kill took %s."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s down after %s! This is a new record! (Old record was %s)"
DBM_CORE_COMBAT_ENDED = "Combat against %s ended after %s."
DBM_CORE_TIMER_FORMAT_SECS = "%d |4second:seconds;"
DBM_CORE_TIMER_FORMAT_MINS = "%d |4minute:minutes;"
DBM_CORE_TIMER_FORMAT = "%d |4minute:minutes; and %d |4second:seconds;"
DBM_CORE_MIN = "min"
DBM_CORE_MIN_FMT = "%d min"
DBM_CORE_SEC = "sec"
DBM_CORE_SEC_FMT = "%d sec"
DBM_CORE_DEAD = "dead"
DBM_CORE_OK = "Okay"
DBM_CORE_GENERIC_WARNING_BERSERK = "Berserk in %s %s"
DBM_CORE_GENERIC_TIMER_BERSERK = "Berserk"
DBM_CORE_OPTION_TIMER_BERSERK = "Show timer for $spell:26662"
DBM_CORE_OPTION_TIMER_BERSERK_CUSTOM = "Show timer for |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_OPTION_HEALTH_FRAME = "Show boss health frame"
DBM_CORE_OPTION_CATEGORY_TIMERS = "Bars"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "Announces"
DBM_CORE_OPTION_CATEGORY_MISC = "Miscellaneous"
DBM_CORE_AUTO_RESPONDED = "Auto-responded."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d people alive"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s is busy fighting against %s (%s, %d/%d people alive)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s has defeated %s!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s has wiped on %s"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - Versions"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: DBM not installed"
DBM_CORE_VERSIONCHECK_FOOTER = "Found %d players with Deadly Boss Mods"
DBM_CORE_YOUR_VERSION_OUTDATED = "Your version of Deadly Boss Mods is out-of-date. Please visit https://discord.gg/4ZHfgskSvM to get the latest version."
DBM_CORE_UPDATEREMINDER_HEADER = "Your version of Deadly Boss Mods is out-of-date.\n Version %s (r%d) is available for download here:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Press Ctrl-C to copy the download link to your clipboard."
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "Show popup when a new version is available"
DBM_CORE_MOVABLE_BAR = "Drag me!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h sent you a DBM timer: '%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Cancel this timer]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignore timers from %1$s]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "Do you really want to ignore DBM timers from %s for this session?"
DBM_PIZZA_ERROR_USAGE = "Usage: /dbm [broadcast] timer <time> <text>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods is running twice because you have DBMv3 and DBMv4 installed and enabled!\nClick \"Okay\" to disable DBMv3 and reload your interface.\nYou should also clean up your AddOns folder by deleting the old DBMv3 folders."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+click or right-click to move\nAlt+shift+click for free drag and drop"
DBM_CORE_RANGECHECK_HEADER = "Range Check (%d yd)"
DBM_CORE_RANGECHECK_SETRANGE = "Set range"
DBM_CORE_RANGECHECK_SOUNDS = "Sounds"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "Sound when one player is in range"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "Sound when more than one player is in range"
DBM_CORE_RANGECHECK_SOUND_0 = "No sound"
DBM_CORE_RANGECHECK_SOUND_1 = "Default sound"
DBM_CORE_RANGECHECK_SOUND_2 = "Annoying beep"
DBM_CORE_RANGECHECK_HIDE = "Hide"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d yd"
DBM_CORE_RANGECHECK_LOCK = "Lock frame"
DBM_LFG_INVITE = "LFG Invite"
DBM_CORE_SLASHCMD_HELP = {
"Available slash commands:",
"/dbm version: Performs a raid-wide version check (alias: ver).",
"/dbm unlock: Shows a movable status bar timer (alias: move).",
"/dbm timer <x> <text>: Starts a <x> second DBM Timer with the name <text>.",
"/dbm broadcast timer <x> <text>: Broadcasts a <x> second DBM Timer with the name <text> to the raid (requires leader/promoted status).",
"/dbm break <min>: Starts a break timer for <min> minutes. Gives all raid members with DBM a break timer (requires leader/promoted status).",
"/dbm help: Shows slash command descriptions",
}
DBM_ERROR_NO_PERMISSION = "You don't have the required permission to do this."
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "Close health frame"
DBM_CORE_ALLIANCE = "Alliance"
DBM_CORE_HORDE = "Horde"
DBM_CORE_UNKNOWN = "unknown"
DBM_CORE_BREAK_START = "Break starting now -- you have %s minute(s)!"
DBM_CORE_BREAK_MIN = "Break ends in %s minute(s)!"
DBM_CORE_BREAK_SEC = "Break ends in %s seconds!"
DBM_CORE_TIMER_BREAK = "Break time!"
DBM_CORE_ANNOUNCE_BREAK_OVER = "Break time is over"
DBM_CORE_TIMER_PULL = "Pull in"
DBM_CORE_ANNOUNCE_PULL = "Pull in %d sec"
DBM_CORE_ANNOUNCE_PULL_NOW = "Pull now!"
DBM_CORE_ANNOUNCE_PULL_CANCEL = "Pull timer canceled!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Speed Kill"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "%s CD",
next = "Next %s",
achievement = "%s",
phase = "Phase %s",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "Show timer for |cff71d5ff|Hspell:%d|h%s|h|r debuff",
cast = "Show timer for |cff71d5ff|Hspell:%d|h%s|h|r cast",
active = "Show timer for |cff71d5ff|Hspell:%d|h%s|h|r duration",
cd = "Show timer for |cff71d5ff|Hspell:%d|h%s|h|r cooldown",
next = "Show timer for next |cff71d5ff|Hspell:%d|h%s|h|r",
achievement = "Show timer for %s",
phase = "Show timer for phase |cff71d5ff|Hspell:%d|h%s|h|r",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s on >%%s<",
spell = "%s",
cast = "Casting %s: %.1f sec",
soon = "%s soon",
prewarn = "%s in %s",
phase = "Phase %d",
interrupt = "Interrupt %d",
}
local prewarnOption = "Show pre-warning for |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "Announce |cff71d5ff|Hspell:%d|h%s|h|r targets",
spell = "Show warning for |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Show warning when |cff71d5ff|Hspell:%d|h%s|h|r is being cast",
soon = prewarnOption,
prewarn = prewarnOption,
phase = "Announce Phase %d",
interrupt = "Show warning for when to interrupt %d"
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "Show special warning for $spell:%d",
dispel = "Show special warning to dispel/spellsteal \n $spell:%d",
interupt = "Show special warning to interupt $spell:%d",
you = "Show special warning when you are affected by \n $spell:%d",
target = "Show special warning when someone is affected by \n $spell:%d",
close = "Show special warning when someone close to you is \n affected by $spell:%d",
move = "Show special warning when you are affected by \n $spell:%d",
run = "Show special warning for $spell:%d",
cast = "Show special warning for $spell:%d cast",
stack = "Show special warning for >=%d stacks of \n $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%s on %%s - dispel now",
interupt = "%s - interupt now",
you = "%s on you",
target = "%s on %%s",
close = "%s on %%s near you",
move = "%s - move away",
run = "%s - run away",
cast = "%s - stop casting",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_YELL_OPTION = {
shortyell = "Yell when you are affected by $spell:%d",
yell = "Yell with name when you are affected \n by $spell:%d",
count = "Yell with count when you are affected\n by $spell:%d",
fade = "Yell with countdown and spell name \n when $spell:%d is fading",
shortfade = "Yell with countdown when $spell:%d \n is fading",
iconfade = "Yell with countdown and icon when \n $spell:%d is fading",
position = "Yell with position when you are affected \n by $spell:%d",
combo = "Yell when you are affected by $spell:%d \n and other spells at same time"
}
DBM_CORE_AUTO_YELL_ANNOUNCE_TEXT = {
shortyell = "%s",
yell = "%s on " .. UnitName("player"),
count = "%s on " .. UnitName("player") .. " (%%d)",
fade = "%s fading in %%d",
shortfade = "%%d",
iconfade = "{rt%%2$d} %%1$d {rt%%2$d}",
position = "%s %%s on {rt%%d}"..UnitName("player").."{rt%%d}",
combo = "%s and %%s"--Spell name (from option, plus spellname given in arg)
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "Set icons on $spell:%d targets"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "Play sound on $spell:%d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "Special warning movable"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "Special Warning"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "A %d yard range check is not supported in this zone.\nSupported ranges are 10, 11, 15 and 28 yard."
DBM_ARROW_MOVABLE = "Arrow movable"
DBM_ARROW_NO_RAIDGROUP = "This function only works in raid groups and within raid instances."
DBM_ARROW_ERROR_USAGE = {
"DBM-Arrow usage:",
"/dbm arrow <x> <y> creates an arrow that points to a specific locataion (0 < x/y < 100)",
"/dbm arrow <player> creates and arrow that points to a specific player in your party or raid",
"/dbm arrow hide hides the arrow",
"/dbm arrow move makes the arrow movable",
}
+194
View File
@@ -0,0 +1,194 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
DBM_CORE_NEED_SUPPORT = "¡Ey! ¿Eres un programador o eres bueno con los idiomas? Si es así, el Equipo DBM necesita tu ayuda para mantener el DBM como el mejor BossMod del WoW. Únete al equipo haciendo click en www.deadlybossmods.com o enviando un mensaje a tandanu@deadlybossmods.com o nitram@deadlybossmods.com."
DBM_CORE_LOAD_MOD_ERROR = "Error al cargar modulo %s: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "Cargado modulo de '%s' !"
DBM_CORE_LOAD_GUI_ERROR = "No se puede cargar la GUI: %s"
DBM_CORE_COMBAT_STARTED = "%s llamado. Buena suerte y diviertase! :)";
DBM_CORE_BOSS_DOWN = "%s murio en %s!"
DBM_CORE_BOSS_DOWN_LONG = "%s murio en %s! Su muerte reciente fue %s y la muerte mas rapida fue %s."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s murio en %s! Es un nuevo record! (el antiguo era %s)"
DBM_CORE_COMBAT_ENDED = "El combate contra %s termino en %s."
DBM_CORE_TIMER_FORMAT_SECS = "%d |4segundo:segundos;"
DBM_CORE_TIMER_FORMAT_MINS = "%d |4minuto:minutos;"
DBM_CORE_TIMER_FORMAT = "%d |4minuto:minutos; y %d |4segundo:segundos;"
DBM_CORE_MIN = "min"
DBM_CORE_MIN_FMT = "%d min"
DBM_CORE_SEC = "seg"
DBM_CORE_SEC_FMT = "%d sec"
DBM_CORE_DEAD = "muerto"
DBM_CORE_OK = "Aceptar"
DBM_CORE_GENERIC_WARNING_BERSERK = "Enrage en %s %s"
DBM_CORE_GENERIC_TIMER_BERSERK = "Enrage"
DBM_CORE_OPTION_TIMER_BERSERK = "Mostrar tiempo para Enrage"
DBM_CORE_OPTION_HEALTH_FRAME = "Mostrar barra de vida del boss"
DBM_CORE_OPTION_CATEGORY_TIMERS = "Barras"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "Anuncios"
DBM_CORE_OPTION_CATEGORY_MISC = "Miscelaneo"
DBM_CORE_AUTO_RESPONDED = "Auto-respusta."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d gete viva"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s esta ocupado en la batalla contra %s (%s, %d/%d gente viva)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s ha derrotado a %s!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s ha wipeado en %s"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - Version"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: DBM no instalado"
DBM_CORE_VERSIONCHECK_FOOTER = "Encontrados %d jugadores con Deadly Boss Mods"
DBM_CORE_YOUR_VERSION_OUTDATED = "¡Tu versión de Deadly Boss Mods es antigua! Por favor, visita www.deadlybossmods.com para bajarte la última versión."
DBM_CORE_UPDATEREMINDER_HEADER = "La version de tu Deadly Boss Mods es antigua.\n Version %s (r%d) disponible para descargar aqui:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Presiona Contro+C para copiar el link de la descarga."
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "Mostrar popup si hay nueva version de Deadly Boss Mods"
DBM_CORE_MOVABLE_BAR = "¡Muéveme!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h envia tu tiempo: '%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Cancelar este tiempo]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignorar tiempos de %1$s]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "¿De verdad quieres ignorar los tiempos de %s para esta sesion?"
DBM_PIZZA_ERROR_USAGE = "Usa: /dbm [broadcast] timer <time> <text>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods is running twice because you have DBMv3 and DBMv4 installed and enabled!\nClick \"Okay\" to disable DBMv3 and reload your interface.\nYou should also clean up your AddOns folder by deleting the old DBMv3 folders."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "DBM-Español"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Mayus+Raton1 o Raton2 para mover\nAlt+Mayus+Raton1 para moverlo a donde quieras"
DBM_CORE_RANGECHECK_HEADER = "Comprobacion de Rango (%d yd)"
DBM_CORE_RANGECHECK_SETRANGE = "Ajustar Rango"
DBM_CORE_RANGECHECK_SOUNDS = "Sonidos"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "Sonido si una persona esta a rango"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "Sonido si mas de una persona estan a rango"
DBM_CORE_RANGECHECK_SOUND_0 = "Sin sonido"
DBM_CORE_RANGECHECK_SOUND_1 = "Sonido por defecto"
DBM_CORE_RANGECHECK_SOUND_2 = "Sonido de despertador"
DBM_CORE_RANGECHECK_HIDE = "Esconder"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d yd"
DBM_CORE_RANGECHECK_LOCK = "Bloquear ventana"
DBM_LFG_INVITE = "Invitación al grupo"
DBM_CORE_SLASHCMD_HELP = {
"Comandos disponibles:",
"/dbm version: comprueba la versión de DBM de toda la banda (alias: ver)",
"/dbm unlock: muestra una barra de estado desplazable (alias: move)",
"/dbm timer <x> <text>: Muestra un contador de <x> segundos con el nombre <text>",
"/dbm broadcast timer <x> <text>: Muestra un contador de <x> segundos con el nombre <text> a la banda (requiere lider/ayudante)",
"/dbm break <min>: Empieza un descanso de <min> minutos. Muestra a todos los miembros de banda con DBM un contador de descanso (requiere lider/ayudante).",
"/dbm help: muestra esta ayuda",
}
DBM_ERROR_NO_PERMISSION = "No tienes permiso para hacer eso."
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "Esconder"
DBM_CORE_ALLIANCE = "Alianza"
DBM_CORE_HORDE = "Horda"
DBM_CORE_UNKNOWN = "desconocido"
DBM_CORE_BREAK_START = "¡El descanso empieza ahora -- tienes %s minuto(s)!"
DBM_CORE_BREAK_MIN = "¡El descanso acaba en %s minuto(s)!"
DBM_CORE_BREAK_SEC = "¡El descanso acaba en %s segundos!"
DBM_CORE_TIMER_BREAK = "¡Descanso!"
DBM_CORE_ANNOUNCE_BREAK_OVER = "El descanso terminó"
DBM_CORE_TIMER_PULL = "Pull en"
DBM_CORE_ANNOUNCE_PULL = "Pull en %d seg"
DBM_CORE_ANNOUNCE_PULL_NOW = "Pull ahora!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Matar rapido"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "%s CD",
next = "Siguiente %s",
achievement = "%s",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "Mostrar tiempo de debuff |cff71d5ff|Hspell:%d|h%s|h|r ",
cast = "Mostrar tiempo de cast de |cff71d5ff|Hspell:%d|h%s|h|r ",
active = "Mostrar duración de |cff71d5ff|Hspell:%d|h%s|h|r ",
cd = "Mostrar CD de |cff71d5ff|Hspell:%d|h%s|h|r ",
next = "Mostrar tiempo para el siguiente |cff71d5ff|Hspell:%d|h%s|h|r ",
achievement = "Mostrar tiempo para %s",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s en >%%s<",
spell = "%s",
cast = "Casteando %s: %.1f seg",
soon = "%s pronto",
prewarn = "%s en %s",
phase = "Fase %d",
}
local prewarnOption = "Mostrar una pre-alerta para |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "Anunciar objetivo de |cff71d5ff|Hspell:%d|h%s|h|r",
spell = "Mostrar aviso para |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Mostrar aviso cuando castee |cff71d5ff|Hspell:%d|h%s|h|r",
soon = "Mostrar pre-aviso para |cff71d5ff|Hspell:%d|h%s|h|r",
prewarn = "Mostrar pre-aviso para |cff71d5ff|Hspell:%d|h%s|h|r",
phase = "Mostrar aviso para fase %d",
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "Mostrar aviso especial para $spell:%d",
dispel = "Mostrar aviso especial para dispelear/robar hechizo \n $spell:%d",
interupt= "Mostrar aviso especial para interrumpir $spell:%d",
you = "Mostrar aviso especial cuando te afecta \n $spell:%d",
target = "Mostrar aviso especial cuando a alguien le afecta \n $spell:%d",
close = "Mostrar aviso especial cuando a alguien cerca de ti \n le afecta $spell:%d",
move = "Mostrar aviso especial cuando te afecta \n $spell:%d",
run = "Mostrar aviso especial para $spell:%d",
cast = "Mostrar aviso especial para casteo de $spell:%d",
stack = "Mostrar aviso especial cuando tienes >=%d marcas de \n $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s",
dispel = "%s ¡dispelea ahora!",
interupt = "%s ¡interrumpe ahora!",
you = "%s en ti!",
target = "%s en %%s",
close = "%s en %%s cerca de ti",
move = "%s ¡muévete!",
run = "%s ¡corre!",
cast = "%s ¡para de castear!",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "Poner iconos en objetivos de $spell:%d"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "Reproducir sonido en $spell:%d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "Aviso especial desplazable"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "Aviso especial"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "La comprobación de rango de %d yardas no está disponible en esta zona.\nLos rangos disponibles son 10, 11, 15 y 28 yardas."
DBM_ARROW_MOVABLE = "Flecha movible"
DBM_ARROW_NO_RAIDGROUP = "Esta funcionalidad solo puede usarse en grupos de banda o en estancias de banda."
DBM_ARROW_ERROR_USAGE = {
"Uso de DBM-Arrow:",
"/dbm arrow <x> <y>: Crea una flecha que apunta a una dirección específica (0 < x/y < 100)",
"/dbm arrow <jugador>: Crea una flecha que apunta a un miembro específico de la banda",
"/dbm arrow hide: Oculta la flecha",
"/dbm arrow move: Hace la flecha movible",
}
+194
View File
@@ -0,0 +1,194 @@
if GetLocale() ~= "frFR" then return end
DBM_CORE_LOAD_MOD_ERROR = "Erreur durant le chargement du boss mod pour %s: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "Boss mod pour '%s' chargé!"
DBM_CORE_LOAD_GUI_ERROR = "Ne peut charger le GUI: %s"
DBM_CORE_COMBAT_STARTED = "%s engagé. Bonne chance et amusez-vous bien ! :)";
DBM_CORE_BOSS_DOWN = "%s est mort après %s!"
DBM_CORE_BOSS_DOWN_LONG = "%s est mort après %s! Votre dernier down a durée %s et le plus rapide a duré %s."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s est mort après %s! C'est un nouveau record! (l'ancien record était de %s)"
DBM_CORE_COMBAT_ENDED = "Combat contre %s terminé après %s."
DBM_CORE_TIMER_FORMAT_SECS = "%d |4seconde:secondes;"
DBM_CORE_TIMER_FORMAT_MINS = "%d |4minute:minutes;"
DBM_CORE_TIMER_FORMAT = "%d |4minute:minutes; et %d |4seconde:secondes;"
DBM_CORE_MIN = "min"
DBM_CORE_MIN_FMT = "%d min"
DBM_CORE_SEC = "sec"
DBM_CORE_SEC_FMT = "%d sec"
DBM_CORE_DEAD = "mort"
DBM_CORE_OK = "Okay"
DBM_CORE_GENERIC_WARNING_BERSERK = "Frénésie dans %s %s"
DBM_CORE_GENERIC_TIMER_BERSERK = "Frénésie"
DBM_CORE_OPTION_TIMER_BERSERK = "Afficher le timer pour la Frénésie"
DBM_CORE_OPTION_HEALTH_FRAME = "Afficher la fenêtre de vie du Boss"
DBM_CORE_OPTION_CATEGORY_TIMERS = "Barres"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "Annonces"
DBM_CORE_OPTION_CATEGORY_MISC = "Divers"
DBM_CORE_AUTO_RESPONDED = "Réponse automatique."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d personnes en vie"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s est occupé(e) à combattre contre %s (%s, %d/%d personnes en vie)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s a vaincu %s !"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s a wip sur %s"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - Versions"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: DBM non installé"
DBM_CORE_VERSIONCHECK_FOOTER = "a trouvé %d joueurs avec Deadly Boss Mods"
DBM_CORE_YOUR_VERSION_OUTDATED = "Votre version de Deadly Boss Mods est périmé! Merci de visiter www.deadlybossmods.com pour avoir la dernière version."
DBM_CORE_DISABLED_ICON_FUNCTION = "Votre version ne peut pas mettre les icones, car votre version est périmé. Merci de la mettre a jour dès que possible et réactiver la fonction icone."
DBM_CORE_UPDATEREMINDER_HEADER = "Votre version de Deadly Boss Mods est périmée.\n Version %s (r%d) disponible ici:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Faites Ctrl-C pour copier le lien votre presse-papier."
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "Montre une annonce quand une nouvelle version de DBM est disponible."
DBM_CORE_MOVABLE_BAR = "Déplace-moi!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h vous envoie un timer pizza: '%2$s'\n|HDBM:annuler:%2$s:nil|h|cff3588ff[Annuler ce timer]|r|h |HDBM:ignorer:%2$s:%1$s|h|cff3588ff[Ignorer les timers de %1$s]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "Voulez vous vraiment ignorer les timers pizza de %s pour cette session?"
DBM_PIZZA_ERROR_USAGE = "Usage: /dbm [broadcast] timer <time> <text>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods est lancé en double car vous avez DBMv3 et DBMv4 d'installé et d'activé!\nCliquez sur \"Okay\" pour désactiver DBMv3 et recharger votre interfarce.\nVous pouvez aussi nettoyer votre fichier AddOns en supprimant l'ancien fichier DBMv3."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+clic ou clic droit pour déplacer\nAlt+shift+click pour drag&drop librement"
DBM_CORE_RANGECHECK_HEADER = "Vérifie la portée (%d m)"
DBM_CORE_RANGECHECK_SETRANGE = "Définir la portée"
DBM_CORE_RANGECHECK_SOUNDS = "Sons"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "Joue un son quand un joueur est dans la zone"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "Joue un autre son quand plus d'un joueur sont dans la zone"
DBM_CORE_RANGECHECK_SOUND_0 = "Pas de son"
DBM_CORE_RANGECHECK_SOUND_1 = "Son par défaut"
DBM_CORE_RANGECHECK_SOUND_2 = "Son Ennuyeux"
DBM_CORE_RANGECHECK_HIDE = "Cacher"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d m"
DBM_CORE_RANGECHECK_LOCK = "Verrouiller la fenêtre"
DBM_LFG_INVITE = "LFG Invite"
DBM_CORE_SLASHCMD_HELP = {
"Commandes slash disponible:",
"/dbm version: Vérifie la version du raid (alias: ver)",
"/dbm unlock: Affiche un Timer Status déplacable (alias: move)",
"/dbm timer <x> <text>: Commence un <x> second Timer Pizza avec le nom <text>",
"/dbm broadcast timer <x> <text>: Diffuse un Timer Pizza de <x> secondes avec le nom <text> au raid (Nécessite d'être promu ou leader)",
"/dbm break <min>: Démarre un timer de pause pour <min> minutes. Envoie à tous les membres du raid avec DBM ce timer de pause (Nécessite d'être promu ou leader).",
"/dbm help: Affiche l'aide",
}
DBM_ERROR_NO_PERMISSION = "Vous n'avez pas les permissions requises pour faire ceci."
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "Cacher"
DBM_CORE_ALLIANCE = "Alliance"
DBM_CORE_HORDE = "Horde"
DBM_CORE_UNKNOWN = "Inconnu"
DBM_CORE_BREAK_START = "La pause démarre maintenant -- vous avez %s minute(s)!"
DBM_CORE_BREAK_MIN = "La pause finit dans %s minutes!"
DBM_CORE_BREAK_SEC = "La pause finit dans %s secondes!"
DBM_CORE_TIMER_BREAK = "Break time!"-----
DBM_CORE_ANNOUNCE_BREAK_OVER = "Break time is over"-----
DBM_CORE_TIMER_PULL = "Pull dans"
DBM_CORE_ANNOUNCE_PULL = "Pull dans %d sec"
DBM_CORE_ANNOUNCE_PULL_NOW = "Pull maintenant!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Speed Kill"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "CD de: %s",
next = "Prochain(e) %s",
achievement = "%s",
combatstart = "Le combat commence",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "Afficher le temps du debuff pour: |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Afficher la barre d'incantation pour: |cff71d5ff|Hspell:%d|h%s|h|r",
active = "Afficher le timer pour la fin de: |cff71d5ff|Hspell:%d|h%s|h|r",
cd = "Afficher le cooldown pour: |cff71d5ff|Hspell:%d|h%s|h|r",
next = "Afficher le timer pour le prochain: |cff71d5ff|Hspell:%d|h%s|h|r",
achievement = "Montre le timer pour %s",
combatstart = "Montre le timer pour le début du combat",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s sur >%%s<",
spell = "%s",
cast = "Cast %s: %.1f sec",
soon = "%s bientôt",
prewarn = "%s dans %s",
phase = "Phase %d",
}
local prewarnOption = "Montre une pré-alerte pour |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "Annonce la cible de |cff71d5ff|Hspell:%d|h%s|h|r",
spell = "Montre une alerte pour |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Montre une alerte quand |cff71d5ff|Hspell:%d|h%s|h|r est en cours de cast",
soon = "Montre une alerte avant |cff71d5ff|Hspell:%d|h%s|h|r",
prewarn = "Montre une alerte avant |cff71d5ff|Hspell:%d|h%s|h|r",
phase = "Montre une alerte pour la phase %d",
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "Afficher lalerte spéciale pour $spell:%d",
dispel = "Afficher lalerte spéciale à dispel/spellsteal \n $spell:%d",
interupt = "Afficher lalerte spéciale interrompre $spell:%d",
you = "Afficher lalerte spéciale lorsque vous êtes affecté par $spell:%d",
target = "Afficher lalerte spéciale quand quelqu'un est touché par $spell:%d",
close = "Afficher lalerte spéciale quand quelqu'un est proche de vous \n affected by $spell:%d",
move = "Afficher lalerte spéciale lorsque vous êtes affecté par $spell:%d",
run = "Afficher lalerte spéciale pour $spell:%d",
cast = "Afficher lalerte spéciale pour $spell:%d cast",
stack = "Afficher lalerte spéciale pour >=%d des piles de \n $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%s on %%s - dispel maintenant",
interupt = "%s - interrompre maintenant",
you = "%s sur toi",
target = "%s sur %%s",
close = "%s sur %%s près de vous",
move = "%s - bouge vite",
run = "%s - éloigne toi",
cast = "%s - stop cast",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "Set d'icônes sur $spell:%d en targets"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "jouer un son sur $spell:%d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "Alerte spéciale déplaçable"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "Alerte spéciale"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "Une %d vérification de distance n'est pas supporté dans cette zone.\nLes distances autorisés est 10, 11, 15 et 28 yard."
DBM_ARROW_MOVABLE = "Bouger la Flèche"
DBM_ARROW_ERROR_USAGE = {
"DBM-flèche usage:",
"/dbm flèche <x> <y> crée une flèche qui pointe vers une locataion spécifiques (0 < x/y < 100)",
"/dbm flèche <player> crée une flèche qui pointe vers un joueur précis dans votre groupe ou raid",
"/dbm flèche cache la flèche",
"/dbm flèche fait déplacer",
}
+187
View File
@@ -0,0 +1,187 @@
if (GetLocale() == "koKR") then
DBM_CORE_NEED_SUPPORT = "안녕하세요. DBM Team입니다. 만약 프로그래밍 또는 언어에 대해 잘 아신다면, DBM Team에 어떤 도움이든 주실 수 있습니다. 만약, 한글화 혹은 코드 수정에 관해 건의/수정 사항이 있다면 wow.somegate.com 또는 에이그윈(호드) 흑묘서희에게 연락바랍니다. DBM BossMods Team에 참가하고 싶다면 www.deadlybossmods.com 또는 tandanu@deadlybossmods.com 또는 nitram@deadlybossmods.com에 연락 바랍니다. 물론, 영어를 매우 잘하셔야겠죠?"
DBM_CORE_LOAD_MOD_ERROR = "%s 보스 모드 로딩중 에러 발생: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "'%s' 보스 모드가 로드되었습니다.!"
DBM_CORE_LOAD_GUI_ERROR = "GUI를 로드할 수 없습니다: %s"
DBM_CORE_COMBAT_STARTED = "%s 작동됨. 행운을 빕니다! :)";
DBM_CORE_BOSS_DOWN = "%s (을)를 쓰러트렸습니다. (%s 소요 되었습니다!)"
DBM_CORE_BOSS_DOWN_LONG = "%s (을)를 쓰러트렸습니다. (%s 소요 되었습니다!) 당신의 최종 킬 타임은, %s 입니다. 그리고 당신의 제일 빠른 킬 타임은 %s 입니다.."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s (을)를 쓰러뜨렸습니다. (%s 소요 되었습니다!) 이 기록은 새로운 기록이군요! (과거의 기록: %s)"
DBM_CORE_COMBAT_ENDED = "%s 전투가 종료되었습니다. (%s 소요 되었습니다.)"
DBM_CORE_TIMER_FORMAT_SECS = "%d |4초:초;"
DBM_CORE_TIMER_FORMAT_MINS = "%d |4분:분;"
DBM_CORE_TIMER_FORMAT = "%d |4분:분; and %d |4초:초;"
DBM_CORE_MIN = ""
DBM_CORE_MIN_FMT = "%d 분"
DBM_CORE_SEC = ""
DBM_CORE_SEC_FMT = "%d 초"
DBM_CORE_DEAD = "죽음"
DBM_CORE_OK = "수락"
DBM_CORE_GENERIC_WARNING_BERSERK = "%s %s 후에 광폭화"
DBM_CORE_GENERIC_TIMER_BERSERK = "광폭화"
DBM_CORE_OPTION_TIMER_BERSERK = "광폭화 타이머 보기"
DBM_CORE_OPTION_HEALTH_FRAME = "보스 HP 프레임 보기"
DBM_CORE_OPTION_CATEGORY_TIMERS = ""
DBM_CORE_OPTION_CATEGORY_WARNINGS = "알림"
DBM_CORE_OPTION_CATEGORY_MISC = "기타 추가 기능"
DBM_CORE_AUTO_RESPONDED = "자동-부활."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d 공대원이 생존해 있습니다."
DBM_CORE_AUTO_RESPOND_WHISPER = "%s 님은 현재 바쁩니다. %s의 전투가 진행중입니다. (%s, %d/%d 공대원 생존중) 전투가 끝난 후 통보를 받게 될 것입니다."
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s 님이 %s의 전투가 끝났습니다!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s 님이 %s의 전투에서 전멸하였습니다."
DBM_CORE_VERSIONCHECK_HEADER = "죽이는 보스 모드 - 버젼"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: 죽이는 보스 모드가 설치 되어있지 않습니다."
DBM_CORE_VERSIONCHECK_FOOTER = "%d 명의 플레이어가 설치되어 있는 것을 찾았습니다."
DBM_CORE_YOUR_VERSION_OUTDATED = "당신의 DBM 버전이 오래되었습니다! www.deadlybossmods.com 또는 wow.somegate.com(korean)에 접속하셔셔 마지막 버전을 다운로드 받으셔요."
DBM_CORE_UPDATEREMINDER_HEADER = "당신의 죽이는 보스 모드 버전이 옛날 버전입니다.\n Version %s (r%d) 가 새로운 버전이며, 최신 버전 위치:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Ctrl-C 를 누르면 클립보드에 복사가 됩니다."
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "새로운 버전이 검색되면 관련 창을 띄웁니다."
DBM_CORE_MOVABLE_BAR = "나를 움직이세요~_~"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h님이 당신에게 DBM 타이머 보냄: '%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[타이머 취소]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[%1$s 타이머 무시]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "현재 세션에서 %s님이 보낸 DBM 타이머를 무시하도록 하겠습니까?"
DBM_PIZZA_ERROR_USAGE = "사용법: /dbm [broadcast] timer <시간> <글자>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods 가 실행중에 있습니다.\n당신께서 DBMv3 와 DBMv4를 동시에 설치하여 이런 상황이 발생한 것 같습니다.\n\"수락\"을 클릭하시면 DBMv3를 차단하고, UI가 다시시작 될 것입니다.\n또한, 애드온 폴더내에 존재하고 있는 DBMv3 폴더를 삭제하시길 권장합니다."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "죽이는 보스 모드"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+click 또는 right-click 으로 움직이세요.\nAlt+shift+click 으로 움직이면 자유롭게 배치할 수 있습니다."
DBM_CORE_RANGECHECK_HEADER = "거리 체크 (%d m)"
DBM_CORE_RANGECHECK_SETRANGE = "거리 지정"
DBM_CORE_RANGECHECK_SOUNDS = "소리"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "거리 이내 1명의 플레이어가 있을 경우의 소리"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "1명 이상의 플레이어가 있을 경우의 소리"
DBM_CORE_RANGECHECK_SOUND_0 = "소리 없음"
DBM_CORE_RANGECHECK_SOUND_1 = "기본 소리"
DBM_CORE_RANGECHECK_SOUND_2 = "짜증나는 소리(-_-;)"
DBM_CORE_RANGECHECK_HIDE = "숨기기"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d m"
DBM_CORE_RANGECHECK_LOCK = "프레임 잠금"
DBM_LFG_INVITE = "던전 입장"
DBM_CORE_SLASHCMD_HELP = {
"사용 가능한 명령어:",
"/dbm version: 공격대 전체 버전 체크 (줄임말: ver)",
"/dbm unlock: 상태 바 타이머를 움직일 수 있도록 보여줍니다.(줄임말: move)",
"/dbm timer <숫자> <글자>: <숫자> 초만큼 진행되는 <글자>바가 생성 됨.",
"/dbm broadcast timer <숫자> <글자>: <숫자> 초만큼 진행되는 <글자>바를 공격대에 알립니다.(공격대 권한이 있을 경우만 작동)",
"/dbm break <min>: <min>분 동안 타이머를 작동합니다. 모든 공격대원에게 DBM이 발송하는 쉬는 시간 타이머를 보냅니다.",
"/dbm help: 현재 보고 있는 도움말.",
}
DBM_ERROR_NO_PERMISSION = "해당 명령어를 실행하기 위한 권한을 가지고 있지 않습니다."
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "보스 체력 프레임 닫기"
DBM_CORE_ALLIANCE = "얼라이언스"
DBM_CORE_HORDE = "호드"
DBM_CORE_UNKNOWN = "알 수 없음"
DBM_CORE_BREAK_START = "쉬는 시간 시작 -- %s 분 남았습니다!"
DBM_CORE_BREAK_MIN = "%s 분 후 쉬는 시간이 끝납니다!"
DBM_CORE_BREAK_SEC = "%s 초 후 쉬는 시간이 끝납니다!"
DBM_CORE_TIMER_BREAK = "쉬는 시간!"
DBM_CORE_ANNOUNCE_BREAK_OVER = "쉬는 시간이 종료되었습니다."
DBM_CORE_TIMER_PULL = "풀링 중 입니다."
DBM_CORE_ANNOUNCE_PULL = "%d 초 뒤 풀링 합니다."
DBM_CORE_ANNOUNCE_PULL_NOW = "풀링했습니다. 긴장하세요.!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Speed Kill(업적 타이머)"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS.target = "%s: %%s"
DBM_CORE_AUTO_TIMER_TEXTS.cast = "%s"
DBM_CORE_AUTO_TIMER_TEXTS.active = "%s"
DBM_CORE_AUTO_TIMER_TEXTS.cd = "%s 쿨다운"
DBM_CORE_AUTO_TIMER_TEXTS.next = "다음 %s"
DBM_CORE_AUTO_TIMER_TEXTS.achievement = "%s"
DBM_CORE_AUTO_TIMER_OPTIONS.target = "|cff71d5ff|Hspell:%d|h%s|h|r 디버프 타이머 보기"
DBM_CORE_AUTO_TIMER_OPTIONS.cast = "|cff71d5ff|Hspell:%d|h%s|h|r 시전 타이머 보기"
DBM_CORE_AUTO_TIMER_OPTIONS.active = "|cff71d5ff|Hspell:%d|h%s|h|r 유지 타이머 보기"
DBM_CORE_AUTO_TIMER_OPTIONS.cd = "|cff71d5ff|Hspell:%d|h%s|h|r 쿨다운 타이머 보기"
DBM_CORE_AUTO_TIMER_OPTIONS.next = "다음 |cff71d5ff|Hspell:%d|h%s|h|r 타이머 보기"
DBM_CORE_AUTO_TIMER_OPTIONS.achievement = "%s 위한 타이머 보기"
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS.target = "%s : >%%s<"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.spell = "%s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.cast = "주문시전 %s : %.1f 초"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.soon = "곧 %s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.prewarn = "%s : %s"
DBM_CORE_AUTO_ANNOUNCE_TEXTS.phase = "%d 단계"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.target = "|cff71d5ff|Hspell:%d|h%s|h|r 대상 알리기"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.spell = "|cff71d5ff|Hspell:%d|h%s|h|r 경고 보기"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.cast = "|cff71d5ff|Hspell:%d|h%s|h|r 시전을 시작할 경우 경고 보기"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.soon = "|cff71d5ff|Hspell:%d|h%s|h|r의 사전 경고 보기(soon)"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.prewarn = "|cff71d5ff|Hspell:%d|h%s|h|r의 사전 경고 보기(prewarn)"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS.phase = "%d 단계 경고 보기"
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "$spell:%d의 특수 경고 보기",
dispel = "$spell:%d의 특수 경고 보기(해제/마법훔치기)",
interupt = "$spell:%d의 특수 경고 보기(차단)",
you = "$spell:%d의 영향을 받을 경우 특수 경고 보기",
target = "$spell:%d의 영향을 누군가 받을 경우 특수 경고 보기",
close = "$spell:%d의 영향을 가까운 공대원으로부터 받을 경우 특수 경고 보기",
move = "$spell:%d의 영향을 받을 경우 특수 경고 보기(이동)",
run = "$spell:%d의 특수 경고 보기(빠른이동)",
cast = "$spell:%d의 시전 특수 경고 보기",
stack = "%d 중첩 이상 쌓일 경우 $spell:%d의 특수 경고 보기"-- stack = "Show special warning when you have >=%d stacks of \n $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%s : %%s - 해제!",
interupt = "%s - 차단!",
you = "당신에게 %s",
target = "%s : %%s",
close = "%%s에게 가까운 당신에게 %s 시전",
move = "%s - 이동하세요!",
run = "%s - 뛰세요!",
cast = "%s - 시전 중지",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "$spell:%d 대상 공격대 아이콘 설정"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "$spell:%d 특수 소리 재생"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "특수 경고 움직이기"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "특수 경고"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = " %dm 거리 체크를 지원하지 않는 지역입니다. 10, 11, 15 그리고 28m를 지원합니다."
DBM_ARROW_MOVABLE = "화살표 움직이기"
DBM_ARROW_NO_RAIDGROUP = "공격대 던전에서만 사용"
DBM_ARROW_ERROR_USAGE = {
"DBM-Arrow 사용법:",
"/dbm arrow <x> <y> 특정 좌표(X/Y)에 화살표를 만듭니다.(0 < x/y < 100)",
"/dbm arrow <player> 당신이 속한 파티 또는 공격대의 특정 플레이어를 가르키는 화살표를 만듭니다.",
"/dbm arrow hide 화살표를 숨깁니다.",
"/dbm arrow move 화살표를 움직이도록 합니다.",
"/dbm arrow target 대상을 가르키는 화살표를 만듭니다.",
"/dbm arrow focus 주시대상을 가르키는 화살표를 만듭니다.",
}
end
+196
View File
@@ -0,0 +1,196 @@
if GetLocale() ~= "ruRU" then return end
DBM_CORE_NEED_SUPPORT = "Вы - программист или хороший переводчик? Команда разработчиков DBM нуждается в вашей помощи. Присоединяйтесь к нам - зайдите на www.deadlybossmods.com или отправьте сообщение на tandanu@deadlybossmods.com или nitram@deadlybossmods.com."
DBM_CORE_LOAD_MOD_ERROR = "Ошибка при загрузке DBM для %s: %s"
DBM_CORE_LOAD_MOD_SUCCESS = "Загружен DBM для \"%s\", введите /dbm для вызова настроек!"
DBM_CORE_LOAD_GUI_ERROR = "Не удалось загрузить GUI: %s"
DBM_CORE_COMBAT_STARTED = "%s вступает в бой. Удачи! :)";
DBM_CORE_BOSS_DOWN = "%s погибает спустя %s!"
DBM_CORE_BOSS_DOWN_LONG = "%s погибает спустя %s! Последний бой длился %s, лучший бой длился %s."
DBM_CORE_BOSS_DOWN_NEW_RECORD = "%s погибает спустя %s! Это новая запись! (Предшествующая запись была %s)"
DBM_CORE_COMBAT_ENDED = "Бой с %s длился %s"
DBM_CORE_TIMER_FORMAT_SECS = "%d сек"
DBM_CORE_TIMER_FORMAT_MINS = "%d мин"
DBM_CORE_TIMER_FORMAT = "%d мин %d сек"
DBM_CORE_MIN = "мин"
DBM_CORE_MIN_FMT = "%d мин"
DBM_CORE_SEC = "сек"
DBM_CORE_SEC_FMT = "%d сек"
DBM_CORE_DEAD = "мертв"
DBM_CORE_OK = "ОК"
DBM_CORE_GENERIC_WARNING_BERSERK = "Берсерк через %s %s"
DBM_CORE_GENERIC_TIMER_BERSERK = "Берсерк"
DBM_CORE_OPTION_TIMER_BERSERK = "Отсчет времени до $spell:26662"
DBM_CORE_OPTION_HEALTH_FRAME = "Отображать здоровье босса"
DBM_CORE_OPTION_CATEGORY_TIMERS = "Индикаторы"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "Предупреждения"
DBM_CORE_OPTION_CATEGORY_MISC = "Прочее"
DBM_CORE_AUTO_RESPONDED = "Авто-ответ."
DBM_CORE_STATUS_WHISPER = "%s: %s, %d/%d человек живые"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s сейчас не может ответить, в бою с %s (%s, %d/%d человек живые)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s одержал победу над %s!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s потерпел поражение от %s"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - версии"
DBM_CORE_VERSIONCHECK_ENTRY = "%s: %s (r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s: DBM не установлен"
DBM_CORE_VERSIONCHECK_FOOTER = "Найдено %d |4игрок:игрока:игроков; с установленным Deadly Boss Mods"
DBM_CORE_YOUR_VERSION_OUTDATED = "Ваша версия Deadly Boss Mods устарела! Пожалуйста, посетите www.deadlybossmods.com для загрузки последней версии."
DBM_CORE_UPDATEREMINDER_HEADER = "Ваша версия Deadly Boss Mods устарела.\n Версия %s (r%d) доступна для загрузки здесь:"
DBM_CORE_UPDATEREMINDER_FOOTER = "Нажмите CTRL+C, чтобы скопировать ссылку загрузки в буфер обмена."
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "Всплывающее сообщение при наличии новой версии"
DBM_CORE_MOVABLE_BAR = "Перетащите!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h транслирует DBM Timer: '%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Отменить этот DBM Timer]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Игнорировать DBM Timer от %1$s]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "Вы действительно хотите проигнорировать DBM Timer данного сеанса от %s?"
DBM_PIZZA_ERROR_USAGE = "Использование: /dbm [broadcast] timer <time> <text>"
DBM_CORE_ERROR_DBMV3_LOADED = "Deadly Boss Mods запущен дважды, поскольку установлены DBMv3 и DBMv4 и включены!\nНажмите кнопку \"ОК\" для отключения DBMv3 и перезагрузки интерфейса.\nНаведите порядок в вашей папке AddOns, удалите старые папки DBMv3."
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+щелчок или щелкните правой кнопкой мыши, чтобы переместить"
DBM_CORE_RANGECHECK_HEADER = "Проверка дистанции (%d м)"
DBM_CORE_RANGECHECK_SETRANGE = "Настройка дистанции"
DBM_CORE_RANGECHECK_SOUNDS = "Звуки"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "Звуковой сигнал, когда игрок находится в диапазоне"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "Звуковой сигнал для всех остальных игроков в диапазоне"
DBM_CORE_RANGECHECK_SOUND_0 = "Без звука"
DBM_CORE_RANGECHECK_SOUND_1 = "По умолчанию"
DBM_CORE_RANGECHECK_SOUND_2 = "Раздражающий звуковой сигнал"
DBM_CORE_RANGECHECK_HIDE = "Скрыть"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d м"
DBM_CORE_RANGECHECK_LOCK = "Закрепить полосу"
DBM_LFG_INVITE = "Приглашение в подземелье"
DBM_CORE_SLASHCMD_HELP = {
"Доступные (/) команды:",
"/dbm version: выполнение проверки используемой рейдом версии (псевдоним: ver)",
"/dbm unlock: отображение перемещаемой строки состояния таймера (псевдоним: move)",
"/dbm timer <x> <text>: начинает отсчет <x> сек. Pizza Timer с именем <text>",
"/dbm broadcast timer <x> <text>: транслирует <x> сек. Pizza Timer с именем <text> в рейд (требуются права лидера или помощника)",
"/dbm break <min>: начинает отсчет отдыха на <min> мин., транслирует отсчет отдыха всем членам рейда с DBM (требуются права лидера или помощника).",
"/dbm help: вывод этой справки",
}
DBM_ERROR_NO_PERMISSION = "У вас недостаточно прав, для выполнение этой операции."
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "Скрыть"
DBM_CORE_ALLIANCE = "Альянс"
DBM_CORE_HORDE = "Орда"
DBM_CORE_UNKNOWN = "неизвестно"
DBM_CORE_BREAK_START = "Перерыв начинается -- у вас есть %s мин.!"
DBM_CORE_BREAK_MIN = "Перерыв заканчивается через %s мин.!"
DBM_CORE_BREAK_SEC = "Перерыв заканчивается через %s сек.!"
DBM_CORE_TIMER_BREAK = "Перерыв!"
DBM_CORE_ANNOUNCE_BREAK_OVER = "Перерыв закончился"
DBM_CORE_TIMER_PULL = "Атака"
DBM_CORE_ANNOUNCE_PULL = "Атака через %d сек."
DBM_CORE_ANNOUNCE_PULL_NOW = "Атака!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "Быстрое убийство"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "Восст. %s",
next = "След. %s",
achievement = "%s",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "Отсчет времени действия эффекта |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Отсчет времени применения заклинания |cff71d5ff|Hspell:%d|h%s|h|r",
active = "Отсчет времени действия |cff71d5ff|Hspell:%d|h%s|h|r",
cd = "Отсчет времени до восстановления |cff71d5ff|Hspell:%d|h%s|h|r",
next = "Отсчет времени до следующего |cff71d5ff|Hspell:%d|h%s|h|r",
achievement = "Отсчет времени для %s",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s на |3-5(>%%s<)",
spell = "%s",
cast = "Применение заклинания %s: %.1f сек",
soon = "Скоро %s",
prewarn = "%s через %s",
phase = "Фаза %d",
}
local prewarnOption = "Предупреждать заранее о |cff71d5ff|Hspell:%d|h%s|h|r"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "Объявлять цели заклинания |cff71d5ff|Hspell:%d|h%s|h|r",
spell = "Предупреждение для |cff71d5ff|Hspell:%d|h%s|h|r",
cast = "Предупреждать о применении заклинания |cff71d5ff|Hspell:%d|h%s|h|r",
soon = prewarnOption,
prewarn = prewarnOption,
phase = "Объявлять фазу %d"
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "Спец-предупреждение для $spell:%d",
dispel = "Спец-предупреждение для рассеивания/похищения заклинания \n$spell:%d",
interupt = "Спец-предупреждение для прерывания заклинания \n$spell:%d",
you = "Спец-предупреждение, когда на вас $spell:%d",
target = "Спец-предупреждение, когда на ком-то $spell:%d",
close = "Спец-предупреждение, когда на ком-то рядом с вами \n$spell:%d",
move = "Спец-предупреждение для $spell:%d",
run = "Спец-предупреждение для $spell:%d",
cast = "Спец-предупреждение о применении заклинания \n$spell:%d",
stack = "Спец-предупреждение для >=%d стаков $spell:%d"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%s на |3-5(%%s) - рассейте заклинание",
interupt = "%s - прерывание",
you = "%s на вас",
target = "%s на |3-5(%%s)",
close = "%s на |3-5(%%s) около вас",
move = "%s - отбегите",
run = "%s - бегите",
cast = "%s - прекратите чтение заклинаний",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "Устанавливать метки на цели заклинания $spell:%d"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "Звуковой сигнал при $spell:%d"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "Индикатор спец-предупреждения"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "Специальное предупреждение"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "Проверка дистанции %d м. недоступна в этой зоне.\nДоступные дистанции - 10, 11, 15 и 28 м."
DBM_ARROW_MOVABLE = "Стрелку можно перемещать"
DBM_ARROW_NO_RAIDGROUP = "Данная функция работает только в рейд-группах и внутри рейдовых подземелий."
DBM_ARROW_ERROR_USAGE = {
"Использование DBM-Arrow:",
"/dbm arrow <x> <y>: создает стрелку, указывающую в определенную точку (0 < x/y < 100)",
"/dbm arrow <player>: создает стрелку, указывающую на определенного игрока в вашей группе или рейде",
"/dbm arrow hide: скрывает стрелку",
"/dbm arrow move: разрешает перемещение стрелки",
}
+191
View File
@@ -0,0 +1,191 @@
if GetLocale() ~= "zhTW" then return end
DBM_CORE_NEED_SUPPORT = "嘿, 你是否擁有良好的程式開發或語言能力? 如果是的話, DBM團隊真的需要你的幫助以保持成為WOW入面最佳的首領模組。觀看 www.deadlybossmods.com 或發送郵件到 tandanu@deadlybossmods.com 或 nitram@deadlybossmods.com 來加入團隊。"
DBM_CORE_LOAD_MOD_ERROR = "載入%s模組時發生錯誤:%s"
DBM_CORE_LOAD_MOD_SUCCESS = "成功載入%s模組。輸入/dbm有更多選項。"
DBM_CORE_LOAD_GUI_ERROR = "無法載入圖形介面:%s"
DBM_CORE_COMBAT_STARTED = "%s開戰。祝好運與盡興! :)";
DBM_CORE_BOSS_DOWN = "擊敗%s,經過%s!"
DBM_CORE_BOSS_DOWN_LONG = "擊敗%s!本次經過%s,上次經過%s,最快紀錄%s。"
DBM_CORE_BOSS_DOWN_NEW_RECORD = "擊敗%s!經過%s,這是一個新記錄!(舊紀錄為%s)"
DBM_CORE_COMBAT_ENDED = "%s的戰鬥經過%s結束。"
DBM_CORE_TIMER_FORMAT_SECS = "%d秒"
DBM_CORE_TIMER_FORMAT_MINS = "%d分鐘"
DBM_CORE_TIMER_FORMAT = "%d分%d秒"
DBM_CORE_MIN = ""
DBM_CORE_MIN_FMT = "%d分"
DBM_CORE_SEC = ""
DBM_CORE_SEC_FMT = "%d秒"
DBM_CORE_DEAD = "死亡"
DBM_CORE_OK = "確定"
DBM_CORE_GENERIC_WARNING_BERSERK = "%s%s後狂暴"
DBM_CORE_GENERIC_TIMER_BERSERK = "狂暴"
DBM_CORE_OPTION_TIMER_BERSERK = "為$spell:26662顯示計時器"
DBM_CORE_OPTION_HEALTH_FRAME = "顯示首領血量框架"
DBM_CORE_OPTION_CATEGORY_TIMERS = "計時器"
DBM_CORE_OPTION_CATEGORY_WARNINGS = "提示"
DBM_CORE_OPTION_CATEGORY_MISC = "其它"
DBM_CORE_AUTO_RESPONDED = "已自動回覆密語。"
DBM_CORE_STATUS_WHISPER = "%s%s%d/%d存活。"
DBM_CORE_AUTO_RESPOND_WHISPER = "%s正在與%s交戰(當前%s,%d/%d存活)"
DBM_CORE_WHISPER_COMBAT_END_KILL = "%s已經擊敗%s!"
DBM_CORE_WHISPER_COMBAT_END_WIPE = "%s在%s的戰鬥中滅團了。"
DBM_CORE_VERSIONCHECK_HEADER = "Deadly Boss Mods - 版本檢測"
DBM_CORE_VERSIONCHECK_ENTRY = "%s%s(r%d)"
DBM_CORE_VERSIONCHECK_ENTRY_NO_DBM = "%s:尚未安裝DBM"
DBM_CORE_VERSIONCHECK_FOOTER = "團隊中有%d名成員正在使用Deadly Boss Mods"
DBM_CORE_YOUR_VERSION_OUTDATED = "你的 Deadly Boss Mod 已經過期。請到 www.deadlybossmods.com 下載最新版本。"
DBM_CORE_UPDATEREMINDER_HEADER = "你的 Deadly Boss Mod 已經過期。\n你可以在此網址下載到新版本%s(r%d):"
DBM_CORE_UPDATEREMINDER_FOOTER = "Ctrl-C:複製下載網址到剪貼簿。"
DBM_CORE_UPDATEREMINDER_NOTAGAIN = "當有新版本時顯示彈出提示"
DBM_CORE_MOVABLE_BAR = "拖動我!"
DBM_PIZZA_SYNC_INFO = "|Hplayer:%1$s|h[%1$s]|h向你發送了一個倒數計時:'%2$s'\n|HDBM:cancel:%2$s:nil|h|cff3588ff[取消該計時]|r|h |HDBM:ignore:%2$s:%1$s|h|cff3588ff[忽略來自%1$s的計時]|r|h"
DBM_PIZZA_CONFIRM_IGNORE = "是否要在該次遊戲連結中忽略來自%s的計時?"
DBM_PIZZA_ERROR_USAGE = "命令:/dbm [broadcast] timer <時間(秒)> <文字>"
DBM_CORE_ERROR_DBMV3_LOADED = "目前有2個版本的Deadly Boss Mods正在運行:DBMv3和DBMv4。\n按一下“確定”按鈕可將DBMv3關閉並重載插件。\n我們建議將插件目錄下的DBMv3刪除。"
DBM_CORE_MINIMAP_TOOLTIP_HEADER = "Deadly Boss Mods"
DBM_CORE_MINIMAP_TOOLTIP_FOOTER = "Shift+左鍵或右鍵點擊即可移動"
DBM_CORE_RANGECHECK_HEADER = "距離監視(%d碼)"
DBM_CORE_RANGECHECK_SETRANGE = "設置距離"
DBM_CORE_RANGECHECK_SOUNDS = "音效"
DBM_CORE_RANGECHECK_SOUND_OPTION_1 = "當一位玩家在範圍內時播放音效"
DBM_CORE_RANGECHECK_SOUND_OPTION_2 = "當多於一位玩家在範圍內時播放音效"
DBM_CORE_RANGECHECK_SOUND_0 = "沒有音效"
DBM_CORE_RANGECHECK_SOUND_1 = "預設音效"
DBM_CORE_RANGECHECK_SOUND_2 = "蜂鳴聲"
DBM_CORE_RANGECHECK_HIDE = "隱藏"
DBM_CORE_RANGECHECK_SETRANGE_TO = "%d碼"
DBM_CORE_RANGECHECK_LOCK = "鎖定框架"
DBM_LFG_INVITE = "地城準備確認"
DBM_CORE_SLASHCMD_HELP = {
"可用命令:",
"/dbm version:進行團隊範圍內的版本檢測(也可使用:ver)。",
"/dbm unlock:顯示一個可移動的計時器(也可使用:move)。",
"/dbm timer <x> <文字>:開始一個以<文字>為名稱的時間為<x>秒的計時器。",
"/dbm broadcast timer <x> <文字>:向團隊廣播一個以<文字>為名稱,時間為<x>秒的計時器(需開啟團隊廣播及助理權限)。",
"/dbm break <分鐘>: 開始休息計時器<分鐘>。向所有團隊成員發送一個DBM休息計時器(需開啟團隊廣播及助理權限)。",
"/dbm help:顯示可用命令的說明。",
}
DBM_ERROR_NO_PERMISSION = "無權進行此操作。"
DBM_CORE_BOSSHEALTH_HIDE_FRAME = "關閉血量框架"
DBM_CORE_ALLIANCE = "聯盟"
DBM_CORE_HORDE = "部落"
DBM_CORE_UNKNOWN = "未知"
DBM_CORE_BREAK_START = "現在開始休息-你有%s分鐘!"
DBM_CORE_BREAK_MIN = "%s分鐘後休息時間結束!"
DBM_CORE_BREAK_SEC = "%s秒後休息時間結束!"
DBM_CORE_TIMER_BREAK = "休息時間!"
DBM_CORE_ANNOUNCE_BREAK_OVER = "休息時間已經結束"
DBM_CORE_TIMER_PULL = "戰鬥準備"
DBM_CORE_ANNOUNCE_PULL = "%d秒後拉怪"
DBM_CORE_ANNOUNCE_PULL_NOW = "拉怪囉!"
DBM_CORE_ACHIEVEMENT_TIMER_SPEED_KILL = "快速擊殺"
-- Auto-generated Timer Localizations
DBM_CORE_AUTO_TIMER_TEXTS = {
target = "%s: %%s",
cast = "%s",
active = "%s",
cd = "%s 冷卻",
next = "下一次 %s",
achievement = "%s",
}
DBM_CORE_AUTO_TIMER_OPTIONS = {
target = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示減益計時器",
cast = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示施法計時器",
active = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示持續時間計時器",
cd = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示冷卻計時器",
next = "為下一次 |cff71d5ff|Hspell:%d|h%s|h|r顯示計時器",
achievement = "為成就:%s顯示計時器",
}
-- Auto-generated Warning Localizations
DBM_CORE_AUTO_ANNOUNCE_TEXTS = {
target = "%s: >%%s<",
spell = "%s",
cast = "施放 %s: %.1f 秒",
soon = "%s 即將到來",
prewarn = "%s 在 %s",
phase = "第%d階段"
}
local prewarnOption = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示預先警告"
DBM_CORE_AUTO_ANNOUNCE_OPTIONS = {
target = "提示|cff71d5ff|Hspell:%d|h%s|h|r的目標",
spell = "為|cff71d5ff|Hspell:%d|h%s|h|r顯示警告",
cast = "當|cff71d5ff|Hspell:%d|h%s|h|r施放時顯示警告",
soon = prewarnOption,
prewarn = prewarnOption,
phase = "提示第%d階段"
}
-- Auto-generated Special Warning Localizations
DBM_CORE_AUTO_SPEC_WARN_OPTIONS = {
spell = "為$spell:%d顯示特別警告",
dispel = "需對$spell:%d驅散/竊取時顯示特別警告",
interupt = "需對$spell:%d斷法時顯示特別警告",
you = "當你中了$spell:%d時顯示特別警告",
target = "當有人中了$spell:%d時顯示特別警告",
close = "當你附近有人中了$spell:%d時顯示特別警告",
move = "當你中了$spell:%d時顯示特別警告",
run = "為$spell:%d顯示特別警告",
cast = "為$spell:%d施放時顯示特別警告",
stack = "為>=%d層$spell:%d時顯示特別警告"
}
DBM_CORE_AUTO_SPEC_WARN_TEXTS = {
spell = "%s!",
dispel = "%%s中了%s - 現在驅散",
interupt = "%s - 現在斷法",
you = "你中了%s",
target = "%%s中了%s",
close = "你附近的%%s中了%s",
move = "%s - 快離開",
run = "%s - 快跑開",
cast = "%s - 停止施法",
stack = "%s (%%d)"
}
DBM_CORE_AUTO_ICONS_OPTION_TEXT = "為$spell:%d的目標設置標記"
DBM_CORE_AUTO_SOUND_OPTION_TEXT = "為$spell:%d播放音效"
-- New special warnings
DBM_CORE_MOVE_SPECIAL_WARNING_BAR = "可拖動的特別警告"
DBM_CORE_MOVE_SPECIAL_WARNING_TEXT = "特別警告"
DBM_CORE_RANGE_CHECK_ZONE_UNSUPPORTED = "在此區域中不支援%d碼的距離檢查。\n已支援的距離有10,11,15及28碼。"
DBM_ARROW_MOVABLE = "可移動箭頭"
DBM_ARROW_NO_RAIDGROUP = "此功能僅作用於團隊副本中的團隊小隊。"
DBM_ARROW_ERROR_USAGE = {
"DBM-Arrow 用法:",
"/dbm arrow <x> <y> 建立一個箭頭在特定的位置(0 < x/y < 100)",
"/dbm arrow <玩家> 建立並箭頭指向你的隊伍或團隊中特定的玩家",
"/dbm arrow hide 隱藏箭頭",
"/dbm arrow move 可移動箭頭",
}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,71 @@
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License.
c. "Licensor" means the individual or entity that offers the Work under the terms of this License.
d. "Original Author" means the individual or entity who created the Work.
e. "Work" means the copyrightable work of authorship offered under the terms of this License.
f. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
3. License Grant & Restrictions. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below on the conditions as stated below:
a. Re-creativity permitted. You may create and reproduce Derivative Works, provided that:
i. the Derivative Work(s) constitute a good-faith partial or recombined usage employing "sampling," "collage," "mash-up," or other comparable artistic technique, whether now known or hereafter devised, that is highly transformative of the original, as appropriate to the medium, genre, and market niche; and
ii. Your Derivative Work(s) must only make a partial use of the original Work, or if You choose to use the original Work as a whole, You must either use the Work as an insubstantial portion of Your Derivative Work(s) or transform it into something substantially different from the original Work. In the case of a musical Work and/or audio recording, the mere synchronization ("synching") of the Work with a moving image shall not be considered a transformation of the Work into something substantially different.
b. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission, any Derivative Work(s) authorized under this License.
c. Prohibition on advertising. All advertising and promotional uses are excluded from the above rights, except for advertisement and promotion of the Derivative Work(s) that You are creating from the Work and Yourself as the author thereof.
d. Noncommercial sharing of verbatim copies permitted.
i. You may reproduce the Work, incorporate the Work into one or more Collective Works, and reproduce the Work as incorporated in the Collective Works. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including or incorporated in Collective Works.
ii. You may not exercise any of the rights granted to You in the paragraph immediately above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
e. Attribution and Notice.
i. If You distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, provide the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work or a Derivative Work, unless such Uniform Resource Identifier does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, provide a credit identifying the use of the Work in the Derivative Work (e.g., "Remix of the Work by Original Author," or "Inclusion of a portion of the Work by Original Author in collage"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.
ii. You may distribute, publicly display, publicly perform or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work or Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access of use of the Work in a manner inconsistent with the terms of this License. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. Upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work or Collective Work any reference to such Licensor or the Original Author, as requested.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.
4. Disclaimer
UNLESS SPECIFIED OTHERWISE BY THE PARTIES IN A SEPARATE WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
5. Limitation on Liability.
IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
6. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 4, 5, 6, and 7 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
7. Miscellaneous
a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements, or representations with respect to the Work, and with respect to the subject matter hereof, not specified above. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
The sound "alarmclockbeeps.ogg" was created by tedthetrumpet (http://www.freesound.org/usersViewSingle.php?id=177). It is a free sound licensed under a Creative Commons Sampling Plus 1.0 License (http://creativecommons.org/licenses/sampling+/1.0/). The full text of the license can be found in the file "Creative Commons Sampling Plus 1.0.txt".
The sound "blip_8.ogg" was created by Corsica_S (http://www.freesound.org/usersViewSingle.php?id=7037). It is a free sound licensed under a Creative Commons Sampling Plus 1.0 License (http://creativecommons.org/licenses/sampling+/1.0/). The full text of the license can be found in the file "Creative Commons Sampling Plus 1.0.txt".
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,5 @@
3D-Arrow:
Everyone has full permission to do whatever they want with this model file in any non-commercial manner. Attribution to "Guillotine" is nice, but not necessary. For any commrcial use, contact me first at curse.guillotine@gmail.com
Minimap Textures:
Taken from TomTom with permission, thanks to Cladhaire!
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

+2087
View File
File diff suppressed because it is too large Load Diff
+32
View File
@@ -0,0 +1,32 @@
## Interface: 30300
## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFOptions GUI|r
## Title-zhCN: |cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF设置界面|r
## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFПараметры GUI|r
## Title-zhTW: |cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF使用者界面設定|r
## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF옵션 GUI|r
## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFOpciones|r
## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFOpciones|r
## Notes: GUI for Deadly Boss Mods
## Notes-zhCN: Deadly Boss Mods的设置界面
## Notes-ruRU: Графический интерфейс пользователя DBM
## Notes-zhTW: Deadly Boss Mods的使用者界面
## Notes-koKR: 죽이는 보스 모드를 위한 GUI
## Notes-esES: Gui para Deadly Boss Mods
## Notes-esMX: Gui para Deadly Boss Mods
## RequiredDeps: DBM-Core
## LoadOnDemand: 1
## DefaultState: enabled
## Author: Nitram and Tandanu
## URL: https://discord.gg/4ZHfgskSvM
localization.en.lua
localization.de.lua
localization.cn.lua
localization.ru.lua
localization.fr.lua
localization.tw.lua
localization.kr.lua
localization.es.lua
DBM-GUI_DropDown.xml
DBM-GUI_Templates.xml
DBM-GUI.lua
DBM-GUI_DropDown.lua
+229
View File
@@ -0,0 +1,229 @@
-- *********************************************************
-- ** Deadly Boss Mods - GUI **
-- ** http://www.deadlybossmods.com **
-- *********************************************************
--
-- This addon is written and copyrighted by:
-- * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)
-- * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)
--
-- The localizations are written by:
-- * enGB/enUS: Tandanu http://www.deadlybossmods.com
-- * deDE: Tandanu http://www.deadlybossmods.com
-- * zhCN: Diablohu http://wow.gamespot.com.cn
-- * ruRU: BootWin bootwin@gmail.com
-- * zhTW: Hman herman_c1@hotmail.com
-- * zhTW: Azael/kc10577 kc10577@hotmail.com
-- * koKR: BlueNyx bluenyx@gmail.com
-- * esES: Interplay/1nn7erpLaY http://www.1nn7erpLaY.com
--
-- Special thanks to:
-- * Arta (DBM-Party)
-- * Omegal @ US-Whisperwind (some patches, and DBM-Party updates)
-- * Tennberg (a lot of fixes in the enGB/enUS localization)
--
--
-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)
-- All included textures and sounds are copyrighted by their respective owners, license information for these media files can be found in the modules that make use of them.
--
--
-- You are free:
-- * to Share - to copy, distribute, display, and perform the work
-- * to Remix - to make derivative works
-- Under the following conditions:
-- * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). (A link to http://www.deadlybossmods.com is sufficient)
-- * Noncommercial. You may not use this work for commercial purposes.
-- * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.
--
do
local MAX_BUTTONS = 10
local TabFrame1 = CreateFrame("Frame", "DBM_GUI_DropDown", UIParent)
TabFrame1:SetBackdrop({
bgFile="Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
tile=1, tileSize=32, edgeSize=32,
insets={left=11, right=12, top=12, bottom=11}
});
TabFrame1:EnableMouseWheel(1)
TabFrame1:SetScript("OnMouseWheel", function(self, arg1)
if arg1 > 0 then -- scroll up
self.offset = self.offset - 1
if self.offset < 0 then
self.offset = 0
end
else -- scroll down
self.offset = self.offset + 1
end
self:Refresh()
end)
TabFrame1:Hide()
TabFrame1:SetParent( DBM_GUI_OptionsFrame )
TabFrame1:SetFrameStrata("TOOLTIP")
TabFrame1.offset = 0
local function ButtonDefaultFunction(self)
self:GetParent():HideMenu()
self:GetParent().dropdown.value = self.entry.value
self:GetParent().dropdown.text = self.entry.text
if self.entry.sound then
PlaySoundFile(self.entry.value)
end
if self.entry.func then
self.entry.func(self.entry.value)
end
if self:GetParent().dropdown.callfunc then
self:GetParent().dropdown.callfunc(self.entry.value)
end
getglobal(self:GetParent().dropdown:GetName().."Text"):SetText(self.entry.text)
end
TabFrame1.buttons = {}
for i=1, MAX_BUTTONS, 1 do
TabFrame1.buttons[i] = CreateFrame("Button", TabFrame1:GetName().."Button"..i, TabFrame1, "DBM_GUI_DropDownMenuButtonTemplate")
TabFrame1.buttons[i]:SetScript("OnClick", ButtonDefaultFunction)
if i == 1 then
TabFrame1.buttons[i]:SetPoint("TOPLEFT", TabFrame1, "TOPLEFT", 11, -13)
else
TabFrame1.buttons[i]:SetPoint("TOPLEFT", TabFrame1.buttons[i-1], "BOTTOMLEFT", 0,0)
end
end
local default_button_width = TabFrame1.buttons[1]:GetWidth()
TabFrame1:SetWidth(default_button_width+22)
TabFrame1:SetHeight(MAX_BUTTONS*TabFrame1.buttons[1]:GetHeight()+24)
TabFrame1.text = TabFrame1:CreateFontString(TabFrame1:GetName().."Text", 'BACKGROUND')
TabFrame1.text:SetPoint('CENTER', TabFrame1, 'BOTTOM', 0, 0)
TabFrame1.text:SetFontObject('GameFontNormalSmall')
TabFrame1.text:SetText("scroll with mouse")
TabFrame1.text:Hide()
local BackDropTable = { bgFile = "" }
function TabFrame1:ShowMenu(values)
self:Show()
if self.offset > #values-MAX_BUTTONS then self.offset = #values-MAX_BUTTONS end
if self.offset < 0 then self.offset = 0 end
if #values > MAX_BUTTONS then
self:SetHeight(MAX_BUTTONS*TabFrame1.buttons[1]:GetHeight()+24)
self.text:Show()
elseif #values == MAX_BUTTONS then
self:SetHeight(MAX_BUTTONS*TabFrame1.buttons[1]:GetHeight()+24)
self.text:Hide()
elseif #values < MAX_BUTTONS then
self:SetHeight( #values * self.buttons[1]:GetHeight() + 24)
self.text:Hide()
end
for i=1, MAX_BUTTONS, 1 do
if i + self.offset <= #values then
self.buttons[i]:SetText(values[i+self.offset].text)
self.buttons[i].entry = values[i+self.offset]
if values[i+self.offset].texture then
BackDropTable.bgFile = values[i+self.offset].texture
self.buttons[i]:SetBackdrop(BackDropTable)
end
if values[i+self.offset].font then
_G[self.buttons[i]:GetName().."NormalText"]:SetFont(values[i+self.offset].font, values[i+self.offset].fontsize or 14)
else
_G[self.buttons[i]:GetName().."NormalText"]:SetFont(STANDARD_TEXT_FONT, 10)
end
self.buttons[i]:Show()
else
self.buttons[i]:Hide()
end
end
local width = self.buttons[1]:GetWidth()
local bwidth = 0
for k, button in pairs(self.buttons) do
bwidth = button:GetTextWidth()
if bwidth > width then
TabFrame1:SetWidth(bwidth+32)
width = bwidth
end
end
for k, button in pairs(self.buttons) do
button:SetWidth(width)
end
end
function TabFrame1:HideMenu()
for i=1, MAX_BUTTONS, 1 do
self.buttons[i]:Hide()
self.buttons[i]:SetBackdrop(nil)
self.buttons[i]:SetWidth(default_button_width)
_G[self.buttons[i]:GetName().."NormalText"]:SetFontObject(GameFontHighlightSmall)
end
self:SetWidth(default_button_width+22)
self:Hide()
self.text:Hide()
end
function TabFrame1:Refresh()
self:ShowMenu(self.dropdown.values)
end
local FrameTitle = "DBM_GUI_DropDown"
function DBM_GUI:CreateDropdown(title, values, selected, callfunc, width)
-- Check Values
self:CheckValues(values)
-- Create the Dropdown Frame
local dropdown = CreateFrame("Frame", FrameTitle..self:GetNewID(), self.frame, "DBM_GUI_DropDownMenuTemplate")
dropdown.creator = self
dropdown.values = values
dropdown.callfunc = callfunc
dropdown:SetWidth((width or 120)+30) -- required to fix some setpoint problems
getglobal(dropdown:GetName().."Middle"):SetWidth(width or 120)
getglobal(dropdown:GetName().."Button"):SetScript("OnClick", function(self)
PlaySound("igMainMenuOptionCheckBoxOn")
if TabFrame1:IsShown() then
TabFrame1:HideMenu()
TabFrame1.dropdown = nil
else
TabFrame1:ClearAllPoints()
TabFrame1:SetPoint("TOPRIGHT", self, "BOTTOMRIGHT", 0, -3)
TabFrame1.dropdown = self:GetParent()
TabFrame1:ShowMenu(self:GetParent().values)
end
end)
for k,v in next, dropdown.values do
if v.value ~= nil and v.value == selected or v.text == selected then
getglobal(dropdown:GetName().."Text"):SetText(v.text)
dropdown.value = v.value
dropdown.text = v.text
end
end
if not (not title or title == "") then
dropdown.titletext = dropdown:CreateFontString(FrameTitle..self:GetCurrentID().."Text", 'BACKGROUND')
dropdown.titletext:SetPoint('BOTTOMLEFT', dropdown, 'TOPLEFT', 21, 0)
dropdown.titletext:SetFontObject('GameFontNormalSmall')
dropdown.titletext:SetText(title)
end
return dropdown
end
end
function DBM_GUI:CheckValues(values)
if type(values) == "table" then
for _,entry in next,values do
entry.text = entry.text or "Missing entry.text"
entry.value = entry.value or entry.text
end
end
return false
end
+132
View File
@@ -0,0 +1,132 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Frame name="DBM_GUI_DropDownMenuTemplate" virtual="true">
<Size>
<AbsDimension x="160" y="32"/>
</Size>
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentLeft" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame">
<Size>
<AbsDimension x="25" y="64"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="17"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="0.1953125" top="0" bottom="1"/>
</Texture>
<Texture name="$parentMiddle" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame">
<Size>
<AbsDimension x="155" y="64"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentLeft" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.1953125" right="0.8046875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentRight" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame">
<Size>
<AbsDimension x="25" y="64"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentMiddle" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.8046875" right="1" top="0" bottom="1"/>
</Texture>
<FontString name="$parentText" inherits="GameFontHighlightSmall" justifyH="RIGHT">
<Size>
<AbsDimension x="0" y="10"/>
</Size>
<Anchors>
<Anchor point="RIGHT" relativeTo="$parentRight">
<Offset>
<AbsDimension x="-43" y="2"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentButton">
<Size>
<AbsDimension x="24" y="24"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="$parentRight">
<Offset>
<AbsDimension x="-16" y="-18"/>
</Offset>
</Anchor>
</Anchors>
<NormalTexture name="$parentNormalTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Up">
<Size>
<AbsDimension x="24" y="24"/>
</Size>
<Anchors>
<Anchor point="RIGHT"/>
</Anchors>
</NormalTexture>
<PushedTexture name="$parentPushedTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Down">
<Size>
<AbsDimension x="24" y="24"/>
</Size>
<Anchors>
<Anchor point="RIGHT"/>
</Anchors>
</PushedTexture>
<DisabledTexture name="$parentDisabledTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Disabled">
<Size>
<AbsDimension x="24" y="24"/>
</Size>
<Anchors>
<Anchor point="RIGHT"/>
</Anchors>
</DisabledTexture>
<HighlightTexture name="$parentHighlightTexture" file="Interface\Buttons\UI-Common-MouseHilight" alphaMode="ADD">
<Size>
<AbsDimension x="24" y="24"/>
</Size>
<Anchors>
<Anchor point="RIGHT"/>
</Anchors>
</HighlightTexture>
</Button>
</Frames>
</Frame>
<Button name="DBM_GUI_DropDownMenuButtonTemplate" virtual="true">
<Size x="100" y="16"/>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentHighlight" file="Interface\QuestFrame\UI-QuestTitleHighlight" alphaMode="ADD" setAllPoints="true" hidden="true"/>
<NormalTexture name="$parentNormalTexture"/>
</Layer>
</Layers>
<Scripts>
<OnClick>
self:OnClick()
</OnClick>
<OnEnter>
getglobal(self:GetName().."Highlight"):Show();
</OnEnter>
<OnLeave>
getglobal(self:GetName().."Highlight"):Hide();
</OnLeave>
</Scripts>
<ButtonText name="$parentNormalText">
<Anchors>
<Anchor point="LEFT">
<Offset x="5" y="0"/>
</Anchor>
</Anchors>
</ButtonText>
<NormalFont style="GameFontHighlightSmallLeft"/>
<HighlightFont style="GameFontHighlightSmallLeft"/>
<DisabledFont style="GameFontDisableSmallLeft"/>
</Button>
</Ui>
+799
View File
@@ -0,0 +1,799 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Button name="DBM_GUI_OptionsFramePanelButtonTemplate" virtual="true">
<ButtonText name="$parentText">
<Anchors>
<Anchor point="CENTER">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</ButtonText>
<NormalFont style="GameFontNormal"/>
<HighlightFont style="GameFontHighlight"/>
<DisabledFont style="GameFontDisable"/>
<NormalTexture inherits="UIPanelButtonUpTexture"/>
<PushedTexture inherits="UIPanelButtonDownTexture"/>
<DisabledTexture inherits="UIPanelButtonDisabledTexture"/>
<HighlightTexture inherits="UIPanelButtonHighlightTexture"/>
</Button>
<Button name="DBM_GUI_OptionsFrameTabButtonTemplate" virtual="true">
<Size>
<AbsDimension x="85" y="24"/>
</Size>
<Layers>
<Layer level="BORDER">
<Texture name="$parentLeftDisabled" file="Interface\OptionsFrame\UI-OptionsFrame-ActiveTab">
<Size>
<AbsDimension x="20" y="24"/>
</Size>
<Anchors>
<Anchor point="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-3"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="0.15625" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentMiddleDisabled" file="Interface\OptionsFrame\UI-OptionsFrame-ActiveTab">
<Size>
<AbsDimension x="47" y="24"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentLeftDisabled" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.15625" right="0.84375" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentRightDisabled" file="Interface\OptionsFrame\UI-OptionsFrame-ActiveTab">
<Size>
<AbsDimension x="20" y="24"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentMiddleDisabled" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.84375" right="1.0" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentLeft" file="Interface\OptionsFrame\UI-OptionsFrame-InActiveTab">
<Size>
<AbsDimension x="20" y="24"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
<TexCoords left="0" right="0.15625" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentMiddle" file="Interface\OptionsFrame\UI-OptionsFrame-InActiveTab">
<Size>
<AbsDimension x="47" y="24"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentLeft" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.15625" right="0.84375" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentRight" file="Interface\OptionsFrame\UI-OptionsFrame-InActiveTab">
<Size>
<AbsDimension x="20" y="24"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentMiddle" relativePoint="RIGHT"/>
</Anchors>
<TexCoords left="0.84375" right="1.0" top="0" bottom="1.0"/>
</Texture>
</Layer>
</Layers>
<ButtonText name="$parentText">
<Anchors>
<Anchor point="CENTER">
<Offset>
<AbsDimension x="0" y="-3"/>
</Offset>
</Anchor>
</Anchors>
</ButtonText>
<NormalFont style="GameFontNormalSmall"/>
<HighlightFont style="GameFontHighlightSmall"/>
<DisabledFont style="GameFontHighlightSmall"/>
<HighlightTexture name="$parentHighlightTexture" file="Interface\PaperDollInfoFrame\UI-Character-Tab-Highlight" alphaMode="ADD" hidden="false">
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="10" y="-4"/>
</Offset>
</Anchor>
<Anchor point="RIGHT">
<Offset>
<AbsDimension x="-10" y="-4"/>
</Offset>
</Anchor>
</Anchors>
</HighlightTexture>
</Button>
<Slider name="DBM_GUI_PanelScrollBarTemplate" virtual="true">
<Size>
<AbsDimension x="16" y="0"/>
</Size>
<Frames>
<Button name="$parentScrollUpButton" inherits="UIPanelScrollUpButtonTemplate">
<Anchors>
<Anchor point="BOTTOM" relativePoint="TOP"/>
</Anchors>
<Scripts>
<OnClick>
local parent = self:GetParent();
parent:SetValue(parent:GetValue() - (parent:GetHeight() / 2));
PlaySound("UChatScrollButton");
</OnClick>
</Scripts>
</Button>
<Button name="$parentScrollDownButton" inherits="UIPanelScrollDownButtonTemplate">
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM"/>
</Anchors>
<Scripts>
<OnClick>
local parent = self:GetParent();
parent:SetValue(parent:GetValue() + (parent:GetHeight() / 2));
PlaySound("UChatScrollButton");
</OnClick>
</Scripts>
</Button>
</Frames>
<Scripts>
<OnValueChanged>
self:GetParent():SetVerticalScroll(value);
if value == select(1, self:GetMinMaxValues()) then
getglobal(self:GetName().."ScrollUpButton"):Disable()
else
getglobal(self:GetName().."ScrollUpButton"):Enable()
end
if value == select(2, self:GetMinMaxValues()) then
getglobal(self:GetName().."ScrollDownButton"):Disable()
else
getglobal(self:GetName().."ScrollDownButton"):Enable()
end
</OnValueChanged>
</Scripts>
<ThumbTexture name="$parentThumbTexture" inherits="UIPanelScrollBarButton" file="Interface\Buttons\UI-ScrollBar-Knob">
<Size>
<AbsDimension x="16" y="24"/>
</Size>
<TexCoords left="0.25" right="0.75" top="0.125" bottom="0.875"/>
</ThumbTexture>
</Slider>
<Frame name="DBM_GUI_OptionsFrameListTemplate" virtual="true">
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentTopLeft" file="Interface\Tooltips\UI-Tooltip-Border">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
<TexCoords left="0.5" right="0.625" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomLeft" file="Interface\Tooltips\UI-Tooltip-Border">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="BOTTOMLEFT"/>
</Anchors>
<TexCoords left="0.75" right="0.875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomRight" file="Interface\Tooltips\UI-Tooltip-Border">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="BOTTOMRIGHT"/>
</Anchors>
<TexCoords left="0.875" right="1" top="0" bottom="1"/>
</Texture>
<Texture name="$parentTopRight" file="Interface\Tooltips\UI-Tooltip-Border">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.625" right="0.75" top="0" bottom="1"/>
</Texture>
<Texture name="$parentLeft" file="Interface\Tooltips\UI-Tooltip-Border">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="BOTTOMLEFT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomLeft" relativePoint="TOPRIGHT"/>
</Anchors>
<TexCoords left="0" right="0.125" top="0" bottom="1"/>
</Texture>
<Texture name="$parentRight" file="Interface\Tooltips\UI-Tooltip-Border">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopRight" relativePoint="BOTTOMLEFT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.125" right="0.25" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottom" file="Interface\OptionsFrame\UI-OptionsFrame-Spacer">
<Size>
<AbsDimension x="0" y="16"/>
</Size>
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBottomLeft" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="-2"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="BOTTOMLEFT"/>
</Anchors>
</Texture>
<Texture name="$parentTop" file="Interface\OptionsFrame\UI-OptionsFrame-Spacer">
<Size>
<AbsDimension x="0" y="16"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="0" y="7"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT" relativeTo="$parentTopRight" relativePoint="TOPLEFT"/>
</Anchors>
</Texture>
</Layer>
</Layers>
<Frames>
<ScrollFrame name="$parentList" hidden="true">
<Size>
<AbsDimension x="24" y="0"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-3" y="-3"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="-3" y="3"/>
</Offset>
</Anchor>
</Anchors>
<Backdrop edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
<EdgeSize>
<AbsValue val="12"/>
</EdgeSize>
<TileSize>
<AbsValue val="16"/>
</TileSize>
<BackgroundInsets>
<AbsInset left="0" right="0" top="5" bottom="5"/>
</BackgroundInsets>
</Backdrop>
<Scripts>
<OnLoad>
self:SetBackdropBorderColor(.6, .6, .6, .6)
getglobal(self:GetName().."ScrollBarScrollUpButton"):Disable()
getglobal(self:GetName().."ScrollBarScrollDownButton"):Disable()
local scrollbar = getglobal(self:GetName().."ScrollBar")
scrollbar:SetMinMaxValues(0, 0)
scrollbar:SetValue(0)
self.offset = 0
</OnLoad>
<OnVerticalScroll>
local scrollbar = getglobal(self:GetName().."ScrollBar")
scrollbar:SetValue(offset)
self.offset = floor((offset / 18) + 0.5)
DBM_GUI_OptionsFrame:UpdateMenuFrame(self:GetParent())
</OnVerticalScroll>
</Scripts>
<Frames>
<Slider name="$parentScrollBar" inherits="DBM_GUI_PanelScrollBarTemplate">
<Anchors>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="19"/>
</Offset>
</Anchor>
</Anchors>
</Slider>
<Frame name="$parentScrollChildFrame" hidden="true"/>
</Frames>
</ScrollFrame>
</Frames>
<Scripts>
<OnMouseWheel>
local scrollBar = getglobal(self:GetName() .. "ListScrollBar")
if ( arg1 > 0 ) then
scrollBar:SetValue(scrollBar:GetValue() - (scrollBar:GetHeight() / 2))
else
scrollBar:SetValue(scrollBar:GetValue() + (scrollBar:GetHeight() / 2))
end
DBM_GUI_OptionsFrame:UpdateMenuFrame(self)
</OnMouseWheel>
</Scripts>
</Frame>
<Frame name="DBM_GUI_OptionsFrame" parent="UIParent" hidden="true" enableMouse="true" frameStrata="DIALOG" movable="true">
<Size>
<AbsDimension x="720" y="500"/>
</Size>
<Anchors>
<Anchor point="CENTER"/>
</Anchors>
<Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true">
<BackgroundInsets>
<AbsInset left="11" right="11" top="12" bottom="10"/>
</BackgroundInsets>
<TileSize>
<AbsValue val="32"/>
</TileSize>
<EdgeSize>
<AbsValue val="32"/>
</EdgeSize>
</Backdrop>
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentHeader" file="Interface\DialogFrame\UI-DialogBox-Header">
<Size>
<AbsDimension x="300" y="68"/>
</Size>
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="12"/>
</Offset>
</Anchor>
</Anchors>
</Texture>
<FontString name="$parentHeaderText" inherits="GameFontNormal" text="Deadly Boss Mods">
<Anchors>
<Anchor point="TOP" relativeTo="$parentHeader">
<Offset>
<AbsDimension x="0" y="-14"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<FontString name="$parentRevision" inherits="GameFontDisableSmall" text="">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="35"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<FontString name="$parentTranslation" inherits="GameFontDisableSmall" text="">
<Anchors>
<Anchor point="LEFT" relativeTo="$parentRevision" relativePoint="RIGHT">
<Offset>
<AbsDimension x="20" y="0"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
<FontString name="$parentAuthors" inherits="GameFontDisableSmall" text="">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="20"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentOkay" inherits="UIPanelButtonTemplate" text="OKAY">
<Size>
<AbsDimension x="96" y="22"/>
</Size>
<Anchors>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="-16" y="16"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
self:GetParent():Hide()
</OnClick>
</Scripts>
</Button>
<Frame name="$parentBossMods" inherits="DBM_GUI_OptionsFrameListTemplate">
<Size>
<AbsDimension x="205" y="409"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="22" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
self.selection = nil
</OnLoad>
<OnShow>
DBM_GUI_OptionsFrame:UpdateMenuFrame(self)
</OnShow>
</Scripts>
</Frame>
<Frame name="$parentDBMOptions" inherits="DBM_GUI_OptionsFrameListTemplate" hidden="true">
<Size>
<AbsDimension x="205" y="409"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="22" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
self.selection = nil
</OnLoad>
<OnShow>
DBM_GUI_OptionsFrame:UpdateMenuFrame(self)
</OnShow>
</Scripts>
</Frame>
<Frame name="$parentPanelContainer">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentBossMods" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="16" y="0"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBossMods" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="16" y="1"/>
</Offset>
</Anchor>
<Anchor point="RIGHT">
<Offset>
<AbsDimension x="-22" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Backdrop edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
<EdgeSize>
<AbsValue val="16"/>
</EdgeSize>
<TileSize>
<AbsValue val="16"/>
</TileSize>
<BackgroundInsets>
<AbsInset left="5" right="5" top="5" bottom="5"/>
</BackgroundInsets>
</Backdrop>
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentHeaderText" inherits="GameFontHighlightSmall" text="">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="10" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<ScrollFrame name="$parentFOV">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="5" y="-5"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="-20" y="7"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<Slider name="$parentScrollBar" inherits="DBM_GUI_PanelScrollBarTemplate">
<Anchors>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="15" y="-15"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="15" y="13"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
self:SetMinMaxValues(0, 0)
self:SetValue(0)
self.offset = 0
</OnLoad>
<OnVerticalScroll>
self:SetValue(offset);
self.offset = floor((offset / 10) + 0.5)
</OnVerticalScroll>
</Scripts>
</Slider>
</Frames>
<Scripts>
<OnMouseWheel>
local scrollBar = getglobal(self:GetName() .. "ScrollBar")
if ( arg1 > 0 ) then
scrollBar:SetValue(scrollBar:GetValue() - (scrollBar:GetHeight() / 2))
else
scrollBar:SetValue(scrollBar:GetValue() + (scrollBar:GetHeight() / 2))
end
</OnMouseWheel>
</Scripts>
</ScrollFrame>
</Frames>
<Scripts>
<OnLoad>
self:SetBackdropBorderColor(0.6, 0.6, 0.6, 1);
</OnLoad>
</Scripts>
</Frame>
<Button name="$parentTab1" inherits="DBM_GUI_OptionsFrameTabButtonTemplate" text="Bosses" id="1" hidden="false">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBossMods" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="6" y="-3"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
self.firstshow = true
</OnLoad>
<OnShow>
if self.firstshow then
self:GetParent():ShowTab(1)
self.firstshow = false
end
</OnShow>
<OnClick>
self:GetParent():ShowTab(1)
</OnClick>
</Scripts>
</Button>
<Button name="$parentTab2" inherits="DBM_GUI_OptionsFrameTabButtonTemplate" text="Options" id="2" hidden="false">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTab1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="-16" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
self:GetParent():ShowTab(2)
</OnClick>
</Scripts>
</Button>
</Frames>
<Scripts>
<OnLoad>
self.firstshow = true
self:SetFrameLevel(self:GetFrameLevel() + 4)
function self:ShowTab(tab)
self.tab = tab
if tab == 1 then
getglobal(self:GetName().."Tab1Left"):Hide()
getglobal(self:GetName().."Tab1Right"):Hide()
getglobal(self:GetName().."Tab1Middle"):Hide()
getglobal(self:GetName().."Tab2Left"):Show()
getglobal(self:GetName().."Tab2Right"):Show()
getglobal(self:GetName().."Tab2Middle"):Show()
getglobal(self:GetName().."Tab1LeftDisabled"):Show()
getglobal(self:GetName().."Tab1RightDisabled"):Show()
getglobal(self:GetName().."Tab1MiddleDisabled"):Show()
getglobal(self:GetName().."Tab2LeftDisabled"):Hide()
getglobal(self:GetName().."Tab2RightDisabled"):Hide()
getglobal(self:GetName().."Tab2MiddleDisabled"):Hide()
getglobal(self:GetName().."BossMods"):Show()
getglobal(self:GetName().."DBMOptions"):Hide()
else
getglobal(self:GetName().."Tab1Left"):Show()
getglobal(self:GetName().."Tab1Right"):Show()
getglobal(self:GetName().."Tab1Middle"):Show()
getglobal(self:GetName().."Tab2Left"):Hide()
getglobal(self:GetName().."Tab2Right"):Hide()
getglobal(self:GetName().."Tab2Middle"):Hide()
getglobal(self:GetName().."Tab1LeftDisabled"):Hide()
getglobal(self:GetName().."Tab1RightDisabled"):Hide()
getglobal(self:GetName().."Tab1MiddleDisabled"):Hide()
getglobal(self:GetName().."Tab2LeftDisabled"):Show()
getglobal(self:GetName().."Tab2RightDisabled"):Show()
getglobal(self:GetName().."Tab2MiddleDisabled"):Show()
getglobal(self:GetName().."BossMods"):Hide()
getglobal(self:GetName().."DBMOptions"):Show()
end
end
self:SetMovable(true)
self:SetUserPlaced(true)
self:RegisterForDrag("LeftButton")
</OnLoad>
<OnShow>
if self.firstshow then
self.firstshow = false
self:CreateButtons( getglobal(self:GetName().."BossMods") )
self:CreateButtons( getglobal(self:GetName().."DBMOptions") )
self:UpdateMenuFrame( getglobal(self:GetName().."BossMods") )
end
if math.random(1,2) == 1 then -- who is first? hmm lets do it random :)
getglobal(self:GetName().."Authors"):SetText("DBM for Ascension by Nitram and Tandanu updated by Junior and Szyler. - visit https://discord.gg/4ZHfgskSvM")
else
getglobal(self:GetName().."Authors"):SetText("DBM for Ascension by Tandanu and Nitram updated by Szyler and Junior.- visit https://discord.gg/4ZHfgskSvM")
end
</OnShow>
<OnDragStart>
self:StartMoving()
</OnDragStart>
<OnDragStop>
self:StopMovingOrSizing()
</OnDragStop>
</Scripts>
</Frame>
<Button name="DBM_GUI_FrameButtonTemplate" virtual="true">
<Size>
<AbsDimension x="185" y="18"/>
</Size>
<Scripts>
<OnLoad>
self.text = getglobal(self:GetName() .. "Text");
self.highlight = self:GetHighlightTexture();
self.highlight:SetVertexColor(0.196, 0.388, 0.8);
self:RegisterForClicks("LeftButtonUp");
</OnLoad>
<OnClick>
DBM_GUI_OptionsFrame:OnButtonClick(self);
</OnClick>
</Scripts>
<Frames>
<Button name="$parentToggle" inherits="InterfaceOptionsToggleButtonTemplate">
<Size>
<AbsDimension x="14" y="14"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="5" y="-1"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
self:GetParent().toggle = self;
self:RegisterForClicks("LeftButtonUp", "RightButtonUp");
</OnLoad>
<OnClick>
DBM_GUI_OptionsFrame:ToggleSubCategories(self);
</OnClick>
</Scripts>
<NormalTexture name="$parentNormalTexture" file="Interface\Buttons\UI-MinusButton-UP"/>
<PushedTexture name="$parentPushedTexture" file="Interface\Buttons\UI-MinusButton-DOWN"/>
<HighlightTexture name="$parentHighlightTexture" file="Interface\Buttons\UI-PlusButton-Hilight" alphaMode="ADD"/>
</Button>
</Frames>
<ButtonText name="$parentText" justifyH="LEFT">
<Anchors>
<Anchor point="RIGHT" relativeTo="$parentToggle" relativePoint="LEFT">
<Offset>
<AbsDimension x="-2" y="0"/>
</Offset>
</Anchor>
</Anchors>
</ButtonText>
<NormalFont style="GameFontNormal"/>
<HighlightFont style="GameFontHighlight"/>
<HighlightTexture file="Interface\QuestFrame\UI-QuestLogTitleHighlight" alphaMode="ADD">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</HighlightTexture>
</Button>
<EditBox name="DBM_GUI_FrameEditBoxTemplate" autoFocus="false" virtual="true">
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentLeft" file="Interface\ChatFrame\UI-ChatInputBorder-Left">
<Size>
<AbsDimension x="32" y="32"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="-14" y="0"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="0.125" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentRight" file="Interface\ChatFrame\UI-ChatInputBorder-Right">
<Size>
<AbsDimension x="32" y="32"/>
</Size>
<Anchors>
<Anchor point="RIGHT">
<Offset>
<AbsDimension x="6" y="0" />
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0.875" right="1.0" top="0" bottom="1.0"/>
</Texture>
<Texture name="$parentMiddle" file="Interface\ChatFrame\UI-ChatInputBorder-Right">
<Size>
<AbsDimension x="1" y="32"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="$parentLeft" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
<Anchor point="RIGHT" relativeTo="$parentRight" relativePoint="LEFT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="0.9375" top="0" bottom="1.0"/>
</Texture>
</Layer>
<Layer level="BACKGROUND">
<FontString name="$parentText" inherits="GameFontNormalSmall" text="xx">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="-4" y="13"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<FontString inherits="ChatFontNormal"></FontString>
</EditBox>
</Ui>
+61
View File
@@ -0,0 +1,61 @@
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
c. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
d. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
f. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
g. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
h. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
i. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
j. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).
4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.
d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
iii. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
f. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+139
View File
@@ -0,0 +1,139 @@
-- Simplified Chinese by Diablohu
-- http://wow.gamespot.com.cn
-- Last Update: 12/13/2008
-- yleaf (yaroot@gmail.com) 9-19-2009
if GetLocale() ~= "zhCN" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods"
L.TranslationBy = "Diablohu & yleaf"
L.TabCategory_Options = "综合设置"
L.TabCategory_WOTLK = "巫妖王之怒"
L.TabCategory_BC = "燃烧的远征"
L.TabCategory_VANILLA = "经典旧世"
L.TabCategory_OTHER = "其它"
L.BossModLoaded = "%s状态"
L.BossModLoad_now = [[该模块尚未启动。
当你进入相应副本时其会自动加载。
你也可以点击该按钮手动启动该模块。]]
L.PosX = 'X坐标'
L.PosY = 'Y坐标'
L.MoveMe = '移动'
L.Button_OK = '确定'
L.Button_Cancel = '取消'
L.Button_LoadMod = '加载插件'
L.Mod_Enabled = "开启模块"
L.Mod_EnableAnnounce = "团队广播"
L.Reset = "重置"
L.Enable = "开启"
L.Disable = "关闭"
L.NoSound = "静音"
L.IconsInUse = "此首领模块需要使用的团队标记"
-- Tab: Boss Statistics
L.BossStatistics = "首领状态"
L.Statistic_Kills = "击杀:"
L.Statistic_Wipes = "失败:"
L.Statistic_BestKill = "最好成绩:"
L.Statistic_Heroic = "英雄模式"
-- Tab: General Options
L.General = "DBM综合设置"
L.EnableDBM = "启用DBM"
L.EnableStatus = "回复“status”密语"
L.AutoRespond = "开启战斗中自动密语回复"
L.EnableMiniMapIcon = "显示小地图图标"
L.Button_RangeFrame = "显示/隐藏距离监视器"
L.Button_TestBars = "测试计时条"
L.PizzaTimer_Headline = '创建一个计时条'
L.PizzaTimer_Title = '名称(如“泡面倒计时”)'
L.PizzaTimer_Hours = "小时"
L.PizzaTimer_Mins = "分钟"
L.PizzaTimer_Secs = ""
L.PizzaTimer_ButtonStart = "开始计时"
L.PizzaTimer_BroadCast = "向团队广播"
-- Tab: Raidwarning
L.Tab_RaidWarning = "团队警报"
L.RaidWarning_Header = "团队警报设置"
L.RaidWarnColors = "团队警报颜色"
L.RaidWarnColor_1 = "颜色1"
L.RaidWarnColor_2 = "颜色2"
L.RaidWarnColor_3 = "颜色3"
L.RaidWarnColor_4 = "颜色4"
L.InfoRaidWarning = [[你可以对团队警报的文本颜色及其位置进行设定。
在这里会显示诸如“玩家X受到了Y效果的影响”之类的信息。]]
L.ColorResetted = "该颜色设置已重置"
L.ShowWarningsInChat = "在聊天窗口中显示警报"
L.ShowFakedRaidWarnings = "以伪装团队警报信息的方式显示警报内容"
L.WarningIconLeft = "左侧显示图标"
L.WarningIconRight = "右侧显示图标"
L.RaidWarnMessage = "感谢您使用Deadly Boss Mods"
L.BarWhileMove = "团队警报可以移动"
L.RaidWarnSound = "发出团队警报时播放声音"
L.SpecialWarnSound = "发出特殊警报时播放声音"
-- Tab: Barsetup
L.BarSetup = "计时条样式"
L.BarTexture = "计时条材质"
L.BarStartColor = "初始颜色"
L.BarEndColor = "结束颜色"
L.ExpandUpwards = "向上扩展"
L.Bar_Font = "计时条字体"
L.Bar_FontSize = "字体大小"
L.Slider_BarOffSetX = "X偏移"
L.Slider_BarOffSetY = "Y偏移"
L.Slider_BarWidth = "宽度"
L.Slider_BarScale = "尺寸"
L.AreaTitle_BarSetup = "计时条综合设置"
L.AreaTitle_BarSetupSmall = "小型计时条设置"
L.AreaTitle_BarSetupHuge = "大型计时条设置"
L.BarIconLeft = "左侧显示图标"
L.BarIconRight = "右侧显示图标"
L.EnableHugeBar = "开启大型计时条(2号计时条)"
L.FillUpBars = "填充计时条"
L.ClickThrough = "禁用鼠标点击事件 (允许你点击计时条)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "特殊警报"
L.Area_SpecWarn = "特殊警报设置"
L.SpecWarn_Enabled = "显示首领技能特殊警报"
L.SpecWarn_Font = "特殊警报字体"
L.SpecWarn_DemoButton = "测试警报"
L.SpecWarn_MoveMe = "设置位置"
L.SpecWarn_FontSize = "字体大小"
L.SpecWarn_FontColor = "字体颜色"
L.SpecWarn_FontType = "选择字体"
L.SpecWarn_ResetMe = "重置选项"
-- Tab: HealthFrame
L.Panel_HPFrame = "首领生命值框体"
L.Area_HPFrame = "首领生命值框体选项"
L.HP_Enabled = "总是显示首领生命值框体 (首领模块中单独的设置将不起作用)"
L.HP_GrowUpwards = "计量条想上增长"
L.HP_ShowDemo = "显示测试框体"
L.BarWidth = "计量条宽度: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "信息过滤"
L.Area_SpamFilter = "常规设置"
L.HideBossEmoteFrame = "隐藏BOSS表情"
L.SpamBlockRaidWarning = "过滤其他首领预警插件警报"
L.SpamBlockBossWhispers = "战斗中过滤DBM密语警报"
L.BlockVersionUpdatePopup = "禁用升级提示"
L.ShowBigBrotherOnCombatStart = "战斗开始时使用BigBrother检测增益情况"
+138
View File
@@ -0,0 +1,138 @@
if GetLocale() ~= "deDE" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods"
L.TranslationBy = "Nitram & Tandanu"
L.TabCategory_Options = "Allgemeine Einstellungen"
L.TabCategory_WOTLK = "Wrath of the Lich King"
L.TabCategory_BC = "The Burning Crusade"
L.TabCategory_VANILLA = "WoW-Classic-Bosse"
L.TabCategory_OTHER = "Sonstige Boss-Mods"
L.BossModLoaded = "Statistiken von %s"
L.BossModLoad_now = [[Dieses Boss Mod ist nicht geladen.
Er wird automatisch geladen, wenn du die Instanz betrittst.
Ansonsten kannst du den Button hier verwenden um das Boss Mod zu laden.]]
L.PosX = 'Position X'
L.PosY = 'Position Y'
L.MoveMe = 'bewegbar'
L.Button_OK = 'OK'
L.Button_Cancel = 'Abbrechen'
L.Button_LoadMod = 'Lade AddOn'
L.Mod_Enabled = "Aktiviere Boss Mod"
L.Mod_EnableAnnounce = "Zum Raid ansagen"
L.Reset = "zurücksetzen"
L.Enable = "aktiviere"
L.Disable = "deaktiviere"
L.NoSound = "Kein Sound"
L.IconsInUse = "Von diesem Mod benutzte Zeichen"
-- Tab: Boss Statistics
L.BossStatistics = "Boss-Statistiken"
L.Statistic_Kills = "Kills:"
L.Statistic_Wipes = "Niederlagen:"
L.Statistic_BestKill = "Schnellster:"
L.Statistic_Heroic = "heroisch"
-- Tab: General Options
L.General = "Allgemeine DBM-Optionen"
L.EnableDBM = "Aktiviere DBM"
L.EnableStatus = "Antworte auf 'status'-Flüsteranfragen"
L.AutoRespond = "Aktiviere automatische Antwort während eines Bosskampfes"
L.EnableMiniMapIcon = "Aktiviere Minimap-Symbol"
L.Button_RangeFrame = "Zeige/Verberge Abstandsfenster"
L.Button_TestBars = "Starte Testbalken"
L.PizzaTimer_Headline = 'Erstelle einen "Pizza-Timer"'
L.PizzaTimer_Title = 'Name (z.b. "Pizza!")'
L.PizzaTimer_Hours = "Stunden"
L.PizzaTimer_Mins = "Min"
L.PizzaTimer_Secs = "Sek"
L.PizzaTimer_ButtonStart = "Starte Timer"
L.PizzaTimer_BroadCast = "Anderen Schlachtzugspielern anzeigen"
-- Tab: Raidwarning
L.Tab_RaidWarning = "Schlachtzugswarnungen"
L.RaidWarning_Header = "Schlachtzugswarnungen-Optionen"
L.RaidWarnColors = "Schlachtzugs-Warnungsfarben"
L.RaidWarnColor_1 = "Farbe 1"
L.RaidWarnColor_2 = "Farbe 2"
L.RaidWarnColor_3 = "Farbe 3"
L.RaidWarnColor_4 = "Farbe 4"
L.InfoRaidWarning = [[Hier wird die Position des Schlachtzug-Warnungs-Fenster sowie die Farbe festgelegt.
Dieses Fenster wird für Nachrichten wie "Player X ist betroffen von Y" verwendet.]]
L.ColorResetted = "Die Farbeinstellung wurde zurückgesetzt."
L.ShowWarningsInChat = "Zeige Warnungen im Nachrichten-Fenster"
L.ShowFakedRaidWarnings = "Zeige Warnungen als künstliche Schlachtzugwarnung"
L.WarningIconLeft = "Zeige Symbol links an"
L.WarningIconRight = "Zeige Symbol rechts an"
L.RaidWarnMessage = "Danke, dass du Deadly Boss Mods verwendest"
L.BarWhileMove = "Warnungen bewegbar"
L.RaidWarnSound = "Spiele Sound bei Schlachtzug-Warnung"
L.SpecialWarnSound = "Spiele Sound bei Spezial-Warnung"
-- Tab: Barsetup
L.BarSetup = "Balkenstil"
L.BarTexture = "Balkentextur"
L.BarStartColor = "Startfarbe"
L.BarEndColor = "Endfarbe"
L.ExpandUpwards = "Balken nach oben aufbauen"
L.Bar_Font = "Schrift, die für Balken benutzt wird"
L.Bar_FontSize = "Schriftgröße"
L.Slider_BarOffSetX = "Abstand X: %d"
L.Slider_BarOffSetY = "Abstand Y: %d"
L.Slider_BarWidth = "Balkenbreite: %d"
L.Slider_BarScale = "Balkenskalierung: %0.2f"
L.AreaTitle_BarSetup = "Allgemeine Balkenoptionen"
L.AreaTitle_BarSetupSmall = "Kleine-Balken-Optionen"
L.AreaTitle_BarSetupHuge = "Große-Balken-Optionen"
L.BarIconLeft = "Symbol links"
L.BarIconRight = "Symbol rechts"
L.EnableHugeBar = "Aktiviere große Balken (Balken 2)"
L.FillUpBars = "Balken auffüllen"
L.ClickThrough = "Maus deaktivieren (macht die Timer durchklickbar)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "Spezialwarnungen"
L.Area_SpecWarn = "Spezialwarnungs-Optionen"
L.SpecWarn_Enabled = "Zeige Spezialwarnungen für Bossfähigkeiten"
L.SpecWarn_Font = "Schrift, die für Spezialwarnungen benutzt wird"
L.SpecWarn_DemoButton = "Zeige Beispiel"
L.SpecWarn_MoveMe = "Setze Position"
L.SpecWarn_FontSize = "Schriftgröße"
L.SpecWarn_FontColor = "Schriftfarbe"
L.SpecWarn_FontType = "Wähle Schriftart"
L.SpecWarn_ResetMe = "Auf Standard zurücksetzen"
-- Tab: HealthFrame
L.Panel_HPFrame = "Lebensanzeige"
L.Area_HPFrame = "Lebensanzeige-Optionen"
L.HP_Enabled = "Lebensanzeige immer anzeigen (überschreibt boss-spezifische Option)"
L.HP_GrowUpwards = "Erweitere Lebensanzeige nach oben"
L.HP_ShowDemo = "Zeige Lebensanzeige"
L.BarWidth = "Balkenbreite: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "Spam-Filter"
L.Area_SpamFilter = "Allgemeine Spam-Filter-Einstellungen"
L.HideBossEmoteFrame = "Schlachtzugsboss-Emote-Fenster verstecken"
L.SpamBlockRaidWarning = "Ansagen von anderen Boss Mods filtern"
L.SpamBlockBossWhispers = "Aktiviere Filter für <DBM>-Flüstermitteilungen im Kampf"
L.BlockVersionUpdatePopup = "Zeige Update-Meldung im Chat statt als Popup"
L.ShowBigBrotherOnCombatStart = "Führe Big-Brother-Buffprüfung bei Kampfbeginn durch"
L.BigBrotherAnnounceToRaid = "Ergebnis der Big-Brother-Buffprüfung zum Raid Chat veröffentlichen"
L.Area_SpamFilter_Outgoing = "Global Filter-Optionen"
L.SpamBlockNoShowAnnounce = "Zeige keine Verkündungen und spiele keine Warnungssounds"
L.SpamBlockNoSendAnnounce = "Sende keine Verkündungen an den Raidchat"
L.SpamBlockNoSendWhisper = "Sende keine Flüstermitteilungen an andere Spieler"
L.SpamBlockNoSetIcon = "Setze keine Zeichen auf Ziele"
+143
View File
@@ -0,0 +1,143 @@
DBM_GUI_Translations = {}
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods"
L.TranslationBy = "Nitram, Tandanu & Tennberg"
L.TabCategory_Options = "General Options"
L.TabCategory_WOTLK = "Wrath of the Lich King"
L.TabCategory_BC = "The Burning Crusade"
L.TabCategory_VANILLA = "Vanilla"
L.TabCategory_OTHER = "Misc Mods"
L.BossModLoaded = "%s statistics"
L.BossModLoad_now = [[This boss mod is not loaded.
It will be loaded when you enter the instance.
You can also click the button to load the mod manually.]]
L.PosX = 'Position X'
L.PosY = 'Position Y'
L.MoveMe = 'Move me'
L.Button_OK = 'OK'
L.Button_Cancel = 'Cancel'
L.Button_LoadMod = 'Load AddOn'
L.Mod_Enabled = "Enable boss mod"
L.Mod_EnableAnnounce = "Announce to raid"
L.Reset = "Reset"
L.Enable = "Enable"
L.Disable = "Disable"
L.NoSound = "No sound"
L.IconsInUse = "Icons used by this mod"
-- Tab: Boss Statistics
L.BossStatistics = "Boss Statistics"
L.Statistic_Kills = "Kills:"
L.Statistic_Wipes = "Wipes:"
L.Statistic_BestKill = "Best Kill:"
L.Statistic_Heroic = "Heroic"
L.Statistic_Heroic10 = "Heroic 10"
L.Statistic_Heroic25 = "Heroic 25"
-- Tab: General Options
L.General = "General DBM Options"
L.EnableDBM = "Enable DBM"
L.EnableStatus = "Reply to 'status' whispers"
L.AutoRespond = "Enable auto-respond while fighting"
L.EnableMiniMapIcon = "Show minimap button"
L.FixCLEUOnCombatStart = "Clear combat log cache on pull"
L.Latency_Text = "Set max latency sync threshold: %d"
L.Button_RangeFrame = "Show/hide range frame"
L.Button_TestBars = "Start test bars"
L.PizzaTimer_Headline = 'Create a "Pizza Timer"'
L.PizzaTimer_Title = 'Name (e.g. "Pizza!")'
L.PizzaTimer_Hours = "Hours"
L.PizzaTimer_Mins = "Min"
L.PizzaTimer_Secs = "Sec"
L.PizzaTimer_ButtonStart = "Start timer"
L.PizzaTimer_BroadCast = "Broadcast to raid"
-- Tab: Raidwarning
L.Tab_RaidWarning = "Raid Warnings"
L.RaidWarning_Header = "Raid Warning Options"
L.RaidWarnColors = "Raid Warning Colors"
L.RaidWarnColor_1 = "Color 1"
L.RaidWarnColor_2 = "Color 2"
L.RaidWarnColor_3 = "Color 3"
L.RaidWarnColor_4 = "Color 4"
L.InfoRaidWarning = [[You can specify the position and colors of the raid warning frame.
This frame is used for messages like "Player X is affected by Y".]]
L.ColorResetted = "The color settings of this field have been reset."
L.ShowWarningsInChat = "Show warnings in chat frame"
L.ShowFakedRaidWarnings = "Show warnings as faked raid warning messages"
L.WarningIconLeft = "Show icon on left side"
L.WarningIconRight = "Show icon on right side"
L.RaidWarnMessage = "Thanks for using Deadly Boss Mods"
L.BarWhileMove = "Raid warning movable"
L.RaidWarnSound = "Play sound on raid warning"
L.SpecialWarnSound = "Play sound on special warning"
-- Tab: Barsetup
L.BarSetup = "Bar Style"
L.BarTexture = "Bar texture"
L.BarStartColor = "Start color"
L.BarEndColor = "End color"
L.ExpandUpwards = "Expand bars upward"
L.Bar_Font = "Font used for bars"
L.Bar_FontSize = "Font size"
L.Slider_BarOffSetX = "Offset X: %d"
L.Slider_BarOffSetY = "Offset Y: %d"
L.Slider_BarWidth = "Bar width: %d"
L.Slider_BarScale = "Bar scale: %0.2f"
L.AreaTitle_BarSetup = "General Bar Options"
L.AreaTitle_BarSetupSmall = "Small Bar Options"
L.AreaTitle_BarSetupHuge = "Huge Bar Options"
L.BarIconLeft = "Left icon"
L.BarIconRight = "Right icon"
L.EnableHugeBar = "Enable huge bar (aka Bar 2)"
L.FillUpBars = "Fill up bars"
L.ClickThrough = "Disable mouse events (allows you to click through bars)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "Special Warnings"
L.Area_SpecWarn = "Special Warning Options"
L.SpecWarn_Enabled = "Show special warnings for boss abilities"
L.SpecWarn_Font = "Font used for special warnings"
L.SpecWarn_DemoButton = "Show example"
L.SpecWarn_MoveMe = "Set position"
L.SpecWarn_FontSize = "Font size"
L.SpecWarn_FontColor = "Font color"
L.SpecWarn_FontType = "Select font"
L.SpecWarn_ResetMe = "Reset to defaults"
-- Tab: HealthFrame
L.Panel_HPFrame = "Health Frame"
L.Area_HPFrame = "Health Frame Options"
L.HP_Enabled = "Always show health frame (Overrides boss-specific option)"
L.HP_GrowUpwards = "Expand health frame upward"
L.HP_ShowDemo = "Show HP frame"
L.BarWidth = "Bar width: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "Global and Spam Filters"
L.Area_SpamFilter = "Spam Filter Options"
L.HideBossEmoteFrame = "Hide raid boss emote frame"
L.SpamBlockRaidWarning = "Filter announces from other boss mods"
L.SpamBlockBossWhispers = "Filter <DBM> warning whispers while fighting"
L.BlockVersionUpdatePopup = "Disable update notification popup"
L.ShowBigBrotherOnCombatStart = "Perform Big Brother buff check on combat start"
L.BigBrotherAnnounceToRaid = "Announce Big Brother results to raid"
L.Area_SpamFilter_Outgoing = "Global Filter Options"
L.SpamBlockNoShowAnnounce = "Do not show announces or play warning sounds"
L.SpamBlockNoSendAnnounce = "Do not send announces to raid chat"
L.SpamBlockNoSendWhisper = "Do not send whispers to other players"
L.SpamBlockNoSetIcon = "Do not set icons on targets"
+143
View File
@@ -0,0 +1,143 @@
if GetLocale() ~= "esES" and GetLocale() ~= "esMX" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods - Español"
L.TranslationBy = "Interplay, Snamor"
L.TabCategory_Options = "Opciones"
L.TabCategory_WOTLK = "Wrath of the Lich King"
L.TabCategory_BC = "The Burning Crusade"
L.TabCategory_VANILLA = "WoW Classic Bosses"
L.TabCategory_OTHER = "Otros Boss Mods"
L.BossModLoaded = "%s estadisticas"
L.BossModLoad_now = [[Este modulo no esta cargado.
Si no se carga al entrar en la estancia.
Puedes pulsar en el boton para cargar el modulo manualmente.]]
L.PosX = 'Posicion X'
L.PosY = 'Posicion Y'
L.MoveMe = 'mueve me'
L.Button_OK = 'Aceptar'
L.Button_Cancel = 'Cancelar'
L.Button_LoadMod = 'Cargar Modulo'
L.Mod_Enabled = "Habilitar modulo de este boss"
L.Mod_EnableAnnounce = "Avisar a banda"
L.Reset = "resetear"
L.Enable = "habilitar"
L.Disable = "desabilitar"
L.NoSound = "Sin sonido"
L.IconsInUse = "Iconos usados por este mod"
-- Tab: Boss Statistics
L.BossStatistics = "Estadisticas de Boss"
L.Statistic_Kills = "Muertes:"
L.Statistic_Wipes = "Wipes:"
L.Statistic_BestKill = "Mejor muerte:"
L.Statistic_Heroic = "heroico"
-- Tab: General Options
L.General = "Opciones de DBM"
L.EnableDBM = "Habilitar DBM"
L.EnableStatus = "Responder 'estado' a los que te susurren en banda"
L.AutoRespond = "Habilitar auto-responder si estas en un Boss"
L.EnableMiniMapIcon = "Mostrar icono de DBM en el mapa"
L.FixCLEUOnCombatStart = "Limpiar el log de combate al pullear"
L.Latency_Text = "Umbral de latencia máxima para sincronización: %d"
L.Button_RangeFrame = "Mostrar/Ocultar cuadro de rango"
L.Button_TestBars = "Testear barras"
L.PizzaTimer_Headline = 'Crear "Cronomentro"'
L.PizzaTimer_Title = 'Nombre (ej. "Pizza!")'
L.PizzaTimer_Hours = "Horas"
L.PizzaTimer_Mins = "Min"
L.PizzaTimer_Secs = "Seg"
L.PizzaTimer_ButtonStart = "Iniciar"
L.PizzaTimer_BroadCast = "Anunciar a Banda"
-- Tab: Raidwarning
L.Tab_RaidWarning = "Avisos a banda"
L.RaidWarning_Header= "Opciones de aviso de banda"
L.RaidWarnColors = "Colores de Avisos a banda"
L.RaidWarnColor_1 = "Color 1"
L.RaidWarnColor_2 = "Color 2"
L.RaidWarnColor_3 = "Color 3"
L.RaidWarnColor_4 = "Color 4"
L.InfoRaidWarning = [[Puedes especificar la posición y los colores del cuadro de advertencia de banda.
Este marco se utiliza para mensajes como "El jugador X está afectado por Y"]]
L.ColorResetted = "Los ajustes de color de este campo se han reiniciado"
L.ShowWarningsInChat = "Mostrar avisos en el chat"
L.ShowFakedRaidWarnings = "Mostrar avisos en el chat de banda"
L.WarningIconLeft = "Mostrar icono en el lado izquierdo"
L.WarningIconRight = "Mostrar icono en el lado derecho"
L.RaidWarnMessage = "Gracias por usar Deadly Boss Mods - Español"
L.BarWhileMove = "Avisos de banda se pueden mover"
L.RaidWarnSound = "Reproducir sonido para aviso-banda"
L.SpecialWarnSound = "Reproducir sonido para aviso-especial"
-- Tab: Barsetup
L.BarSetup = "Estilo de barra"
L.BarTexture = "Textura de barra"
L.BarStartColor = "Empieza con color"
L.BarEndColor = "Termina con color"
L.ExpandUpwards = "Ampliar las barras hacia arriba"
L.Bar_Font = "Fuente de las barras"
L.Bar_FontSize = "Tamaño de la fuente"
L.Slider_BarOffSetX = "Desplazamiento X: %d"
L.Slider_BarOffSetY = "Desplazamiento Y: %d"
L.Slider_BarWidth = "Ancho de barra: %d"
L.Slider_BarScale = "Escala de barra: %0.2f"
L.AreaTitle_BarSetup = "Opciones de Barras"
L.AreaTitle_BarSetupSmall = "Barra de la derecha"
L.AreaTitle_BarSetupHuge = "Barra del medio"
L.BarIconLeft = "Icono izq."
L.BarIconRight = "Icono der."
L.EnableHugeBar = "Habilitar barra del medio (Bar 2)"
L.FillUpBars = "Llénese Barras"
L.ClickThrough = "Desabilitar acciones de raton ( si pulsas en las barras )"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "Avisos Especiales"
L.Area_SpecWarn = "Opciones de Avisos Especiales"
L.SpecWarn_Enabled = "Mostrar Avisos Especiales para habilidades de los jefes"
L.SpecWarn_Font = "Fuente usada para Avisos Especiales"
L.SpecWarn_DemoButton = "Ver ejemplo"
L.SpecWarn_MoveMe = "Definir posición"
L.SpecWarn_FontSize = "Tamaño de fuente"
L.SpecWarn_FontColor = "Color de fuente"
L.SpecWarn_FontType = "Selecciona una fuente"
L.SpecWarn_ResetMe = "Reiniciar con los valores por defecto"
-- Tab: HealthFrame
L.Panel_HPFrame = "Barra de vida"
L.Area_HPFrame = "Opciones de la barra de vida"
L.HP_Enabled = "Siempre ver la barra de vida (Sobreescribe la opción de bosses específicos)"
L.HP_GrowUpwards = "Mover la barra de vida arriba"
L.HP_ShowDemo = "Ver barra de vida"
L.BarWidth = "Ancho de la barra: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "Filtro de Spam"
L.Area_SpamFilter = "Opciones de spam"
L.HideBossEmoteFrame = "Esconder lo que dice el boss"
L.SpamBlockRaidWarning = "Filtrar anuncios de otros Boss Mods"
L.SpamBlockBossWhispers = "Filtrar los avisos de <DBM> mientras estas en combate"
L.BlockVersionUpdatePopup = "Desabilitar avisos de actualizaciones"
L.ShowBigBrotherOnCombatStart = "Comprobar los bufos con Big Brother al inicio del combate"
L.BigBrotherAnnounceToRaid = "Anunciar los resultados de Big Brother a la banda"
L.Area_SpamFilter_Outgoing = "Opciones de Filtro Global"
L.SpamBlockNoShowAnnounce = "No mostrar avisos o reproducir sonidos"
L.SpamBlockNoSendAnnounce = "No poner mensajes en el chat de banda"
L.SpamBlockNoSendWhisper = "No enviar susurros a otros jugadores"
L.SpamBlockNoSetIcon = "No poner iconos en objetivos"
+139
View File
@@ -0,0 +1,139 @@
if GetLocale() ~= "frFR" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods"
L.TranslationBy = "Psyco Alias Exodius & Vranwen@EU-Kirin Tor"
L.TabCategory_Options = "Options Générales"
L.TabCategory_WOTLK = "Wrath of the Lich King"
L.TabCategory_BC = "The Burning Crusade"
L.TabCategory_VANILLA = "WoW Classique"
L.TabCategory_OTHER = "Autres Boss Mods"
L.BossModLoaded = "%s statistiques"
L.BossModLoad_now = [[Ce boss mod n'est pas chargé.
Il sera chargé quand vous entrerez dans l'instance.
Vous pouvez aussi cliquer sur le bouton pour charger le mod manuellement.]]
L.PosX = "Position X"
L.PosY = "Position Y"
L.MoveMe = "Déplacez-moi"
L.Button_OK = "OK"
L.Button_Cancel = "Annuler"
L.Button_LoadMod = "Charger l'AddOn"
L.Mod_Enabled = "Activer boss mod"
L.Mod_EnableAnnounce = "Annoncer au raid"
L.Reset = "Reset"
L.Enable = "Activer"
L.Disable = "Désactiver"
L.NoSound = "Pas de Son"
L.IconsInUse = "Icônes utilisées par cet addon"
-- Tab: Boss Statistics
L.BossStatistics = "Statistiques des boss"
L.Statistic_Kills = "Tués:"
L.Statistic_Wipes = "Wipes:"
L.Statistic_BestKill = "Meilleur down:"
L.Statistic_Heroic = "Héroique"
-- Tab: General Options
L.General = "Options Générales DBM"
L.EnableDBM = "Activer DBM"
L.EnableStatus = "Envoie du 'status' au chuchotement"
L.AutoRespond = "Activer la réponse automatique pendant les combats"
L.EnableMiniMapIcon = "Afficher le bouton sur minicarte "
L.Button_RangeFrame = "Afficher/Cacher la fenêtre de portée"
L.Button_TestBars = "Lancer les barres de test"
L.PizzaTimer_Headline = 'Crée un "Pizza Timer"'
L.PizzaTimer_Title = 'Nom (ex. "Pizza!")'
L.PizzaTimer_Hours = "Heures"
L.PizzaTimer_Mins = "Min"
L.PizzaTimer_Secs = "Sec"
L.PizzaTimer_ButtonStart = "Commencer le Timer"
L.PizzaTimer_BroadCast = "Diffuser au Raid"
-- Tab: Raidwarning
L.Tab_RaidWarning = "Alertes raid"
L.RaidWarning_Header = "Options des alertes de raid"
L.RaidWarnColors = "Couleurs des alertes raid"
L.RaidWarnColor_1 = "Couleur 1"
L.RaidWarnColor_2 = "Couleur 2"
L.RaidWarnColor_3 = "Couleur 3"
L.RaidWarnColor_4 = "Couleur 4"
L.InfoRaidWarning = [[Vous pouvez spécifier la position et la couleur de l'affichage des Alertes Raid.
Cet affichage est utilisé pour des messages comme "Joueur X est affecté par Y"]]
L.ColorResetted = "La couleur de ce champs a été réinitialisée."
L.ShowWarningsInChat = "Afficher les alertes dans la fenêtre de dialogue"
L.ShowFakedRaidWarnings = "Afficher les alertes comme de faux avertissements de raid"
L.WarningIconLeft = "Afficher l'icône à gauche"
L.WarningIconRight = "Afficher l'icône à droite"
L.RaidWarnMessage = "Merci d'utiliser Deadly Boss Mods"
L.BarWhileMove = "Alerte-raid déplaçable"
L.RaidWarnSound = "Jouer un son pour les alertes raid"
L.SpecialWarnSound = "Jouer un son pour les alertes spéciales"
-- Tab: Barsetup
L.BarSetup = "Style des barres"
L.BarTexture = "Texture des barres"
L.BarStartColor = "Couleur de départ"
L.BarEndColor = "Couleur de fin"
L.ExpandUpwards = "Nouvelles barres au-dessus"
L.Bar_Font = "Police utiliser pour les barres"
L.Bar_FontSize = "Taille des polices"
L.Slider_BarOffSetX = "Position X: %d"
L.Slider_BarOffSetY = "Position Y: %d"
L.Slider_BarWidth = "Largeur: %d"
L.Slider_BarScale = "Echelle: %0.2f"
L.AreaTitle_BarSetup = "Options générales des barres"
L.AreaTitle_BarSetupSmall = "Options des petites barres"
L.AreaTitle_BarSetupHuge = "Options des grandes barres"
L.BarIconLeft = "Icône gauche"
L.BarIconRight = "Icône droit"
L.EnableHugeBar = "Activer les grandes barres (Barre 2)"
L.FillUpBars = "Remplir les barres"
L.ClickThrough = "Enlève le contrôle par la souris (Vous autorise à cliquer à travers les barres)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "Alertes spéciales"
L.Area_SpecWarn = "Configuration des alertes spéciales"
L.SpecWarn_Enabled = "Montre les alertes spéciales pour les capacités des boss"
L.SpecWarn_Font = "Police utilisée pour les alertes spéciales"
L.SpecWarn_DemoButton = "Montre un exemple"
L.SpecWarn_MoveMe = "Définir la position"
L.SpecWarn_FontSize = "Taille de police"
L.SpecWarn_FontColor = "Couleur de police"
L.SpecWarn_FontType = "Choisir la police"
L.SpecWarn_ResetMe = "Réinitialiser"
-- Tab: HealthFrame
L.Panel_HPFrame = "Barre de vie"
L.Area_HPFrame = "Configurer la Barre de vie"
L.HP_Enabled = "Toujours montrer la Barre de vie, même si elle est désactivée dans le Module"
L.HP_GrowUpwards = "Prolonge la barre de vie vers le haut"
L.HP_ShowDemo = "Montre la fenêtre des points de vie"
L.BarWidth = "Longueur de la barre: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "Filtre anti-spam"
L.Area_SpamFilter = "Options générales du filtre anti-spam"
L.HideBossEmoteFrame = "Cacher la fenêtre des emotes de boss"
L.SpamBlockRaidWarning = "Filtrer les annonces venant d'autres boss mods"
L.SpamBlockBossWhispers = "Filtrer les alertes <DBM> chuchotement pendant les combats"
L.BlockVersionUpdatePopup = "Enlève le message pop-up quand vous êtes sur un boss"
L.ShowBigBrotherOnCombatStart = "Autoriser Big Brother à regarder les buffs quand le combat débute"
L.Area_SpamFilter_Outgoing = "Options Global des Filtres"
L.SpamBlockNoShowAnnounce = "Ne pas montrer les annonces ou jouer les sons"
L.SpamBlockNoSendAnnounce = "Ne pas écrire les annonces dans le chatt de raid"
L.SpamBlockNoSendWhisper = "Ne pas chuchotter les autres joueurs"
L.SpamBlockNoSetIcon = "Ne pas mettre d'icones sur la cible"
+141
View File
@@ -0,0 +1,141 @@
if GetLocale() ~= "koKR" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "죽이는 보스 모드"
L.TranslationBy = "흑묘서희@에이그윈서버 호드진영"
L.TabCategory_Options = "일반 옵션"
L.TabCategory_WOTLK = "리치왕의 분노"
L.TabCategory_BC = "불타는 성전"
L.TabCategory_VANILLA = "오리지널"
L.TabCategory_OTHER = "기타 보스 모드"
L.BossModLoaded = "%s 공략 상황"
L.BossModLoad_now = [[현재 보스의 모드가 로드되지 않았습니다.
애드온 불러오기 버튼을 클릭하여 강제적으로 보스 모드를 실행시킬 수 있습니다.
]]
L.PosX = '위치 X'
L.PosY = '위치 Y'
L.MoveMe = '위치 이동'
L.Button_OK = '확인'
L.Button_Cancel = '취소'
L.Button_LoadMod = '애드온 불러오기'
L.Mod_Enabled = "보스 모드 허용"
L.Mod_EnableAnnounce = "공격대 경보로 알리기"
L.Reset = "리셋"
L.Enable = "켜기"
L.Disable = "끄기"
L.NoSound = "사운드 끄기"
L.IconsInUse = "현재 모드에 공격대 아이콘을 사용합니다."
-- Tab: Boss Statistics
L.BossStatistics = "보스 공략 상황"
L.Statistic_Kills = "킬수:"
L.Statistic_Wipes = "전멸:"
L.Statistic_BestKill = "최고 기록:"
L.Statistic_Heroic = "영웅"
-- Tab: General Options
L.General = "일반 DBM 옵션"
L.EnableDBM = "DBM 사용"
L.EnableStatus = "귓속말 대상자에게 'status' 답변 보내기 사용"
L.AutoRespond = "자동 부활 사용 - 무덤 이동"
L.EnableMiniMapIcon = "Minimap 버튼 사용"
L.FixCLEUOnCombatStart = "전투 시작 할 때 전투 로그 수정"
L.Latency_Text = "최대 지연시간 설정 : %d"
L.Button_RangeFrame = "거리-프레임 켜기/끄기"
L.Button_TestBars = "테스트 바 시작"
L.PizzaTimer_Headline = '"Pizza Timer" 만들기'
L.PizzaTimer_Title = '이름 (예 : "Pizza!")'
L.PizzaTimer_Hours = ""
L.PizzaTimer_Mins = ""
L.PizzaTimer_Secs = ""
L.PizzaTimer_ButtonStart = "타이머 시작"
L.PizzaTimer_BroadCast = "공격대에 알리기"
-- Tab: Raidwarning
L.Tab_RaidWarning = "공격대 경보"
L.RaidWarning_Header = "공격대 경고 설정"
L.RaidWarnColors = "공격대 경보 색상"
L.RaidWarnColor_1 = "색상 1"
L.RaidWarnColor_2 = "색상 2"
L.RaidWarnColor_3 = "색상 3"
L.RaidWarnColor_4 = "색상 4"
L.InfoRaidWarning = [[레이드 경고 프레임의 위치와 컬러를 수정할 수 있습니다.
이것은 메세지를 위한 색상 수정 프레임이며 "Y 가 X에게 주문을 걸었습니다." 같은 메세지를 뜻합니다.]]
L.ColorResetted = "현재 필드의 색상 셋팅을 초기화 합니다."
L.ShowWarningsInChat = "위험 알림을 채팅 창에 보여줍니다."
L.ShowFakedRaidWarnings = "위험 알림을 공격대 경보 메세지처럼 보여줍니다."
L.WarningIconLeft = "아이콘을 왼쪽에 보여주기"
L.WarningIconRight = "아이콘을 오른쪽에 보여주기"
L.RaidWarnMessage = "<Deadly Boss Mods>를 사용해 주셔셔 감사합니다."
L.BarWhileMove = "레이드 경보 위치 수정"
L.RaidWarnSound = "레이드-경보 사운드"
L.SpecialWarnSound = "특별한 경보 사운드"
-- Tab: Barsetup
L.BarSetup = "바 스타일"
L.BarTexture = "바 텍스쳐"
L.BarStartColor = "시작 색상"
L.BarEndColor = "마지막 색상"
L.ExpandUpwards = "바를 위로 쌓기"
L.Bar_Font = "바에 사용할 폰트"
L.Bar_FontSize = "폰트 크기"
L.Slider_BarOffSetX = "자세한 가로 위치: %d"
L.Slider_BarOffSetY = "자세한 세로 위치: %d"
L.Slider_BarWidth = "바 길이: %d"
L.Slider_BarScale = "바 스케일(크기): %0.2f"
L.AreaTitle_BarSetup = "일반 바 옵션"
L.AreaTitle_BarSetupSmall = "작은 바 옵션"
L.AreaTitle_BarSetupHuge = "커다란 바 옵션"
L.BarIconLeft = "왼쪽 아이콘"
L.BarIconRight = "오른쪽 아이콘"
L.EnableHugeBar = "커다란 바 사용(바 2)"
L.FillUpBars = "바를 채워나가기"
L.ClickThrough = "마우스 이벤트 사용 안함 (바를 클릭하는 행위 등)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "특수 경고"
L.Area_SpecWarn = "특수 경고 설정"
L.SpecWarn_Enabled = "각 보스별 특수 경고 보기"
L.SpecWarn_Font = "특수 경고를 위한 폰트 사용"
L.SpecWarn_DemoButton = "예제 보기"
L.SpecWarn_MoveMe = "위치 설정"
L.SpecWarn_FontSize = "폰트 크기"
L.SpecWarn_FontColor = "폰트 색상"
L.SpecWarn_FontType = "폰트 선택"
L.SpecWarn_ResetMe = "초기화"
-- Tab: HealthFrame
L.Panel_HPFrame = "보스 체력 프레임"
L.Area_HPFrame = "체력 프레임 설정"
L.HP_Enabled = "해당 모드에서 끈 상태라도 항상 체력 프레임 보기(강제)"
L.HP_GrowUpwards = "보스 체력 프레임을 위로 쌓기"
L.HP_ShowDemo = "체력 프레임 보기"
L.BarWidth = "바 길이: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "스팸 필터"
L.Area_SpamFilter = "일반 스팸 필터 옵션"
L.HideBossEmoteFrame = "레이드 보스가 사용하는 감정표현 숨기기"
L.SpamBlockRaidWarning = "다른 보스 모드가 알리는 경보 감추기"
L.SpamBlockBossWhispers = "전투 중 사용되는 <DBM> 경보 귓속말 감추기"
L.BlockVersionUpdatePopup = "업데이트 알림 창 끄기"
L.ShowBigBrotherOnCombatStart = "전투가 시작되면 BigBrother 버프 체크 켜기"
L.BigBrotherAnnounceToRaid = "Big Brother 결과를 공격대에 알리기"
L.Area_SpamFilter_Outgoing = "공통 필터 옵션"
L.SpamBlockNoShowAnnounce = "알림 또는 경고 소리 실행하지 않기"
L.SpamBlockNoSendAnnounce = "공격대 채팅 알림을 보내지 않기"
L.SpamBlockNoSendWhisper = "다른 플레이어에게 귓속말을 보내지 않기"
L.SpamBlockNoSetIcon = "대상 공격대 아이콘 설정하지 않기"
+142
View File
@@ -0,0 +1,142 @@
if GetLocale() ~= "ruRU" then return end
if not DBM_GUI_Translations then DBM_GUI_Translations = {} end
local L = DBM_GUI_Translations
L.MainFrame = "Deadly Boss Mods"
L.TranslationBy = "Игорь Бутвин & Vampik & Swix"
L.TabCategory_Options = "Общие параметры"
L.TabCategory_WOTLK = "Wrath of the Lich King"
L.TabCategory_BC = "The Burning Crusade"
L.TabCategory_VANILLA = "Классическая игра"
L.TabCategory_OTHER = "Другие боссы"
L.BossModLoaded = "%s - статистика"
L.BossModLoad_now = [[База данных для этих боссов не загружена.
Она будет загружена сразу после входа в подземелье.
Можно также нажать кнопку, чтобы загрузить вручную.]]
L.PosX = 'Позиция X'
L.PosY = 'Позиция Y'
L.MoveMe = 'Передвинь меня'
L.Button_OK = 'OK'
L.Button_Cancel = 'Отмена'
L.Button_LoadMod = 'Загрузить надстройку'
L.Mod_Enabled = "Включить DBM"
L.Mod_EnableAnnounce = "Объявлять рейду"
L.Reset = "Сброс"
L.Enable = "вкл."
L.Disable = "откл."
L.NoSound = "Без звука"
L.IconsInUse = "Используемые метки"
-- Tab: Boss Statistics
L.BossStatistics = "Статистика для босса"
L.Statistic_Kills = "Убийства:"
L.Statistic_Wipes = "Поражения:"
L.Statistic_BestKill = "Лучший бой:"
L.Statistic_Heroic = "Героическая сложность"
-- Tab: General Options
L.General = "Общие параметры DBM"
L.EnableDBM = "Включить DBM"
L.EnableStatus = "Отвечать на запрос статуса боя шепотом"
L.AutoRespond = "Включить авто-ответ в бою"
L.EnableMiniMapIcon = "Отображать кнопку на мини-карте"
L.FixCLEUOnCombatStart = "Очищать кэш журнала боя в начале битвы"
L.Latency_Text = "Макс. задержка для синхр-ции: %d"
L.Button_RangeFrame = "Окно проверки дистанции"
L.Button_TestBars = "Запустить проверку"
L.PizzaTimer_Headline = 'Создать "Pizza Timer"'
L.PizzaTimer_Title = 'Название (например, "Pizza!")'
L.PizzaTimer_Hours = "час."
L.PizzaTimer_Mins = "мин."
L.PizzaTimer_Secs = "сек."
L.PizzaTimer_ButtonStart = "Начать отсчет"
L.PizzaTimer_BroadCast = "Транслировать рейду"
-- Tab: Raidwarning
L.Tab_RaidWarning = "Предупреждения для рейда"
L.RaidWarning_Header = "Параметры рейд-предупреждений"
L.RaidWarnColors = "Цвета предупреждений для рейда"
L.RaidWarnColor_1 = "Цвет 1"
L.RaidWarnColor_2 = "Цвет 2"
L.RaidWarnColor_3 = "Цвет 3"
L.RaidWarnColor_4 = "Цвет 4"
L.InfoRaidWarning = [[Можно указать положение и цвет отображаемой информации.
Используется для сообщений вроде "Игрок X под воздействием Y"]]
L.ColorResetted = "Цветовые параметры для этого поля восстановлены"
L.ShowWarningsInChat = "Показывать предупреждения в окне чата"
L.ShowFakedRaidWarnings = "Показывать предупреждения в качестве \"Объявление рейду\""
L.WarningIconLeft = "Отображать значок с левой стороны"
L.WarningIconRight = "Отображать значок с правой стороны"
L.RaidWarnMessage = "Спасибо за использование Deadly Boss Mods"
L.BarWhileMove = "Действие рейд-предупреждения"
L.RaidWarnSound = "Звук рейд-предупреждения"
L.SpecialWarnSound = "Звук спец-предупреждения"
-- Tab: Barsetup
L.BarSetup = "Стиль индикатора"
L.BarTexture = "Текстура индикатора"
L.BarStartColor = "Цвет в начале"
L.BarEndColor = "Цвет в конце"
L.ExpandUpwards = "Выровнять по верху"
L.Bar_Font = "Шрифт для индикатора"
L.Bar_FontSize = "Размер шрифта"
L.Slider_BarOffSetX = "Сдвиг X: %d"
L.Slider_BarOffSetY = "Сдвиг Y: %d"
L.Slider_BarWidth = "Ширина: %d"
L.Slider_BarScale = "Масштаб: %0.2f"
L.AreaTitle_BarSetup = "Параметры основного индикатора"
L.AreaTitle_BarSetupSmall = "Параметры уменьшенного индикатора"
L.AreaTitle_BarSetupHuge = "Параметры увеличенного индикатора"
L.BarIconLeft = "Значок слева"
L.BarIconRight = "Значок справа"
L.EnableHugeBar = "Включить увеличенный индикатор (Полоса 2)"
L.FillUpBars = "Наполняющая заливка полос"
L.ClickThrough = "Отключить события мыши (позволяет вам щелкать мышью сквозь полосы индикаторов)"
-- Tab: Spec Warn Frame
L.Panel_SpecWarnFrame = "Специальные предупреждения"
L.Area_SpecWarn = "Настройка специальных предупреждений"
L.SpecWarn_Enabled = "Отображать специальные предупреждения\nдля способностей босса"
L.SpecWarn_Font = "Выбор шрифта для специальных предупреждений"
L.SpecWarn_DemoButton = "Показать пример"
L.SpecWarn_MoveMe = "Расположение"
L.SpecWarn_FontSize = "Размер шрифта"
L.SpecWarn_FontColor = "Цвет шрифта"
L.SpecWarn_FontType = "Выбор шрифта"
L.SpecWarn_ResetMe = "Восстановить умолчания"
-- Tab: HealthFrame
L.Panel_HPFrame = "Здоровье босса"
L.Area_HPFrame = "Настройка здоровья босса"
L.HP_Enabled = "Всегда отображать здоровье босса\n(имеет приоритет над аналогичныи параметром у каждого босса)"
L.HP_GrowUpwards = "Выровнять индикатор здоровья по верху"
L.HP_ShowDemo = "Индикатор здоровья"
L.BarWidth = "Ширина индикатора: %d"
-- Tab: Spam Filter
L.Panel_SpamFilter = "Общие и спам-фильтры"
L.Area_SpamFilter = "Параметры спам-фильтра"
L.HideBossEmoteFrame = "Скрывать эмоции рейдового босса"
L.SpamBlockRaidWarning = "Фильтрация предупреждений от других DBM"
L.SpamBlockBossWhispers = "Фильтрация <DBM> предупреждений шепотом в бою"
L.BlockVersionUpdatePopup = "Отключить всплывающее сообщение об устаревшей версии"
L.ShowBigBrotherOnCombatStart = "Выполнять проверку положительных эффектов Big Brother в начале боя"
L.BigBrotherAnnounceToRaid = "Объявлять результаты проверки Big Brother в рейд"
L.Area_SpamFilter_Outgoing = "Параметры общего фильтра"
L.SpamBlockNoShowAnnounce = "Не объявлять или предупреждать звуком игрока"
L.SpamBlockNoSendAnnounce = "Не объявлять в чат рейда"
L.SpamBlockNoSendWhisper = "Не отправлять предупреждения шепотом другим игрокам"
L.SpamBlockNoSetIcon = "Не устанавливать метки на цели"

Some files were not shown because too many files have changed in this diff Show More