Llamar como
Conditions.totem.findSpecific(value, cache, start, compareTime)
Registra la dependencia Conditions.totem.findSpecific y luego llámala con ese nombre. Una llamada con espacio de nombres no pasa self: usa una llamada con dos puntos o pasa tú mismo el objeto.
Qué hace
Searches the totem slots for an active totem matching value.spell, by spell ID or name (only the exact spell ID when value.ranked is set). With compareTime it also requires the totem's remaining time, rounded to 3 decimals, to pass value.operator and value.value; an unreadable slot makes a non-match unavailable.
Argumentos
| Nombre | Tipo | Qué hace |
|---|---|---|
value | table | Condition settings: spell, ranked and, for timed checks, operator and value. |
cache | table | nil | Evaluation-pass cache passed to getCached, or nil to read directly. |
start | number | nil | Evaluation start time; nil uses GetTime(). |
compareTime | boolean | True to also compare the remaining time. |
Retornos
| 1 | boolean | nil | True when a matching totem is found, false when none is, or nil when a slot could not be read. |
|---|---|---|
| 2 | string | nil | Reason for nil, such as totem-data-unavailable, totem-rank-unavailable or totem-identity-unavailable. |
Ediciones
Las funciones auxiliares integradas se registran en todas las ediciones. Lo que cambia es la API del juego que leen; donde falta alguna, la función auxiliar recurre a una alternativa o devuelve nil con un motivo.
No lee directamente ninguna API del juego.
Cómo la llama el addon
- Tótem concreto presente (evaluate)
return findSpecific(value,cache,start,false) - Tiempo restante de un tótem concreto (evaluate)
return findSpecific(value,cache,start,true)
Dependencias
observe→Conditions.totem.observeplatform(builtin:Conditions/totem.lua:platform)remaining→Conditions.totem.remaining
Código fuente
Conditions/totem.lua, línea 102. Solo lectura en el juego; Duplicar crea una copia editable.
Conditions.totem.findSpecific(value, cache, start, compareTime)
local target,reason=observe(cache,platform.GetSpellInfo,value.spell)
if not target then return nil,reason end
local count,why=observe(cache,platform.GetTotemSlotCount)
if not count then return nil,why end
local unavailable
for slot=1,count do
local record,problem=observe(cache,platform.GetTotemInfo,slot)
if not record then unavailable=unavailable or problem or "totem-data-unavailable"
elseif record.active and remaining(record,start)>0 then
local matches=false
if value.ranked then
if record.spellID then matches=record.spellID==value.spell
elseif record.name==target.name or record.name=="" then unavailable=unavailable or "totem-rank-unavailable" end
else
matches=record.spellID==value.spell or record.name==target.name
if not matches and record.name=="" then
local info,issue
if record.spellID then info,issue=observe(cache,platform.GetSpellInfo,record.spellID) end
if info then matches=info.name==target.name
else unavailable=unavailable or issue or "totem-identity-unavailable" end
end
end
if matches and (not compareTime or addon.compare(value.operator,addon.round(remaining(record,start),3),value.value)) then return true end
end
end
if unavailable then return nil,unavailable end
return false