My little (pony) système d'xp



  • yop tous le monde j'ai encore un autre problème:
    je suis en train de faire un système d'xp pour mon serveur, j'ai déja l'équation pour les niveau/point d'xp nécessaire mais j'ai un bug:
    je vois avec les syso que les 50 d'xp ne son pas ajouter a la mort de l'entity et cela s'affiche deux fois, chose anormale, les syso reste a 0:

    
    2014-05-24 17:06:56 [Infos] [STDOUT] 0
    2014-05-24 17:06:56 [Infos] [STDOUT] 0
    2014-05-24 17:06:59 [Infos] [STDOUT] 0
    2014-05-24 17:06:59 [Infos] [STDOUT] 0
    2014-05-24 17:07:01 [Infos] [STDOUT] 0
    2014-05-24 17:07:01 [Infos] [STDOUT] 0
    2014-05-24 17:07:03 [Infos] [STDOUT] 0
    2014-05-24 17:07:03 [Infos] [STDOUT] 0
    2014-05-24 17:07:04 [Infos] [STDOUT] 0
    2014-05-24 17:07:04 [Infos] [STDOUT] 0
    2014-05-24 17:07:06 [Infos] [STDOUT] 0
    2014-05-24 17:07:06 [Infos] [STDOUT] 0
    
    

    voici le code dans l'entitée:

    
    public int expDonne = 50;
    public int expEnCour = GestionLevel.exp;
    
    public void onDeath(DamageSource damagesource)
    {
    GestionLevel.exp = expEnCour + expDonne;
    System.out.println(expEnCour);
    super.onDeath(damagesource);
    }
    
    

    code du calcul:

    
    public class GestionLevel
    {
    public static int exp;
    public int nextLevel;
    public int level = 1;
    public int xpActuel;
    public ElementType type;
    
    public void xp()
    {
    if(level == 1)
    {
    if(exp == 100)
    {
    level++;
    System.out.println(level);
    xpActuel = 100;
    }
    }
    if(level==2 && level <=70)
    {
    System.out.println("je suis lvl>1");
    System.out.println(level);
    nextLevel = level++;
    
    if(exp == 255*level+50*nextLevel+xpActuel)
    {
    xpActuel = 255*level+50*nextLevel+xpActuel;
    level++;
    }
    }
    }
    


  • Bon déjà mettre des attribut en public alors qu'ils ne sont pas final c'est pas une bonne méthode.
    Ton code est très crade.
    En objet, on utilise les getters/setters.

    Ensuite ton problème est un problème de java.
    Apprend les bases.
    Les types primitif sont passé par valeur et non par référence contraitement aux objets.

    Tu ne modifies donc jamais la valeur de expEnCour.



  • Je suppose que c'est de l'exp pour chaque joueur ?

    Si oui, attends le tutoriel sur les propriété d'entitées, il est rédigé, et devrait bientôt être corrigé 😉



  • ok merci gugu t'assure 🙂



  • J'assurerais un support pour celui-ci, pour aider a modifier le code montré, et faire des systèmes customisés. Pour ton cas d'exp, l'idée est assez simple si tu as l'équation



  • j'ai l"équation, je suis d'ailleur en train de faire un programme "xp" en C++ (étant donné que je le maîtrise mieux)



  • @'Gugu42':

    Je suppose que c'est de l'exp pour chaque joueur ?

    Si oui, attends le tutoriel sur les propriété d'entitées, il est rédigé, et devrait bientôt être corrigé 😉

    Trop tard pour moi xD J'ai déjà créé mon système d'xp, je vais voir ce que ça change avec le tutoriel 😉



  • bon j'ai fait une console application en C++ dont voici le code:

    int main()
    {
    {
    cout<<"exp:"< <endl;<br>cin>> expDonne;
    cout<<"\n"< <endl;<br>exp = expDonne+exp;
    
    if(level == 1)
    {
    if(exp >= 100)
    {
    level++;
    xpActuel = 100;
    }
    }
    if(level>=2 || level <=70)
    {
    nextLevel=level+1;
    if(exp >= 255*level+50*nextLevel+xpActuel)
    {
    cout<<"exp:"< <endl;<br>cout< <exp<<endl;<br>xpActuel = 255*level+50*nextLevel+xpActuel;
    level++;
    }
    }
    cout<<"level: "< <level<<endl;<br>cout<<"exp: "< <exp<<endl;<br>cout<<"xpActuel: "< <xpactuel<<endl;<br>return 0;
    }
    
    

    et je l'ai convertie en java:

    
    public static int Main()
    {
    System.out.print("exp:");
    System.out.print("\n");
    System.out.print("\n");
    System.out.print("\n");
    exp = expDonne + exp;
    if (level == 1)
    {
    if (exp >= 100)
    {
    level++;
    xpActuel = 100;
    }
    }
    if (level >= 2 || level <= 70)
    {
    nextLevel = level + 1;
    if (exp >= 255 * level + 50 * nextLevel + xpActuel)
    {
    System.out.print("exp:");
    System.out.print("\n");
    System.out.print(exp);
    System.out.print("\n");
    xpActuel = 255 * level + 50 * nextLevel + xpActuel;
    level++;
    }
    }
    System.out.print("level: ");
    System.out.print(level);
    System.out.print("\n");
    System.out.print("exp: ");
    System.out.print(exp);
    System.out.print("\n");
    System.out.print("xpActuel: ");
    System.out.print(xpActuel);
    System.out.print("\n");
    }
    
    

    après réaffectation dès variable j’obtiens:

    
    public static void Main()
    {
    if (level == 1)
    {
    if (exp >= 100)
    {
    level++;
    xpActuel = 100;
    }
    }
    if (level >= 2 || level <= 70)
    {
    nextLevel = level + 1;
    if (exp >= 255 * level + 50 * nextLevel + xpActuel)
    {
    System.out.print("exp:");
    System.out.print("\n");
    System.out.print(exp);
    System.out.print("\n");
    xpActuel = 255 * level + 50 * nextLevel + xpActuel;
    level++;
    }
    }
    System.out.println("level: ");
    System.out.println(level);
    System.out.println("\n");
    System.out.println("exp: ");
    System.out.println(exp);
    System.out.println("\n");
    System.out.println("xpActuel: ");
    System.out.println(xpActuel);
    System.out.println("\n");
    
    }
    
    

    je gagne alors bien les 50 exp par mob kill mais le nombre de lvl ne change pas… alors qu'en C++ oui</xpactuel<<endl;<br></exp<<endl;<br></level<<endl;<br></exp<<endl;<br></endl;<br></endl;<br></endl;<br>