init
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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 = "Показывать таймер до слабости"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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 = "Показывать таймер до появления"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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..."
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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 = "И маги тоже? Осторожнее надо быть, когда играешь с магией…"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 = "离线"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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 = "離線"
|
||||
@@ -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
|
||||
----------------------------------------------------------------------------------------------------
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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 = "特殊警报"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
@@ -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",
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
|
||||
@@ -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 l’alerte spéciale pour $spell:%d",
|
||||
dispel = "Afficher l’alerte spéciale à dispel/spellsteal \n $spell:%d",
|
||||
interupt = "Afficher l’alerte spéciale interrompre $spell:%d",
|
||||
you = "Afficher l’alerte spéciale lorsque vous êtes affecté par $spell:%d",
|
||||
target = "Afficher l’alerte spéciale quand quelqu'un est touché par $spell:%d",
|
||||
close = "Afficher l’alerte spéciale quand quelqu'un est proche de vous \n affected by $spell:%d",
|
||||
move = "Afficher l’alerte spéciale lorsque vous êtes affecté par $spell:%d",
|
||||
run = "Afficher l’alerte spéciale pour $spell:%d",
|
||||
cast = "Afficher l’alerte spéciale pour $spell:%d cast",
|
||||
stack = "Afficher l’alerte 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",
|
||||
}
|
||||
@@ -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
|
||||
@@ -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: разрешает перемещение стрелки",
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
@@ -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检测增益情况"
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 = "대상 공격대 아이콘 설정하지 않기"
|
||||
@@ -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
Reference in New Issue
Block a user