Как вызывать
addon.Platform:GetInstanceObservation()
Доступен напрямую через addon; зависимость не нужна.
Что делает
Наблюдать один защищённый кортеж IsInInstance без аргументов. Обязательное читаемое логическое значение нахождения не зависит от поля типа: известное «снаружи» возвращается без разбора неиспользуемого типа; «внутри» возвращает читаемую строку типа или instanceTypeReason, если это вторичное поле недоступно. Проверяющим «снаружи» достаточно факта нахождения; сравнения типа «внутри» должны проверять вторичную причину. Выводы о нахождении под открытым небом, зоне или юните не добавляются.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
self | RMPlatform | Адаптер платформы Rotation Master (неявно при вызове через двоеточие). |
Возвращает
| 1 | table | nil | Запись с inInstance и, если внутри, instanceType или instanceTypeReason; nil, если нахождение недоступно. |
|---|---|---|
| 2 | string | nil | Причина недоступности по политике клиента, встроенному вызову или обязательному членству для записи nil. |
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
- Недоступно в этом издании (причина — во всплывающей подсказке)
- Только пока включены запасные реализации Blizzard для устаревших функций
| Игровой API | |||||
|---|---|---|---|---|---|
IsInInstance | |||||
canaccessvalue |
Секретные значения (Retail и Forever)
В Retail и Forever игра передаёт аддонам секретные значения. Этот помощник проверяет то, что читает (addon.Platform:CanReadValue), и вместо секретного значения, которое нельзя сравнить, возвращает nil с причиной, например restricted-value. Считайте nil недоступным значением, а не ложью.
Пример
local record = addon.Platform:GetInstanceObservation()
if not record then return nil end
if not record.inInstance then return false end
if not record.instanceType then return nil end
return record.instanceType == "raid"Исходный код
Platform/instance.lua, строка 18. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Platform.instance.GetInstanceObservation(self)
local family=self:GetClientFamily()
if family~='retail' and family~='forever' and family~='era' and family~='tbc' and family~='progression' then return nil,'unsupported-policy' end
if type(IsInInstance)~='function' then return nil,'missing-api' end
local ok,inInstance,instanceType=pcall(IsInInstance)
if not ok then return nil,'api-error' end
if not self:CanReadValue(inInstance) then return nil,'restricted-value' end
if canaccessvalue and not canaccessvalue(inInstance) then return nil,'restricted-value' end
if inInstance==nil then return nil,'instance-data-unavailable' end
if type(inInstance)~='boolean' then return nil,'invalid-api-result' end
if not inInstance then return {inInstance=false} end
if not self:CanReadValue(instanceType) then return {inInstance=true,instanceTypeReason='restricted-value'} end
if canaccessvalue and not canaccessvalue(instanceType) then return {inInstance=true,instanceTypeReason='restricted-value'} end
if instanceType==nil then return {inInstance=true,instanceTypeReason='instance-type-unavailable'} end
if type(instanceType)~='string' then return {inInstance=true,instanceTypeReason='invalid-api-result'} end
return {inInstance=true,instanceType=instanceType}




