Referencia › Referencia de funciones › Platform

Platform.mobinfo2.GetMobInfo2Observation

pública

Llamar como

addon.Platform:GetMobInfo2Observation(unit, kind, school, cache)

Disponible directamente a través de addon; no hace falta ninguna dependencia.

Qué hace

Lee las observaciones históricas opcionales de MobInfo2 en clientes con política de sondeo o restringida. Solo guarda en caché la presencia exacta de la unidad seleccionada; el primer resultado de UnitName, el primer resultado de UnitLevel y la llamada con punto de tres argumentos MI2_GetMobData(name,level,unit) se obtienen de nuevo en cada invocación. Las unidades que se sabe que están ausentes y el historial nil u omitido sin registros correctos siguen siendo distintos de los datos nativos o del proveedor no disponibles. Conserva la veracidad escalar legible de runner, los signos de escuela y el valor predeterminado de uno cuando faltan los Hits. Las proporciones de resistencia positivas deben ser finitas; la inmunidad completa consume Hits finitos, mientras que la inmunidad parcial solo necesita su observación de escuela negativa. Nunca deduce la resistencia nativa ni toma prestados registros antiguos.

Argumentos

NombreTipoQué hace
selfRMPlatformAdaptador de plataforma de Rotation Master (implícito en las llamadas con dos puntos).
unitstringToken de unidad seleccionado no vacío, sin cambios en las llamadas nativas o del proveedor.
kindstringTipo cerrado: runner, resist o immune.
schoolstring | nilClave histórica de escuela no vacía para resist/immune; no se usa para runner.
cachetable | nilSolo caché de presencia de la pasada de evaluación; el nombre, el nivel y el historial del proveedor se mantienen actualizados.

Retornos

1table | nilRegistro con exists=false; recorded=false si se sabe que no hay historial; o runner, ratio o immune con hits/hitsReason. Nil significa que una observación necesaria no está disponible.
2string | nilMotivo de disponibilidad de la política, la capacidad o una observación necesaria.

Ediciones

Las funciones auxiliares integradas se registran en todas las ediciones. Lo que cambia es la API del juego que leen; donde falta alguna, la función auxiliar recurre a una alternativa o devuelve nil con un motivo.

  • No disponible en esa edición (el motivo aparece en la información emergente)
  • Solo mientras estén activas las alternativas de Blizzard para API obsoletas
API del juegoClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UnitLevelClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UnitNameClassic EraTBC AnniversaryClassic ProgressionForeverRetail
canaccessvalueClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Valores secretos (Retail y Forever)

En Retail y Forever, el juego entrega a los addons valores secretos. Esta función auxiliar comprueba lo que lee (addon.Platform:CanReadValue) y, en lugar de un secreto que no puede comparar, devuelve nil con un motivo como restricted-value. Trata nil como no disponible, no como falso.

Cómo la llama el addon

  • Inmune (evaluate)
    local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"immune",value.school,cache)
  • Resistente (evaluate)
    local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"resist",value.school,cache)
  • Huidizo (evaluate)
    local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"runner",nil,cache)

Dependencias

Código fuente

Platform/mobinfo2.lua, línea 79. Solo lectura en el juego; Duplicar crea una copia editable.

Platform.mobinfo2.GetMobInfo2Observation(self, unit, kind, school, cache)
    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(kind) or not self:CanReadValue(cache) then return nil,'restricted-value' end
    if type(unit)~='string' or unit=='' then return nil,'invalid-unit' end
    if kind~='runner' and kind~='resist' and kind~='immune' then return nil,'invalid-mobinfo2-kind' end
    if cache~=nil and type(cache)~='table' then return nil,'invalid-mobinfo2-cache' end
    if kind~='runner' then
        if not self:CanReadValue(school) then return nil,'restricted-value' end
        if type(school)~='string' or school=='' then return nil,'invalid-mobinfo2-school' end
    end
    local exists,reason=addon.Functions.cache.getCached(cache,presence,self,unit)
    if exists==nil then return nil,reason end
    if not exists then return {exists=false} end
    local query,queryReason=readField(self,_G,'MI2_GetMobData')
    if queryReason then return nil,queryReason end
    if type(query)~='function' then return nil,'missing-api' end
    if type(UnitName)~='function' then return nil,'missing-api' end
    local nameOk,name=pcall(UnitName,unit)
    if not nameOk then return nil,'api-error' end
    if not self:CanReadValue(name) then return nil,'restricted-value' end
    if canaccessvalue and not canaccessvalue(name) then return nil,'restricted-value' end
    if name==nil then return nil,'unit-name-unavailable' end
    if type(name)~='string' or name=='' then return nil,'invalid-api-result' end
    if type(UnitLevel)~='function' then return nil,'missing-api' end
    local levelOk,level=pcall(UnitLevel,unit)
    if not levelOk then return nil,'api-error' end
    if not self:CanReadValue(level) then return nil,'restricted-value' end
    if canaccessvalue and not canaccessvalue(level) then return nil,'restricted-value' end
    local valid,why=finite(self,level)
    if not valid then return nil,why end
    local ok,data=pcall(query,name,level,unit)
    if not ok then return nil,'mobinfo2-provider-error' end
    if not self:CanReadValue(data) then return nil,'restricted-value' end
    -- A successful nil lookup means unrecorded data in the publisher API.
    if data==nil then return {exists=true,recorded=false} end
    if type(data)~='table' then return nil,'invalid-mobinfo2-data' end
    if kind=='runner' then
        local action,actionReason=readField(self,data,'lowHpAction')
        if actionReason then return nil,actionReason end
        local actionType=type(action)
        if actionType=='number' then
            valid,why=finite(self,action)
            if not valid then return nil,why end
        elseif actionType~='nil' and actionType~='boolean' and actionType~='string' then
            return nil,'invalid-mobinfo2-action'
        end
        -- Preserve readable scalar truthiness, including numeric zero and ''.
        return {exists=true,recorded=true,runner=action and true or false}
    end
    local resists,resistsReason=readField(self,data,'resists')
    if resistsReason then return nil,resistsReason end
    if resists==nil then return {exists=true,recorded=false} end
    local count,countReason=readField(self,resists,school)
    if countReason then return nil,countReason end
    if count==nil then return {exists=true,recorded=false} end
    valid,why=finite(self,count)
    if not valid then return nil,why end
    if kind=='resist' then
        if count<=0 then return {exists=true,recorded=false} end
        local hits,hitsReason=hitCount(self,resists,school)
        if hits==nil then return nil,hitsReason end
        local ratio=count/hits
        valid,why=finite(self,ratio)
        if not valid then return nil,why end
        return {exists=true,recorded=true,ratio=ratio}
    end
    if count>=0 then return {exists=true,recorded=false} end
    local hits,hitsReason=hitCount(self,resists,school)
    -- Partial immunity needs only the negative observation. Full immunity
    -- separately requires this optional count, including meaningful zero.
    return {exists=true,recorded=true,immune=true,hits=hits,hitsReason=hitsReason}

Volver a Referencia de funciones