From 534755767e0ff8f02cbc6bbc18e27495a95664df Mon Sep 17 00:00:00 2001 From: Buds Date: Sun, 22 Oct 2023 16:12:28 +0200 Subject: [PATCH] BT2: add affectedUnits and unaffectedUnits tables when Fetch affected names option is toggle --- WeakAuras/BuffTrigger2.lua | 45 ++++++++++++++++++++----------- WeakAurasOptions/BuffTrigger2.lua | 2 +- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/WeakAuras/BuffTrigger2.lua b/WeakAuras/BuffTrigger2.lua index 4714cc9dc0..30d4edcfe7 100644 --- a/WeakAuras/BuffTrigger2.lua +++ b/WeakAuras/BuffTrigger2.lua @@ -673,7 +673,7 @@ local roleIcons = { TANK = CreateTextureMarkup([=[Interface\LFGFrame\UI-LFG-ICON-ROLES]=], 256, 256, 0, 0, GetTexCoordsForRole("TANK")) } -local function UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, matchCount, unitCount, maxUnitCount, matchCountPerUnit, totalStacks, affected, unaffected, role, raidMark) +local function UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, matchCount, unitCount, maxUnitCount, matchCountPerUnit, totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, raidMark) local debuffClassIcon = WeakAuras.EJIcons[bestMatch.debuffClass] if not triggerStates[cloneId] then triggerStates[cloneId] = { @@ -711,7 +711,9 @@ local function UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, mat tooltip4 = bestMatch.tooltip4, points = bestMatch.points, affected = affected, + affectedUnits = affectedUnits, unaffected = unaffected, + unaffectedUnits = unaffectedUnits, totalStacks = totalStacks, initialTime = time, refreshTime = time, @@ -898,11 +900,13 @@ local function UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, mat if state.affected ~= affected then state.affected = affected + state.affectedUnits = affectedUnits changed = true end if state.unaffected ~= unaffected then state.unaffected = unaffected + state.unaffectedUnits = unaffectedUnits changed = true end @@ -923,7 +927,7 @@ local function UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, mat end end -local function UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, unit, matchCount, unitCount, maxUnitCount, matchCountPerUnit, totalStacks, affected, unaffected, role, raidMark) +local function UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, unit, matchCount, unitCount, maxUnitCount, matchCountPerUnit, totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, raidMark) local fallbackName, fallbackIcon = BuffTrigger.GetNameAndIconSimple(WeakAuras.GetData(triggerInfo.id), triggerInfo.triggernum) if not triggerStates[cloneId] then triggerStates[cloneId] = { @@ -940,7 +944,9 @@ local function UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, active = false, time = time, affected = affected, + affectedUnits = affectedUnits, unaffected = unaffected, + unaffectedUnits = unaffectedUnits, unit = unit, role = role, raidMark = raidMark, @@ -1097,11 +1103,13 @@ local function UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, if state.affected ~= affected then state.affected = affected + state.affectedUnits = affectedUnits changed = true end if state.unaffected ~= unaffected then state.unaffected = unaffected + state.unaffectedUnits = unaffectedUnits changed = true end @@ -1402,19 +1410,22 @@ end local function FormatAffectedUnaffected(triggerInfo, matchedUnits) local affected = "" local unaffected = "" + local affectedUnits, unaffectedUnits = {}, {} for unit in GetAllUnits(triggerInfo.unit, nil, triggerInfo.includePets) do if activeGroupScanFuncs[unit] and activeGroupScanFuncs[unit][triggerInfo] then if matchedUnits[unit] then affected = affected .. (GetUnitName(unit, false) or unit) .. ", " + tinsert(affectedUnits, unit) else unaffected = unaffected .. (GetUnitName(unit, false) or unit) .. ", " + tinsert(unaffectedUnits, unit) end end end unaffected = unaffected == "" and L["None"] or unaffected:sub(1, -3) affected = affected == "" and L["None"] or affected:sub(1, -3) - return affected, unaffected + return affected, affectedUnits, unaffected, unaffectedUnits end local recheckTriggerInfo @@ -1494,9 +1505,9 @@ local function UpdateTriggerState(time, id, triggernum) end if useMatch then - local affected, unaffected + local affected, unaffected, affectedUnits, unaffectedUnits if triggerInfo.useAffected then - affected, unaffected = FormatAffectedUnaffected(triggerInfo, matchedUnits) + affected, affectedUnits, unaffected, unaffectedUnits = FormatAffectedUnaffected(triggerInfo, matchedUnits) end local unit = bestUnit(triggerInfo, bestMatch) @@ -1504,9 +1515,9 @@ local function UpdateTriggerState(time, id, triggernum) local mark = markForTriggerInfo(triggerInfo, unit) if bestMatch then - updated = UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, matchCount, unitCount, maxUnitCount, matchCount, totalStacks, affected, unaffected, role, mark) + updated = UpdateStateWithMatch(time, bestMatch, triggerStates, cloneId, matchCount, unitCount, maxUnitCount, matchCount, totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, mark) else - updated = UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, unit, 0, 0, maxUnitCount, 0, 0, affected, unaffected, role, mark) + updated = UpdateStateWithNoMatch(time, triggerStates, triggerInfo, cloneId, unit, 0, 0, maxUnitCount, 0, 0, affected, affectedUnits, unaffected, unaffectedUnits, role, mark) end else updated = RemoveState(triggerStates, cloneId) @@ -1550,9 +1561,9 @@ local function UpdateTriggerState(time, id, triggernum) if useMatches then table.sort(auraDatas, SortMatchDataByUnitIndex) - local affected, unaffected + local affected, affectedUnits, unaffected, unaffectedUnits if triggerInfo.useAffected then - affected, unaffected = FormatAffectedUnaffected(triggerInfo, matchedUnits) + affected, affectedUnits, unaffected, unaffectedUnits = FormatAffectedUnaffected(triggerInfo, matchedUnits) end local usedCloneIds = {}; @@ -1569,7 +1580,7 @@ local function UpdateTriggerState(time, id, triggernum) local role = roleForTriggerInfo(triggerInfo, auraData.unit) local mark = markForTriggerInfo(triggerInfo, auraData.unit) updated = UpdateStateWithMatch(time, auraData, triggerStates, cloneId, matchCount, unitCount, maxUnitCount, - matchCountPerUnit[auraData.unit], totalStacks, affected, unaffected, role, mark) or updated + matchCountPerUnit[auraData.unit], totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, mark) or updated cloneIds[cloneId] = true end @@ -1578,7 +1589,7 @@ local function UpdateTriggerState(time, id, triggernum) local role = roleForTriggerInfo(triggerInfo, unit) local mark = markForTriggerInfo(triggerInfo, unit) updated = UpdateStateWithNoMatch(time, triggerStates, triggerInfo, "", nil, 0, 0, maxUnitCount, 0, totalStacks, - affected, unaffected, role, mark) or updated + affected, affectedUnits, unaffected, unaffectedUnits, role, mark) or updated cloneIds[""] = true end end @@ -1617,9 +1628,9 @@ local function UpdateTriggerState(time, id, triggernum) local cloneIds = {} if useMatches then - local affected, unaffected + local affected, affectedUnits, unaffected, unaffectedUnits if triggerInfo.useAffected then - affected, unaffected = FormatAffectedUnaffected(triggerInfo, matchedUnits) + affected, affectedUnits, unaffected, unaffectedUnits = FormatAffectedUnaffected(triggerInfo, matchedUnits) end if triggerInfo.perUnitMode == "affected" then @@ -1628,7 +1639,7 @@ local function UpdateTriggerState(time, id, triggernum) local role = roleForTriggerInfo(triggerInfo, unit) local mark = markForTriggerInfo(triggerInfo, unit) updated = UpdateStateWithMatch(time, bestMatch, triggerStates, unit, matchCount, unitCount, maxUnitCount, - matchCountPerUnit[unit], totalStacks, affected, unaffected, role, mark) + matchCountPerUnit[unit], totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, mark) or updated cloneIds[unit] = true end @@ -1643,14 +1654,14 @@ local function UpdateTriggerState(time, id, triggernum) if bestMatch then if triggerInfo.perUnitMode == "all" then updated = UpdateStateWithMatch(time, bestMatch, triggerStates, unit, matchCount, unitCount, maxUnitCount, - matchCountPerUnit[unit], totalStacks, affected, unaffected, role, mark) + matchCountPerUnit[unit], totalStacks, affected, affectedUnits, unaffected, unaffectedUnits, role, mark) or updated cloneIds[unit] = true end else updated = UpdateStateWithNoMatch(time, triggerStates, triggerInfo, unit, unit, matchCount, unitCount, maxUnitCount, matchCountPerUnit[unit], totalStacks, - affected, unaffected, role) + affected, affectedUnits, unaffected, unaffectedUnits, role) or updated cloneIds[unit] = true end @@ -3374,6 +3385,8 @@ function BuffTrigger.GetAdditionalProperties(data, triggernum) if (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.useAffected then ret = ret .. "|cFFFF0000%".. triggernum .. ".affected|r - " .. L["Names of affected Players"] .. "\n" ret = ret .. "|cFFFF0000%".. triggernum .. ".unaffected|r - " .. L["Names of unaffected Players"] .. "\n" + ret = ret .. "|cFFFF0000%".. triggernum .. ".affectedUnits|r - " .. L["Units of affected Players in a table format"] .. "\n" + ret = ret .. "|cFFFF0000%".. triggernum .. ".unaffectedUnits|r - " .. L["Units of unaffected Players in a table format"] .. "\n" end return ret diff --git a/WeakAurasOptions/BuffTrigger2.lua b/WeakAurasOptions/BuffTrigger2.lua index d2f96ab0cd..fb24ab1860 100644 --- a/WeakAurasOptions/BuffTrigger2.lua +++ b/WeakAurasOptions/BuffTrigger2.lua @@ -723,7 +723,7 @@ local function GetBuffTriggerOptions(data, triggernum) }, useAffected = { type = "toggle", - name = L["Fetch Affected/Unaffected Names"], + name = L["Fetch Affected/Unaffected Names and Units"], width = WeakAuras.doubleWidth, order = 65.1, hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")) end