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 :
{
"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 :
"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 :
"727531": "Caisse cassée",
Je check donc dans PointOfInterest le nameID 727531 et je trouve :
{
"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 :
public static function getPointOfInterestById(id:int) : PointOfInterest
{
return GameData.getObject(MODULE,id) as PointOfInterest;
}
La fonction GameData.getObject :
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 ?