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

Platform.unit_stat.GetUnitStatObservation

общедоступный

Как вызывать

addon.Platform:GetUnitStatObservation(unit, stat)

Доступен напрямую через addon; зависимость не нужна.

Что делает

Наблюдать эффективную характеристику только по второму встроенному возвращаемому значению. На клиентах с политикой проверки или ограничения запрашивается точный UnitExists(unit), затем UnitStat(unit,stat) для выбора 1..5 или UnitArmor(unit) для выбора 6. Известное отсутствие возвращает exists=false; отсутствующие, неудачные, ограниченные или бесконечные обязательные факты возвращают nil. Конечные знаковые, дробные и нулевые значения сохраняются; все неиспользуемые поля кортежа игнорируются. Путь 1..6 — правило выбора RM, а не ограничение области встроенных значений.

Аргументы

ИмяТипЧто делает
selfRMPlatformАдаптер платформы Rotation Master (неявно при вызове через двоеточие).
unitstringВыбранный непустой токен юнита, без изменений во встроенных вызовах.
statnumberЦелочисленный выбор характеристики RM 1..5 или 6 для эффективной брони.

Возвращает

1table | nilЗапись с exists=false или exists=true и конечным value; nil, если недоступно.
2string | nilПричина недоступности по запросу, политике или наблюдению.

Издания

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

  • Недоступно в этом издании (причина — во всплывающей подсказке)
  • Только пока включены запасные реализации Blizzard для устаревших функций
Игровой APIClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UnitArmorClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UnitExistsClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UnitStatClassic EraTBC AnniversaryClassic ProgressionForeverRetail
canaccessvalueClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Секретные значения (Retail и Forever)

В Retail и Forever игра передаёт аддонам секретные значения. Этот помощник проверяет то, что читает (addon.Platform:CanReadValue), и вместо секретного значения, которое нельзя сравнить, возвращает nil с причиной, например restricted-value. Считайте nil недоступным значением, а не ложью.

Пример

local armor = addon.Platform:GetUnitStatObservation("player", 6)
if not armor or not armor.exists then return nil end
return armor.value >= 10000

Зависимости

Исходный код

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

Platform.unit_stat.GetUnitStatObservation(self, unit, stat)
    local policy=self:GetCombatDataPolicy()
    if policy~='probe' and policy~='restricted' then return nil,'unsupported-policy' end
    if not self:CanReadValue(unit) or not self:CanReadValue(stat) then return nil,'restricted-value' end
    if type(unit)~='string' or unit=='' then return nil,'invalid-unit' end
    if not finite(stat) or stat%1~=0 or stat<1 or stat>6 then return nil,'invalid-stat-query' end
    if type(UnitExists)~='function' then return nil,'missing-api' end
    local existsOk,exists=pcall(UnitExists,unit)
    if not existsOk then return nil,'api-error' end
    if not self:CanReadValue(exists) then return nil,'restricted-value' end
    if exists==nil then return nil,'unit-data-unavailable' end
    if type(exists)~='boolean' then return nil,'invalid-api-result' end
    if not exists then return {exists=false} end
    local fn
    if stat==6 then fn=UnitArmor else fn=UnitStat end
    if type(fn)~='function' then return nil,'missing-api' end
    local ok,_,effective
    if stat==6 then ok,_,effective=pcall(fn,unit)
    else ok,_,effective=pcall(fn,unit,stat) end
    if not ok then return nil,'api-error' end
    if not self:CanReadValue(effective) then return nil,'restricted-value' end
    if canaccessvalue and not canaccessvalue(effective) then return nil,'restricted-value' end
    if effective==nil then return nil,'stat-data-unavailable' end
    if not finite(effective) then return nil,'invalid-api-result' end
    return {exists=true,value=effective}

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