Sujet n°10848
Posté par Disccat le 16 Jan - 17:51 (2012)
Titre : [BUG] PC et Pokémon sans PV dans l'équipe
Ce bug m'a été reporté par un joueur, "m-a-t" de Pokébip, sur la démo du projet "Kamizawa".

Vous avez au moins deux Pokémon, un KO, et un avec des PV. Vous avez la possibilité de stocker dans votre PC le Pokémon ayant ses PV, et de garder dans l'équipe uniquement celui qui est KO.

Évidemment, ça créé un bug en entrant dans les hautes herbes, et ça doit être de même en combat de dresseur.

Voici le log contre les Pokémon sauvages :

Rapport_de_bug
---------- Erreur de script : Pokemon_Battle_Wild ----------
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `dead?' for nil:NilClass

----- Position dans Pokemon_Battle_Wild
Ligne 82

----- Backtrace
Script : Pokemon_Battle_Wild | Ligne : 82 | Méthode : in `initialize'
Script : Scene_Map | Ligne : 273 | Méthode : in `new'
Script : Scene_Map | Ligne : 273 | Méthode : in `call_battle'
Script : Scene_Map | Ligne : 133 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 54

Posté par Pαlвσlѕку le 16 Jan - 18:55 (2012)
Je vois d'où vient le problème.

En fait, j'ai repris le code de Krosk, et son code vérifie qu'il reste au moins un Pokémon dans l'équipe, mais il ne vérifie pas s'il le dernier Pokémon restant est K.O.

Posté par Sphinx le 16 Jan - 19:17 (2012)
Pαlвσlѕку a écrit:
Je vois d'où vient le problème.

En fait, j'ai repris le code de Krosk, et son code vérifie qu'il reste au moins un Pokémon dans l'équipe, mais il ne vérifie pas s'il le dernier Pokémon restant est K.O.


En effet, j'ai pas le script sous les yeux, mais le plus simple serait de tester si le pokémon est ko OU (s'il est encore en vie) tester s'il n'est pas le dernier pokémon apte au combat (une méthode similaire à .size dans la classe Pokemon_Party pourrait se charger de retourner le nombre de pokés aptes au combat)

Posté par Nuri Yuri le 16 Jan - 21:00 (2012)
La gestion de la boite n'est pas centralisé c'est une vraie horreur à modifier -_-'
Essaie d'ajouter ça dans la classe Pokemon_Party :
Code:
def virtual_size
      sz=0
      @actors.length.times do |i|
        sz += 1 if @actors[i].hp > 0
      end
      return sz
    end

Et dans la gestion de la boite(Pokemon_Computer/Box) juste après :
Code:
when 0 # Transférer
          if $pokemon_party.size == 1
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          if $pokemon_party.box_full?(@box)
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          id = @box_party.index #indique la place du pokémon dans l'equipe

met ça :
Code:
if $pokemon_party.virtual_size == 1 and $pokemon_party.actors[id].hp > 0
            $game_system.se_play($data_system.buzzer_se)
            return
          end

Met le bout de code précédent après ça aussi :
Code:
when 3 # Relacher
          if $pokemon_party.size == 1
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          id = @box_party.index


J'ai pas testé la méthode virtual_size et les codes ajoutés, mais en théorie ça devrait empêcher le stockage et le relâchement de Pokémons vifs quand il n'y a que des KO dans l'équipe lors de la gestion du PC.

J'ai pas testé donc je ne sais si ça va vraiment fonctionner voir même si mes codes vont planter, de plus je me suis pas amusé à chercher les multiples codes qui puissent accomplir cette action dans la gestion des boites, j'ai pas vraiment la tête à ça.

Posté par Disccat le 16 Jan - 21:39 (2012)
Non, ta correction ne change rien à ce bug, désolé ><'