Sujet n°1423
Posté par Luzert le 6 Aoû - 00:23 (2008)
Titre : Ok - Bug du Pokémon au niveau MAX.
Voilà, je vient de catcher un bug en dévellopant quelques petits trucs dans les script, je vous dévoile le mode opératoire:


J'ai monté le level maximum à 500 (Quand j'y repense j'me dit que c'est pas humains comme stats... VOIR) et j'ai ensuite crée des Pokémons au niveau maximum avec le Debug (que je trouve super bien pensé!).


Test 1 : J'ai livré une bataille (pas trop dure) avec un ennemi ébahi devant Deoxys (Debug :p) et je remporte facilement le victoire (Deoxys level 500, ca se comprend vite, non?)
Test 2 : Utilisation d'un super-bonbon sur un Pokémon de niveau maximum, de façon à tester le fait que le jeu plante.

C'est là que le bug fait son apparition: Au level max, le gain d'XP fait planter le jeu, je n'ai pas vérifié si l'effet aurait été pareil si je n'avais pas modifié le level max!! Damnation diront certains, mais rassurez-vous, j'ai déjà analysé la chose, j'ai reprogrammé certaines lignes de script dans Gestion>Pokémon (Oui je sais, j'ai trafiqué votre boulot, je vais être privé de dessert, encore!)



 Voici ma solution!
  

   À partir de la ligne 705, séléctionnez les deux premières instructions:

Code:





     def level_check
      if @level >= MAX_LEVEL
        return false
      end
      if @exp >= exp_list[@level+1]
        return true
      else
        return false
      end
    end
    
    def level_up(scene = nil)
      # Calculs
      if ]@exp < exp_list[@level+1]
        @exp = exp_list[@level+1]
      end







Remplacez-les par ceci:
Code:




      if @level >= MAX_LEVEL
        return false
      end
      if @exp >= exp_list[@level+1]
        return true
      else
        return false
      end
    end
   
    def level_up(scene = nil)
      # Calculs
      if @level < MAX_LEVEL
      else
        return false
      end






Bon, pour ceux qui ne connaissent pas, j'explique: Déjà, le script précédent, je vois pas du tout comment il fonctionnait, mais je m'en fout (^^) Je remplace l'instruction de départ par "Si le pokémon est level Max: ne pas level up; sinon: level up".
Simple, j'ai vérifié pour les super-bonbons, le super-bonbons ne bug pas, seulement le bonbon est perdu...

Si ce moyen de réparer le bug, faites-le moi savoir, s'il-vous-plaît. =)

Cordialement,
Luzert

Posté par Zelda le 6 Aoû - 00:28 (2008)
Vla que t'arrive que tu nous répare déjà un bug !

Bravo ! Imbécile heureux

Posté par Luzert le 6 Aoû - 00:31 (2008)
Il ne faut pas se méprendre, pour moi ca fonctionne nickel chrome! Mais je ne sais pas si cela ne pourrait pas engendrer une catastrophe pixellienne (Je suis torsionnaire des mots Français, je préviens!)

Posté par Zelda le 6 Aoû - 00:32 (2008)
Ah bah comme ça on est deux !

Mon mot préféré c'est : Doublationner ( quand on double les voitures Imbécile heureux )

Posté par Luzert le 6 Aoû - 00:46 (2008)
Peu importe, je viens d'analyser le script, ça devrait fonctionner parfaitement, aucunes conséquences dues à la modification de ces lignes.

Posté par Shimo le 6 Aoû - 08:44 (2008)
C'est vrai j'avais déjà constater ce bug ^^"J'avais tester de nouveau PokéMoN qui devais évoluer au lv 100 mais quand je l'ai créé je me suis gouré et j'ai créé un PoKéMoN (Grâce à ce très cher mode débug) un PoKéMoN de niveau 100. Je me suis dit pas grave et pour rigoler je lui ai donné un [SUPER BONBON] et là... paf! Mon jeu à planté! ...
Enfin ce n'était qu'un jeu vierge et test mais ça m'a quand même marqué...
PS: Si j'ai bien compris on remplace les lignes que tu indique en premier par celles que tu nous donne ensuite et ça marche après c'est ça? Le bonbon est gaché mais c'est tout?
Ben si c'est ça c'est cool!
Bravo Bouche extensiblek: ^-^

Posté par Luzert le 6 Aoû - 08:56 (2008)
Merci, pour le bonbon perdu, on va accuser la gourmandise des Pokémons ... (lol)
Merci, j'dois dire que je suis assez fier et content de cette découverte...

Posté par Shimo le 6 Aoû - 09:35 (2008)
:mdr: Mais tu as raison car je me suis toujours demander si tous les PoKéMoN sont des économiseurs !! x)
Par exemple toi même quand t'es en pleine forme si on te propose un soda tu va refuser? Ben non! :mdr:
Bon donc c'est bon je vais voir si je le met =)
PS :Tu need crédit?

Posté par Luzert le 6 Aoû - 09:48 (2008)
Normalement, tu devrais pas avoir de problème, chez moi il fonctionne impec' ! 'Faut croire que je suis né pour la programmation, j'arrête pas de faire des carton en Ruby, C/C++ et xHTML, je suis heureux.

PS : Ouais, need à fond, fais moi MP pour en discuter.

Posté par Sphinx le 6 Aoû - 10:59 (2008)
Clin d'œil foireux je me suis également penché sur ce problème de super bonbon quand j'ai lu que vous perdiez cet objet si précieux, et j'ai trouvé la solution (une alternative efficace à la solution de luzert, puisque le bonbon n'est simplement plus utilisé donc pas de risque de rencontrer le bug ^_^)

Script Pokemon_Item / Data, vers la ligne 574 à 583, vous devriez avoir ceci :

Code:
        if data(id)["level_up"] != nil
          has_effect = true
          for i in 1..data(id)["level_up"]
            pokemon.level_up(scene)
            if pokemon.evolve_check != false
              scenebis = POKEMON_S::Pokemon_Evolve.new(pokemon, pokemon.evolve_check, scene.z_level + 300)
              scenebis.main
            end
          end
        end


Remplacez le simplement par ceci :

Code:
        if data(id)["level_up"] != nil and $pokemon_party.actors[$game_variables[4]].level < MAX_LEVEL
          has_effect = true
          for i in 1..data(id)["level_up"]
            pokemon.level_up(scene)
            if pokemon.evolve_check != false
              scenebis = POKEMON_S::Pokemon_Evolve.new(pokemon, pokemon.evolve_check, scene.z_level + 300)
              scenebis.main
            end
          end
        end


^_^ oui, je n'ai fait que rajouter
Code:
 and $pokemon_party.actors[$game_variables[4]].level < MAX_LEVEL
à la première ligne du premier extrait de code...

Code:
$pokemon_party.actors[$game_variables[4]]
sert à déterminer sur quel pokémon on utilise l'objet (ici le super bonbec :mrgreen:)

Code:
.level
sert à extraire le niveau du dit pokémon au format nombre, on peut donc l'utiliser.

Code:
< MAX_LEVEL
bon là, je reconnais que je me suis inspiré du travail de luzert, en effet je teste si le niveau du pokémon est inférieur au niveau max (auquel cas le bonbon agit) ou non (auquel cas le bonbon n'a strictement aucun effet ^_^)

=) Voilà =)

Posté par Luzert le 6 Aoû - 11:09 (2008)
Fascinant! Mais j'ai arangé mon jeu avec une grand einnovation, pas de level max (enfin, si, mais impossible à atteindre xD: 9999)

Posté par Krosk le 6 Aoû - 17:05 (2008)
Oui, j'avais déjà identifié le bug, il est censé etre déjà corrigé, mais merci d'avoir pointé du doigt ceci. J'exprime quand meme un doute sur:
Code:
@exp < MAX_LEVEL

Ou tu compare de l'exp à un niveau.

Posté par Luzert le 6 Aoû - 17:55 (2008)
Oui, j'avoue...

Posté par Sphinx le 6 Aoû - 17:58 (2008)
Clin d'œil foireux inutile de vous embêter avec le script Pokemon Clin d'œil foireux


^_^ la ptite modif de Pokemon_Item / Data est rapide, et après essais, je peux affirmer que ca marche :mrgreen:

Posté par Luzert le 6 Aoû - 19:43 (2008)
Mais il faut modif, ca bug aussi si ton Pokémon gagne de l'xp quand il est au maximum de son expérience. (par ex= lvl500 - xp:100%, si on gagne de l'xp, ca plante)

Posté par Sphinx le 6 Aoû - 20:32 (2008)
=) normalement un poké lv100 ne gagne pas d'exp Clin d'œil foireux

Posté par Luzert le 6 Aoû - 20:33 (2008)
Bah, au moins le script est arrangé, pour le reste, j'en ai rien à f***** xD

Posté par Luzert le 7 Aoû - 09:26 (2008)
UP! Les pokémons gagnait une infinité de level! Reglé : Nouveau script

Posté par Krosk le 7 Aoû - 15:40 (2008)
A propos de la modif de sphinx, la forme ci dessous est plus propre:

scrupt pokemon item / data lignes ~580
Code:
        if data(id)["level_up"] != nil
          has_effect = true
          for i in 1..data(id)["level_up"]
            if pokemon.level >= MAX_LEVEL
              has_effect = false
              break
            end
            pokemon.level_up(scene)
            if pokemon.evolve_check != false
              scenebis = POKEMON_S::Pokemon_Evolve.new(pokemon, pokemon.evolve_check, scene.z_level + 300)
              scenebis.main
            end
          end
        end

Le test de niveau se fait sur "pokemon", et auqel cas si le niveau est supérieur ou egal a max level, le bonbon est sans effet (message ingame) et ne disparait pas.


J'ajoute une alternative a la modif proposée par luzert, a savoir:
script pokemon ligne 638
Code:
    def add_exp_battle(amount)
      @exp = (@exp > exp_list[MAX_LEVEL])? exp_list[MAX_LEVEL] : @exp + amount
    end

a remplacer par
Code:
    def add_exp_battle(amount)
      @exp = (@exp + amount > exp_list[MAX_LEVEL])? exp_list[MAX_LEVEL] : @exp + amount
    end

Ces 2 modifs devraient empecher la progression de niveau après le niveau max.

Posté par Luzert le 21 Aoû - 18:30 (2008)
Je constate que lorsqu'on utilise un super bonbon sur un pokémon, il up plus!

Posté par Totox28 le 26 Aoû - 13:52 (2008)
Oui !! :cry:

Posté par Krosk le 26 Aoû - 14:28 (2008)
Oui quoi?

Posté par Sphinx le 26 Aoû - 14:29 (2008)
Luzert a écrit:
Je constate que lorsqu'on utilise un super bonbon sur un pokémon, il up plus!


Je pense que c'est à ca que TIPLOUF a dit oui


(^_^ ma méthode est encore valable, tiplouf Clin d'œil foireux)

Posté par Krosk le 26 Aoû - 14:35 (2008)
Bah j'arrive à utiliser des supers bonbons chez moi. Le super bonbon marche, sauf sur un pokémon de niveau max.

Ca doit etre parce que vous avez mélangé les modifications par ci par là que ca ne marche plus. Alors annulez les modifications jusqu'à que ca fonctionne...

Posté par Sphinx le 26 Aoû - 14:38 (2008)
^_^ pas impossible Clin d'œil foireux


(>> si besoin est, reprenez le script de base correspondant sur un projet RMXP vierge & remplacez le votre avec Clin d'œil foireux)