Appel
addon.Platform:GetMobInfo2Observation(unit, kind, school, cache)
Disponible directement via addon ; aucune dépendance n'est nécessaire.
Ce qu'elle fait
Lit les observations historiques facultatives de MobInfo2 sur les clients en politique de sondage ou restreinte. Seule la présence exacte de l'unité sélectionnée est mise en cache ; la première valeur de UnitName, la première valeur de UnitLevel et l'appel avec point à trois arguments MI2_GetMobData(name,level,unit) restent frais à chaque appel. Les unités connues comme absentes et un historique nil ou omis non enregistré (mais réussi) restent distincts des faits natifs ou du fournisseur indisponibles. Conserve la valeur de vérité scalaire lisible de runner, le signe des écoles et la valeur par défaut un pour un Hits manquant. Les ratios de résistance positifs doivent être finis ; l'immunité complète consomme un Hits fini, tandis que l'immunité partielle n'a besoin que de son observation d'école négative. Ne déduit jamais de résistance native et n'emprunte jamais d'anciens enregistrements.
Arguments
| Nom | Type | Ce qu'elle fait |
|---|---|---|
self | RMPlatform | Adaptateur de plateforme Rotation Master (implicite avec un appel par deux-points). |
unit | string | Identifiant d'unité sélectionné non vide, inchangé dans les appels natifs et du fournisseur. |
kind | string | Type fermé : runner, resist ou immune. |
school | string | nil | Clé d'école historique non vide pour resist/immune ; inutilisée pour runner. |
cache | table | nil | Cache de présence de la passe d'évaluation uniquement ; le nom, le niveau et l'historique du fournisseur restent frais. |
Retours
| 1 | table | nil | Enregistrement avec exists=false ; recorded=false si l'absence d'historique est connue ; ou runner, ratio ou immune avec hits/hitsReason. nil signifie qu'une observation requise est indisponible. |
|---|---|---|
| 2 | string | nil | Motif de politique, de capacité ou de disponibilité d'une observation requise. |
Éditions
Les fonctions utilitaires intégrées sont enregistrées sur toutes les éditions. Ce qui diffère, c'est l'API du jeu qu'elles lisent ; quand l'une manque, la fonction utilitaire se rabat sur une alternative ou renvoie nil avec une raison.
- Indisponible sur cette édition (la raison figure dans l'infobulle)
- Uniquement tant que les solutions de repli de Blizzard pour les fonctions obsolètes sont actives
| API du jeu | |||||
|---|---|---|---|---|---|
UnitLevel | |||||
UnitName | |||||
canaccessvalue |
Valeurs secrètes (Retail et Forever)
Sur Retail et Forever, le jeu transmet aux addons des valeurs secrètes. Cette fonction utilitaire vérifie ce qu'elle lit (addon.Platform:CanReadValue) et renvoie nil avec une raison telle que restricted-value au lieu d'une valeur secrète qu'elle ne peut pas comparer. Traitez nil comme indisponible, pas comme false.
Comment l'addon l'appelle
- Insensible (evaluate)
local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"immune",value.school,cache) - Résistant (evaluate)
local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"resist",value.school,cache) - Fuyard (evaluate)
local observation,reason=addon.Platform:GetMobInfo2Observation(value.unit,"runner",nil,cache)
Dépendances
finite→Platform.mobinfo2.finitehitCount→Platform.mobinfo2.hitCountpresence→Platform.mobinfo2.presencereadField→Platform.mobinfo2.readField
Source
Platform/mobinfo2.lua, ligne 79. En lecture seule dans le jeu ; Dupliquer crée une copie modifiable.
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}




