Как вызывать
addon:GetConditionThreatCount(minimum, cache)
Доступен напрямую через addon; зависимость не нужна.
Что делает
Учитывать только юниты с ключом GUID, уже входящие в наблюдаемый снимок состава. Перед использованием опубликованного наблюдателя угрозы проверяется текущая идентичность токена; известные отсутствующие или переиспользованные токены исключаются без замены. Полные наблюдения идентичности и угрозы разделяют только переданный кэш вычисления, а состав обходится заново. Известные не-противники или необязательная угроза nil не учитываются; нечитаемые, повреждённые или неудачные обязательные факты делают весь результат недоступным. Полный состав не перечисляется, фильтр дальности не применяется, отслеживаемые записи не меняются.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
self | RMAddon | Экземпляр аддона Rotation Master (неявно при вызове через двоеточие). |
minimum | number | Конечный минимальный встроенный статус угрозы с сохранением знаковых и дробных порогов. |
cache | table | nil | Кэш наблюдений вычисления, принадлежащий вызывающему; при nil запрос выполняется заново. |
Возвращает
| 1 | number | nil | Полное неотрицательное наблюдаемое число, включая ноль, или nil, если недоступно. |
|---|---|---|
| 2 | string | nil | Причина недоступности по политике, снимку, идентичности или наблюдению угрозы. |
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
Не читает игровой API напрямую.
Секретные значения (Retail и Forever)
В Retail и Forever игра передаёт аддонам секретные значения. Этот помощник проверяет то, что читает (addon.Platform:CanReadValue), и вместо секретного значения, которое нельзя сравнить, возвращает nil с причиной, например restricted-value. Считайте nil недоступным значением, а не ложью.
Как его вызывает аддон
- Число по угрозе (evaluate)
local count,reason=addon:GetConditionThreatCount(value.threat-1,cache)
Зависимости
finite→Core.threat_count_conditions.finitereadField→Core.threat_count_conditions.readField
Исходный код
Core/threat_count_conditions.lua, строка 50. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Core.threat_count_conditions.GetConditionThreatCount(self, minimum, cache)
local platform=self.Platform
local policy=platform:GetCombatDataPolicy()
if policy~='probe' and policy~='restricted' then return nil,'unsupported-policy' end
local valid,issue=finite(platform,minimum)
if not valid then return nil,issue end
if not platform:CanReadValue(cache) then return nil,'restricted-value' end
if cache~=nil and type(cache)~='table' then return nil,'invalid-threat-count-cache' end
if policy=='restricted' then return self:GetConditionNameplateThreatCount(minimum,cache) end
local snapshot,why=readField(platform,self,'unitsInRange')
if why then return nil,why end
if type(snapshot)~='table' then return nil,'unit-snapshot-unavailable' end
local count=0
for guid,entity in pairs(snapshot) do
if not platform:CanReadValue(guid) or not platform:CanReadValue(entity) then return nil,'restricted-value' end
if type(guid)~='string' or guid=='' or type(entity)~='table' then return nil,'invalid-unit-snapshot' end
local unit,reason=readField(platform,entity,'unit')
if reason then return nil,reason end
if type(unit)~='string' or unit=='' then return nil,'invalid-unit-snapshot' end
-- The existing forecast identity observer is exactly existence + GUID;
-- it consumes no health, history, provider or clock facts.
local observeIdentity=platform.GetHealthForecastIdentityObservation
if type(observeIdentity)~='function' then return nil,'missing-api' end
local current,identityReason=addon.Functions.cache.getCached(cache,observeIdentity,platform,unit)
if not platform:CanReadValue(current) then return nil,'restricted-value' end
if current==nil then return nil,identityReason or 'unit-guid-unavailable' end
if current~=false then
if type(current)~='string' or current=='' then return nil,'invalid-unit-identity' end
-- A recycled token is excluded; its replacement is not new membership.
if current==guid then
local observeThreat=platform.GetUnitThreatObservation
if type(observeThreat)~='function' then return nil,'missing-api' end
local status,threatReason=addon.Functions.cache.getCached(cache,observeThreat,platform,unit)
if not platform:CanReadValue(status) then return nil,'restricted-value' end
if status==nil then return nil,threatReason or 'threat-data-unavailable' end
if status~=false then
local readable,problem=finite(platform,status)
if not readable then return nil,problem end
if status>=minimum then count=count+1 end
end
end
end
end
return count