Résolu Les poiLabelId ne correspondent pas au fichier PointOfInterest

Inscrit
1 Octobre 2019
Messages
30
Reactions
6
#1
Hello !

Je suis face à un problème vachement bizarre, et je n'ai trouvé aucun poste sur le forum qui en a parlé.

Dans le paquet TreasureHuntMessage, chaque indice qui n'est pas un phorreur a un "poiLabelId".
Par exemple, l'indice "Caisse" m'envoie un poiID de 105, je vais ensuite check dans le fichier PointOfInterest.d2o qui référence les poiID.

Pour l'indice "Caisse" je trouve :
Code:
{
    "id": 105,
    "nameId": 420582,
    "categoryId": 1
}
Je chope donc le nameID et je check le nom de cet indice dans le fichier i18n, je trouve :
Code:
"420582": "Caisse",
Super ! Mais non ... Autre exemple l'indice "Caisse cassée" m'envoie un poiID de 3718, hors dans le fichier PointOfInterest les id ne vont que jusqu'à 846.
Il y a beaucoup d'indices comme celui-ci qui m'envoient un poiID qui n'est pas dans ce fichier.
Je check donc dans le fichier i18n le texte "Caisse cassée" et je trouve :
Code:
"727531": "Caisse cassée",
Je check donc dans PointOfInterest le nameID 727531 et je trouve :
Code:
{
    "id": 797,
    "nameId": 727531,
    "categoryId": 1
},
Wtf ? Son vrai poiID est donc 797, celui que je sniff n'est qu'un leurre ? Mais pourquoi ça marche pour d'autres indices alors ?
Du coup j'ai fais une recherche globale de 3718 dans un maximum de fichiers pour essayer de trouver le lien entre l'ID récolté et le vrai ID, je n'ai absolument rien trouvé.
La seule piste que j'ai pu trouver c'est en cherchant StatedElements dans les sources, je suis tombé sur la classe PointOfInterest avec une fonction :
Code:
public static function getPointOfInterestById(id:int) : PointOfInterest
      {
         return GameData.getObject(MODULE,id) as PointOfInterest;
      }
La fonction GameData.getObject :
Code:
public static function getObject(moduleId:String, keyId:int) : Object
      {
         var o:Object = null;
         var wr:WeakReference = null;
         if(_overrides[moduleId] && _overrides[moduleId][keyId])
         {
            keyId = _overrides[moduleId][keyId];
         }
         if(!_directObjectCaches[moduleId])
         {
            _directObjectCaches[moduleId] = new Dictionary();
         }
         else
         {
            wr = _directObjectCaches[moduleId][keyId];
            if(wr)
            {
               o = wr.object;
               if(o)
               {
                  return o;
               }
            }
         }
         if(!_objectCaches[moduleId])
         {
            _objectCaches[moduleId] = new Cache(GameDataFileAccessor.getInstance().getCount(moduleId) * CACHE_SIZE_RATIO,new LruGarbageCollector());
         }
         else
         {
            o = (_objectCaches[moduleId] as Cache).peek(keyId);
            if(o)
            {
               return o;
            }
         }
         o = GameDataFileAccessor.getInstance().getObject(moduleId,keyId);
         _directObjectCaches[moduleId][keyId] = new WeakReference(o);
         (_objectCaches[moduleId] as Cache).store(keyId,o);
         return o;
      }
Voilà ou j'en suis, je n'arrive pas à faire le lien entre le poiID sniffé et le "vrai" poiID, et j'ai cette fonction qui est pour moi inexploitable.
Je me dis que le lien entre les deux est forcément quelque part sinon le client ne pourrait pas m'afficher le nom de l'indice.
Quelqu'un aurait une idée ?
 
Inscrit
1 Octobre 2019
Messages
30
Reactions
6
#2
En attendant je vais faire de l'OCR quand le poiLabelId n'est pas dans le fichier, et remplir au fur et à mesure ma bdd ... mais dommage que je ne puisses pas exploiter directement l'ID, étonnamment personne en a parlé, peut-être que je passe à côté de quelque chose mais là j'vois pas
 
Inscrit
1 Octobre 2019
Messages
30
Reactions
6
#3
Je me rends compte que certains indices comme par exemple "323105": "Ossements" ne sont pas dans le fichier PointOfInterest. Ou du moins leur nameID ne s'y trouve pas.
Y aurait-il un deuxième fichier où sont référencés les POI ?.....

EDIT: Oops, c'est juste que le texte est parfois présent en double dans le i18n, en fait pour ça c'est good
 
Dernière édition:
Inscrit
1 Octobre 2019
Messages
30
Reactions
6
#4
Bon, du coup je contourne le problème de cette manière :
Code:
Unknown sniffPoiID :  3718
OCR hint name :  Caisse cassée
Found truePoiID 797 for sniffPoiID 3718
Au bout de beaucoup de chasse j'imagine que ma bdd sera remplie des "sniffPoiID" , je n'aurai donc plus besoin d'OCR (qui fait perdre du temps)
Je laisse tout de même la question grande ouverte, au cas où un expert passerait par là ... :teeth:
 
Inscrit
1 Octobre 2019
Messages
30
Reactions
6
#5
Sujet résolu, c'était juste ma fonction de lecture des variables à taille variable qui était mal foutue.
Merci beaucoup @Ishfx
 
Haut Bas