Как вызывать
addon.Platform:GetUnitThreatObservation(unit)
Доступен напрямую через addon; зависимость не нужна.
Что делает
Наблюдать по порядку существование выбранного юнита, враждебность к игроку, затем статус угрозы игрока по этому юниту. Известное отсутствие, не-противник и успешно прочитанный статус угрозы nil возвращают false, сохраняя предикат «нет угрозы». Конечные значения статуса, включая ноль, сохраняют исходный смысл сравнения. Отсутствующие, неудачные, nil, ограниченные или повреждённые обязательные факты возвращают nil с причиной. Выводы о возможности атаки, смерти, бое или транспорте не добавляются.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
self | RMPlatform | Адаптер платформы Rotation Master (неявно при вызове через двоеточие). |
unit | string | Точный токен юнита для проверки существования и как получатель запросов враждебности и угрозы игрока. |
Возвращает
| 1 | number | boolean | nil | Конечный встроенный статус угрозы; false при известном отсутствии, не-противнике или отсутствии угрозы; nil для недоступных наблюдений. |
|---|---|---|
| 2 | string | nil | Причина по политике, проверке запроса или недоступности для наблюдения угрозы nil. |
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
- Недоступно в этом издании (причина — во всплывающей подсказке)
- Только пока включены запасные реализации Blizzard для устаревших функций
| Игровой API | |||||
|---|---|---|---|---|---|
UnitExists | |||||
UnitIsEnemy | |||||
UnitThreatSituation | |||||
canaccessvalue |
Секретные значения (Retail и Forever)
В Retail и Forever игра передаёт аддонам секретные значения. Этот помощник проверяет то, что читает (addon.Platform:CanReadValue), и вместо секретного значения, которое нельзя сравнить, возвращает nil с причиной, например restricted-value. Считайте nil недоступным значением, а не ложью.
Пример
local status = addon.Platform:GetUnitThreatObservation("target")
if status == nil then return nil end
-- false means no target, not an enemy, or no threat; 2 and 3 mean you are tanking
return status ~= false and status >= 2Исходный код
Platform/threat.lua, строка 19. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Platform.threat.GetUnitThreatObservation(self, unit)
local policy=self:GetCombatDataPolicy()
if policy~='probe' and policy~='restricted' then return nil,'unsupported-policy' end
if not self:CanReadValue(unit) then return nil,'restricted-value' end
if type(unit)~='string' or unit=='' then return nil,'invalid-unit' 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 false end
if type(UnitIsEnemy)~='function' then return nil,'missing-api' end
local enemyOk,enemy=pcall(UnitIsEnemy,'player',unit)
if not enemyOk then return nil,'api-error' end
if not self:CanReadValue(enemy) then return nil,'restricted-value' end
if enemy==nil then return nil,'unit-data-unavailable' end
if type(enemy)~='boolean' then return nil,'invalid-api-result' end
if not enemy then return false end
if type(UnitThreatSituation)~='function' then return nil,'missing-api' end
local threatOk,threat=pcall(UnitThreatSituation,'player',unit)
if not threatOk then return nil,'api-error' end
if not self:CanReadValue(threat) then return nil,'restricted-value' end
if canaccessvalue and not canaccessvalue(threat) then return nil,'restricted-value' end
if threat==nil then return false end
if type(threat)~='number' or threat~=threat or threat==math.huge or threat==-math.huge then return nil,'invalid-api-result' end
return threat




