参考 › 函数参考 › 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

返回函数参考