Erreur Java

Résolu/Fermé
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017 - Modifié le 30 juin 2017 à 19:40
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017 - 1 juil. 2017 à 00:44
Bonjour !

Quand je tape une commande qu'est censée me give un item dans un jeu alors que je suis admin etc tout ce que l'on veut, voilà sur quoi est-ce que je tombe. Quelqu'un peut-il m'aider à y voir plus clair ?
Merci par avance pour vos réponses.
A voir également:

6 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 19:49
Bonjour,

Ton serveur tu ne sais pas comment il fonctionne, et tu vas avoir une erreur puis une autre, etc. jusqu'à peut-être arriver à un moment où ça marche.

Mais on ne sait pas combien il y a d'erreurs à corriger et ton manque d'autonomie va faire qu'à chaque nouvelle erreur tu vas créer une discussion à laquelle ce sera la croix et la bannière pour corriger le problème...

Donc je ne sais pas ce que tu as tapé comme commande ici, mais apparemment elle est incomplète, le programme attends (au moins) deux valeurs, mais la valeur "1" (donc la deuxième) n'existe pas.
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 19:57
Pour t'expliquer, en clair la commande tapée est ",additem:VALUE", et là j'ai tapé ,additem:201071002 , qui correspond donc à un certain objet (l'ID est trouvé dans la database, et la commande dans un .txt avec les commandes), je suis perdu
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 19:58
et la commande ,guildcreate:NAME ,quant-à-elle fonctionne correctement, donc la structure de la commande est correcte !
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 20:02
Ce n'est pas parce qu'une commande fonctionne que les autres sont forcément bonnes, regarde notre test avec .serverstatus et .ping dans ton autre discussion.
Les deux étaient listés dans le .help mais bien que .ping fonctionne, .serverstatus ne fonctionnait pas...

Dans la mesure où on ne sait pas vraiment ce qu'il y a dans le code, on peut aussi très bien imaginer que tu essayes de faire fonctionner une commande qui n'a jamais marché...
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 20:13
Comment est-ce que je pourrais savoir comment me give un item ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 20:18
C'est du code spécifique à ton programme, donc soit c'est documenté, soit il faut aller chercher dans le code comment ça fonctionne...
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 30 juin 2017 à 21:34


Voilà, j'ai vu ce truc là dans un de mes dossiers nommé "commands"
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 21:39
Vu que tu as l'air d'avoir accès au code, il faut s'intéresser aux lignes de codes qui sont marqués dans tes messages d'erreurs (et le code de contexte autour).
  • ItemSpawner.java ligne 17
  • ChatParser.java ligne 204
  • Chat.java ligne 239
  • GameServer.java ligne 195
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 21:41
Donc je trouve où ces fameuses lignes de codes ? Dans la database HeidiSQL ou dans le fichier java ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 21:48
Les deux images que tu as montré précédemment c'est du code...
Après, le mieux serait de le récupérer directement à la source, dans les fichiers .class qui sont exécutés par le programme (avec JD-GUI par exemple)
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 21:49
Je m'en occupe de suite !
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 30 juin 2017 à 21:51
Voilà les quelques lignes de codes apparemment du JAVA, mais il y a une dizaine de fichiers java dans mon fichier commandes, donc comment savoir lequel est le bon ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 21:55
Les fichiers que tu as là sont les bons (sous réserve qu'il n'y ait pas d'écarts entre le code et le programme compile).

Pour le nom de dossiers ça se voit dans ton message d'erreur.
Par exemple pour la première ligne, le code source sera dans
chat/chatCommandHandlers/ItemSpawner.java
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 21:57
Par contre le plus simple c'est de copier-coller le code plutôt que de faire des impressions écrans et de ne pas oublier de cibler les lignes concernées par l'erreur.
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 21:59
Oups, je le ferai dès maintenant
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 30 juin 2017 à 21:59
La même chose que les JAVA à priori regarde
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 30 juin 2017 à 22:00


Voilà ce que j'ai dans chat/chatCommandHandlers/ItemSpawner.java
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 22:06
Donc, comme je l'indiquais dans le premier message, la commande est incomplète, le programme attends (au moins) deux valeurs, en l’occurrence des entiers, que l'on voit dans le code :
Integer.parseInt(parameters[1])
et qui provoque l'erreur
ArrayIndexOutOfBoundsException: 1
car le tableau
parameters
ne contient pas la valeur 1...
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 23:11
Donc du coup plus facilement, que dois-je faire ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 juin 2017 à 23:18
Il faudrait le reste du code... Là ça ne fait que confirmer ce que j'avais compris du message d'erreur. En particulier il faudrait savoir comment le programme calcule les paramètres afin de savoir pourquoi il n'en a qu'un au lieu des deux attendus. Mais cette partie là ne se fait pas dans le code de ItemSpawner donc il me faudrait les trois autres.
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
30 juin 2017 à 23:21
Oula, jusque là encore je comprenais mais là je brasse grave ! Quels éléments te faudrait-il pour pouvoir comprendre ce qu'il manque ? Je peux t'expliquer un peu ce que j'ai fait pour avoir les fichiers etc ou même t'envoyer carrément le tuto papier de ce que j'ai fait pour avoir tout ça, si ça peut aider !
Sinon pour faire court, j'ai une database sur MySQL, et des fichiers JAVA et CLASS. Et quand j'ai fini de faire la database sur MySQL, j'ai du faire un AutoCompileAll.bat
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié le 30 juin 2017 à 23:26
C'est ce que j'expliquais plus haut, tu as un message d'erreur qui fait apparaître 4 lignes de codes :
  • ItemSpawner.java ligne 17
  • ChatParser.java ligne 204
  • Chat.java ligne 239
  • GameServer.java ligne 195

Donc avec ItemSpawner.java je peux confirmer qu'il attends 2 paramètres (des entiers), mais vu le message d'erreur il n'a pas le deuxième.

Il faudrait donc savoir comment il est censé calculer ces deux paramètres et ça je le saurais dans l'un des 3 autres codes. Cela me permettra de savoir quel format est attendu pour ta commande pour que tu la corriges et lui transmettre convenablement les deux paramètres.
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 30 juin 2017 à 23:45


Est-ce que ça t'aide ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
1 juil. 2017 à 00:02
Ok, donc le format des commandes c'est
COMMANDE:PARAM1:PARAM2:PARAM3...

À partir de là il récupère d'une part le nom de la commande puis la liste des paramètres.

Avec le nom de la commande il va chercher dans une liste qu'est-ce qui va permettre de l'interpréter, dans ton cas avec la commande "additem" c'est "ItemSpawner" qui va être utilisé et il attends deux paramètres entiers.

Donc le format ce serait
additem:entier1:entier2


Par contre je ne sais pas à quoi correspond ces deux entiers, pour le savoir il faudrait regarder dans item/Item.java la méthode itemSpawnPacket et s'intéresser au rôle du deuxième et troisième paramètre (qui sont donc des entiers).

Attention : je n'ai pas le code complet pour ItemSpawner, parce qu'il y a autre chose à droite de l'image que je ne vois pas (et qui sont peut être utiles) donc mon analyse est sous réserve qu'il n'y ait rien d'important caché après...
(c'est pour ça qu'un copier coller du code c'est mieux qu'une image, au moins on a tout d'un coup...)
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
Modifié le 1 juil. 2017 à 00:10
Alors la formule incomplète c'est celle-ci :

//System.out.println("About to spawn item: " + itemID + "x"+Integer.parseInt(parameters[1])+" at coordinates: " + cur.getlastknownX() + "," + cur.getlastknownY() );


Et ensuite dans le item.java il y a ça :

package item;

import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import Connections.Connection;
import Player.Character;
import Player.PlayerConnection;
import Tools.BitTools;
/*


* TODO: uhhh.. lots of stuff

*/
public class Item {
 private int id;
 private int width, height;
 private boolean consumeable;
 private boolean permanent;
 private int npcPrice;
 private long expirationTime;
 private int minLvl, MaxLvl;
 private int type;
 
 public static final int EQUIPMENT = 1;
 public static final int POTION = 2;
 public static final int TELEPORT = 3;
 public static final int UPGRADE = 4;
 public static final int MANUAL = 5;
 public static final int MATERIAL = 6;
 
 public static int inc = 0;
 public static ConcurrentMap<Integer, Integer> iteMap = new ConcurrentHashMap<Integer, Integer>();
 public static ConcurrentMap<Integer, Integer> iteMapSTACK = new ConcurrentHashMap<Integer, Integer>();
 public static ConcurrentMap<Integer, Integer> iteMapcharid = new ConcurrentHashMap<Integer, Integer>();
 public static ConcurrentMap<Integer, Long> iteMapTimedrop = new ConcurrentHashMap<Integer, Long>();
 
 public Item(){
 }
 public Consumables getConsumable(){
  return null;
 }
 //public Equipment getEquipment(){
 // return null;
 //}

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public int getWidth() {
  return width;
 }

 public void setWidth(int width) {
  this.width = width;
 }

 public int getHeight() {
  return height;
 }

 public void setHeight(int height) {
  this.height = height;
 }

 public boolean isConsumeable() {
  return consumeable;
 }

 public void setConsumeable(boolean consumeable) {
  this.consumeable = consumeable;
 }

 public boolean isPermanent() {
  return permanent;
 }

 public void setPermanent(boolean permanent) {
  this.permanent = permanent;
 }

 public int getNpcPrice() {
  return npcPrice;
 }

 public void setNpcPrice(int npcPrice) {
  this.npcPrice = npcPrice;
 }

 public long getExpirationTime() {
  return expirationTime;
 }

 public void setExpirationTime(long expirationTime) {
  this.expirationTime = expirationTime;
 }

 public int getMinLvl() {
  return minLvl;
 }

 public void setMinLvl(int minLvl) {
  this.minLvl = minLvl;
 }

 public int getMaxLvl() {
  return MaxLvl;
 }

 public void setMaxLvl(int maxLvl) {
  MaxLvl = maxLvl;
 }

 public int getType() {
  return type;
 }

 public void setType(int type) {
  this.type = type;
 }
 
 public static byte[] itemSpawnPacket(int charID, int itemID, int STACK, float x, float y, Connection con) {
  Character cur = ((PlayerConnection)con).getActiveCharacter();
  inc++;
  byte[] item = new byte[56];
  byte[] spawnX = BitTools.floatToByteArray(x);
  byte[] spawnY = BitTools.floatToByteArray(y);
  byte[] chid = BitTools.intToByteArray(inc);
  byte[] itid = BitTools.intToByteArray(itemID);
  byte[] INVstack = BitTools.intToByteArray(STACK);
  
  item[0] = (byte)item.length;
  item[4] = (byte)0x05;
  item[6] = (byte)0x0e;
  
  for(int i=0;i<4;i++) {
   item[36+i] = spawnX[i];
   item[40+i] = spawnY[i];
   item[20+i] = itid[i];
   item[32+i] = chid[i]; 
   item[28+i] = INVstack[i]; // drop stack
  }
  iteMapTimedrop.put(Integer.valueOf(inc), Long.valueOf(System.currentTimeMillis()));
  iteMapcharid.put(Integer.valueOf(inc), Integer.valueOf(charID));
  iteMap.put(Integer.valueOf(inc), Integer.valueOf(itemID));
  iteMapSTACK.put(Integer.valueOf(inc), Integer.valueOf(STACK));
  cur.sendToMap(item);
  
  return item;
 }
 


}


Par contre dans le fichier item, y a aussi consumables, dropitem, equipment etc... Ca ne t'intéresse pas ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
1 juil. 2017 à 00:16
Ce qui compte c'est la ligne 131 :

itemSpawnPacket(int charID, int itemID, int STACK, float x, float y, Connection con)

Donc le format de ta commande c'est
additem:itemId:stack

Je ne sais pas ce qu'est "STACK" dans ton contexte, mais il va falloir lui trouver une valeur et la passer dans ta commande...

NB. C'est quand même du code très moche qu'on a là !
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
1 juil. 2017 à 00:17
Comment ça très moche ? ^^

Stack ce serait pas le nombre d'items ? Eh attends je vais essayer en jeu j'arrive de suite !
0
Ezekhx Messages postés 73 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 25 août 2017
1 juil. 2017 à 00:44
Et voilà, problème résolu ! C'était bien le nombre d'item à avoir ^^
0