Bonjour à tous,
Cela fait une semaine que j'ai commencé la création d'un bot socket pour D2 en javascript, j'ai trouvé sur ce forum pleins d'informations qui me sont très utile et qui m'ont permis d'avancer à grand pas (au début du moins).
J'ai donc réussit à créer une connexion socket, à écrire mes reader/writer, à désérialiser les paquet 1 et 3, puis je me suis penché sur le 4 qui m'a donné du fil à retordre pendant plusieurs jours. J'ai lu tous les sujets qui en parlaient, puis j'ai compris que ce n'était pas la source du problème. J'ai donc fait des tests sur les paquets que j'avais déjà reçu pour voir si j'arrivais à les sérialiser sans problème (le 1 et 3) puis à les désérialiser avec le tool en ligne qu'a mis à disposition Labot (merci à toi). Et en effet, la prophétie a (encore) frappé, mon problème vient en faite de mon writer. Plus précisément de la méthode
WriteVarInt
que je comprends à vrai dire, pas vraiment.
Après encore quelques jours de recherches, en lisant ce qu'il se dit dans plusieurs sujets, j'ai toujours une erreur quelque part. Voici la traduction de base que j'en ai faite (une traduction des sources du jeu):
writeVarInt (value) {
var b = 0;
var ba = new ByteArray();
if (value >= 0 && value <= CustomDataWrapper.MASK_01111111) {
ba.writeByte(value);
this.writeBytes(ba);
return;
}
var c = value;
var buffer = new ByteArray();
while (c !== 0) {
buffer.writeByte(c & CustomDataWrapper.MASK_01111111); // à partir de là ça part en cacahuète pour mon cerveau
buffer.position = buffer.length - 1;
b = parseInt(buffer.readByte());
c = c >>> CustomDataWrapper.CHUNCK_BIT_SIZE;
if (c > 0) {
b = b | CustomDataWrapper.MASK_10000000;
}
ba.writeByte(b);
}
this.writeBytes(ba);
}
Mon problème vient de la ligne 19, quand j’essaie de sérialiser le paquet 3 que j'ai reçu, la méthode
writeByte
me renvoi cette erreur :
RangeError [ERR_OUT_OF_RANGE]: The value of "value" is out of range. It must be >= -128 and <= 127. Received 177
Voici le code :
writeByte(value) {
this.expand(1);
this.buffer.writeInt8(value, this.position++);
}
expand(value) {
if (this.bytesAvailable < value) {
const old = this.buffer;
const size = old.length + (value - this.bytesAvailable);
this.buffer = Buffer.alloc(size);
old.copy(this.buffer);
}
}
Si vous avez une idée pour me mettre sur la bonne voie, ce serait super, parce qu'à force de chercher je commence à voir complétement floue.
Merci pour votre aide !