Core/Tags: add statustimer back

This commit is contained in:
andrew6180
2023-05-27 20:12:53 -07:00
parent 0e96183e4c
commit 1fbdc4f542
+59
View File
@@ -191,6 +191,42 @@ local function GetClassPower(Class)
end end
E.TagFunctions.GetClassPower = GetClassPower E.TagFunctions.GetClassPower = GetClassPower
local unitStatus = {}
local function GetUnitStatus(unit)
if not UnitIsPlayer(unit) then return end
local guid = UnitGUID(unit)
if UnitIsAFK(unit) then
if not unitStatus[guid] or unitStatus[guid] and unitStatus[guid][1] ~= "AFK" then
unitStatus[guid] = {"AFK", GetTime()}
end
elseif UnitIsDND(unit) then
if not unitStatus[guid] or unitStatus[guid] and unitStatus[guid][1] ~= "DND" then
unitStatus[guid] = {"DND", GetTime()}
end
elseif UnitIsDead(unit) or UnitIsGhost(unit) then
if not unitStatus[guid] or unitStatus[guid] and unitStatus[guid][1] ~= "Dead" then
unitStatus[guid] = {"Dead", GetTime()}
end
elseif not UnitIsConnected(unit) then
if not unitStatus[guid] or unitStatus[guid] and unitStatus[guid][1] ~= "Offline" then
unitStatus[guid] = {"Offline", GetTime()}
end
else
unitStatus[guid] = nil
end
if unitStatus[guid] ~= nil then
local status = unitStatus[guid][1]
local timer = GetTime() - unitStatus[guid][2]
local mins = floor(timer / 60)
local secs = floor(timer - (mins * 60))
return format("%s (%01.f:%02.f)", status, mins, secs)
else
return nil
end
end
E.TagFunctions.GetUnitStatus = GetUnitStatus
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Looping -- Looping
------------------------------------------------------------------------ ------------------------------------------------------------------------
@@ -328,6 +364,16 @@ for textFormat, length in pairs({ veryshort = 5, short = 10, medium = 15, long =
return E:ShortenString(name, length) return E:ShortenString(name, length)
end end
end) end)
E:AddTag(format('name:%s:statustimer', textFormat), 1, function(unit)
local status = GetUnitStatus(unit)
local name = UnitName(unit)
if status then
return status
elseif name then
return E:ShortenString(name, length)
end
end)
E:AddTag(format('name:%s:translit', textFormat), 'UNIT_NAME_UPDATE INSTANCE_ENCOUNTER_ENGAGE_UNIT', function(unit) E:AddTag(format('name:%s:translit', textFormat), 'UNIT_NAME_UPDATE INSTANCE_ENCOUNTER_ENGAGE_UNIT', function(unit)
local name = Translit:Transliterate(UnitName(unit), translitMark) local name = Translit:Transliterate(UnitName(unit), translitMark)
@@ -698,6 +744,14 @@ E:AddTag('status:text', 'PLAYER_FLAGS_CHANGED', function(unit)
end end
end) end)
E:AddTag('name:statustimer', 1, function(unit)
local status = GetUnitStatus(unit)
if status then
return status
end
return UnitName(unit)
end)
do do
local afk = [[|TInterface\FriendsFrame\StatusIcon-Away:16:16|t]] local afk = [[|TInterface\FriendsFrame\StatusIcon-Away:16:16|t]]
local dnd = [[|TInterface\FriendsFrame\StatusIcon-DnD:16:16|t]] local dnd = [[|TInterface\FriendsFrame\StatusIcon-DnD:16:16|t]]
@@ -1331,6 +1385,11 @@ E.TagInfo = {
['name:veryshort:status'] = { category = 'Names', description = "Replace the name of the unit with 'DEAD' or 'OFFLINE' if applicable (limited to 5 letters)" }, ['name:veryshort:status'] = { category = 'Names', description = "Replace the name of the unit with 'DEAD' or 'OFFLINE' if applicable (limited to 5 letters)" },
['name:veryshort:translit'] = { category = 'Names', description = "Displays the name of the unit with transliteration for cyrillic letters (limited to 5 letters)" }, ['name:veryshort:translit'] = { category = 'Names', description = "Displays the name of the unit with transliteration for cyrillic letters (limited to 5 letters)" },
['name:veryshort'] = { category = 'Names', description = "Displays the name of the unit (limited to 5 letters)" }, ['name:veryshort'] = { category = 'Names', description = "Displays the name of the unit (limited to 5 letters)" },
["name:statustimer"] = {category = "Names", description = "Displays a timer for how long a unit has had the status (e.g 'DEAD - 0:34') Otherwise the unit's Name"},
["name:veryshort:statustimer"] = {category = "Names", description = "Displays a timer for how long a unit has had the status (e.g 'DEAD - 0:34') Otherwise the unit's Name (limited to 5 letters)"},
["name:short:statustimer"] = {category = "Names", description = "Displays a timer for how long a unit has had the status (e.g 'DEAD - 0:34') Otherwise the unit's Name (limited to 10 letters)"},
["name:medium:statustimer"] = {category = "Names", description = "Displays a timer for how long a unit has had the status (e.g 'DEAD - 0:34') Otherwise the unit's Name (limited to 15 letters)"},
["name:long:statustimer"] = {category = "Names", description = "Displays a timer for how long a unit has had the status (e.g 'DEAD - 0:34') Otherwise the unit's Name (limited to 20 letters)"},
['name'] = { category = 'Names', description = "Displays the full name of the unit without any letter limitation" }, ['name'] = { category = 'Names', description = "Displays the full name of the unit without any letter limitation" },
['name:health'] = { hidden = true, category = 'Names', description = "" }, ['name:health'] = { hidden = true, category = 'Names', description = "" },
['npctitle:brackets'] = { category = 'Names', description = "Displays the NPC title with brackets (e.g. <General Goods Vendor>)" }, ['npctitle:brackets'] = { category = 'Names', description = "Displays the NPC title with brackets (e.g. <General Goods Vendor>)" },