MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Formulation mathématique pour retrouver un level à partir d'xp donné !

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    5 Messages 2 Publieurs 310 Vues 2 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • KporalK Hors-ligne
      Kporal
      dernière édition par

      Bien le bonsoir et bonne fin de week end 😄 > Bon bah tout est dans le titre, pour faire simple, je suis entrain de faire un système d’xp lors du spawn des mob hostile ( mon ancien système fonctionne sans souci mais n’est absolument pas dynamique et pas propre du tout bref ! )

      new Random().nextInt( 300 ); // Je génère un nombre qui simule l'xp du monstre
      /* ( 10 * rand( 5 )) + ( 10 * rand( 5 ) * rand( 5 ))
       * 0 + 0 * 0 = 0
       * 10 + 10 * 1 = 20
       * 20 + 20 * 2 = 60
       * 30 + 30 * 3 = 120
       * 40 + 40 * 4 = 200
       * 50 + 50 * 5 = 300
       */
      

      Le rand( 5 ) est juste pour simuler les niveaux des monstres pour me donner un aperçu de l’éventail d’xp fourni qui me sert de base “pourcentage” pour définir leur bonus et leur probabilité de pop sur la map.
      Mon souci est donc de retrouver cette formule au sens inverse, c’est à dire de retrouver le niveau max des monstres sachant que le niveau max est 5 avec un maximum de 300 d’xp !
      PS, je suis une brelle en math … je demande donc un peu d’aide si quelqu’un aurait une belle formule, j’ai chercher un peu des exemple notamment en utilisant Math.sqrt mais je n’y arrive simplement pas …
      Merci d’avance !

      Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

      1 réponse Dernière réponse Répondre Citer 0
      • KporalK Hors-ligne
        Kporal
        dernière édition par Kporal

        @SubscribeEvent
        	public void entitySpawn( LivingSpawnEvent event ) {
        		if( event.getEntity() instanceof EntityMob && Configs.allowMobLevel ) {
        			
        			/* ( 10 * rand( 5 )) + ( 10 * rand( 5 ) * rand( 5 ))
        			 * 0 + 0 * 0 = 0
        			 * 10 + 10 * 1 = 20
        			 * 20 + 20 * 2 = 60
        			 * 30 + 30 * 3 = 120
        			 * 40 + 40 * 4 = 200
        			 * 50 + 50 * 5 = 300
        			 */
        			int xp = new Random().nextInt( 300 );
        			int level = ( int ) (( Math.sqrt( 20 * ( 2 * xp + 5 )) + 10 ) / 20);
        			int invert = 5 - level;
        			
        			EntityMob mob = ( EntityMob ) event.getEntity();
        			
        			if( invert == 5 )
        				mob.setCustomNameTag( TextFormatting.OBFUSCATED + mob.getCustomNameTag() );
        			
        			IAttributeInstance mobMaxHealth = mob.getEntityAttribute( SharedMonsterAttributes.MAX_HEALTH );
        			double maxHealth = mobMaxHealth.getBaseValue() + ( mobMaxHealth.getBaseValue() / 5 * invert);
        			mobMaxHealth.setBaseValue( maxHealth );
        			mob.setHealth(( float ) mobMaxHealth.getBaseValue() );
        			
        			IAttributeInstance mobAttack = mob.getEntityAttribute( SharedMonsterAttributes.ATTACK_DAMAGE );
        			double attack = mobAttack.getBaseValue() + ( mobAttack.getBaseValue() / 5 * invert);
        			mobAttack.setBaseValue( attack );
        		}
        	}
        

        Sujet résolu

        Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

        1 réponse Dernière réponse Répondre Citer 0
        • KporalK Hors-ligne
          Kporal
          dernière édition par

          Bon bah j’ai trouver une solution qui fonctionne ( Algorithm for dynamically calculating a level based on experience points? )

          int xp = new Random().nextInt( 300 );
          int level = ( int ) (( Math.sqrt( 20 * ( 2 * xp + 5 )) + 10 ) / 20);
          

          Je comprend pas vraiment à quoi correspondent les chiffres, j’ai simplement copier bêtement la formule en modifiant certaine valeur qui me semblais cohérente … bref j’ai jouer à pile ou face et j’ai réussi mais je comprend rien pour autant …

          Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

          1 réponse Dernière réponse Répondre Citer 0
          • KporalK Hors-ligne
            Kporal
            dernière édition par

            Existe t-il un moyen pour inverser dynamiquement mon level donnée ?
            Je m’expliques, le level max ici c’est 5, mais comme je l’ai dis, je récupère ce level sous forme de pourcentage, le niveau le plus rare est donc 0 et non 5, c’est à partir de là que je modifie les stats des monstres et leur donne de l’équipement en conséquent !
            là ou le niveau 5 est en faite le niveau le plus bas avec le plus gros pourcentage de chance d’apparition, en somme le but serait de faire : level 0 = 5, level 1 = 4, level 2 = 3 … … est-ce possible ? si oui comment doit-je m’y prendre ?

            Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

            1 réponse Dernière réponse Répondre Citer 0
            • DeletedD Hors-ligne
              Deleted
              dernière édition par

              Bonsoir, je n’ai rien compris du début jusqu’à la fin. Le niveau le plus bas est 5, donc on compte les niveau par ordre décroissant? Quel est le problème dans la formule? Que cherches-tu à faire? Explique avec des phrases simples, qui ne font pas 4 lignes, ne rentre pas trop dans les détails, sinon on s’y perd. On s’en fiche de savoir quel était l’ancien système.

              1 réponse Dernière réponse Répondre Citer 0
              • KporalK Hors-ligne
                Kporal
                dernière édition par Kporal

                @SubscribeEvent
                	public void entitySpawn( LivingSpawnEvent event ) {
                		if( event.getEntity() instanceof EntityMob && Configs.allowMobLevel ) {
                			
                			/* ( 10 * rand( 5 )) + ( 10 * rand( 5 ) * rand( 5 ))
                			 * 0 + 0 * 0 = 0
                			 * 10 + 10 * 1 = 20
                			 * 20 + 20 * 2 = 60
                			 * 30 + 30 * 3 = 120
                			 * 40 + 40 * 4 = 200
                			 * 50 + 50 * 5 = 300
                			 */
                			int xp = new Random().nextInt( 300 );
                			int level = ( int ) (( Math.sqrt( 20 * ( 2 * xp + 5 )) + 10 ) / 20);
                			int invert = 5 - level;
                			
                			EntityMob mob = ( EntityMob ) event.getEntity();
                			
                			if( invert == 5 )
                				mob.setCustomNameTag( TextFormatting.OBFUSCATED + mob.getCustomNameTag() );
                			
                			IAttributeInstance mobMaxHealth = mob.getEntityAttribute( SharedMonsterAttributes.MAX_HEALTH );
                			double maxHealth = mobMaxHealth.getBaseValue() + ( mobMaxHealth.getBaseValue() / 5 * invert);
                			mobMaxHealth.setBaseValue( maxHealth );
                			mob.setHealth(( float ) mobMaxHealth.getBaseValue() );
                			
                			IAttributeInstance mobAttack = mob.getEntityAttribute( SharedMonsterAttributes.ATTACK_DAMAGE );
                			double attack = mobAttack.getBaseValue() + ( mobAttack.getBaseValue() / 5 * invert);
                			mobAttack.setBaseValue( attack );
                		}
                	}
                

                Sujet résolu

                Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                ContactMentions Légales

                MINECRAFT FORGE FRANCE © 2024

                Powered by NodeBB