Fix incorrect login message, rework LibGroupTalentsWrapper

The login message was triggered incorrectly due to the "Beta" tag in the version string. This has been fixed.

Almost completely removed due to impracticality with the 3.3.5a API.
When RAID_ROSTER_UPDATE or PARTY_MEMBERS_CHANGED fires, data is unavailable for ~1.5 seconds.
If these events fire again within that time, the timer needs to be restarted, leading to excessive code complexity and requiring handling for every edge case.
Instead, we now simply check if the unit has changed when the library fires its callback.
This commit is contained in:
NoM0Re
2025-02-19 01:45:04 +01:00
parent fd6a0b01f4
commit cfc26d8c99
7 changed files with 34 additions and 153 deletions
+4 -4
View File
@@ -1110,8 +1110,7 @@ local function TriggerInfoApplies(triggerInfo, unit)
return false
end
local unitRole = WeakAuras.GetUnitRole(controllingUnit)
if triggerInfo.groupRole and unitRole and not triggerInfo.groupRole[unitRole or ""] then
if triggerInfo.groupRole and not triggerInfo.groupRole[WeakAuras.LGT:GetUnitRole(controllingUnit) or ""] then
return false
end
@@ -1120,8 +1119,9 @@ local function TriggerInfoApplies(triggerInfo, unit)
end
if triggerInfo.specId then
local spec = Private.LibGroupTalentsWrapper.SpecForUnit(controllingUnit)
if not triggerInfo.specId[spec] then
local spec = WeakAuras.LGT:GetUnitTalentSpec(controllingUnit)
local class = select(2, UnitClass(controllingUnit))
if not (spec and class and triggerInfo.specId[class .. spec]) then
return false
end
end
+1 -1
View File
@@ -3053,7 +3053,7 @@ function WeakAuras.WatchUnitChange(unit)
watchUnitChange.unitRaidRole[unit] = newRaidRole
end
local oldRole = watchUnitChange.unitRoles[unit]
local newRole = WeakAuras.GetUnitRole(unit)
local newRole = WeakAuras.LGT:GetUnitRole(unit)
if oldRole ~= newRole then
eventsToSend["UNIT_ROLE_CHANGED_" .. unit] = unit
watchUnitChange.unitRoles[unit] = newRole
+1 -1
View File
@@ -80,7 +80,7 @@ if not libsAreOk then
WeakAuras.prettyPrint("WeakAuras is missing necessary libraries. Please reinstall a proper package.")
end
if versionString ~= versionStringFromToc and versionStringFromToc ~= "Dev" then
if versionString ~= versionStringFromToc .. " Beta" and versionStringFromToc ~= "Dev" then
WeakAuras.prettyPrint("You need to restart your game client to complete the WeakAuras update!")
end
+6 -138
View File
@@ -2,158 +2,26 @@ if not WeakAuras.IsLibsOK() then return end
local AddonName, Private = ...
-- Lua APIs
local unpack, wipe = unpack, wipe
-- WoW APIs
local UnitName, UnitIsUnit, UnitClass, GetNumGroupMembers = UnitName, UnitIsUnit, UnitClass, GetNumGroupMembers
local LibGroupTalents = LibStub("LibGroupTalents-1.0")
local nameToGlyphs = {}
local nameToSpecMap = {}
local nameToUnitRole = {}
local nameToUnitMap = {
[UnitName("player")] = "player"
}
local LibGroupTalents = LibStub:GetLibrary("LibGroupTalents-1.0", true)
local subscribers = {}
Private.LibGroupTalentsWrapper = {
Register = function(f) end,
SpecForUnit = function(unit) end,
GetUnitRole = function(unit) end,
SpecRolePositionForUnit = function(unit) end,
CheckTalentForUnit = function(unit) end,
CheckGlyphForUnit = function(unit) end,
}
if LibGroupTalents then
--- LibGroupTalents callback for talents and glyphs
function Private.LibGroupTalentsWrapper:LibGroupTalentsCallback(_, _, unit)
if not unit then
return
end
local unitName = UnitName(unit)
local ownName = UnitName("player")
local numMembers = GetNumGroupMembers()
local units = IsInRaid() and WeakAuras.raidUnits or WeakAuras.partyUnits
nameToUnitMap = { [ownName] = "player" }
for i = 1, numMembers do
local groupUnitName = UnitName(units[i])
if groupUnitName then
nameToUnitMap[groupUnitName] = groupUnitName
end
end
for storedName in pairs(nameToSpecMap) do
if not nameToUnitMap[storedName] then
nameToSpecMap[storedName] = nil
nameToGlyphs[storedName] = nil
nameToUnitRole[storedName] = nil
end
end
local specInfo = { LibGroupTalents:GetUnitTalentSpec(unit) }
local class = select(2, UnitClass(unit))
if specInfo and #specInfo > 0 and class then
nameToSpecMap[unitName] = {
class .. specInfo[1], unpack(specInfo)
}
end
nameToUnitRole[unitName] = LibGroupTalents:GetUnitRole(unit)
nameToGlyphs[unitName] = {}
for _, glyphId in ipairs({ LibGroupTalents:GetUnitGlyphs(unit) }) do
if glyphId then
nameToGlyphs[unitName][glyphId] = true
end
end
if nameToUnitMap[unitName] then
function Private.LibGroupTalentsWrapper.CallbackHandler(_, _, _, unit)
if unit then
print(unit)
for _, f in ipairs(subscribers) do
f(nameToUnitMap[unitName])
f(unit)
end
end
end
LibGroupTalents.RegisterCallback(Private.LibGroupTalentsWrapper, "LibGroupTalents_Update", "LibGroupTalentsCallback")
LibGroupTalents.RegisterCallback(Private.LibGroupTalentsWrapper, "LibGroupTalents_GlyphUpdate", "LibGroupTalentsCallback")
function Private.LibGroupTalentsWrapper.Register(f)
table.insert(subscribers, f)
end
function Private.LibGroupTalentsWrapper.SpecForUnit(unit)
local unitName = UnitName(unit)
local class = select(2, UnitClass(unit))
if nameToSpecMap[unitName] then
return nameToSpecMap[unitName]
WeakAuras.LGT.RegisterCallback(Private.LibGroupTalentsWrapper, "LibGroupTalents_Update", "CallbackHandler")
end
if UnitIsUnit(unit, "player") and class then
local specInfo = { LibGroupTalents:GetUnitTalentSpec(unit) }
if specInfo and #specInfo > 0 then
return class .. specInfo[1], unpack(specInfo)
end
end
end
function Private.LibGroupTalentsWrapper.GetUnitRole(unit)
local unitName = UnitName(unit)
if nameToUnitRole[unitName] then
return nameToUnitRole[unitName]
end
if UnitIsUnit(unit, "player") then
local unitRole = LibGroupTalents:GetUnitRole(unit)
return unitRole
end
end
function Private.LibGroupTalentsWrapper.SpecRolePositionForUnit(unit)
local data = nameToSpecMap[UnitName(unit)]
if data then
return unpack(data, 2)
end
if UnitIsUnit(unit, "player") then
return LibGroupTalents:GetUnitTalentSpec(unit)
end
end
function Private.LibGroupTalentsWrapper.CheckTalentForUnit(unit, talentId)
return UnitIsUnit(unit, "player") and LibGroupTalents:UnitHasTalent(unit, talentId) and true or nil
end
function Private.LibGroupTalentsWrapper.CheckGlyphForUnit(unit, glyphId)
local unitName = UnitName(unit)
if nameToGlyphs[unitName] and nameToGlyphs[unitName][glyphId] then
return true
end
if UnitIsUnit(unit, "player") then
local glyphs = { LibGroupTalents:GetUnitGlyphs(unit) }
if glyphs then
for _, id in ipairs(glyphs) do
if id == glyphId then
return true
end
end
end
end
end
end
-- Export for GenericTrigger/Custom Code
WeakAuras.SpecForUnit = Private.LibGroupTalentsWrapper.SpecForUnit
WeakAuras.GetUnitRole = Private.LibGroupTalentsWrapper.GetUnitRole
WeakAuras.SpecRolePositionForUnit = Private.LibGroupTalentsWrapper.SpecRolePositionForUnit
WeakAuras.CheckTalentForUnit = Private.LibGroupTalentsWrapper.CheckTalentForUnit
WeakAuras.CheckGlyphForUnit = Private.LibGroupTalentsWrapper.CheckGlyphForUnit
+15 -7
View File
@@ -18,6 +18,8 @@ local MONEY = MONEY
local WeakAuras = WeakAuras
local L = WeakAuras.L
local LibGroupTalents = LibStub("LibGroupTalents-1.0")
local SpellRange = LibStub("SpellRange-1.0")
function WeakAuras.IsSpellInRange(spellId, unit)
return SpellRange.IsSpellInRange(spellId, unit)
@@ -796,6 +798,12 @@ function WeakAuras.GetSpellCritChance()
return spellCrit
end
function WeakAuras.GetSpecString(unit)
local spec = WeakAuras.LGT:GetUnitTalentSpec(unit)
local class = select(2, UnitClass(unit))
return spec and class and (class .. spec)
end
function WeakAuras.IsSpellKnownForLoad(spell, exact)
local result = WeakAuras.IsSpellKnown(spell)
if exact or result then
@@ -1589,7 +1597,7 @@ Private.event_prototypes = {
name = "specId",
display = L["Specialization"],
type = "multiselect",
init = "WeakAuras.SpecForUnit(unit)",
init = "WeakAuras.LGT:GetUnitTalentSpec(unit)",
values = "spec_types_all",
store = true,
conditionType = "select",
@@ -1608,7 +1616,7 @@ Private.event_prototypes = {
name = "role",
display = L["Spec Role"],
type = "select",
init = "WeakAuras.GetUnitRole(unit)",
init = "WeakAuras.LGT:GetUnitRole(unit)",
values = "role_types",
store = true,
conditionType = "select",
@@ -2113,7 +2121,7 @@ Private.event_prototypes = {
name = "specId",
display = L["Specialization"],
type = "multiselect",
init = "WeakAuras.SpecForUnit(unit)",
init = "WeakAuras.GetSpecString(unit)",
values = "spec_types_all",
store = true,
conditionType = "select",
@@ -2126,7 +2134,7 @@ Private.event_prototypes = {
name = "role",
display = L["Spec Role"],
type = "select",
init = "WeakAuras.GetUnitRole(unit)",
init = "WeakAuras.LGT:GetUnitRole(unit)",
values = "role_types",
store = true,
conditionType = "select",
@@ -2534,7 +2542,7 @@ Private.event_prototypes = {
name = "specId",
display = L["Specialization"],
type = "multiselect",
init = "WeakAuras.SpecForUnit(unit)",
init = "WeakAuras.GetSpecString(unit)",
values = "spec_types_all",
store = true,
conditionType = "select",
@@ -2547,7 +2555,7 @@ Private.event_prototypes = {
name = "role",
display = L["Spec Role"],
type = "select",
init = "WeakAuras.GetUnitRole(unit)",
init = "WeakAuras.LGT:GetUnitRole(unit)",
values = "role_types",
store = true,
conditionType = "select",
@@ -6580,7 +6588,7 @@ Private.event_prototypes = {
name = "role",
display = L["Spec Role"],
type = "select",
init = "WeakAuras.GetUnitRole(unit)",
init = "WeakAuras.LGT:GetUnitRole(unit)",
values = "role_types",
store = true,
conditionType = "select",
+6 -1
View File
@@ -28,6 +28,11 @@ local prettyPrint = WeakAuras.prettyPrint
WeakAurasTimers = setmetatable({}, {__tostring=function() return "WeakAuras" end})
LibStub("AceTimer-3.0"):Embed(WeakAurasTimers)
WeakAuras.LGT = LibStub("LibGroupTalents-1.0") or {
GetUnitTalentSpec = function() end,
GetUnitRole = function() end
}
Private.watched_trigger_events = {}
-- The worlds simplest callback system.
@@ -1381,7 +1386,7 @@ local function scanForLoadsImpl(toCheck, event, arg1, ...)
local _, race = UnitRace("player")
local faction = UnitFactionGroup("player")
local zoneId = GetCurrentMapAreaID()
local role = WeakAuras.GetUnitRole("player")
local role = WeakAuras.LGT:GetUnitRole("player")
local raidRole = false;
local raidID = UnitInRaid("player")
if raidID then
+1 -1
View File
@@ -32,7 +32,6 @@ DefaultOptions.lua
# Core files
Types.lua
LibGroupTalentsWrapper.lua
Prototypes.lua
Profiling.lua
WeakAuras.lua
@@ -44,6 +43,7 @@ Conditions.lua
AnchorToWeakAuras.lua
# Trigger systems
LibGroupTalentsWrapper.lua
BuffTrigger2.lua
GenericTrigger.lua
BossMods.lua