diff --git a/WeakAuras/GenericTrigger.lua b/WeakAuras/GenericTrigger.lua index 5053578..cd26525 100644 --- a/WeakAuras/GenericTrigger.lua +++ b/WeakAuras/GenericTrigger.lua @@ -2382,7 +2382,7 @@ do local unit, name, _ = ...; if(unit == "player") then if(gcdSpellName ~= name) then - local icon = GetSpellTexture(name); + local _,_,icon = GetSpellInfo(name or 0); gcdSpellName = name; gcdSpellIcon = icon; if not WeakAuras.IsPaused() then @@ -2390,7 +2390,7 @@ do end end end - elseif(event == "UNIT_INVENTORY_CHANGED" and ... and ... == "player" or event == "BAG_UPDATE_COOLDOWN" or event == "PLAYER_EQUIPMENT_CHANGED") then + elseif(event == "UNIT_INVENTORY_CHANGED" and ... == "player" or event == "BAG_UPDATE_COOLDOWN" or event == "PLAYER_EQUIPMENT_CHANGED") then Private.CheckItemSlotCooldowns(); end Private.StopProfileSystem("generictrigger cd tracking"); diff --git a/WeakAuras/Modernize.lua b/WeakAuras/Modernize.lua index a3a24e5..693b46b 100644 --- a/WeakAuras/Modernize.lua +++ b/WeakAuras/Modernize.lua @@ -1686,7 +1686,7 @@ function Private.Modernize(data, oldSnapshot) end end - --[[if data.internalVersion < 77 then + if data.internalVersion < 77 then -- fix data broken by wago export local triggerFix = { talent = { @@ -1748,7 +1748,7 @@ function Private.Modernize(data, oldSnapshot) fixData(triggerData.trigger, triggerFix) end fixData(data.load, loadFix) - end]] + end if data.internalVersion < 79 then if data.triggers then diff --git a/WeakAuras/Prototypes.lua b/WeakAuras/Prototypes.lua index 12b1245..a313026 100644 --- a/WeakAuras/Prototypes.lua +++ b/WeakAuras/Prototypes.lua @@ -3231,13 +3231,7 @@ Private.event_prototypes = { type = "spell", events = {}, loadInternalEventFunc = function(trigger, untrigger) - trigger.spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0; - local spellName; - if (trigger.use_exact_spellName) then - spellName = trigger.spellName; - else - spellName = type(trigger.spellName) == "number" and GetSpellInfo(trigger.spellName) or trigger.spellName; - end + local spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0; if spellName == nil then return {} end local events = { "SPELL_COOLDOWN_CHANGED:" .. spellName, @@ -3254,27 +3248,17 @@ Private.event_prototypes = { force_events = "SPELL_COOLDOWN_FORCE", name = L["Cooldown/Charges/Count"], loadFunc = function(trigger) - trigger.spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0; - local spellName; - if (trigger.use_exact_spellName) then - spellName = trigger.spellName; - else - spellName = type(trigger.spellName) == "number" and GetSpellInfo(trigger.spellName) or trigger.spellName; - end - WeakAuras.WatchSpellCooldown(spellName, trigger.use_matchedRune); + local spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0; + WeakAuras.WatchSpellCooldown(spellName, trigger.use_matchedRune) if (trigger.use_showgcd) then WeakAuras.WatchGCD(); end end, init = function(trigger) - trigger.spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0; - local spellName; - if (trigger.use_exact_spellName) then - spellName = trigger.spellName; - else - spellName = type(trigger.spellName) == "number" and GetSpellInfo(trigger.spellName) or trigger.spellName; - end + local spellName = type(trigger.spellName) ~= "table" and trigger.spellName or 0 + print(spellName) local ret = {} + local showOnCheck = "false"; if (trigger.genericShowOn == "showOnReady") then showOnCheck = "startTime and startTime == 0 or gcdCooldown"; @@ -3283,15 +3267,8 @@ Private.event_prototypes = { elseif (trigger.genericShowOn == "showAlways") then showOnCheck = "startTime ~= nil"; end - local trackSpecificCharge = trigger.use_trackcharge and trigger.trackcharge and trigger.trackcharge ~= "" - local track = trigger.track or "auto" - if track == "auto" and trackSpecificCharge then - track = "charges" - end - if (type(spellName) == "string") then - spellName = string.format("%q", spellName) - end - table.insert(ret, ([=[ + + table.insert(ret, ([=[ local spellname = %s local ignoreRuneCD = %s local showgcd = %s; @@ -3302,69 +3279,43 @@ Private.event_prototypes = { local genericShowOn = %s local expirationTime = startTime and duration and startTime + duration state.spellname = spellname; - ]=]):format( - spellName, + ]=]):format(spellName, (trigger.use_matchedRune and "true" or "false"), (trigger.use_showgcd and "true" or "false"), showOnCheck )) - table.insert(ret, [=[ - if paused then - if not state.paused then - state.paused = true - state.expirationTime = nil - state.changed = true - end - if state.remaining ~= startTime then - state.remaining = startTime - state.changed = true - end - else - if (state.expirationTime ~= expirationTime) then - state.expirationTime = expirationTime; - state.changed = true; - end - if state.paused then - state.paused = false - state.remaining = nil - state.changed = true - end - end - if (state.duration ~= duration) then - state.duration = duration; - state.changed = true; - end - state.progressType = 'timed'; - ]=]) - - if(trigger.use_remaining and trigger.genericShowOn ~= "showOnReady") then - table.insert(ret, ([[ - local remaining = 0; - if (not paused and expirationTime and expirationTime > 0) then - remaining = expirationTime - GetTime(); - local remainingCheck = %s; - if(remaining >= remainingCheck and remaining > 0) then - local event = "COOLDOWN_REMAINING_CHECK:" .. %s - Private.ExecEnv.ScheduleScan(expirationTime - remainingCheck, event); - end - end - ]]):format(tonumber(trigger.remaining or 0) or 0, spellName)) + table.insert(ret, ([=[ + if (state.expirationTime ~= expirationTime) then + state.expirationTime = expirationTime; + state.changed = true; end + if (state.duration ~= duration) then + state.duration = duration; + state.changed = true; + end + state.progressType = 'timed'; + ]=])) - return table.concat(ret) + if(trigger.use_remaining and trigger.genericShowOn ~= "showOnReady") then + table.insert(ret, ([[ + local remaining = 0; + if (expirationTime and expirationTime > 0) then + remaining = expirationTime - GetTime(); + local remainingCheck = %s; + if(remaining >= remainingCheck and remaining > 0) then + local event = "COOLDOWN_REMAINING_CHECK:" .. %s + Private.ExecEnv.ScheduleScan(expirationTime - remainingCheck, event); + end + end + ]]):format(tonumber(trigger.remaining or 0) or 0, spellName)) + end + + return table.concat(ret) end, GetNameAndIcon = function(trigger) - local spellName - if (trigger.use_exact_spellName) then - spellName = tonumber(trigger.spellName) - else - spellName = type(trigger.spellName) == "number" and GetSpellInfo(trigger.spellName) or trigger.spellName - end - if spellName then - local name, _, icon = GetSpellInfo(spellName) - return name, icon - end + local name, _, icon = GetSpellInfo(trigger.spellName or 0) + return name or "Invalid", icon end, statesParameter = "one", progressType = "timed", @@ -3424,7 +3375,7 @@ Private.event_prototypes = { }, { name = "charges", - display = L["Stacks"], + display = L["Charges"], type = "number", store = true, conditionType = "number", @@ -3445,7 +3396,7 @@ Private.event_prototypes = { store = true }, { - hidden = true, + hidden = true, name = "maxCharges", store = true, display = L["Max Charges"], @@ -3484,7 +3435,8 @@ Private.event_prototypes = { test = "true", conditionType = "bool", conditionTest = function(state, needle) - return state and state.show and (IsUsableSpell(state.spellname or "") == (needle == 1)) + return state and state.show and + ((IsUsableSpell((type(state.spellname) == "number" and GetSpellInfo(state.spellname)) or state.spellname) == 1 and true or false) == (needle == 1)) end, conditionEvents = { "SPELL_UPDATE_USABLE", @@ -3499,7 +3451,8 @@ Private.event_prototypes = { test = "true", conditionType = "bool", conditionTest = function(state, needle) - return state and state.show and (select(2, IsUsableSpell(state.spellname or "")) == (needle == 1)); + return state and state.show and + ((select(2, IsUsableSpell((type(state.spellname) == "number" and GetSpellInfo(state.spellname)) or state.spellname)) == 1 and true or false) == (needle == 1)) end, conditionEvents = { "SPELL_UPDATE_USABLE", @@ -3772,8 +3725,7 @@ Private.event_prototypes = { local itemName = type(trigger.itemName) == "number" and trigger.itemName or string.format("%q", trigger.itemName or "0") local ret = [=[ local itemname = %s; - local name = GetItemInfo(itemname or 0) or "Invalid" - local icon = GetItemIcon(itemname or 0) + local name, _, _, _, _, _, _, _, _, icon = GetItemInfo(itemname or 0) or "Invalid" local showgcd = %s local startTime, duration, enabled, gcdCooldown = WeakAuras.GetItemCooldown(itemname, showgcd); local expirationTime = startTime + duration @@ -3796,8 +3748,7 @@ Private.event_prototypes = { "[[" .. (trigger.genericShowOn or "") .. "]]"); end, GetNameAndIcon = function(trigger) - local name = GetItemInfo(trigger.itemName or 0) - local icon = GetItemIcon(trigger.itemName or 0) + local name, _, _, _, _, _, _, _, _, icon = GetItemInfo(trigger.itemName or 0) return name, icon end, statesParameter = "one", @@ -4973,6 +4924,10 @@ Private.event_prototypes = { trigger.use_includeCharges and "true" or "nil" ) end, + GetNameAndIcon = function(trigger) + local name, _, _, _, _, _, _, _, _, icon = GetItemInfo(trigger.itemName or 0) + return name, icon + end, args = { { name = "itemName", @@ -5045,14 +5000,14 @@ Private.event_prototypes = { }, { name = "icon", - init = "GetItemIcon(itemName or '')", + init = "icon", hidden = true, store = true, test = "true" }, { name = "name", - init = "itemName and itemName ~= '' and GetItemInfo(itemName) or itemName", + init = "itemName ~= '' and itemName", hidden = true, store = true, test = "true" @@ -5802,12 +5757,23 @@ Private.event_prototypes = { local itemName = type(trigger.itemName) == "number" and trigger.itemName or string.format("%q", trigger.itemName or "0") local ret = [[ - local inverse = %s; + local inverse = %s local triggerItemName = %s - local itemName, _, _, _, _, _, _, _, _, icon = GetItemInfo(triggerItemName) - local itemSlot = %s; - local equipped = WeakAuras.CheckForItemEquipped(itemName, itemSlot); - ]]; + local _, _, _, _, icon = GetItemInfo(triggerItemName) + local itemSlot = %s + ]] + + if trigger.use_exact_itemName then + ret = ret ..[[ + local itemName = triggerItemName + local equipped = WeakAuras.CheckForItemEquipped(triggerItemName, itemSlot) + ]] + else + ret = ret ..[[ + local itemName = GetItemInfo(triggerItemName) + local equipped = WeakAuras.CheckForItemEquipped(itemName, itemSlot) + ]] + end return ret:format(trigger.use_inverse and "true" or "false", itemName, trigger.use_itemSlot and trigger.itemSlot or "nil"); end, @@ -5822,7 +5788,8 @@ Private.event_prototypes = { display = L["Item"], type = "item", required = true, - test = "true" + test = "true", + showExactOption = true }, { name = "itemSlot",