This commit is contained in:
NoM0Re
2025-07-22 16:49:18 +02:00
committed by GitHub
parent d2b59a3f88
commit d6ae3e020b
47 changed files with 1056 additions and 192 deletions
+2 -1
View File
@@ -155,6 +155,7 @@ globals = {
"ChatFontNormal",
"GameFontNormal",
"GameFontNormalHuge",
"GameFontNormalSmall",
"GameFontNormalSmall2",
"GameFontHighlight",
"GameFontHighlightLarge",
@@ -19557,7 +19558,7 @@ globals = {
"BNGetNumFriendToons", "BNGetFriendToonInfo", "KuiNameplates", "TidyPlatesThreat",
"UnitIsPartyLeader", "EasyMenu", "SELECTED_CHAT_FRAME", "handler", "InterfaceOptions_AddCategory",
"PanelTemplates_SetDisabledTabState", "PanelTemplates_SelectTab", "PanelTemplates_DeselectTab",
"PanelTemplates_TabResize", "GameFontNormalSmall", "ColorPickerFrame", "OpacitySliderFrame",
"PanelTemplates_TabResize", "ColorPickerFrame", "OpacitySliderFrame",
"AceGUIEditBoxInsertLink", "AceGUIMultiLineEditBoxInsertLink",
"ObjectPoolMixin", "FramePoolMixin", "FramePool_Hide", "FramePool_HideAndClearAnchors",
"TexturePoolMixin", "TexturePool_Hide", "TexturePool_HideAndClearAnchors", "CreateTexturePool",
+31 -29
View File
@@ -2811,55 +2811,55 @@ function BuffTrigger.GetAdditionalProperties(data, triggernum)
local trigger = data.triggers[triggernum].trigger
local props = {}
props["spellId"] = L["Spell ID"]
props["debuffClass"] = L["Debuff Class"]
props["debuffClassIcon"] = L["Debuff Class Icon"]
props["unitCaster"] = L["Caster Unit"]
props["casterName"] = L["Caster Name"]
props["spellId"] = { display = L["Spell ID"] }
props["debuffClass"] = { display = L["Debuff Class"] }
props["debuffClassIcon"] = { display = L["Debuff Class Icon"] }
props["unitCaster"] = { display = L["Caster Unit"], formatter = "Unit", formatterArgs = { color = "class" } }
props["casterName"] = { display = L["Caster Name"], formatter = "string" }
if trigger.unit ~= "multi" then
props["unit"] = L["Unit"]
props["unit"] = { display = L["Unit"], formatter = "Unit", formatterArgs = { color = "class" } }
props["unitName"] = { display = L["Unit Name"] }
end
props["unitName"] = L["Unit Name"]
props["matchCount"] = L["Match Count"]
props["matchCountPerUnit"] = L["Match Count per Unit"]
props["unitCount"] = L["Units Affected"]
props["totalStacks"] = L["Total stacks over all matches"]
props["matchCount"] = { display = L["Match Count"] }
props["matchCountPerUnit"] = { display = L["Match Count per Unit"] }
props["unitCount"] = { display = L["Units Affected"] }
props["totalStacks"] = { display = L["Total stacks over all matches"] }
if trigger.unit ~= "multi" then
props["maxUnitCount"] = L["Total Units"]
props["maxUnitCount"] = { display = L["Total Units"] }
end
if not IsSingleMissing(trigger) and trigger.unit ~= "multi" and trigger.fetchTooltip then
props["tooltip"] = L["Tooltip"]
props["tooltip1"] = L["First Value of Tooltip Text"]
props["tooltip2"] = L["Second Value of Tooltip Text"]
props["tooltip3"] = L["Third Value of Tooltip Text"]
props["tooltip4"] = L["Fourth Value of Tooltip Text"]
props["tooltip"] = { display = L["Tooltip"], formatter = "string" }
props["tooltip1"] = { display = L["First Value of Tooltip Text"] }
props["tooltip2"] = { display = L["Second Value of Tooltip Text"] }
props["tooltip3"] = { display = L["Third Value of Tooltip Text"] }
props["tooltip4"] = { display = L["Fourth Value of Tooltip Text"] }
end
if trigger.unit ~= "multi" then
props["stackGainTime"] = L["Since Stack Gain"]
props["stackLostTime"] = L["Since Stack Lost"]
props["initialTime"] = L["Since Apply"]
props["refreshTime"] = L["Since Apply/Refresh"]
props["stackGainTime"] = { display = L["Since Stack Gain"], formatter = "timed" }
props["stackLostTime"] = { display = L["Since Stack Lost"], formatter = "timed" }
props["initialTime"] = { display = L["Since Apply"], formatter = "timed" }
props["refreshTime"] = { display = L["Since Apply/Refresh"], formatter = "timed" }
end
if trigger.unit ~= "multi" and trigger.fetchRole then
props["role"] = L["Assigned Role"]
props["roleIcon"] = L["Assigned Role Icon"]
props["role"] = { display = L["Assigned Role"] }
props["roleIcon"] = { display = L["Assigned Role Icon"] }
end
if trigger.unit ~= "multi" and trigger.fetchRaidMark then
props["raidMark"] = L["Raid Mark"]
props["raidMark"] = { display = L["Raid Mark"] }
end
if (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.useAffected then
props["affected"] = L["Names of affected Players"]
props["unaffected"] = L["Names of unaffected Players"]
props["affectedUnits"] = L["Units of affected Players in a table format"]
props["unaffectedUnits"] = L["Units of unaffected Players in a table format"]
props["affected"] = { display = L["Names of affected Players"], formatter = "string" }
props["unaffected"] = { display = L["Names of unaffected Players"], formatter = "string" }
props["affectedUnits"] = { display = L["Units of affected Players in a table format"]}
props["unaffectedUnits"] = { display = L["Units of unaffected Players in a table format"] }
end
return props
@@ -2968,7 +2968,9 @@ function BuffTrigger.GetTriggerConditions(data, triggernum)
result["unitCaster"] = {
display = L["Caster Unit"],
type = "string"
type = "unit",
formatter = "Unit",
formatterArgs = { color = "class" }
}
result["nameCaster"] = {
+4 -4
View File
@@ -17,7 +17,6 @@ Private.DiscordList = {
[=[Chab]=],
[=[Darian]=],
[=[Desik]=],
[=[DjinnFish]=],
[=[Dodgen]=],
[=[exality]=],
[=[Fatpala]=],
@@ -27,11 +26,11 @@ Private.DiscordList = {
[=[Fx]=],
[=[Guffin]=],
[=[Ifor]=],
[=[Ipwnturkeys]=],
[=[Ironi]=],
[=[Jiberish]=],
[=[Jods]=],
[=[kanegasi]=],
[=[Korvus]=],
[=[Koxy]=],
[=[Krazyito]=],
[=[Listefano]=],
@@ -46,14 +45,14 @@ Private.DiscordList = {
[=[Nona]=],
[=[NostraDumAzz]=],
[=[Oi]=],
[=[opti]=],
[=[Ora]=],
[=[phoenix7700]=],
[=[Photoshoot]=],
[=[pit]=],
[=[Putro]=],
[=[reggie]=],
[=[Reloe]=],
[=[Saaggs]=],
[=[Sammy]=],
[=[Spaten]=],
[=[Tel]=],
[=[Translit]=],
@@ -61,6 +60,7 @@ Private.DiscordList = {
[=[vozochris]=],
[=[Wizeowel]=],
[=[Xepheris]=],
[=[Zeus]=],
}
Private.DiscordListCJ = {
}
+143
View File
@@ -0,0 +1,143 @@
local AddonName = ...
local Private = select(2, ...)
-- BuildTypes "dev" | "pr" | "alpha" | "beta" | "release"
local Features = {
__feats = {},
hydrated = false,
}
Private.Features = Features
function Features:Exists(id)
return self.__feats[id] ~= nil
end
function Features:Enabled(id)
return self.hydrated and self:Exists(id) and self.__feats[id].enabled
end
function Features:Enable(id)
if not self:Exists(id) then return end
if not self.hydrated then
error("Cannot enable a feature before hydration", 2)
elseif not self.__feats[id].enabled then
self.__feats[id].enabled = true
if self.__feats[id].persist then
self.db[id] = true
end
self.__feats[id].sub:Notify("Enable")
end
end
function Features:Disable(id)
if not self:Exists(id) then return end
if not self.hydrated then
error("Cannot disable a feature before hydration", 2)
elseif self.__feats[id].enabled then
self.__feats[id].enabled = false
if self.__feats[id].persist then
self.db[id] = false
end
self.__feats[id].sub:Notify("Disable")
end
end
function Features:ListFeatures()
if not self.hydrated then return {} end
local list = {}
for id, feature in pairs(self.__feats) do
table.insert(list, {
id = id,
enabled = feature.enabled
})
end
table.sort(list, function(a, b)
return a.id < b.id
end)
return list
end
function Features:Hydrate()
self.db = Private.db.features
for id, feature in pairs(self.__feats) do
local enable = false
if self.db[id] ~= nil then
enable = self.db[id]
else
for _, buildType in ipairs(feature.autoEnable or {}) do
if WeakAuras.buildType == buildType then
enable = true
break
end
end
end
feature.enabled = enable
end
self.hydrated = true
for _, feature in pairs(self.__feats) do
-- cannot notify before hydrated flag is set, or we risk consumers getting wrong information
feature.sub:Notify(feature.enabled and "Enable" or "Disable")
end
end
function Features:Register(feature)
if self.hydrated then
error("Cannot register a feature after hydration", 2)
end
if not self.__feats[feature.id] then
self.__feats[feature.id] = feature
feature.sub = Private.CreateSubscribableObject()
end
end
---hide a code path behind a feature flag,
---optionally provide a disabled path
function Features:Wrap(id, enabledFunc, disabledFunc)
return function(...)
if self:Enabled(id) then
return enabledFunc(...)
else
if disabledFunc then
return disabledFunc(...)
end
end
end
end
function Features:AuraCanFunction(data)
local enabled = true
local reasons = {}
for _, feature in pairs(self.__feats) do
if feature.requiredByAura and not feature:requiredByAura(data) then
enabled = false
reasons[feature.id] = false
end
end
return enabled, reasons
end
function Features:Subscribe(id, enable, disable)
local tbl = {
Enable = enable,
Disable = disable
}
if self:Exists(id) then
self.__feats[id].sub:AddSubscriber("Enable", tbl)
self.__feats[id].sub:AddSubscriber("Disable", tbl)
end
end
Features:Register({
id = "debug",
autoEnable = {"dev"}
})
Private.DebugPrint = Features:Wrap("debug", function(...)
print("|cff00d3ffWeakAuras-Debug:|r ", ...)
end)
+16 -4
View File
@@ -4114,7 +4114,17 @@ function GenericTrigger.GetAdditionalProperties(data, triggernum)
enable = v.enable
end
if (enable and v.store and v.name and v.display and v.conditionType ~= "bool") then
props[v.name] = v.display
local formatter = v.formatter
local formatterArgs = v.formatterArgs or {}
if not formatter then
if v.type == "unit" then
formatter = "Unit"
formatterArgs = { color = "class" }
elseif v.type == "string" then
formatter = "string"
end
end
props[v.name] = { display = v.display, formatter = formatter, formatterArgs = formatterArgs }
end
end
if prototype.countEvents then
@@ -4126,7 +4136,7 @@ function GenericTrigger.GetAdditionalProperties(data, triggernum)
if (type(variables) == "table") then
for var, varData in pairs(variables) do
if (type(varData) == "table") then
props[var] = varData.display or var
props[var] = { display = varData.display or var, formatter = varData.formatter, formatterArgs = varData.formatterArgs }
end
end
end
@@ -4172,6 +4182,7 @@ local commonConditions = {
duration = {
display = L["Total Duration"],
type = "number",
formatter = "Number",
},
paused = {
display =L["Is Paused"],
@@ -4191,7 +4202,8 @@ local commonConditions = {
},
stacks = {
display = L["Stacks"],
type = "number"
type = "number",
formatter = "Number",
},
name = {
display = L["Name"],
@@ -4308,7 +4320,7 @@ function GenericTrigger.GetTriggerConditions(data, triggernum)
if (enable) then
result[v.name] = {
display = v.display,
type = v.conditionType
type = v.conditionType,
}
if (result[v.name].type == "select" or result[v.name].type == "unit") then
if (v.conditionValues) then
+2 -2
View File
@@ -9,8 +9,8 @@ WeakAuras.halfWidth = WeakAuras.normalWidth / 2
WeakAuras.doubleWidth = WeakAuras.normalWidth * 2
local versionStringFromToc = GetAddOnMetadata("WeakAuras", "Version")
local versionString = "5.19.12 Beta"
local buildTime = "20250618195500"
local versionString = "5.20.0 Beta"
local buildTime = "20250721200906"
local isAwesomeEnabled = C_NamePlate and C_NamePlate.GetNamePlateForUnit and true or false
local flavor
+6 -4
View File
@@ -1049,10 +1049,10 @@ L["Install the addons BugSack and BugGrabber for detailed error logs."] = "Insta
L["Instance"] = "Instanz"
L["Instance Difficulty"] = "Instanzschwierigkeit"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Id"] = "Instance Id"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Info"] = "Instance Info"
--[[Translation missing --]]
L["Instance Name"] = "Instance Name"
@@ -1619,9 +1619,9 @@ L["Progress Total"] = "Totaler Fortschritt"
L["Progress Value"] = "Fortschrittswert"
L["Pulse"] = "Pulsieren"
L["PvP Flagged"] = "PvP aktiv"
L["PvP Talent selected"] = "Gewähltes PvP-Talent"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
L["PvP Talent selected"] = "Gewähltes PvP-Talent"
--[[Translation missing --]]
L["Quality Id"] = "Quality Id"
--[[Translation missing --]]
@@ -1970,6 +1970,8 @@ L["Stage"] = "Stage"
--[[Translation missing --]]
L["Stage Counter"] = "Stage Counter"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Stagger (%)"] = "Stagger (%)"
--[[Translation missing --]]
L["Stagger against Target (%)"] = "Stagger against Target (%)"
@@ -2059,8 +2061,8 @@ L["Talent |cFFFF0000Not|r Known"] = "Talent |cFFFF0000Not|r Known"
L["Talent |cFFFF0000Not|r Selected"] = "Talent |cFFFF0000Not|r Selected"
--[[Translation missing --]]
L["Talent Known"] = "Talent Known"
L["Talent selected"] = "Gewähltes Talent"
L["Talent Selected"] = "Talent gewählt"
L["Talent selected"] = "Gewähltes Talent"
L["Talent Specialization"] = "Talentspezialisierung"
L["Tanking And Highest"] = "Höchster und Aggro"
L["Tanking But Not Highest"] = "Aggro aber nicht höchste"
+4 -3
View File
@@ -654,8 +654,8 @@ L["Hybrid"] = "Hybrid"
L["Icon"] = "Icon"
L["Icon Function"] = "Icon Function"
L["Icon Function (fallback state)"] = "Icon Function (fallback state)"
L["ID"] = "ID"
L["Id"] = "Id"
L["ID"] = "ID"
L["If you require additional assistance, please open a ticket on GitHub or visit our Discord at https://discord.gg/weakauras!"] = "If you require additional assistance, please open a ticket on GitHub or visit our Discord at https://discord.gg/weakauras!"
L["Ignore Dead"] = "Ignore Dead"
L["Ignore Disconnected"] = "Ignore Disconnected"
@@ -805,8 +805,8 @@ Intermissions are .5
E.g. 1;2;1;2;2.5;3]=] ] = [=[Matches stage number of encounter journal.
Intermissions are .5
E.g. 1;2;1;2;2.5;3]=]
L["Max Char"] = "Max Char"
L["Max Char "] = "Max Char "
L["Max Char"] = "Max Char"
L["Max Charges"] = "Max Charges"
L["Max Health"] = "Max Health"
L["Max Power"] = "Max Power"
@@ -1070,8 +1070,8 @@ L["Progress Total"] = "Progress Total"
L["Progress Value"] = "Progress Value"
L["Pulse"] = "Pulse"
L["PvP Flagged"] = "PvP Flagged"
L["PvP Talent Selected"] = "PvP Talent Selected"
L["PvP Talent selected"] = "PvP Talent selected"
L["PvP Talent Selected"] = "PvP Talent Selected"
L["Quality Id"] = "Quality Id"
L["Quantity"] = "Quantity"
L["Quantity earned this week"] = "Quantity earned this week"
@@ -1288,6 +1288,7 @@ L["Stacks Function"] = "Stacks Function"
L["Stacks Function (fallback state)"] = "Stacks Function (fallback state)"
L["Stage"] = "Stage"
L["Stage Counter"] = "Stage Counter"
L["Stagger"] = "Stagger"
L["Stagger (%)"] = "Stagger (%)"
L["Stagger against Target (%)"] = "Stagger against Target (%)"
L["Stagger Scale"] = "Stagger Scale"
+3 -2
View File
@@ -1016,8 +1016,8 @@ L["Progress Total"] = "Progreso total"
L["Progress Value"] = "Valor de progreso"
L["Pulse"] = "Pulso"
L["PvP Flagged"] = "Marcado JcJ"
L["PvP Talent Selected"] = "Talento de JcJ seleccionado"
L["PvP Talent selected"] = "Talento de JcJ seleccionado"
L["PvP Talent Selected"] = "Talento de JcJ seleccionado"
L["Quality Id"] = "ID de calidad"
L["Quantity"] = "Cantidad"
L["Quantity earned this week"] = "Cantidad ganada esta semana"
@@ -1233,6 +1233,7 @@ L["Stacks Function"] = "Función de acumulaciones"
L["Stacks Function (fallback state)"] = "Función de acumulaciones (estado reserva)"
L["Stage"] = "Etapa"
L["Stage Counter"] = "Contador de etapa"
L["Stagger"] = "Escalonar"
L["Stagger (%)"] = "Tambalear (%)"
L["Stagger against Target (%)"] = "Tambalearse contra el objetivo (%)"
L["Stagger Scale"] = "Escala escalonada"
@@ -1283,8 +1284,8 @@ L["Talent"] = "Talento"
L["Talent |cFFFF0000Not|r Known"] = "Talento |cFFFF0000desconocido|r"
L["Talent |cFFFF0000Not|r Selected"] = "Talento |cFFFF0000no|r seleccionado"
L["Talent Known"] = "Talento conocido"
L["Talent selected"] = "Talento seleccionado"
L["Talent Selected"] = "Talento seleccionado"
L["Talent selected"] = "Talento seleccionado"
L["Talent Specialization"] = "Especialización de Talentos"
L["Tanking And Highest"] = "Tanqueando y el más alto"
L["Tanking But Not Highest"] = "Tanqueando pero no el mas alto"
+5 -4
View File
@@ -675,8 +675,8 @@ L["Instakill"] = "Muerte Instantanea"
L["Install the addons BugSack and BugGrabber for detailed error logs."] = "Instala los addons BugSack y BugGrabber para obtener registros de errores detallados."
L["Instance"] = "Instancia"
L["Instance Difficulty"] = "Dificultad de la instancia"
L["Instance ID"] = "ID de estancia"
L["Instance Id"] = "ID de estancia"
L["Instance ID"] = "ID de estancia"
L["Instance Info"] = "Info de estancia"
L["Instance Name"] = "Nombre de estancia"
L["Instance Size Type"] = "Tipo de tamaño de estancia"
@@ -787,8 +787,8 @@ L["Matches (Pattern)"] = "Corresponde (Patrón)"
L[ [=[Matches stage number of encounter journal.
Intermissions are .5
E.g. 1;2;1;2;2.5;3]=] ] = "Coincide con el número de etapa del diario de encuentros. Los intermedios son .5 Por ej. 1;2;1;2;2.5;3"
L["Max Char"] = "Carácter máximo"
L["Max Char "] = "Caracteres máx."
L["Max Char"] = "Carácter máximo"
L["Max Charges"] = "Cargas máx."
L["Max Health"] = "Salud máx."
L["Max Power"] = "Poder máx."
@@ -1017,8 +1017,8 @@ L["Progress Total"] = "Progreso total"
L["Progress Value"] = "Valor de progreso"
L["Pulse"] = "Pulso"
L["PvP Flagged"] = "Marcado JcJ"
L["PvP Talent Selected"] = "Talento de JcJ seleccionado"
L["PvP Talent selected"] = "Talento de JcJ seleccionado"
L["PvP Talent Selected"] = "Talento de JcJ seleccionado"
L["Quality Id"] = "ID de calidad"
L["Quantity"] = "Cantidad"
L["Quantity earned this week"] = "Cantidad ganada esta semana"
@@ -1234,6 +1234,7 @@ L["Stacks Function"] = "Función de acumulaciones"
L["Stacks Function (fallback state)"] = "Función de acumulaciones (estado reserva)"
L["Stage"] = "Etapa"
L["Stage Counter"] = "Contador de etapa"
L["Stagger"] = "Escalonar"
L["Stagger (%)"] = "Tambalear (%)"
L["Stagger against Target (%)"] = "Tambalearse contra el objetivo (%)"
L["Stagger Scale"] = "Escala escalonada"
@@ -1284,8 +1285,8 @@ L["Talent"] = "Talento"
L["Talent |cFFFF0000Not|r Known"] = "Talento |cFFFF0000desconocido|r"
L["Talent |cFFFF0000Not|r Selected"] = "Talento |cFFFF0000no|r seleccionado"
L["Talent Known"] = "Talento conocido"
L["Talent selected"] = "Talento seleccionado"
L["Talent Selected"] = "Talento seleccionado"
L["Talent selected"] = "Talento seleccionado"
L["Talent Specialization"] = "Especialización de Talentos"
L["Tanking And Highest"] = "Tanqueando y el más alto"
L["Tanking But Not Highest"] = "Tanqueando pero no el mas alto"
+4 -2
View File
@@ -1424,9 +1424,9 @@ L["Progress Total"] = "Progrès Total"
L["Progress Value"] = "Valeur de progression"
L["Pulse"] = "Pulsation"
L["PvP Flagged"] = "JcJ activé"
L["PvP Talent selected"] = "Talent JcJ sélectionné"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
L["PvP Talent selected"] = "Talent JcJ sélectionné"
--[[Translation missing --]]
L["Quality Id"] = "Quality Id"
--[[Translation missing --]]
@@ -1741,6 +1741,8 @@ L["Stage"] = "Stage"
--[[Translation missing --]]
L["Stage Counter"] = "Stage Counter"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Stagger (%)"] = "Stagger (%)"
--[[Translation missing --]]
L["Stagger against Target (%)"] = "Stagger against Target (%)"
@@ -1823,8 +1825,8 @@ L["Talent |cFFFF0000Not|r Known"] = "Talent |cFFFF0000Not|r Known"
L["Talent |cFFFF0000Not|r Selected"] = "Talent |cFFFF0000Not|r Selected"
--[[Translation missing --]]
L["Talent Known"] = "Talent Known"
L["Talent selected"] = "Talent sélectionné"
L["Talent Selected"] = "Talent sélectionné"
L["Talent selected"] = "Talent sélectionné"
L["Talent Specialization"] = "Spécialisation"
L["Tanking And Highest"] = "Tank et le plus haut"
L["Tanking But Not Highest"] = "Tank mais pas le plus haut"
+6 -4
View File
@@ -1078,10 +1078,10 @@ L["Instance"] = "Instance"
--[[Translation missing --]]
L["Instance Difficulty"] = "Instance Difficulty"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Id"] = "Instance Id"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Info"] = "Instance Info"
--[[Translation missing --]]
L["Instance Name"] = "Instance Name"
@@ -1762,10 +1762,10 @@ L["Pulse"] = "Pulse"
--[[Translation missing --]]
L["PvP Flagged"] = "PvP Flagged"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
--[[Translation missing --]]
L["PvP Talent selected"] = "PvP Talent selected"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
--[[Translation missing --]]
L["Quality Id"] = "Quality Id"
--[[Translation missing --]]
L["Quantity"] = "Quantity"
@@ -2196,6 +2196,8 @@ L["Stage"] = "Stage"
--[[Translation missing --]]
L["Stage Counter"] = "Stage Counter"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Stagger (%)"] = "Stagger (%)"
--[[Translation missing --]]
L["Stagger against Target (%)"] = "Stagger against Target (%)"
+8 -7
View File
@@ -108,7 +108,7 @@ L["Alert Type"] = "경보 종류"
L["Alive"] = "생존"
L["All"] = "모두"
L["All children of this aura will also not be loaded, to minimize the chance of further corruption."] = "이 위크오라의 모든 자식 위크오라도 불러오지 않을 것입니다. 오염 가능성을 최소화하기 위함입니다."
L["All States table contains a non table at key: '%s'."] = "All States 테이블 테이블이 아닌 데이터가 있습니다: '%s'."
L["All States table contains a non table at key: '%s'."] = "All States 테이블 키 테이블에 속하지 않은 것이 있습니다: '%s'"
L["All Triggers"] = "활성 조건 전부 발동"
L["Alliance"] = "얼라이언스"
L["Allow partial matches"] = "부분 일치 허용"
@@ -300,7 +300,7 @@ L["Charging"] = "충전중"
L["Chat Frame"] = "대화창"
L["Chat Message"] = "대화 메시지"
L["Check if a single talent match a Rank"] = "단일 특성이 등급과 일치하는지 확인"
L["Check nameplate's target every 0.2s"] = "0.2초마다 이름표의 대상 확인"
L["Check nameplate's target every 0.2s"] = "0.2초마다 이름표의 대상 확인합니다"
L["Chromaggus"] = "크로마구스"
L["Circle"] = "동그라미"
L["Circular Texture"] = "테두리 텍스처"
@@ -675,7 +675,7 @@ L["In Group"] = "그룹 상태"
L["In Party"] = "파티"
L["In Pet Battle"] = "애완동물 대전 중"
L["In Raid"] = "공격대"
L["In Range"] = "유효 거리 범위"
L["In Range"] = "유효 거리 이내"
L["In Vehicle"] = "차량 탑승 중"
L["In War Mode"] = "전쟁 모드"
L["Include Bank"] = "은행 포함"
@@ -805,8 +805,8 @@ L["Matches (Pattern)"] = "일치 (패턴)"
L[ [=[Matches stage number of encounter journal.
Intermissions are .5
E.g. 1;2;1;2;2.5;3]=] ] = "던전 도감의 단계 번호를 기준으로 맞춥니다. 사잇단계는 .5가 됩니다. 예를 들면 1;2;1;2;2.5;3"
L["Max Char"] = "최대 글자 수"
L["Max Char "] = "최대 글자 수"
L["Max Char"] = "최대 글자 수"
L["Max Charges"] = "최대 충전량"
L["Max Health"] = "최대 생명력"
L["Max Power"] = "최대 자원"
@@ -1070,8 +1070,8 @@ L["Progress Total"] = "진행 현황"
L["Progress Value"] = "진행도 값"
L["Pulse"] = "맥박"
L["PvP Flagged"] = "플레이어 간 전투 활성화"
L["PvP Talent Selected"] = "선택한 PvP 특성"
L["PvP Talent selected"] = "선택한 PvP 특성"
L["PvP Talent Selected"] = "선택한 PvP 특성"
L["Quality Id"] = "품질 Id"
L["Quantity"] = "수량"
L["Quantity earned this week"] = "이번주 획득량"
@@ -1128,7 +1128,7 @@ L["Requested display does not exist"] = "요청한 디스플레이가 존재하
L["Requested display not authorized"] = "요청한 디스플레이가 올바르지 않습니다"
L["Requesting display information from %s ..."] = "%s|1이;가; 디스플레이 정보를 요청 중입니다 ..."
L["Require Valid Target"] = "유효한 대상 필요"
L["Requires syncing the specialization via LibSpecialization."] = "LibSpecialization을 통한 전문화 동기화를 요구합니다."
L["Requires syncing the specialization via LibSpecialization."] = "전문화 동기화를 위해 LibSpecialization이 필요합니다."
L["Resilience (%)"] = "탄력 (%)"
L["Resilience Rating"] = "탄력도 수치"
L["Resist"] = "저항"
@@ -1288,6 +1288,7 @@ L["Stacks Function"] = "중첩 함수"
L["Stacks Function (fallback state)"] = "Stacks 함수 (고장 대체 상태)"
L["Stage"] = "단계"
L["Stage Counter"] = "단계 카운터"
L["Stagger"] = "시간차"
L["Stagger (%)"] = "시간차 (%)"
L["Stagger against Target (%)"] = "대상에 대한 시간차 (%)"
L["Stagger Scale"] = "단계적 비율 조정"
@@ -1338,8 +1339,8 @@ L["Talent"] = "특성"
L["Talent |cFFFF0000Not|r Known"] = "습득하지 |cFFFF0000않은|r 특성"
L["Talent |cFFFF0000Not|r Selected"] = "선택하지 |cFFFF0000않은|r 특성"
L["Talent Known"] = "습득한 특성"
L["Talent selected"] = "선택한 특성"
L["Talent Selected"] = "선택한 특성"
L["Talent selected"] = "선택한 특성"
L["Talent Specialization"] = "특성 전문화"
L["Tanking And Highest"] = "탱커이면서 제일 높을 때"
L["Tanking But Not Highest"] = "탱커지만 제일 높지 않을 때"
+8 -6
View File
@@ -1142,10 +1142,10 @@ L["Install the addons BugSack and BugGrabber for detailed error logs."] = "Insta
L["Instance"] = "Instance"
L["Instance Difficulty"] = "Dificuldade da Instância"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Id"] = "Instance Id"
--[[Translation missing --]]
L["Instance ID"] = "Instance ID"
--[[Translation missing --]]
L["Instance Info"] = "Instance Info"
--[[Translation missing --]]
L["Instance Name"] = "Instance Name"
@@ -1773,10 +1773,10 @@ L["Progress Value"] = "Progress Value"
L["Pulse"] = "Pulsar"
L["PvP Flagged"] = "Marcado para JxJ"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
--[[Translation missing --]]
L["PvP Talent selected"] = "PvP Talent selected"
--[[Translation missing --]]
L["PvP Talent Selected"] = "PvP Talent Selected"
--[[Translation missing --]]
L["Quality Id"] = "Quality Id"
--[[Translation missing --]]
L["Quantity"] = "Quantity"
@@ -2158,6 +2158,8 @@ L["Stage"] = "Stage"
--[[Translation missing --]]
L["Stage Counter"] = "Stage Counter"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Stagger (%)"] = "Stagger (%)"
--[[Translation missing --]]
L["Stagger against Target (%)"] = "Stagger against Target (%)"
@@ -2251,9 +2253,9 @@ L["Talent |cFFFF0000Not|r Selected"] = "Talent |cFFFF0000Not|r Selected"
--[[Translation missing --]]
L["Talent Known"] = "Talent Known"
--[[Translation missing --]]
L["Talent selected"] = "Talent selected"
--[[Translation missing --]]
L["Talent Selected"] = "Talent Selected"
--[[Translation missing --]]
L["Talent selected"] = "Talent selected"
L["Talent Specialization"] = "Especialização de talentos"
--[[Translation missing --]]
L["Tanking And Highest"] = "Tanking And Highest"
+5 -3
View File
@@ -709,8 +709,8 @@ L["Instakill"] = "Моментальное убийство"
L["Install the addons BugSack and BugGrabber for detailed error logs."] = "Установите аддоны BugSack и BugGrabber для получения подробных записей об ошибках."
L["Instance"] = "Подземелье"
L["Instance Difficulty"] = "Сложность подземелья"
L["Instance ID"] = "Идентификатор подземелья"
L["Instance Id"] = "ID подземелья"
L["Instance ID"] = "Идентификатор подземелья"
L["Instance Info"] = "Информация о подземелье"
L["Instance Name"] = "Название подземелья"
L["Instance Size Type"] = "Тип размера подземелья"
@@ -1060,8 +1060,8 @@ L["Progress Total"] = "Общее значение"
L["Progress Value"] = "Текущее значение"
L["Pulse"] = "Пульсация"
L["PvP Flagged"] = "В режиме PvP"
L["PvP Talent Selected"] = "PvP талант выбран"
L["PvP Talent selected"] = "PvP талант выбран"
L["PvP Talent Selected"] = "PvP талант выбран"
L["Quality Id"] = "ID качества"
L["Quantity"] = "Количество"
L["Quantity earned this week"] = "Заработано на этой неделе"
@@ -1284,6 +1284,8 @@ L["Stacks Function"] = "Функция стаков"
L["Stacks Function (fallback state)"] = "Функция стаков (резервное состояние)"
L["Stage"] = "Фаза"
L["Stage Counter"] = "Счетчик фаз"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
L["Stagger (%)"] = "Пошатывание (%)"
L["Stagger against Target (%)"] = "Пошатывание против текущей цели (%)"
L["Stagger Scale"] = [=[Масштаб пошатывания
@@ -1338,8 +1340,8 @@ L["Talent"] = "Талант"
L["Talent |cFFFF0000Not|r Known"] = "Талант |cFFFF0000НЕ|rизвестен"
L["Talent |cFFFF0000Not|r Selected"] = "Талант |cFFFF0000НЕ|r выбран"
L["Talent Known"] = "Талант известен"
L["Talent selected"] = "Выбран талант"
L["Talent Selected"] = "Талант выбран"
L["Talent selected"] = "Выбран талант"
L["Talent Specialization"] = "Специализация"
L["Tanking And Highest"] = "Вы основная цель; макс. угроза"
L["Tanking But Not Highest"] = "Вы основная цель; не макс. угроза"
+7 -5
View File
@@ -653,8 +653,8 @@ L["Hybrid"] = "混合"
L["Icon"] = "图标"
L["Icon Function"] = "图标函数"
L["Icon Function (fallback state)"] = "图标函数(后备状态)"
L["ID"] = "ID"
L["Id"] = "ID"
L["ID"] = "ID"
L["If you require additional assistance, please open a ticket on GitHub or visit our Discord at https://discord.gg/weakauras!"] = "如果你需要进一步的协助,请在 GitHub 上提交工单或是访问我们的 Discordhttps://discord.gg/weakauras"
L["Ignore Dead"] = "忽略已死亡"
L["Ignore Disconnected"] = "忽略已离线"
@@ -690,8 +690,8 @@ L["Instakill"] = "秒杀"
L["Install the addons BugSack and BugGrabber for detailed error logs."] = "安装BugSack和BugGrabber插件以获得详细错误记录。"
L["Instance"] = "副本"
L["Instance Difficulty"] = "副本难度"
L["Instance ID"] = "副本ID"
L["Instance Id"] = "副本ID"
L["Instance ID"] = "副本ID"
L["Instance Info"] = "副本信息"
L["Instance Name"] = "副本名称"
L["Instance Size Type"] = "副本大小类型"
@@ -802,8 +802,8 @@ L["Matches (Pattern)"] = "匹配(表达式)"
L[ [=[Matches stage number of encounter journal.
Intermissions are .5
E.g. 1;2;1;2;2.5;3]=] ] = "符合冒险指南的阶段。转阶段为.5。例如1;2;1;2;2.5;3"
L["Max Char"] = "最大字符数"
L["Max Char "] = "最大字符数"
L["Max Char"] = "最大字符数"
L["Max Charges"] = "最大充能次数"
L["Max Health"] = "最大生命值"
L["Max Power"] = "最大能量值"
@@ -1071,8 +1071,8 @@ L["Progress Total"] = "进度总计"
L["Progress Value"] = "进度值"
L["Pulse"] = "脉动"
L["PvP Flagged"] = "PvP 状态"
L["PvP Talent Selected"] = "已选择PvP天赋"
L["PvP Talent selected"] = "PvP 天赋选择"
L["PvP Talent Selected"] = "已选择PvP天赋"
L["Quality Id"] = "品质ID"
L["Quantity"] = "数量"
L["Quantity earned this week"] = "本周获取数量"
@@ -1290,6 +1290,8 @@ L["Stacks Function"] = "层数函数"
L["Stacks Function (fallback state)"] = "层数函数(后备状态)"
L["Stage"] = "阶段"
L["Stage Counter"] = "阶段计数"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
L["Stagger (%)"] = "醉拳 (%)"
L["Stagger against Target (%)"] = "针对目标的醉拳 (%)"
L["Stagger Scale"] = "醉拳缩放比例"
@@ -1341,8 +1343,8 @@ L["Talent"] = "天赋"
L["Talent |cFFFF0000Not|r Known"] = "天赋|cFFFF0000不|r可用"
L["Talent |cFFFF0000Not|r Selected"] = "天赋|cFFFF0000未|r选择"
L["Talent Known"] = "天赋可用"
L["Talent selected"] = "天赋选择"
L["Talent Selected"] = "天赋选择"
L["Talent selected"] = "天赋选择"
L["Talent Specialization"] = "专精"
L["Tanking And Highest"] = "做T并且最高"
L["Tanking But Not Highest"] = "做T但不是最高"
+4 -4
View File
@@ -582,8 +582,7 @@ L["Global Cooldown"] = "共用冷卻 (GCD)"
L["Glow"] = "發光"
L["Glow External Element"] = "發光外部元素"
L["Gluth"] = "古魯斯"
--[[Translation missing --]]
L["Glyph"] = "Glyph"
L["Glyph"] = "雕紋"
L["Gold"] = ""
L["Golemagg the Incinerator"] = "『焚化者』古雷曼格"
L["Gothik the Harvester"] = "『收割者』高希"
@@ -1046,8 +1045,8 @@ L["Progress Total"] = "總進度"
L["Progress Value"] = "進度值"
L["Pulse"] = "跳動"
L["PvP Flagged"] = "PvP 標幟"
L["PvP Talent Selected"] = "已選擇的 PvP 天賦"
L["PvP Talent selected"] = "選擇的 PvP 天賦"
L["PvP Talent Selected"] = "已選擇的 PvP 天賦"
L["Quality Id"] = "品質id"
L["Quantity"] = "數量"
L["Quantity earned this week"] = "本週獲取數量"
@@ -1265,6 +1264,7 @@ L["Stacks Function"] = "層數功能"
L["Stacks Function (fallback state)"] = "層數函數 (備用狀態)"
L["Stage"] = "階段"
L["Stage Counter"] = "階段統計"
L["Stagger"] = "醉酒"
L["Stagger (%)"] = "醉仙緩勁 (%)"
L["Stagger against Target (%)"] = "醉仙緩勁目標 (%)"
L["Stagger Scale"] = "醉仙緩勁縮放大小"
@@ -1319,8 +1319,8 @@ L["Talent"] = "天賦"
L["Talent |cFFFF0000Not|r Known"] = "|cFFFF0000未知的|r天賦"
L["Talent |cFFFF0000Not|r Selected"] = "|cFFFF0000沒有選擇|r天賦"
L["Talent Known"] = "已知的天賦"
L["Talent selected"] = "選擇的天賦"
L["Talent Selected"] = "選擇的天賦"
L["Talent selected"] = "選擇的天賦"
L["Talent Specialization"] = "天賦專精"
L["Tanking And Highest"] = "坦怪中並且是最高"
L["Tanking But Not Highest"] = "坦怪中但不是最高"
+39 -6
View File
@@ -2063,6 +2063,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "standing",
@@ -2194,6 +2195,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
type = "header",
@@ -2230,6 +2232,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
},
overlayFuncs = {
@@ -2316,7 +2319,8 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
progressTotal = "maxhealth"
progressTotal = "maxhealth",
formatter = "BigNumber",
},
{
name = "value",
@@ -2350,6 +2354,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "deficit",
@@ -2362,7 +2367,8 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
progressTotal = "total"
progressTotal = "total",
formatter = "BigNumber",
},
{
name = "maxhealth",
@@ -2375,6 +2381,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "BigNumber",
},
{
type = "header",
@@ -2818,6 +2825,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "deficit",
@@ -3085,7 +3093,9 @@ Private.event_prototypes = {
hidden = "true",
test = "true",
store = true,
display = L["Source GUID"]
display = L["Source GUID"],
formatter = "guid",
formatterArgs = { color = "class" }
},
{
name = "sourceUnit",
@@ -3192,7 +3202,9 @@ Private.event_prototypes = {
hidden = "true",
test = "true",
store = true,
display = L["Destination GUID"]
display = L["Destination GUID"],
formatter = "guid",
formatterArgs = { color = "class" }
},
{
name = "destUnit",
@@ -6045,6 +6057,8 @@ Private.event_prototypes = {
store = true,
hidden = true,
test = "true",
formatter = "guid",
formatterArgs = { color = "class" }
},
{
name = "cloneId",
@@ -6670,6 +6684,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "rawthreatpct",
@@ -6683,6 +6698,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "threatvalue",
@@ -7428,6 +7444,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "hitrating",
@@ -7452,6 +7469,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "hasterating",
@@ -7476,6 +7494,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "expertiserating",
@@ -7524,6 +7543,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "spellpenpercent",
@@ -7536,6 +7556,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "resiliencerating",
@@ -7560,6 +7581,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "attackpower",
@@ -7685,6 +7707,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
type = "header",
@@ -7714,6 +7737,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "parryrating",
@@ -7738,6 +7762,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "blockpercent",
@@ -7750,6 +7775,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
{
name = "blockvalue",
@@ -7786,6 +7812,7 @@ Private.event_prototypes = {
operator = "and",
limit = 2
},
formatter = "Number",
},
},
automaticrequired = true,
@@ -8225,7 +8252,9 @@ Private.event_prototypes = {
type = "number",
init = "min",
store = true,
test = "true"
test = "true",
conditionType = "number",
operator_types = "without_equal",
},
{
hidden = true,
@@ -8234,7 +8263,9 @@ Private.event_prototypes = {
type = "number",
init = "max",
store = true,
test = "true"
test = "true",
conditionType = "number",
operator_types = "without_equal",
},
{
name = "range",
@@ -8246,6 +8277,7 @@ Private.event_prototypes = {
conditionTest = function(state, needle, needle2)
return state and state.show and WeakAuras.CheckRange(state.unit, needle, needle2);
end,
noProgressSource = true
},
{
hidden = true,
@@ -8291,6 +8323,7 @@ Private.event_prototypes = {
display = Private.coin_icons.gold .. L["Gold"],
store = true,
conditionType = "number",
formatter = "BigNumber"
},
{
name = "silver",
+10 -2
View File
@@ -241,12 +241,20 @@ local function modify(parent, region, data)
local Update
if customTextFunc and self.displayText and Private.ContainsCustomPlaceHolder(self.displayText) then
Update = function()
Update = function(self)
self.values.custom = Private.RunCustomTextFunc(self, customTextFunc)
UpdateText()
self:UpdateProgress()
end
else
Update = UpdateText or function() end
if UpdateText then
Update = function()
UpdateText()
self:UpdateProgress()
end
else
Update = function() self:UpdateProgress() end
end
end
local FrameTick
+1
View File
@@ -246,6 +246,7 @@ local function modify(parent, region, parentData, data, first)
end
return data[fullKey]
end
region.subTextFormatters, region.everyFrameFormatters = Private.CreateFormatters(texts, getter, false, parentData)
function region:ConfigureTextUpdate()
+347
View File
@@ -0,0 +1,347 @@
local AddonName = ...
local Private = select(2, ...)
Private.Features:Register({
id = "undo",
autoEnable = {"dev", "pr", "alpha"},
enabled = true,
persist = true,
})
local TimeMachine = {
next = {
forward = {},
backward = {}
},
transaction = false,
changes = {},
actions = {},
effects = {},
index = 0,
sub = Private.CreateSubscribableObject(),
}
Private.TimeMachine = TimeMachine
local function resolveKey(data, path)
if type(path) ~= 'table' then
return data, path
end
local tbl = data
local i = 1
while i < #path do
if tbl[path[i]] == nil then
tbl[path[i]] = {}
elseif type(tbl[path[i]]) ~= 'table' then
error("Path is not valid: " .. table.concat(path, '.') .. " at " .. path[i])
end
tbl = tbl[path[i]]
i = i + 1
end
return tbl, path[#path]
end
local function copy(tbl, key)
if type(tbl[key]) == "table" then
return CopyTable(tbl[key])
else
return tbl[key]
end
end
function TimeMachine:RegisterEffect(tag, func, idempotent)
if self.effects[tag] then
error("Effect already registered: " .. tag)
end
self.effects[tag] = {
idempotent = idempotent,
func = func
}
end
TimeMachine:RegisterEffect("add", function(uid, data)
Private.Add(data)
end, true)
TimeMachine:RegisterEffect("options_cu", function(uid, data)
if WeakAuras.IsOptionsOpen() then
WeakAuras.ClearAndUpdateOptions(data.id, true)
end
end, true)
function TimeMachine:RegisterAction(actionType, actor, inverter, autoEffects)
if self.actions[actionType] then
error("Action already registered: " .. actionType)
end
self.actions[actionType] = {
actor = actor,
inverter = inverter,
autoEffects = autoEffects,
}
end
TimeMachine:RegisterAction("none",
function(_data, _path)
end,
function(_data, path)
return 'none', path, nil
end
)
TimeMachine:RegisterAction("set",
function(data, path, value)
local tbl, key = resolveKey(data, path)
tbl[key] = value
end,
function(data, path)
local tbl, key = resolveKey(data, path)
return 'set', path, copy(tbl, key)
end,
{"add", "options_cu"}
)
TimeMachine:RegisterAction("setmany",
function(data, path, values)
local tbl, key = resolveKey(data, path)
for k, v in pairs(values) do
tbl[key][k] = v
end
end,
function(data, path, values)
local tbl, key = resolveKey(data, path)
local inverse = {}
for k, v in pairs(values) do
inverse[k] = copy(tbl[key], k)
end
return 'setmany', path, inverse
end,
{"add", "options_cu"}
)
TimeMachine:RegisterAction("insert",
function(data, path, payload)
local tbl, key = resolveKey(data, path)
if payload.index == nil then
table.insert(tbl[key], payload.value)
else
table.insert(tbl[key], payload.index, payload.value)
end
end,
function(data, path, payload)
return 'remove', path, payload.index
end,
{"add", "options_cu"}
)
TimeMachine:RegisterAction("remove",
function(data, path, payload)
local tbl, key = resolveKey(data, path)
if payload == nil then
table.remove(tbl[key])
else
table.remove(tbl[key], payload)
end
end,
function(data, path, payload)
local tbl, key = resolveKey(data, path)
return 'insert', path, {index = payload, value = copy(tbl[key], payload or #tbl[key])}
end,
{"add", "options_cu"}
)
TimeMachine:RegisterAction("swap",
function(data, path, payload)
local tbl, key = resolveKey(data, path)
tbl[key][payload[1]], tbl[key][payload[2]] = tbl[key][payload[2]], tbl[key][payload[1]]
end,
function(data, path, payload)
return 'swap', path, {payload[2], payload[1]}
end,
{"add", "options_cu"}
)
TimeMachine:RegisterAction("move",
function(data, path, payload)
local tbl, key = resolveKey(data, path)
local value = table.remove(tbl, payload[1])
table.insert(tbl[key], payload[2], value)
end,
function(data, path, payload)
return 'move', path, {payload[2], payload[1]}
end,
{"add", "options_cu"}
)
local function keyPathToString(path)
if type(path) == 'table' then
return table.concat(path, '.')
else
return path
end
end
local function invertEffects(effects)
local inverted = {}
for i = #effects, 1, -1 do
table.insert(inverted, effects[i])
end
return inverted
end
function TimeMachine:StartTransaction()
if self.transaction then
WeakAuras.prettyPrint("If you're reading this, a time machine transaction was started, but there was already one in progress. That's not supposed to happen. Please report this to the WeakAuras developers, thanks!")
self:Reject()
end
self.transaction = true
end
function TimeMachine:Append(record)
local action = self.actions[record.actionType]
Private.DebugPrint("Forward action", record.actionType, "for", record.uid, "at", keyPathToString(record.path), "with", record.payload)
if not action then
error("No action for actionType: " .. record.actionType)
end
local inverter = action.inverter
if not inverter then
error("No inverter for action: " .. record.actionType)
end
local actionType, path, payload = inverter(Private.GetDataByUID(record.uid), record.path, record.payload)
local inverseRecord = {
uid = record.uid,
actionType = actionType,
path = path,
payload = payload,
suppressAutoEffects = record.suppressAutoEffects and CopyTable(record.suppressAutoEffects) or nil,
effects = record.effects and invertEffects(record.effects) or nil,
}
Private.DebugPrint("Backward action", actionType, "for", record.uid, "at", keyPathToString(path), "with", payload)
table.insert(self.next.forward, record)
table.insert(self.next.backward, 1, inverseRecord)
if not self.transaction then
self:Commit(true)
end
end
function TimeMachine:AppendMany(records)
local commit = false
if not self.transaction then
self:StartTransaction()
commit = true
end
for _, record in ipairs(records) do
self:Append(record)
end
if commit then
self:Commit()
end
end
function TimeMachine:Reject()
self.next = {
forward = {},
backward = {}
}
self.transaction = false
end
function TimeMachine:Commit(instant)
if not self.transaction and not instant then
WeakAuras.prettyPrint("If you're reading this, a time machine transaction was committed, but there was no transaction in progress. That's not supposed to happen. Please report this to the WeakAuras developers, thanks!")
return
end
while self.index < #self.changes do
table.remove(self.changes)
end
table.insert(self.changes, self.next)
self.next = {
forward = {},
backward = {}
}
self.transaction = false
return self:StepForward()
end
function TimeMachine:Apply(records, delayedEffects)
for _, record in ipairs(records) do
local action = self.actions[record.actionType]
if not action then
error("No action for actionType: " .. record.actionType)
end
local data = Private.GetDataByUID(record.uid)
action.actor(data, record.path, record.payload)
if action.autoEffects or record.effects then
local effects = {}
if action.autoEffects then
for _, effect in ipairs(action.autoEffects) do
if not record.suppressAutoEffects or not record.suppressAutoEffects[effect] then
table.insert(effects, effect)
end
end
end
if record.effects then
for _, effect in ipairs(record.effects) do
table.insert(effects, effect)
end
end
for _, effectType in ipairs(effects) do
local effect = self.effects[effectType]
if not effect then
error("No effect for effectType: " .. effect)
end
if not delayedEffects or not effect.idempotent then
if not record.effects or record.suppressAutoEffects then
effect.func(record.uid, data)
end
else
delayedEffects[record.uid] = delayedEffects[record.uid] or {}
delayedEffects[record.uid][effectType] = true
end
end
end
end
return delayedEffects
end
function TimeMachine:StepForward()
if self.index < #self.changes then
self.index = self.index + 1
self:Apply(self.changes[self.index].forward)
if self.sub:HasSubscribers("Step") then
self.sub:Notify("Step", self.index)
end
end
end
function TimeMachine:StepBackward()
if self.index > 0 then
self:Apply(self.changes[self.index].backward)
self.index = self.index - 1
if self.sub:HasSubscribers("Step") then
self.sub:Notify("Step", self.index)
end
end
end
--- much safer than the name suggests!
function TimeMachine:DestroyTheUniverse(id)
if self.transaction then
WeakAuras.prettyPrint("If you're reading this, a time machine transaction was destroyed, but there was one in progress. That's not supposed to happen. Please report this to the WeakAuras developers, thanks!")
self:Reject()
end
if #self.changes > 0 then
Private.DebugPrint(string.format("Destroying the universe where %i change(s) happpened, because an unexpected change happened to %q.", #self.changes, id))
end
self.changes = {}
self.index = 0
if self.sub:HasSubscribers("Step") then
self.sub:Notify("Step", self.index)
end
end
function TimeMachine:DescribeNext()
return self.changes[self.index + 1] and self.changes[self.index + 1].forward
end
function TimeMachine:DescribePrevious()
return self.changes[self.index] and self.changes[self.index].backward
end
+111 -4
View File
@@ -201,11 +201,51 @@ function SlashCmdList.WEAKAURAS(input)
elseif msg == "pshow" or msg == "profiling" then
WeakAuras.RealTimeProfilingWindow:Toggle()
elseif msg == "minimap" then
Private.ToggleMinimap();
WeakAuras.ToggleMinimap();
elseif msg == "help" then
Private.PrintHelp();
elseif msg == "repair" then
StaticPopup_Show("WEAKAURAS_CONFIRM_REPAIR", nil, nil, {reason = "user"})
elseif msg == "ff" or msg == "feat" or msg == "feature" then
if #args < 2 then
local features = Private.Features:ListFeatures()
local summary = {}
for _, feature in ipairs(features) do
table.insert(summary, ("|c%s%s|r"):format(feature.enabled and "ff00ff00" or "ffff0000", feature.id))
end
prettyPrint(L["Syntax /wa feature <toggle|on|enable|disable|off> <feature>"])
prettyPrint(L["Available features: %s"]:format(table.concat(summary, ", ")))
else
local action = ({
toggle = "toggle",
on = "enable",
enable = "enable",
disable = "disable",
off = "disable"
})[args[1]]
if not action then
prettyPrint(L["Unknown action %q"]:format(args[1]))
else
local feature = args[2]
if not Private.Features:Exists(feature) then
prettyPrint(L["Unknown feature %q"]:format(feature))
elseif not Private.Features:Enabled(feature) then
if action ~= "disable" then
Private.Features:Enable(feature)
prettyPrint(L["Enabled feature %q"]:format(feature))
else
prettyPrint(L["Feature %q is already disabled"]:format(feature))
end
elseif Private.Features:Enabled(feature) then
if action ~= "enable" then
Private.Features:Disable(feature)
prettyPrint(L["Disabled feature %q"]:format(feature))
else
prettyPrint(L["Feature %q is already enabled"]:format(feature))
end
end
end
end
else
WeakAuras.OpenOptions(msg);
end
@@ -213,7 +253,7 @@ end
if not WeakAuras.IsLibsOK() then return end
function Private.ToggleMinimap()
function WeakAuras.ToggleMinimap()
WeakAurasSaved.minimap.hide = not WeakAurasSaved.minimap.hide
if WeakAurasSaved.minimap.hide then
LDBIcon:Hide("WeakAuras");
@@ -1137,6 +1177,8 @@ function Private.Login(takeNewSnapshots)
db.history = nil
end
Private.Features:Hydrate()
coroutine.yield(3000, "login check uid corruption")
local toAdd = {};
@@ -1216,6 +1258,7 @@ loadedFrame:SetScript("OnEvent", function(self, event, ...)
db.displays = db.displays or {};
db.registered = db.registered or {};
db.features = db.features or {}
db.migrationCutoff = db.migrationCutoff or 730
db.historyCutoff = db.historyCutoff or 730
@@ -1772,6 +1815,7 @@ function Private.UIDtoID(uid)
end
function WeakAuras.Delete(data)
Private.TimeMachine:DestroyTheUniverse(data.id)
local id = data.id;
local uid = data.uid
local parentId = data.parent
@@ -1871,6 +1915,7 @@ function WeakAuras.Delete(data)
end
function WeakAuras.Rename(data, newid)
-- since we Add() later in this function, we need to destroy the universe first
local oldid = data.id
if(data.parent) then
local parentData = db.displays[data.parent];
@@ -1973,6 +2018,7 @@ function WeakAuras.Rename(data, newid)
end
function Private.Convert(data, newType)
Private.TimeMachine:DestroyTheUniverse(data.id)
local id = data.id;
Private.FakeStatesFor(id, false)
@@ -2361,7 +2407,7 @@ function Private.AddMany(tbl, takeSnapshots)
Private.regions[data.id].region:ReloadControlledChildren()
end
else
WeakAuras.Add(data)
Private.Add(data)
end
end
coroutine.yield(1000, "addmany reload dynamic group");
@@ -2911,7 +2957,7 @@ function pAdd(data, simpleChange)
end
end
function WeakAuras.Add(data, simpleChange)
function Private.Add(data, simpleChange)
local oldSnapshot
if Private.ModernizeNeedsOldSnapshot(data) then
oldSnapshot = Private.GetMigrationSnapshot(data.uid)
@@ -2927,6 +2973,11 @@ function WeakAuras.Add(data, simpleChange)
end
end
function WeakAuras.Add(data, simpleChange)
Private.TimeMachine:DestroyTheUniverse(data.id)
Private.Add(data, simpleChange)
end
function Private.AddParents(data)
local parent = data.parent
if (parent) then
@@ -4449,6 +4500,9 @@ Private.callbacks:RegisterCallback("Rename", function(_, uid, oldId, newId)
end)
function Private.SendDelayedWatchedTriggers()
if WeakAuras.IsOptionsOpen() then
return
end
for id in pairs(delayed_watched_trigger) do
local watched = delayed_watched_trigger[id]
-- Since the observers are themselves observable, we set the list of observers to
@@ -4933,6 +4987,59 @@ function Private.ParseTextStr(textStr, symbolCallback)
end
end
function Private.SetDefaultFormatters(data, input, keyPrefix, metaData)
local seenSymbols = {}
local setDefaultFormatters = function(symbol)
if not data[keyPrefix .. symbol .. "_format"] and not seenSymbols[symbol] then
local trigger, sym = string.match(symbol, "(.+)%.(.+)")
sym = sym or symbol
local formatter, args = Private.DefaultFormatterFor(metaData, trigger, sym)
data[keyPrefix .. symbol .. "_format"] = formatter
for arg, value in pairs(args or {}) do
data[keyPrefix .. symbol .. "_" .. arg] = value
end
end
seenSymbols[symbol] = true
end
Private.ParseTextStr(input, setDefaultFormatters)
end
function Private.DefaultFormatterFor(stateMetaData, trigger, sym)
local formatter
local args = {}
if sym == "p" or sym == "t" then
return "timed", { time_dynamic_threshold = 3 }
end
trigger = tonumber(trigger)
if trigger then
local metaData = stateMetaData[trigger] and stateMetaData[trigger][sym]
if metaData then
formatter = metaData.formatter
if metaData.formatterArgs then
for arg, value in pairs(metaData.formatterArgs) do
args[arg] = value
end
end
end
else
for index, perTriggerData in pairs(stateMetaData) do
if perTriggerData[sym] then
if not formatter then
formatter = perTriggerData[sym].formatter
else
if formatter ~= perTriggerData[sym].formatter then
return "none"
end
end
end
end
end
return formatter or "none", args
end
function Private.CreateFormatters(input, getter, withoutColor, data)
local seenSymbols = {}
local formatters = {}
+4 -2
View File
@@ -1,7 +1,7 @@
## Interface: 30300
## Title: WeakAuras
## Author: The WeakAuras Team
## Version: 5.19.12
## Version: 5.20.0
## IconTexture: Interface\AddOns\WeakAuras\Media\Textures\icon.blp
## X-Flavor: 3.3.5
## Notes: A powerful, comprehensive utility for displaying graphics and information based on buffs, debuffs, and other triggers.
@@ -35,6 +35,9 @@ ArchiveTypes\Repository.lua
DefaultOptions.lua
# Core files
SubscribableObject.lua
Features.lua
TimeMachine.lua
Types_ClassicPlus.lua
Types_TBC.lua
Types_Wrath.lua
@@ -60,7 +63,6 @@ TSUHelpers.lua
AuraWarnings.lua
AuraEnvironment.lua
DebugLog.lua
SubscribableObject.lua
# Region support
RegionTypes\SmoothStatusBarMixin.lua
+1 -1
View File
@@ -1,7 +1,7 @@
## Interface: 30300
## Title: WeakAuras Model Paths
## Author: The WeakAuras Team
## Version: 5.19.12
## Version: 5.20.0
## Notes: Model paths for WeakAuras
## Notes-esES: Las rutas de modelos para WeakAuras
## Notes-esMX: Las rutas de modelos para WeakAuras
@@ -3,7 +3,7 @@ if not WeakAuras.IsLibsOK() then return end
ToolbarButton Widget, based on AceGUI Button
Graphical Button.
-------------------------------------------------------------------------------]]
local Type, Version = "WeakAurasToolbarButton", 6
local Type, Version = "WeakAurasToolbarButton", 7
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
@@ -51,6 +51,7 @@ local methods = {
self:SetText()
self.hTex:SetVertexColor(1, 1, 1, 0.1)
self:SetSmallFont(false)
self.text:SetTextColor(GameFontNormal:GetTextColor())
end,
-- ["OnRelease"] = nil,
@@ -72,8 +73,14 @@ local methods = {
self.disabled = disabled
if disabled then
self.frame:Disable()
self.text:SetTextColor(0.5, 0.5, 0.5)
else
self.frame:Enable()
if self.smallFont then
self.text:SetTextColor(GameFontNormalSmall:GetTextColor())
else
self.text:SetTextColor(GameFontNormal:GetTextColor())
end
end
end,
@@ -94,6 +101,7 @@ local methods = {
end
end,
["SetSmallFont"] = function(self, small)
self.smallFont = small
if small then
self.text:SetFontObject("GameFontNormalSmall")
else
+1 -2
View File
@@ -2500,8 +2500,6 @@ local function mergeOptions(mergedOptions, data, options, config, prepath, paren
break
end
end
else
nextInsert = #mergedOptions + 1
end
-- now we know at what point to add nextToMerge
if shouldMerge then
@@ -2557,6 +2555,7 @@ local function mergeOptions(mergedOptions, data, options, config, prepath, paren
end
end
else
nextInsert = #mergedOptions + 1
-- can't merge, should insert instead
local newOption = CopyTable(nextToMerge)
initReferences(newOption, data, options, i, config, path, parent)
+62 -8
View File
@@ -4,19 +4,73 @@ local AddonName = ...
local OptionsPrivate = select(2, ...)
OptionsPrivate.changelog = {
versionString = '5.19.12',
dateString = '2025-06-17',
fullChangeLogUrl = 'https://github.com/WeakAuras/WeakAuras2/compare/5.19.11...5.19.12',
versionString = '5.20.0',
dateString = '2025-07-21',
fullChangeLogUrl = 'https://github.com/WeakAuras/WeakAuras2/compare/5.19.12...5.20.0',
highlightText = [==[
- Bugfixes and performance improvements]==], commitText = [==[Stanzilla (2):
- **Added Undo & Redo Framework:** This lays the groundwork for undoing and redoing all aura edits. While the feature is still in development, you can test it now on URL edits. To enable it, type `/wa feature enable undo`.
- **New default formatters**: Setting `%unit` or `%guid` or `%p` will now auto select proper formatting options
- **Mists of Pandaria Updates:** Lots of Template updates and bug fixes to WA features.
- **Performance and Stability:** Addressed various bugs.]==], commitText = [==[InfusOnWoW (16):
- chore(toc): bump version for retail patch 11.5.7
- Update Atlas File List from wago.tools
- Update Discord List
- Mop templates: Druid, Monk, DK, Warlock and Paladin Update
- Don't announce destroyng an empty universe
- Update WeakAurasModelPaths from wago.tools
- Update Discord List
- Update Atlas File List from wago.tools
- Mists: Add Power/Stagger trigger
- Don't send watch trigger events while Options are open
- Text: Call UpdateProgress so that relative animations work
- Progress Settings: Adjust on moving/deleting triggers
- Range Trigger: Fix progress source setting
- Add Default Formatters for text replacements
- Fix locale on english realms
- Update Discord List
- Update Discord List
Stanzilla (3):
- Update WeakAurasModelPaths from wago.tools
- Update WeakAurasModelPaths from wago.tools
- Update WeakAurasModelPaths from wago.tools
mrbuds (2):
emptyrivers (2):
- Health trigger: add absorb options on Mists
- Don't trigger partyX unit event with the filter :group when in raid
- always advance mergeOptions pointer to the end if no merge is found
- undo & redo support (#4863)
github-actions[bot] (2):
- Update Discord List (#5943)
- Update WeakAurasModelPaths from wago.tools (#5944)
mopstats (1):
- Add pet battle events for mop (#5938)
mrbuds (19):
- LibSpecialization tiny update
- LibSpecialization update
- Mists rogue templates
- Mists priest templates
- Load the Time Machine on Mists
- Mists mage templates
- Mists shaman templates
- Fix Mists talent known trigger
- Add missing shaman talents
- Fix Glyph data on first load
- Mists use a dedicated file for modelpaths
- Remove missing "Blizzard Alerts" textures on Mists
- timed format default set time_dynamic_threshold = 3
- default color for guid
- Fix formatter type test
- Allow default formatter to have sub formatter options
- Mists Template: Hunter
- Mists Template: Warrior
- Fix error with talent tree on 11.2.0 beta
]==]
}
+8 -5
View File
@@ -69,13 +69,16 @@ function OptionsPrivate.GetInformationOptions(data)
return sameURL and commonURL or ""
end,
set = function(info, v)
OptionsPrivate.Private.TimeMachine:StartTransaction()
for child in traverseForUrl(data) do
child.url = v
WeakAuras.Add(child)
OptionsPrivate.ClearOptions(child.id)
OptionsPrivate.Private.TimeMachine:Append({
uid = child.uid,
actionType = "set",
path = {"url"},
payload = v
})
end
WeakAuras.ClearAndUpdateOptions(data.id)
OptionsPrivate.Private.TimeMachine:Commit()
end,
desc = sameURL and "" or desc,
order = order
+4 -1
View File
@@ -983,6 +983,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
--[[Translation missing --]]
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Reciprocal TRIGGER:# requests will be ignored!"
--[[Translation missing --]]
L["Redo"] = "Redo"
--[[Translation missing --]]
L["Regions of type \"%s\" are not supported."] = "Regions of type \"%s\" are not supported."
L["Remove"] = "Entfernen"
--[[Translation missing --]]
@@ -1155,7 +1157,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
L["Stack Info"] = "Stapelinfo"
--[[Translation missing --]]
L["Stacks - The number of stacks of an aura (usually)"] = "Stacks - The number of stacks of an aura (usually)"
L["Stagger"] = "Taumeln"
--[[Translation missing --]]
L["Standby"] = "Standby"
L["Star"] = "Stern"
@@ -1302,6 +1303,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger Combination"] = "Trigger Combination"
--[[Translation missing --]]
L["Type 'select' for '%s' requires a values member'"] = "Type 'select' for '%s' requires a values member'"
--[[Translation missing --]]
L["Undo"] = "Undo"
L["Ungroup"] = "Gruppierung aufheben"
--[[Translation missing --]]
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "Unit %s is not a valid unit for RegisterUnitEvent"
+4 -3
View File
@@ -1,6 +1,6 @@
if not WeakAuras.IsLibsOK() then return end
if ((GAME_LOCALE or GetLocale()) ~= "enUS") or ((GAME_LOCALE or GetLocale()) ~= "enGB") then
if ((GAME_LOCALE or GetLocale()) ~= "enUS") and ((GAME_LOCALE or GetLocale()) ~= "enGB") then
return
end
@@ -683,6 +683,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
L["Re-center X"] = "Re-center X"
L["Re-center Y"] = "Re-center Y"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Reciprocal TRIGGER:# requests will be ignored!"
L["Redo"] = "Redo"
L["Regions of type \"%s\" are not supported."] = "Regions of type \"%s\" are not supported."
L["Remove"] = "Remove"
L["Remove All Sounds"] = "Remove All Sounds"
@@ -794,7 +795,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
L["Spell Selection Filters"] = "Spell Selection Filters"
L["Stack Info"] = "Stack Info"
L["Stacks - The number of stacks of an aura (usually)"] = "Stacks - The number of stacks of an aura (usually)"
L["Stagger"] = "Stagger"
L["Standby"] = "Standby"
L["Star"] = "Star"
L["Start"] = "Start"
@@ -885,6 +885,7 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "Trigger %i: %s"
L["Trigger Combination"] = "Trigger Combination"
L["Type 'select' for '%s' requires a values member'"] = "Type 'select' for '%s' requires a values member'"
L["Undo"] = "Undo"
L["Ungroup"] = "Ungroup"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "Unit %s is not a valid unit for RegisterUnitEvent"
L["Unit Count"] = "Unit Count"
@@ -900,8 +901,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Url: %s"] = "Url: %s"
L["Use Display Info Id"] = "Use Display Info Id"
L["Use SetTransform"] = "Use SetTransform"
L["Used in auras:"] = "Used in auras:"
L["Used in Auras:"] = "Used in Auras:"
L["Used in auras:"] = "Used in auras:"
L["Uses Texture Coordinates to rotate the texture."] = "Uses Texture Coordinates to rotate the texture."
L["Uses UnitIsVisible() to check if game client has loaded a object for this unit. This distance is around 100 yards. This is polled every second."] = "Uses UnitIsVisible() to check if game client has loaded a object for this unit. This distance is around 100 yards. This is polled every second."
L["Value"] = "Value"
+3 -2
View File
@@ -143,8 +143,8 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "Modo de anclaje"
L["Anchor Point"] = "Punto de anclaje"
L["Anchored To"] = "Anclado a"
L["and"] = "y"
L["And "] = "y"
L["and"] = "y"
L["and %s"] = "y %s"
L["and aligned left"] = "y alineado a la izquierda"
L["and aligned right"] = "y alineado a la derecha"
@@ -642,6 +642,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Ocurrencia d
L["Re-center X"] = "Re-centrar X"
L["Re-center Y"] = "Re-centrar Y"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "ACTIVADOR recíproco: # solicitudes serán ignoradas."
L["Redo"] = "Rehacer"
L["Regions of type \"%s\" are not supported."] = "Las regiones del tipo \"%s\" no son compatibles."
L["Remove"] = "Eliminar"
L["Remove All Sounds"] = "Eliminar todos los sonidos"
@@ -753,7 +754,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Ocurrencia d
L["Spell Selection Filters"] = "Filtros de selección de hechizo"
L["Stack Info"] = "Información de Acumulaciones"
L["Stacks - The number of stacks of an aura (usually)"] = "Acumulaciones - El número de acumulaciones de un aura (usualmente)"
L["Stagger"] = "Tambaleo"
L["Standby"] = "En espera"
L["Star"] = "Estrella"
L["Start"] = "Empezar"
@@ -843,6 +843,7 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "Activador %i:%s"
L["Trigger Combination"] = "Combinación de activadores"
L["Type 'select' for '%s' requires a values member'"] = "Tipo 'select' para '%s' requiere un miembro de valores'"
L["Undo"] = "Deshacer"
L["Ungroup"] = "Desagrupar"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "La unidad %s no es una unidad válida para RegisterUnitEvent"
L["Unit Count"] = "Recuento de unidad"
+2 -1
View File
@@ -642,6 +642,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Ocurrencia d
L["Re-center X"] = "Re-centrar X"
L["Re-center Y"] = "Re-centrar Y"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "ACTIVADOR recíproco: # solicitudes serán ignoradas."
L["Redo"] = "Rehacer"
L["Regions of type \"%s\" are not supported."] = "Las regiones del tipo \"%s\" no son compatibles."
L["Remove"] = "Eliminar"
L["Remove All Sounds"] = "Eliminar todos los sonidos"
@@ -753,7 +754,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Ocurrencia d
L["Spell Selection Filters"] = "Filtros de selección de hechizo"
L["Stack Info"] = "Información de Acumulaciones"
L["Stacks - The number of stacks of an aura (usually)"] = "Acumulaciones - El número de acumulaciones de un aura (usualmente)"
L["Stagger"] = "Tambaleo"
L["Standby"] = "En espera"
L["Star"] = "Estrella"
L["Start"] = "Empezar"
@@ -843,6 +843,7 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "Activador %i:%s"
L["Trigger Combination"] = "Combinación de activadores"
L["Type 'select' for '%s' requires a values member'"] = "Tipo 'select' para '%s' requiere un miembro de valores'"
L["Undo"] = "Deshacer"
L["Ungroup"] = "Desagrupar"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "La unidad %s no es una unidad válida para RegisterUnitEvent"
L["Unit Count"] = "Recuento de unidad"
+5 -2
View File
@@ -849,6 +849,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
L["Re-center Y"] = "Rec-entrer Y"
--[[Translation missing --]]
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Reciprocal TRIGGER:# requests will be ignored!"
--[[Translation missing --]]
L["Redo"] = "Redo"
L["Regions of type \"%s\" are not supported."] = "Les régions de type \"%s\" ne sont pas prises en charge."
L["Remove"] = "Retirer"
--[[Translation missing --]]
@@ -1006,7 +1008,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
L["Stack Info"] = "Info de Piles"
--[[Translation missing --]]
L["Stacks - The number of stacks of an aura (usually)"] = "Stacks - The number of stacks of an aura (usually)"
L["Stagger"] = "Report"
--[[Translation missing --]]
L["Standby"] = "Standby"
L["Star"] = "Étoile"
@@ -1144,6 +1145,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger Combination"] = "Trigger Combination"
--[[Translation missing --]]
L["Type 'select' for '%s' requires a values member'"] = "Type 'select' for '%s' requires a values member'"
--[[Translation missing --]]
L["Undo"] = "Undo"
L["Ungroup"] = "Dissocier"
--[[Translation missing --]]
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "Unit %s is not a valid unit for RegisterUnitEvent"
@@ -1166,8 +1169,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Url: %s"] = "Url: %s"
L["Use Display Info Id"] = "Utiliser les informations d'identifiant de l'affichage"
L["Use SetTransform"] = "Utiliser SetTransform"
L["Used in auras:"] = "Utilisé dans les auras:"
L["Used in Auras:"] = "Utilisé(e) dans les Auras:"
L["Used in auras:"] = "Utilisé dans les auras:"
--[[Translation missing --]]
L["Uses Texture Coordinates to rotate the texture."] = "Uses Texture Coordinates to rotate the texture."
--[[Translation missing --]]
+6 -4
View File
@@ -1039,6 +1039,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
--[[Translation missing --]]
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Reciprocal TRIGGER:# requests will be ignored!"
--[[Translation missing --]]
L["Redo"] = "Redo"
--[[Translation missing --]]
L["Regions of type \"%s\" are not supported."] = "Regions of type \"%s\" are not supported."
--[[Translation missing --]]
L["Remove"] = "Remove"
@@ -1261,8 +1263,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
--[[Translation missing --]]
L["Stacks - The number of stacks of an aura (usually)"] = "Stacks - The number of stacks of an aura (usually)"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Standby"] = "Standby"
--[[Translation missing --]]
L["Star"] = "Star"
@@ -1437,6 +1437,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
--[[Translation missing --]]
L["Type 'select' for '%s' requires a values member'"] = "Type 'select' for '%s' requires a values member'"
--[[Translation missing --]]
L["Undo"] = "Undo"
--[[Translation missing --]]
L["Ungroup"] = "Ungroup"
--[[Translation missing --]]
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "Unit %s is not a valid unit for RegisterUnitEvent"
@@ -1467,10 +1469,10 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
--[[Translation missing --]]
L["Use SetTransform"] = "Use SetTransform"
--[[Translation missing --]]
L["Used in auras:"] = "Used in auras:"
--[[Translation missing --]]
L["Used in Auras:"] = "Used in Auras:"
--[[Translation missing --]]
L["Used in auras:"] = "Used in auras:"
--[[Translation missing --]]
L["Uses Texture Coordinates to rotate the texture."] = "Uses Texture Coordinates to rotate the texture."
--[[Translation missing --]]
L["Uses UnitIsVisible() to check if game client has loaded a object for this unit. This distance is around 100 yards. This is polled every second."] = "Uses UnitIsVisible() to check if game client has loaded a object for this unit. This distance is around 100 yards. This is polled every second."
+7 -6
View File
@@ -39,7 +39,7 @@ local L = WeakAuras.L
L["%s - Main"] = "%s - 메인"
L["%s - OnLoad"] = "%s - 활성화 시"
L["%s - OnUnload"] = "%s - 비활성화 시"
L["%s - Option #%i has the key %s. Please choose a different option key."] = "%s - #%i 옵션이 %s 키를 갖고 있습니다. 다른 옵션 키를 산택해주세요."
L["%s - Option #%i has the key %s. Please choose a different option key."] = "%s - #%i 옵션이 %s 키를 사용중입니다. 다른 옵션 키를 사용하세요."
L["%s - Rotate Animation"] = "%s - 애니메이션 회전"
L["%s - Scale Animation"] = "%s - 애니메이션 크기"
L["%s - Start"] = "%s - 시작"
@@ -158,8 +158,8 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "고정 모드"
L["Anchor Point"] = "고정 지점"
L["Anchored To"] = "고정 위치:"
L["and"] = "그리고"
L["And "] = "And"
L["and"] = "그리고"
L["and %s"] = "and %s"
L["and aligned left"] = ", 왼쪽 정렬"
L["and aligned right"] = ", 오른쪽 정렬"
@@ -214,7 +214,7 @@ Off Screen]=] ] = "위크오라가 화면 밖에 있습니다"
L["Blue Rune"] = "푸른색 룬"
L["Blue Sparkle Orb"] = "푸른 불꽃 구슬"
L["Border %s"] = "테두리 %s"
L["Border Anchor"] = "테두리 고정"
L["Border Anchor"] = "테두리 고정"
L["Border Color"] = "테두리색"
L["Border in Front"] = "앞쪽 테두리"
L["Border Inset"] = "테두리 삽입"
@@ -690,6 +690,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[이벤트
L["Re-center X"] = "내부 X 좌표"
L["Re-center Y"] = "내부 Y 좌표"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "서로 상응하는 활성 조건 # 요청은 무시됩니다!"
L["Redo"] = "다시 실행"
L["Regions of type \"%s\" are not supported."] = "\"%s\" 종류의 구역(Region)은 지원하지 않습니다."
L["Remove"] = "제거"
L["Remove All Sounds"] = "모든 소리 설정 제거"
@@ -702,7 +703,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[이벤트
L["Report bugs on our issue tracker."] = "이슈 트래커에 버그를 제보해 주세요."
L["Require unit from trigger"] = "활성 조건에서 유닛 필요"
L["Required for Activation"] = "활성화 필수 조건"
L["Requires LibSpecialization, that is e.g. a up-to date WeakAuras version"] = "LibSpecialization이 필요합니다. 예를 들면 최신 WeakAuras 버전으로 업데이트하면 됩니다"
L["Requires LibSpecialization, that is e.g. a up-to date WeakAuras version"] = "LibSpecialization이 필요하며, WeakAuras 버전을 최신으로 유지하면 됩니다."
L["Reset all options to their default values."] = "모든 옵션을 기본값으로 초기화합니다."
L["Reset Entry"] = "항목 초기화"
L["Reset to Defaults"] = "기본값으로 재설정"
@@ -749,7 +750,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[이벤트
L["Show Icon"] = "아이콘 표시"
L["Show If Unit Does Not Exist"] = "유닛이 없으면 표시"
L["Show Linear Texture"] = "직진 텍스처 표시"
L["Show Matches for"] = "표시할 대상"
L["Show Matches for"] = "표시 조건"
L["Show Matches for Units"] = "유닛별로 일치하는 조건 표시"
L["Show Model"] = "모델 표시"
L["Show model of unit "] = "유닛의 모델 표시"
@@ -801,7 +802,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[이벤트
L["Spell Selection Filters"] = "주문 선정 필터"
L["Stack Info"] = "중첩 정보"
L["Stacks - The number of stacks of an aura (usually)"] = "중첩 - 오라의 중첩 갯수입니다 (일반적으로)"
L["Stagger"] = "계단식 배치"
L["Standby"] = "대기 중"
L["Star"] = ""
L["Start"] = "시작"
@@ -889,6 +889,7 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "활성 조건 %i: %s"
L["Trigger Combination"] = "활성 조건 조합"
L["Type 'select' for '%s' requires a values member'"] = "'%s'에서 'select' 유형은 값들의 구성원을 필요로 합니다"
L["Undo"] = "실행 취소"
L["Ungroup"] = "그룹 해제"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "%s 유닛은 RegisterUnitEvent에 적합하지 않습니다."
L["Unit Count"] = "유닛 수"
+5 -3
View File
@@ -224,9 +224,9 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "Anchor Mode"
L["Anchor Point"] = "Ponto da âncora"
L["Anchored To"] = "Ancorado a"
L["And "] = "E"
--[[Translation missing --]]
L["and"] = "and"
L["And "] = "E"
--[[Translation missing --]]
L["and %s"] = "and %s"
L["and aligned left"] = "e alinhado à esquerda"
@@ -1083,6 +1083,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
--[[Translation missing --]]
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Reciprocal TRIGGER:# requests will be ignored!"
--[[Translation missing --]]
L["Redo"] = "Redo"
--[[Translation missing --]]
L["Regions of type \"%s\" are not supported."] = "Regions of type \"%s\" are not supported."
L["Remove"] = "Remover"
--[[Translation missing --]]
@@ -1273,8 +1275,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=]
--[[Translation missing --]]
L["Stacks - The number of stacks of an aura (usually)"] = "Stacks - The number of stacks of an aura (usually)"
--[[Translation missing --]]
L["Stagger"] = "Stagger"
--[[Translation missing --]]
L["Standby"] = "Standby"
--[[Translation missing --]]
L["Star"] = "Star"
@@ -1440,6 +1440,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
--[[Translation missing --]]
L["Type 'select' for '%s' requires a values member'"] = "Type 'select' for '%s' requires a values member'"
--[[Translation missing --]]
L["Undo"] = "Undo"
--[[Translation missing --]]
L["Ungroup"] = "Ungroup"
--[[Translation missing --]]
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "Unit %s is not a valid unit for RegisterUnitEvent"
+6 -3
View File
@@ -148,8 +148,8 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "Режим крепления"
L["Anchor Point"] = "Точка крепления"
L["Anchored To"] = "Прикрепить к"
L["and"] = "и"
L["And "] = "И "
L["and"] = "и"
L["and %s"] = "и %s"
L["and aligned left"] = "Выранивание по левому краю;"
L["and aligned right"] = "Выранивание по правому краю;"
@@ -671,6 +671,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Время
L["Re-center X"] = "Рецентрировать по X"
L["Re-center Y"] = "Рецентрировать по Y"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "Ответный TRIGGER:# запрос будет проигнорирован!"
--[[Translation missing --]]
L["Redo"] = "Redo"
L["Regions of type \"%s\" are not supported."] = "Регионы типа \"%s\" не поддерживаются."
L["Remove"] = "Удалить"
L["Remove All Sounds"] = "Удалить все звуки"
@@ -789,7 +791,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = "Время
L["Spell Selection Filters"] = "Фильтры выбора заклинания"
L["Stack Info"] = "Информация о стаках"
L["Stacks - The number of stacks of an aura (usually)"] = "Стаки - количество стаков ауры (обычно)"
L["Stagger"] = "Выступ (смещение уровня)"
L["Standby"] = "Ожидает"
L["Star"] = "Звезда"
L["Start"] = "Начальная"
@@ -884,6 +885,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "Триггер %i: %s"
L["Trigger Combination"] = "Комбинация триггеров"
L["Type 'select' for '%s' requires a values member'"] = "Для переменной %s типа select необходимо свойство values."
--[[Translation missing --]]
L["Undo"] = "Undo"
L["Ungroup"] = "Разгруппировать"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "%s не является допустимой единицей для метода RegisterUnitEvent"
L["Unit Count"] = "Количество единиц"
@@ -900,8 +903,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Url: %s"] = "URL-адрес: %s"
L["Use Display Info Id"] = "Использовать ID отображения существа"
L["Use SetTransform"] = "Использовать ф. SetTransform"
L["Used in auras:"] = "Использовано в индикациях:"
L["Used in Auras:"] = "Использовано в индикациях:"
L["Used in auras:"] = "Использовано в индикациях:"
L["Uses Texture Coordinates to rotate the texture."] = "Использует координаты текстуры для её вращения."
L["Uses UnitIsVisible() to check if game client has loaded a object for this unit. This distance is around 100 yards. This is polled every second."] = "Использует функцию UnitIsVisible для проверки, может ли клиент игры видеть указанную единицу (загружен ли объект). Не определяет, находится ли единица в поле зрения. Расстояние составляет 100 метров. Опрос происходит каждую секунду."
L["Value"] = "Значение"
+5 -2
View File
@@ -151,8 +151,8 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "定位模式"
L["Anchor Point"] = "锚点指向"
L["Anchored To"] = "对齐到"
L["and"] = ""
L["And "] = ""
L["and"] = ""
L["and %s"] = "并且 %s"
L["and aligned left"] = "并且左对齐"
L["and aligned right"] = "并且右对齐"
@@ -673,6 +673,8 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[事件发
L["Re-center X"] = "到中心 X 偏移"
L["Re-center Y"] = "到中心 Y 偏移"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "相互的TRIGGER:#请求将被忽略!"
--[[Translation missing --]]
L["Redo"] = "Redo"
L["Regions of type \"%s\" are not supported."] = "%s 区域类型不被支持。"
L["Remove"] = "移除"
L["Remove All Sounds"] = "移除所有音效"
@@ -784,7 +786,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[事件发
L["Spell Selection Filters"] = "法术选择过滤器"
L["Stack Info"] = "层数信息"
L["Stacks - The number of stacks of an aura (usually)"] = "堆叠 - 光环的堆叠层数(通常是)"
L["Stagger"] = "交错"
L["Standby"] = "已就绪"
L["Star"] = "星星"
L["Start"] = "开始"
@@ -873,6 +874,8 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "触发器%i%s"
L["Trigger Combination"] = "触发器组合"
L["Type 'select' for '%s' requires a values member'"] = "'%s'的类型'select'需要至少一个'values'成员。"
--[[Translation missing --]]
L["Undo"] = "Undo"
L["Ungroup"] = "不分组"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "单位 %s 并不是 RegisterUnitEvent 的有效单位"
L["Unit Count"] = "单位计数"
+3 -2
View File
@@ -143,8 +143,8 @@ Enable this setting if you want this timer to be hidden, or when using a WeakAur
L["Anchor Mode"] = "定位模式"
L["Anchor Point"] = "對齊點"
L["Anchored To"] = "對齊到"
L["and"] = ""
L["And "] = ""
L["and"] = ""
L["and %s"] = "以及 %s"
L["and aligned left"] = "和靠左對齊"
L["and aligned right"] = "和靠右對齊"
@@ -663,6 +663,7 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[事件發
L["Re-center X"] = "重新水平置中"
L["Re-center Y"] = "重新垂直置中"
L["Reciprocal TRIGGER:# requests will be ignored!"] = "對應的觸發器:# 請求將被忽略!"
L["Redo"] = "重做"
L["Regions of type \"%s\" are not supported."] = "不支援區域類型 \"%s\""
L["Remove"] = "移除"
L["Remove All Sounds"] = "移除所有音效"
@@ -774,7 +775,6 @@ every 3 events starting from 2nd and ending at 11th: 2-11/3]=] ] = [=[事件發
L["Spell Selection Filters"] = "法術選擇過濾器"
L["Stack Info"] = "堆疊層數資訊"
L["Stacks - The number of stacks of an aura (usually)"] = "層數 - 光環的疊加數(通常)"
L["Stagger"] = "醉仙緩勁"
L["Standby"] = "準備就緒"
L["Star"] = "星星"
L["Start"] = "開始"
@@ -863,6 +863,7 @@ Upgrade your version of WeakAuras or wait for next release before installing thi
L["Trigger %i: %s"] = "觸發器 %i: %s"
L["Trigger Combination"] = "觸發組合"
L["Type 'select' for '%s' requires a values member'"] = "'%s' 的類型 'select' 需要 values member"
L["Undo"] = "復原"
L["Ungroup"] = "解散群組"
L["Unit %s is not a valid unit for RegisterUnitEvent"] = "%s 不是 RegisterUnitEvent 的有效單位"
L["Unit Count"] = "單位數量"
+108 -42
View File
@@ -8,8 +8,8 @@ local pairs, type, error = pairs, type, error
local _G = _G
-- WoW APIs
local GetScreenWidth, GetScreenHeight, CreateFrame, GetAddOnInfo, UnitName
= GetScreenWidth, GetScreenHeight, CreateFrame, GetAddOnInfo, UnitName
local GetScreenWidth, GetScreenHeight, CreateFrame, GetAddOnInfo
= GetScreenWidth, GetScreenHeight, CreateFrame, GetAddOnInfo
local AceGUI = LibStub("AceGUI-3.0")
local AceConfigDialog = LibStub("AceConfigDialog-3.0")
@@ -88,6 +88,8 @@ local defaultHeight = 665
local minWidth = 750
local minHeight = 240
function OptionsPrivate.CreateFrame()
CreateFrame("Frame", "WeakAuras_DropDownMenu", nil, "UIDropDownMenuTemplate")
local frame
@@ -339,7 +341,7 @@ function OptionsPrivate.CreateFrame()
tipFrame:Hide()
frame.tipFrame = tipFrame
local tipPopup = CreateFrame("Frame", "WeakAuras_TipPopup", frame)
local tipPopup = CreateFrame("Frame", nil, frame)
tipPopup:SetFrameStrata("FULLSCREEN")
tipPopup:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
@@ -452,13 +454,13 @@ function OptionsPrivate.CreateFrame()
local lineLength = 0
local currentLine = {}
for _, patreon in ipairs(list) do
if lineLength + #patreon + 2 * #currentLine > 130 then
if lineLength + #patreon + 2 > 130 then
tinsert(patreonLines, table.concat(currentLine, ", ") .. ", ")
currentLine = {}
tinsert(currentLine, patreon)
lineLength = #patreon
lineLength = #patreon + 2
else
lineLength = lineLength + #patreon
lineLength = lineLength + #patreon + 2
tinsert(currentLine, patreon)
end
end
@@ -485,7 +487,6 @@ function OptionsPrivate.CreateFrame()
local thanksListCJ = lineWrapDiscordList(OptionsPrivate.Private.DiscordListCJ)
local thanksListK = lineWrapDiscordList(OptionsPrivate.Private.DiscordListK)
local discordButton = addFooter(L["Discord"], [[Interface\AddOns\WeakAuras\Media\Textures\discord.tga]], "https://discord.gg/UXSc7nt",
L["Chat with WeakAuras experts on our Discord server."])
discordButton:SetParent(tipFrame)
@@ -652,7 +653,85 @@ function OptionsPrivate.CreateFrame()
-- Toolbar
local toolbarContainer = CreateFrame("Frame", nil, buttonsContainer.frame)
toolbarContainer:SetParent(buttonsContainer.frame)
toolbarContainer:Hide()
-- toolbarContainer:Hide()
toolbarContainer:SetPoint("TOPLEFT", buttonsContainer.frame, "TOPLEFT", 30, 30)
toolbarContainer:SetPoint("BOTTOMRIGHT", buttonsContainer.frame, "TOPRIGHT", 0, 0)
local undo = AceGUI:Create("WeakAurasToolbarButton")
undo:SetText(L["Undo"])
undo:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\upleft")
undo:SetCallback("OnClick", function()
OptionsPrivate.Private.TimeMachine:StepBackward()
frame:FillOptions()
end)
undo.frame:SetParent(toolbarContainer)
if OptionsPrivate.Private.Features:Enabled("undo") then
undo.frame:Show()
else
undo.frame:Hide()
end
undo:SetPoint("LEFT")
local redo = AceGUI:Create("WeakAurasToolbarButton")
redo:SetText(L["Redo"])
redo:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\upright")
redo:SetCallback("OnClick", function()
OptionsPrivate.Private.TimeMachine:StepForward()
frame:FillOptions()
end)
redo.frame:SetParent(toolbarContainer)
if OptionsPrivate.Private.Features:Enabled("undo") then
redo.frame:Show()
else
redo.frame:Hide()
end
redo:SetPoint("LEFT", undo.frame, "RIGHT", 10, 0)
if OptionsPrivate.Private.TimeMachine:DescribeNext() ~= nil then
redo.frame:Enable()
else
redo.frame:Disable()
end
OptionsPrivate.Private.Features:Subscribe("undo",
function()
undo.frame:Show()
redo.frame:Show()
end,
function()
undo.frame:Hide()
redo.frame:Hide()
end
)
local tmControls = {
undo = undo,
redo = redo,
}
function tmControls:Step()
-- slightly annoying workaround
-- Buttons behave in a strange way if they are disabled inside of the OnClick handler
-- where the pushed texture refuses to vanish until the button is enabled & user clicks it again
-- so, just disable the button after next frame draw, so it's imperceptible to the user but we're not in the OnClick handler
WeakAuras.timer:ScheduleTimer(function()
self.undo:SetDisabled(OptionsPrivate.Private.TimeMachine:DescribePrevious() == nil)
self.redo:SetDisabled(OptionsPrivate.Private.TimeMachine:DescribeNext() == nil)
end, 0)
end
tmControls:Step()
OptionsPrivate.Private.TimeMachine.sub:AddSubscriber("Step", tmControls)
local newButton = AceGUI:Create("WeakAurasToolbarButton")
newButton:SetText(L["New Aura"])
newButton:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\newaura")
newButton.frame:SetParent(toolbarContainer)
newButton.frame:Show()
newButton:SetPoint("LEFT", redo.frame, "RIGHT", 10, 0)
frame.toolbarContainer = toolbarContainer
newButton:SetCallback("OnClick", function()
frame:NewAura()
end)
local importButton = AceGUI:Create("WeakAurasToolbarButton")
importButton:SetText(L["Import"])
@@ -660,20 +739,28 @@ function OptionsPrivate.CreateFrame()
importButton:SetCallback("OnClick", OptionsPrivate.ImportFromString)
importButton.frame:SetParent(toolbarContainer)
importButton.frame:Show()
importButton:SetPoint("RIGHT", filterInput, "RIGHT")
importButton:SetPoint("BOTTOM", frame, "TOP", 0, -55)
importButton:SetPoint("LEFT", newButton.frame, "RIGHT", 10, 0)
local newButton = AceGUI:Create("WeakAurasToolbarButton")
newButton:SetText(L["New Aura"])
newButton:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\newaura")
newButton.frame:SetParent(toolbarContainer)
newButton.frame:Show()
newButton:SetPoint("RIGHT", importButton.frame, "LEFT", -10, 0)
frame.toolbarContainer = toolbarContainer
newButton:SetCallback("OnClick", function()
frame:NewAura()
local lockButton = AceGUI:Create("WeakAurasToolbarButton")
lockButton:SetText(L["Lock Positions"])
lockButton:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\lockPosition")
lockButton:SetCallback("OnClick", function(self)
if WeakAurasOptionsSaved.lockPositions then
lockButton:SetStrongHighlight(false)
lockButton:UnlockHighlight()
WeakAurasOptionsSaved.lockPositions = false
else
lockButton:SetStrongHighlight(true)
lockButton:LockHighlight()
WeakAurasOptionsSaved.lockPositions = true
end
end)
if WeakAurasOptionsSaved.lockPositions then
lockButton:LockHighlight()
end
lockButton.frame:SetParent(toolbarContainer)
lockButton.frame:Show()
lockButton:SetPoint("LEFT", importButton.frame, "RIGHT", 10, 0)
local magnetButton = AceGUI:Create("WeakAurasToolbarButton")
magnetButton:SetText(L["Magnetically Align"])
@@ -695,28 +782,8 @@ function OptionsPrivate.CreateFrame()
end
magnetButton.frame:SetParent(toolbarContainer)
magnetButton.frame:Show()
magnetButton:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -17, -55)
magnetButton:SetPoint("LEFT", lockButton.frame, "RIGHT", 10, 0)
local lockButton = AceGUI:Create("WeakAurasToolbarButton")
lockButton:SetText(L["Lock Positions"])
lockButton:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\lockPosition")
lockButton:SetCallback("OnClick", function(self)
if WeakAurasOptionsSaved.lockPositions then
lockButton:SetStrongHighlight(false)
lockButton:UnlockHighlight()
WeakAurasOptionsSaved.lockPositions = false
else
lockButton:SetStrongHighlight(true)
lockButton:LockHighlight()
WeakAurasOptionsSaved.lockPositions = true
end
end)
if WeakAurasOptionsSaved.lockPositions then
lockButton:LockHighlight()
end
lockButton.frame:SetParent(toolbarContainer)
lockButton.frame:Show()
lockButton:SetPoint("RIGHT", magnetButton.frame, "LEFT", -10, 0)
local loadProgress = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
loadProgress:SetPoint("TOP", buttonsContainer.frame, "TOP", 0, -4)
@@ -728,7 +795,6 @@ function OptionsPrivate.CreateFrame()
self:UpdateFrameVisible()
end
local buttonsScroll = AceGUI:Create("ScrollFrame")
buttonsScroll:SetLayout("ButtonsScrollLayout")
buttonsScroll.width = "fill"
+4
View File
@@ -57,6 +57,10 @@ local function createOptions(id, data)
end,
set = function(info, v)
data.displayText = OptionsPrivate.Private.ReplaceLocalizedRaidMarkers(v);
local metaData = OptionsPrivate.Private.GetAdditionalProperties(data)
OptionsPrivate.Private.SetDefaultFormatters(data, data.displayText, "displayText_format_", metaData)
WeakAuras.Add(data);
WeakAuras.ClearAndUpdateOptions(data.id)
WeakAuras.UpdateThumbnail(data);
@@ -53,6 +53,9 @@ local function createOptions(parentData, data, index, subIndex)
order = 11,
set = function(info, v)
data.text_text = OptionsPrivate.Private.ReplaceLocalizedRaidMarkers(v)
local metaData = OptionsPrivate.Private.GetAdditionalProperties(parentData)
OptionsPrivate.Private.SetDefaultFormatters(data, data.text_text, "text_text_format_", metaData)
WeakAuras.Add(parentData)
WeakAuras.ClearAndUpdateOptions(parentData.id)
end,
@@ -530,7 +533,6 @@ local function createOptions(parentData, data, index, subIndex)
end
end
end
OptionsPrivate.AddTextFormatOption(texts, true, get, addOption, hidden, setHidden, false, listIndex, #list)
end
+35
View File
@@ -222,6 +222,23 @@ local function DeleteConditionsForTrigger(data, triggernum)
end
end
local function FixUpProgressSourceAfterDelete(data, triggernum)
local function FixUpProgressSource(data)
if data.progressSource then
local trigger, property = unpack(data.progressSource)
if trigger > triggernum then
data.progressSource = {trigger - 1, property}
end
end
end
FixUpProgressSource(data)
for _, subRegionData in ipairs(data.subRegions) do
FixUpProgressSource(subRegionData)
end
end
local function moveTriggerDownConditionCheck(check, i)
if (check.trigger == i) then
check.trigger = i + 1;
@@ -244,6 +261,23 @@ local function moveTriggerDownImpl(data, i)
moveTriggerDownConditionCheck(condition.check, i);
end
local function fixUpProgressSource(data)
if data.progressSource then
local trigger, property = unpack(data.progressSource)
if trigger == i then
data.progressSource = {i + 1, property}
elseif trigger == i + 1 then
data.progressSource = {i, property}
end
end
end
fixUpProgressSource(data)
for _, subRegionData in ipairs(data.subRegions) do
fixUpProgressSource(subRegionData)
end
return true;
end
@@ -352,6 +386,7 @@ function OptionsPrivate.AddTriggerMetaFunctions(options, data, triggernum)
if #child.triggers > 1 and #child.triggers >= triggernum then
tremove(child.triggers, triggernum)
DeleteConditionsForTrigger(child, triggernum)
FixUpProgressSourceAfterDelete(child, triggernum)
WeakAuras.Add(child)
OptionsPrivate.RemoveCollapsed(collapsedId, "trigger", {triggernum})
OptionsPrivate.ClearOptions(child.id)
+1 -1
View File
@@ -3,7 +3,7 @@ local Private = select(2, ...)
local L = WeakAuras.L
local optionsVersion = "5.19.12 Beta"
local optionsVersion = "5.20.0 Beta"
if optionsVersion ~= WeakAuras.versionString then
local message = string.format(L["The WeakAuras Options Addon version %s doesn't match the WeakAuras version %s. If you updated the addon while the game was running, try restarting World of Warcraft. Otherwise try reinstalling WeakAuras"],
+2 -2
View File
@@ -1772,8 +1772,8 @@ function OptionsPrivate.UpdateTextReplacements(frame, data)
local tempProps = {}
-- Add the properties to the temporary table
for name, desc in pairs(triggerProps) do
table.insert(tempProps, {triggerNum = triggerNum, name = name, desc = desc})
for name, data in pairs(triggerProps) do
table.insert(tempProps, {triggerNum = triggerNum, name = name, desc = data.display})
end
-- Sort the temporary table by name
+1 -1
View File
@@ -1,7 +1,7 @@
## Interface: 30300
## Title: WeakAuras Options
## Author: The WeakAuras Team
## Version: 5.19.12
## Version: 5.20.0
## IconTexture: Interface\AddOns\WeakAuras\Media\Textures\icon.blp
## Notes: Options for WeakAuras
## Notes-esES: Opciones para WeakAuras
+1 -1
View File
@@ -1,7 +1,7 @@
## Interface: 30300
## Title: WeakAuras Templates
## Author: The WeakAuras Team
## Version: 5.19.12
## Version: 5.20.0
## Notes: Templates for WeakAuras
## Notes-esES: Plantillas para WeakAuras
## Notes-esMX: Plantillas para WeakAuras