diff --git a/WeakAuras/Modernize.lua b/WeakAuras/Modernize.lua index b1afb3d..2c6aa5e 100644 --- a/WeakAuras/Modernize.lua +++ b/WeakAuras/Modernize.lua @@ -1206,8 +1206,25 @@ function Private.Modernize(data) end end + -- Internal version 55 contained a incorrect Modernize (data.forceEvents = nil) reused to + -- migrate deathRune to isDeathRune & migrate use_inverse to use_genericShowOn if data.internalVersion < 55 then - data.forceEvents = true + for _, triggerData in ipairs(data.triggers) do + if triggerData.trigger.event == "Death Knight Rune" then + -- migrate deathRune to isDeathRune + if triggerData.trigger.use_deathRune then + triggerData.trigger.use_isDeathRune = triggerData.trigger.use_deathRune + end + triggerData.trigger.use_deathRune = nil + -- migrate use_inverse to use_genericShowOn + if not (triggerData.trigger.use_genericShowOn or triggerData.trigger.genericShowOn) then + triggerData.trigger.use_genericShowOn = true + triggerData.trigger.genericShowOn = triggerData.trigger.use_inverse and "showOnCooldown" + or "showAlways" + end + triggerData.trigger.use_inverse = nil + end + end end -- Internal version 55 contained a incorrect Modernize diff --git a/WeakAuras/Prototypes.lua b/WeakAuras/Prototypes.lua index f83d3d0..c035585 100644 --- a/WeakAuras/Prototypes.lua +++ b/WeakAuras/Prototypes.lua @@ -5382,36 +5382,38 @@ Private.event_prototypes = { WeakAuras.WatchRuneCooldown(trigger.rune); local ret = [[ local rune = %s; + local genericShowOn = %s + local includeDeathRunes = %s; local startTime, duration = WeakAuras.GetRuneCooldown(rune); - local inverse = %s; - local death = %s; - local numBloodRunes = 0; local numUnholyRunes = 0; local numFrostRunes = 0; local numDeathRunes = 0; + local numRunes = 0; + local isDeathRune = GetRuneType(rune) == 4 for index = 1, 6 do - local startTime = select(1, GetRuneCooldown(index)); + local startTime = GetRuneCooldown(index); if startTime == 0 then - if GetRuneType(index) == 1 then - numBloodRunes = numBloodRunes + 1; - elseif GetRuneType(index) == 2 then + numRunes = numRunes + 1; + local runeType = GetRuneType(index) + if runeType == 1 then + numBloodRunes = numBloodRunes + 1; + elseif runeType == 2 then + numFrostRunes = numFrostRunes + 1; + elseif runeType == 3 then numUnholyRunes = numUnholyRunes + 1; - elseif GetRuneType(index) == 3 then - numFrostRunes = numFrostRunes + 1; - elseif GetRuneType(index) == 4 then - numDeathRunes = numDeathRunes + 1; + elseif runeType == 4 then + numDeathRunes = numDeathRunes + 1; end end end - - if %s then + if includeDeathRunes then numBloodRunes = numBloodRunes + numDeathRunes; numUnholyRunes = numUnholyRunes + numDeathRunes; numFrostRunes = numFrostRunes + numDeathRunes; end ]]; - if(trigger.use_remaining and not trigger.use_inverse) then + if trigger.use_remaining then local ret2 = [[ local expirationTime = startTime + duration local remaining = expirationTime - GetTime(); @@ -5420,105 +5422,140 @@ Private.event_prototypes = { Private.ExecEnv.ScheduleScan(expirationTime - remainingCheck); end ]]; - ret = ret..ret2:format(tonumber(trigger.remaining) or 0); + ret = ret..ret2:format(tonumber(trigger.remaining or 0) or 0); end - return ret:format(trigger.rune, (trigger.use_inverse and "true" or "false"), (trigger.use_deathRune == true and "true" or trigger.use_deathRune == false and "false" or "nil"), (trigger.use_includeDeath and "true" or "false")); + return ret:format( + trigger.rune, + "[[" .. (trigger.genericShowOn or "") .. "]]", + (trigger.use_includeDeathRunes and "true" or "false") + ); end, + statesParameter = "one", args = { { name = "rune", display = L["Rune"], type = "select", values = "rune_specific_types", - test = [[ - ((inverse and startTime == 0) or (not inverse and startTime > 0)) - and - ((death == nil) or (death == true and GetRuneType(rune) == 4) or (death == false and GetRuneType(rune) ~= 4)) - ]], - enable = function(trigger) return not trigger.use_bloodRunes and not trigger.use_unholyRunes and not trigger.use_frostRunes end, + test = "(genericShowOn == \"showOnReady\" and (startTime == 0)) " .. + "or (genericShowOn == \"showOnCooldown\" and startTime > 0) " .. + "or (genericShowOn == \"showAlways\")", reloadOptions = true }, { - name = "deathRune", - display = L["Death Rune"], + name = "isDeathRune", + display = L["Is Death Rune"], type = "tristate", - test = "true", - enable = function(trigger) return trigger.use_rune end + init = "isDeathRune", + store = true, + conditionType = "bool", + enable = function(trigger) return trigger.use_rune end, }, { name = "remaining", display = L["Remaining Time"], type = "number", - enable = function(trigger) return trigger.use_rune and not(trigger.use_inverse) end + enable = function(trigger) return trigger.use_rune and not(trigger.genericShowOn == "showOnReady") end }, { - name = "inverse", - display = L["Inverse"], - type = "toggle", + name = "genericShowOn", + display = L["Show"], + type = "select", + values = "cooldown_progress_behavior_types", test = "true", + enable = function(trigger) return trigger.use_rune end, + required = true + }, + { + name = "runesCount", + display = L["Rune Count"], + type = "number", + init = "numRunes", + enable = function(trigger) return not trigger.use_rune end + }, + { + hidden = true, + name = "onCooldown", + test = "true", + display = L["On Cooldown"], + conditionType = "bool", + conditionTest = function(state, needle) + return state and state.show and (state.expirationTime and state.expirationTime > GetTime()) == (needle == 1) + end, enable = function(trigger) return trigger.use_rune end }, { name = "bloodRunes", - display = L["Blood Runes"], + display = L["Rune Count - Blood"], type = "number", init = "numBloodRunes", - enable = function(trigger) return not trigger.use_rune end - }, - { - name = "unholyRunes", - display = L["Unholy Runes"], - type = "number", - init = "numUnholyRunes", - enable = function(trigger) return not trigger.use_rune end + store = true, + conditionType = "number", + enable = function(trigger) return not trigger.use_rune end, }, { name = "frostRunes", - display = L["Frost Runes"], + display = L["Rune Count - Frost"], type = "number", init = "numFrostRunes", - enable = function(trigger) return not trigger.use_rune end + store = true, + conditionType = "number", + enable = function(trigger) return not trigger.use_rune end, }, { - name = "includeDeath", + name = "unholyRunes", + display = L["Rune Count - Unholy"], + type = "number", + init = "numUnholyRunes", + store = true, + conditionType = "number", + enable = function(trigger) return not trigger.use_rune end, + }, + { + name = "includeDeathRunes", display = L["Include Death Runes"], type = "toggle", test = "true", - enable = function(trigger) return trigger.use_bloodRunes or trigger.use_unholyRunes or trigger.use_frostRunes end + enable = function(trigger) return trigger.use_bloodRunes or trigger.use_unholyRunes or trigger.use_frostRunes end, }, }, durationFunc = function(trigger) if trigger.use_rune then - local startTime, duration - if not(trigger.use_inverse) then - startTime, duration = WeakAuras.GetRuneCooldown(trigger.rune); - end - - startTime = startTime or 0; - duration = duration or 0; - - return duration, startTime + duration; + local startTime, duration = WeakAuras.GetRuneCooldown(trigger.rune) + return duration, startTime + duration else - return 1, 0; + local numRunes = 0; + for index = 1, 6 do + if GetRuneCooldown(index) == 0 then + numRunes = numRunes + 1; + end + end + return numRunes, 6, true; end end, + stacksFunc = function(trigger) + local numRunes = 0; + for index = 1, 6 do + if GetRuneCooldown(index) == 0 then + numRunes = numRunes + 1; + end + end + return numRunes; + end, nameFunc = function(trigger) - local runeNames = { - [1] = L["Blood"], - [2] = L["Unholy"], - [3] = L["Frost"], - [4] = L["Death"] - }; + local runeNames = { L["Blood"], L["Frost"], L["Unholy"], L["Death"] } return runeNames[GetRuneType(trigger.rune)]; end, iconFunc = function(trigger) - local runeIcons = { - [1] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Blood", - [2] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Unholy", - [3] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Frost", - [4] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Death" - }; - return runeIcons[GetRuneType(trigger.rune)]; + if trigger.rune then + local runeIcons = { + "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Blood", + "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Frost", + "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Unholy", + "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Death" + }; + return runeIcons[GetRuneType(trigger.rune)]; + end end, automaticrequired = true, }, diff --git a/WeakAuras/Types.lua b/WeakAuras/Types.lua index e2bf10c..f798430 100644 --- a/WeakAuras/Types.lua +++ b/WeakAuras/Types.lua @@ -1770,7 +1770,7 @@ Private.rune_specific_types = { [3] = L["Unholy Rune #1"], [4] = L["Unholy Rune #2"], [5] = L["Frost Rune #1"], - [6] = L["Frost Rune #2"] + [6] = L["Frost Rune #2"], } Private.custom_trigger_types = {