Справочник › Справочник функций › Conditions

Conditions.totem.findSpecific

зависимость

Как вызывать

Conditions.totem.findSpecific(value, cache, start, compareTime)

Запишите зависимость Conditions.totem.findSpecific и вызывайте её по этому имени. Вызов через пространство имён не передаёт self: используйте вызов через двоеточие или передайте объект сами.

Что делает

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.

Аргументы

ИмяТипЧто делает
valuetableCondition settings: spell, ranked and, for timed checks, operator and value.
cachetable | nilEvaluation-pass cache passed to getCached, or nil to read directly.
startnumber | nilEvaluation start time; nil uses GetTime().
compareTimebooleanTrue to also compare the remaining time.

Возвращает

1boolean | nilTrue when a matching totem is found, false when none is, or nil when a slot could not be read.
2string | nilReason for nil, such as totem-data-unavailable, totem-rank-unavailable or totem-identity-unavailable.

Издания

Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.

Не читает игровой API напрямую.

Как его вызывает аддон

Зависимости

Исходный код

Conditions/totem.lua, строка 102. В игре только для чтения; «Дублировать» создаёт редактируемую копию.

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

Назад: Справочник функций