Sujet n°1536
Posté par Sphinx le 23 Aoû - 20:33 (2008)
Titre : Contrôler divers caractères dans son équipe
Utilise :
Events
Graphismes
Mapping
Scénario
Scripts


Niveaux :
1 : aucune connaissances nécessaires (sauf lire et comprendre le français lu)
2 : quelques bases nécessaires pour pouvoir adapter sans mal le système proposé
3 : connaissances minimum nécessaires
4 : bonnes bases indispensables
5 : connaissances poussées requises


Niveau nécessaire en évents :
1 : maîtriser les conditions scriptées en évent.

Niveau nécessaire en scripts :
2 : être capable d'effectuer une modification dans un script.

Ces niveaux sont à titre indicatifs, à la seule estimation de l'auteur. Lisez ce tutoriel pour vous faire une idée plus précise et n'hésitez pas à demander de l'aide si nécessaire.


Sommaire

Note de l'auteur
Installation de la méthode "equipe_contient"
Explication de la méthode
Utilisation de la commande "equipe_contient"
Ajouter une nouvelle fonction à la méthode "equipe_contient"
Conseils de l'auteur
Vous êtes perdus


Note de l'auteur  

Tout d'abord, sachez que j'utiliserai quelques termes spécifiques à ce tutoriel, donc notez les dans un coin de votre tête, ils serviront tous pour plus tard.


Vous souvenez-vous de mon tutorial sur la sauvegarde des données des pokémons ? Afin de localiser un pokémon dans l'équipe, j'avais utilisé cette commande :
Code:


$pokemon_party.actors[pokemon_index("BULBIZARRE")]



C'est bien beau, mais cette petite amélioration ne permettait que de détecter la présence d'un pokémon dans l'équipe et d'en ressortir l'index... Maintenant, je vous propose de détecter la présence d'un pokémon dans votre équipe qui répond à un critère précis. Bien sur, à quoi ca sert de détecter la présence d'un pokémon s'il n'y a pas moyen de le sélectionner ? Aussi, je ressors actuellement @index sous forme d'une variable de script dont je reparlerai plus tard. Cependant, je prévois que certains préfèreront sans doute une variable d'évent, aussi j'expliquerai comment adapter tout ca (Ne flippez pas tout de suite, c'est très facile à faire ! Alors pourquoi je ne le fais pas par défaut ? Parce que si on s'y connait un peu en évents scriptés, on doit pouvoir s'en passer, et que ca occuperait une variable pour rien, du coup)

Bon, je vous laisse apprécier ce que j'ai passé une ptite aprèm à faire, moi j'avance un peu si cela ne dérange personne...
Revenir en haut  



Installation de la méthode "equipe_contient"  

Nous voilà donc à l'étape cruciale, l'installation. Etant donné sa complexité, les explications de cette nouvelle fonction ont été séparées, et se trouvent au point suivant.

Dans le script Interpreter, recherchez ces lignes :
Code:


  # ------------------------------------------------------
  # appel_menu_equipe
  #   Permet d'ouvrir une fenêtre de sélection du Pokémon.
  #   Renvoie -1, ou l'index du Pokémon (0 pour le premier,
  #   1 pour le suivant, 2 pour le suisuivant...
  # ------------------------------------------------------
  def call_party_menu
    Graphics.freeze
    scene = POKEMON_S::Pokemon_Party_Menu.new(0, 100, "selection")
    scene.main
    data = scene.return_data
    scene = nil
    Graphics.transition
    $game_variables[4] = data
    return data
  end
  alias appel_menu_equipe call_party_menu



et juste avant (après le end qui précède ces lignes !!!) ajoutez ce qui suit :
Code:


  # ------------------------------------------------------
  # type_id(valeur)
  #   convertit un nom de type en numero correspondant
  # ------------------------------------------------------
  
  def type_id(valeur)
    valeur = valeur.downcase
    if valeur == "normal"
      return 1
    elsif valeur == "feu"
      return 2
    elsif valeur == "eau"
      return 3
    elsif valeur == "electrique"
      return 4
    elsif valeur == "plante"
      return 5
    elsif valeur == "glace"
      return 6
    elsif valeur == "combat"
      return 7
    elsif valeur == "poison"
      return 8
    elsif valeur == "sol"
      return 9
    elsif valeur == "vol"
      return 10
    elsif valeur == "psy"
      return 11
    elsif valeur == "insecte"
      return 12
    elsif valeur == "roche"
      return 13
    elsif valeur == "spectre"
      return 14
    elsif valeur == "dragon"
      return 15
    elsif valeur == "acier"
      return 16
    elsif valeur == "ténèbres"
      return 17
    end
  end

  # ------------------------------------------------------
  # booleen_convert(valeur)
  #   Transforme une chaine de caractères en booléen (true / false)
  # ------------------------------------------------------
  
  def booleen_convert(valeur)
    valeur = valeur.downcase
    if valeur = "true"
      return true
    elsif valeur = "false"
      return false
    else
      return valeur.to_s
    end
  end



Vous venez d'installer deux méthodes, une qui s'appelle "type_id" et une qui s'appelle "booleen_convert". Ces deux méthodes vont nous servir dans la méthode "equipe_contient" et sont donc indispensable à intégrer.

Maintenant, ajoutez ce qui suit immédiatement après le dernier end de l'extrait ci-dessus :
Code de 1678 lignes
Code:
  # ------------------------------------------------------
  # equipe_contient(hash)
  #   Sert a vérifier la présence d'un pokémon répondant aux critère
  #   étudiés.
  # ------------------------------------------------------
  
  def equipe_contient(hash)
    if hash.type != Hash or hash == nil
      return 0
    elsif $pokemon_party.size == 0
      return 1
    end
    @valeur = []
    for i in 0...$pokemon_party.size
      for j in 0...hash.size
        if hash["LEVEL"] != nil
          @valeur[j] = hash["LEVEL"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].level == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].level >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].level <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].level > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].level < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].level != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].level % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["MAX_HP"] != nil
          @valeur[j] = hash["MAX_HP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].max_hp == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].max_hp >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].max_hp <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].max_hp > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].max_hp < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].max_hp != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].max_hp % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["HP"] != nil
          @valeur[j] = hash["HP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].hp == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].hp >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].hp <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].hp > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].hp < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].hp != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].hp % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["%_HP"] != nil
          @valeur[j] = hash["%_HP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if Integer($pokemon_party.actors[i].hp / $pokemon_party.actors[i].max_hp * 100.0) % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["ATK"] != nil
          @valeur[j] = hash["ATK"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].atk == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].atk >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].atk <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].atk > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].atk < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].atk != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].atk % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["DFE"] != nil
          @valeur[j] = hash["DFE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].dfe == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].dfe >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].dfe <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].dfe > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].dfe < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].dfe != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].dfe % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["SPD"] != nil
          @valeur[j] = hash["SPD"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].spd == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].spd >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].spd <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].spd > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].spd < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].spd != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].spd % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["ATS"] != nil
          @valeur[j] = hash["ATS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].ats == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].ats >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].ats <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].ats > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].ats < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].ats != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].ats % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["DFS"] != nil
          @valeur[j] = hash["DFS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].dfs == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].dfs >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].dfs <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].dfs > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].dfs < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].dfs != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].dfs % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["LOYALTY"] != nil
          @valeur[j] = hash["LOYALTY"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].loyalty == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if $pokemon_party.actors[i].loyalty >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if $pokemon_party.actors[i].loyalty <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if $pokemon_party.actors[i].loyalty > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if $pokemon_party.actors[i].loyalty < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].loyalty != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if $pokemon_party.actors[i].loyalty % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["HEIGHT"] != nil
          @valeur[j] = hash["HEIGHT"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if Pokemon_Info.height($pokemon_party.actors[i].id).to_f % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["WEIGHT"] != nil
          @valeur[j] = hash["WEIGHT"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if Pokemon_Info.weight($pokemon_party.actors[i].id).to_f % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["RARENESS"] != nil
          @valeur[j] = hash["RARENESS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if Pokemon_Info.rareness($pokemon_party.actors[i].id).to_f % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["ID"] != nil
          @valeur[j] = hash["ID"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].id == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].id != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["ID_BIS"] != nil
          @valeur[j] = hash["ID_BIS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].id_bis == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].id_bis != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["NAME"] != nil
          @valeur[j] = hash["NAME"].split(' ')
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].name == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].name != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["GIVEN_NAME"] != nil
          @valeur[j] = hash["GIVEN_NAME"].split(' ')
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].given_name == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].given_name != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["TYPES"] != nil
          @valeur[j] = hash["TYPES"].split(' ')
          if @valeur[j][1].to_i == 0
            type_id(@valeur[j][1])
          else
            @valeur[j][1] = @valeur[j][1].to_i
          end
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].type1 == @valeur[j][1] or $pokemon_party.actors[i].type2 == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].type1 != @valeur[j][1] or $pokemon_party.actors[i].type2 != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["TYPE1"] != nil
          @valeur[j] = hash["TYPE1"].split(' ')
          if @valeur[j][1].to_i == 0
            type_id(@valeur[j][1])
          else
            @valeur[j][1] = @valeur[j][1].to_i
          end
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].type1 == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].type1 != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["TYPE2"] != nil and $pokemon_party.actors[i].type2 != nil
          @valeur[j] = hash["TYPE2"].split(' ')
          if @valeur[j][1].to_i == 0
            type_id(@valeur[j][1])
          else
            @valeur[j][1] = @valeur[j][1].to_i
          end
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].type2 == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].type2 != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["STATUS"] != nil
          @valeur[j] = hash["STATUS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].status == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].status != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["GENDER"] != nil
          @valeur[j] = hash["GENDER"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].gender == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].gender != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["SHINY"] != nil
          @valeur[j] = hash["SHINY"].split(' ')
          @valeur[j][1] = booleen_convert(@valeur[j][1])
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].shiny == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].shiny != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["ITEM_HOLD"] != nil
          @valeur[j] = hash["ITEM_HOLD"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].item_hold == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].item_hold != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["EGG"] != nil
          @valeur[j] = hash["EGG"].split(' ')
          @valeur[j][1] = booleen_convert(@valeur[j][1])
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].egg == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].egg != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["BREED_GROUP"] != nil
          @valeur[j] = hash["BREED_GROUP"].split(' ')
            @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if Pokemon_Info.breed_group($pokemon_party.actors[i].id).include(@valeur[j][1])
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if not(Pokemon_Info.breed_group($pokemon_party.actors[i].id).include(@valeur[j][1]))
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["FORM"] != nil
          @valeur[j] = hash["FORM"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if $pokemon_party.actors[i].form == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if $pokemon_party.actors[i].form != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end
        if hash["SKILLS_POWER"] != nil
          @valeur[j] = hash["SKILLS_POWER"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].power == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if $pokemon_party.actors[i].skills_set[k].power >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if $pokemon_party.actors[i].skills_set[k].power <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if $pokemon_party.actors[i].skills_set[k].power > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if $pokemon_party.actors[i].skills_set[k].power < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].power != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if $pokemon_party.actors[i].skills_set[k].power % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false


            end
          end
        end
        if hash["SKILLS_ACCURACY"] != nil
          @valeur[j] = hash["SKILLS_ACCURACY"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].accuracy == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if $pokemon_party.actors[i].skills_set[k].accuracy >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if $pokemon_party.actors[i].skills_set[k].accuracy <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if $pokemon_party.actors[i].skills_set[k].accuracy > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if $pokemon_party.actors[i].skills_set[k].accuracy < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].accuracy != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if $pokemon_party.actors[i].skills_set[k].accuracy % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_EFFECT_CHANCE"] != nil
          @valeur[j] = hash["SKILLS_EFFECT_CHANCE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if Skill_Info.effect_chance($pokemon_party.actors[i].skills_set[k]) % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else

              @retour = false
            end
          end
        end
        if hash["SKILLS_PRIORITY"] != nil
          @valeur[j] = hash["SKILLS_PRIORITY"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if Skill_Info.priority($pokemon_party.actors[i].skills_set[k]) % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_PP"] != nil
          @valeur[j] = hash["SKILLS_PP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].pp == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if $pokemon_party.actors[i].skills_set[k].pp >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if $pokemon_party.actors[i].skills_set[k].pp <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if $pokemon_party.actors[i].skills_set[k].pp > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if $pokemon_party.actors[i].skills_set[k].pp < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].pp != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if $pokemon_party.actors[i].skills_set[k].pp % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_MAX_PP"] != nil
          @valeur[j] = hash["SKILLS_MAX_PP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].max_pp == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if $pokemon_party.actors[i].skills_set[k].max_pp >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if $pokemon_party.actors[i].skills_set[k].max_pp <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if $pokemon_party.actors[i].skills_set[k].max_pp > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if $pokemon_party.actors[i].skills_set[k].max_pp < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].max_pp != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if $pokemon_party.actors[i].skills_set[k].max_pp % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_%_PP"] != nil
          @valeur[j] = hash["SKILLS_%_PP"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if Integer($pokemon_party.actors[i].skills_set[k].pp / $pokemon_party.actors[i].skills_set[k].max_pp) % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_TYPE"] != nil
          @valeur[j] = hash["SKILLS_TYPE"].split(' ')
          if @valeur[j][1].to_i == 0
            type_id(@valeur[j][1])
          else
            @valeur[j][1] = @valeur[j][1].to_i
          end
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].type == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].type != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS"] != nil
          @valeur[j] = hash["SKILLS"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].id == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].id != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_NAME"] != nil
          @valeur[j] = hash["SKILLS_NAME"].split(' ')
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].name == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].name != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_EFFECT"] != nil
          @valeur[j] = hash["SKILLS_EFFECT"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_set[k].effect == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if $pokemon_party.actors[i].skills_set[k].effect != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_TARGET"] != nil
          @valeur[j] = hash["SKILLS_TARGET"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if Skill_Info.target($pokemon_party.actors[i].skills_set[k].id) == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if Skill_Info.target($pokemon_party.actors[i].skills_set[k].id) != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_TAG"] != nil
          @valeur[j] = hash["SKILLS_TAG"].split(' ')
          @valeur[j][1] = booleen_convert(@valeur[j][1])
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if Skill_Info.tag($pokemon_party.actors[i].skills_set[k].id) == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if Skill_Info.tag($pokemon_party.actors[i].skills_set[k].id) != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_TABLE"] != nil
          @valeur[j] = hash["SKILLS_TABLE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_table[0].include?(@valeur[j][1])
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if not($pokemon_party.actors[i].skills_table[0].include?(@valeur[j][1]))
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if hash["SKILLS_ALLOW"] != nil
          @valeur[j] = hash["SKILLS_ALLOW"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if $pokemon_party.actors[i].skills_allow[0].include?(@valeur[j][1])
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if not($pokemon_party.actors[i].skills_allow[0].include?(@valeur[j][1]))
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end
        if not(@retour)
          break
        end
      end
      if @retour
        @index_poke = i
        return @retour
      else
        @index_poke = -1
      end
    end
    return @retour
  end

  


Et voilà ! Vous avez installé une nouvelle méthode ! Vous voyez, ce n'était pas si compliqué ! En revanche, si vous ne souhaitez pas entrer dans les détails techniques du komansamarscheuh alors suivez le guide : Utilisation de la commande "equipe_contient"
Revenir en haut  




Explication de la méthode  

Malgré son impressionante taille, ce script n'est pas trop difficile à comprendre.

Il est d'abord encadré de deux boucles (plus la balise méthode) entrecoupés de deux petites conditions :
Code:


  def equipe_contient(hash)
    if hash.type != Hash or hash == nil
      return 0
    elsif $pokemon_party.size == 0
      return 1
    end
    @valeur = []
    for i in 0...$pokemon_party.size
      for j in 0...hash.size
[...]
      if @retour
        @index_poke = i
        return @retour
      else
        @index_poke = -1
      end
    end
    return @retour
  end



La condition
Code:


    if hash.type != Hash or hash == nil
      return 0
    elsif $pokemon_party.size == 0
      return 1
    end


sert simplement à renvoyer une erreur. Si la valeur entre () n'est pas une liste au bon format (ou si elle n'est pas renseignée) alors la valeur renvoyée sera 0. Si l'équipe est vide (donc qu'il n'est pas possible de tester l'équipe) alors la méthode renverra 1. Vous pouvez remplacez "return 0" et "return 1" par "return false" si vous souhaitez exécuter les commandes si la condition n'est pas remplie.

La seconde condition
Code:


      if @retour
        @index_poke = i
        return @retour
      end
    return @retour


sert juste à indiquer au système qu'il doit enregistrer le numéro d'index du pokémon dans l'équipe dans la variable @index_poke. Ensuite, il renverra true (la valeur de @retour, en fait, puisque cette condition ne s'exécutera que si @retour vaut true). En dessous de cette condition (la dernière ligne de cet extrait donc) vous avez une autre balise return. Elle, elle renverra forcément false, puisque si @retour avait valu true, la conditionnelle se serait exécutée.

Les commandes internes de la méthode se basent sur quatre syntaxes.

La première sert à effectuer des comparaisons sur des valeurs numériques dénombrables. Ces valeurs sont des nombres (entier ou décimaux) qui peuvent être comparés par n'importe quel opérateur. Voici leur syntaxe générale (qu'il convient d'adapter selon les cas) :
Code:


        if hash["NOM_DE_LA_COMMANDE"] != nil
          @valeur[j] = hash["NOM_DE_LA_COMMANDE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if {valeur quelconque} == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">="
            if {valeur quelconque} >= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<="
            if {valeur quelconque} <= @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == ">"
            if {valeur quelconque} > @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "<"
            if {valeur quelconque} < @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if {valeur quelconque} != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "%"
            if {valeur quelconque} % @valeur[j][1] == 0
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end


7 opérateurs : "==" (est égal à), ">=" (est supérieur ou égal à), "<=" (est inférieur ou égal à), ">" (est strictement supérieur à), "<" (est strictement inférieur à), "!=" (est différent de) et "%" (est divisible par).
NB : % est en réalité l'opérateur MODULO (renvoie le reste de la division de A par B) mais ici je m'en sers pour tester si ce reste est égal à 0.

Comme vous le comprendrez mieux au point suivant, lorsque je vous indiquerai la syntaxe à utiliser en évent, l'opérateur est stocké dans la première valeur du tableau @valeur[j][0] (le j correspond à la seconde boucle, et permet donc d'isoler les valeurs des différents critères) et la valeur comparée est, quant à elle, stockée dans @valeur[j][1]. {valeur quelconque} représente normalement une valeur dénombrable de la classe pokémon, mais en fait tout nombre pouvant être comparé par les opérateurs précédents peut faire l'affaire.


La seconde syntaxe disponible est celle des valeurs non dénombrables (numériques ou non !). Il n'est possible que de dire si la valeur 1 est égale ou non à la valeur 2 :
Code:


        if hash["NOM_DE_LA_COMMANDE"] != nil
          @valeur[j] = hash["NOM_DE_LA_COMMANDE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          if @valeur[j][0] == "=="
            if {valeur quelconque} == @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          elsif @valeur[j][0] == "!="
            if {valeur quelconque} != @valeur[j][1]
              @retour = true
            else
              @retour = false
              break
            end
          else
            @retour = false
            break
          end
        end


Comme dit précédemment, plus que deux opérateurs disponibles : "==" et "!=".

Comme pour la syntaxe précédente, les valeurs sont enregistrées dans @valeur[j][0] (l'opérateur de la condition) et @valeur[j][1] (la valeur comparée). {valeur quelconque} est toujours une valeur pouvant être comparée par les deux opérateurs disponibles.


Les deux dernières syntaxes sont les équivalents des deux syntaxes précédentes, mais adaptées aux attaques. Les opérateurs sont respectivement les mêmes, la seule chose qui change, c'est une boucle supplémentaire, appliquée aux attaques, cette fois-ci :
Code:


        if hash["NOM_DE_LA_COMMANDE"] != nil
          @valeur[j] = hash["NOM_DE_LA_COMMANDE"].split(' ')
          @valeur[j][1] = @valeur[j][1].to_i
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if {valeur quelconque} == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">="
              if {valeur quelconque} >= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<="
              if {valeur quelconque} <= @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == ">"
              if {valeur quelconque} > @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "<"
              if {valeur quelconque} < @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if {valeur quelconque} != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "%"
              if {valeur quelconque} % @valeur[j][1] == 0
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end


$pokemon_party.actors.skills.size renvoie le nombre d'attaques que connait le pokémon placé à la position (i + 1) dans l'équipe. En dehors de ce détail, c'est la même syntaxe que la première.


Dernière syntaxe, c'est un mélange entre la seconde et la troisième :
Code:


        if hash["NOM_DE_LA_COMMANDE"] != nil
          @valeur[j] = hash["NOM_DE_LA_COMMANDE"].split(' ')
          for k in 0...$pokemon_party.actors[i].skills.size
            if @valeur[j][0] == "=="
              if {valeur quelconque} == @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            elsif @valeur[j][0] == "!="
              if {valeur quelconque} != @valeur[j][1]
                @retour = true
                break
              else
                @retour = false
              end
            else
              @retour = false
            end
          end
        end


Vous reconnaitrez évidement la seconde syntaxe, à ceci près que, tout comme la syntaxe précédente, celle-ci possède une boucle qui l'adapte pour comparer des données liées aux attaques que connait le pokémon.

Maintenant que nous avons vu les quatre principales syntaxes, nous allons parler de fonctions utilisées dans le script. En effet, les valeurs non dénombrables peuvent se présenter sous trois formes : des nombres, des chaines de caractères et enfin des booléens (true / false). Comme vous le verrez au point suivant, la valeur au tout début de la méthode sera toujours au format texte. Les fonctions dont je vous parle sont donc pour convertir correctement ces valeurs. En effet, si vous essayez de convertir un texte au format nombre, celui-ci sera toujours égal à 0 ! Et pire encore, aucune fonction préprogrammée ne permet de transposer un texte au format booléen. En tout cas, moi, je n'en ai trouvé aucune, et ce n'est pas faute d'avoir cherché. Aussi j'ai écrit cette petite méthode qui se charge de la conversion de texte au format booléen.

Par exemple, un type (de pokémon ou d'attaque) peut se présenter soit sous forme d'un numéro soit sous forme d'un nom. Aussi il faut traiter correctement les deux sortes d'entrées :
Code:


          if @valeur[j][1].to_i == 0
            type_id(@valeur[j][1])
          else
            @valeur[j][1] = @valeur[j][1].to_i
          end


Si la conversion de @valeur[j][1] en nombre (.to_i) est égale à 0, c'est que @valeur[j][1] contient un nom de type et non un numéro (ou alors il contient le numéro 0, auquel cas ca ne risque pas de marcher ^_^" mais ca, c'est un autre problème !)
et donc on doit le convertir en numéro de type. C'est la fonction type_id qui se chargera de ce point.

NB : La fonction "downcase" qui est présente au début de cette méthode "type_id" sert simplement à mettre toutes les lettres en minuscule. Ainsi Feu, FeU, fEU, ou encore feu seront correctement traitées par la méthode. Apprentis scripteurs comme machines à coder, si vous ne la connaissiez pas déjà, sachez que cette petite fonction pourrait vous servir, un jour...

L'autre fonction primordiale, c'est "booleen_convert", qui sert à convertir les chaines de caractère "true" et "false" en booléens, plus maniables dans ce monde que sont les conditionnelles. Elle sera à utiliser, par exemple, dans la fonction shiny qui renvoie naturellement true ou false selon la présence du caractère shiny ou non sur un pokémon.
Code:


booleen_convert(@valeur[j][1])



De toute facon, quelque soit les valeurs au début de la méthode, elle renverra toujours true (si l'ensemble des conditions est rempli) ou false (dans le cas contraire).

C'est tout pour cette phase d'explication. Le reste, ce n'est plus que des méthodes de la classe Pokémon dont je me sers.
Revenir en haut  



Utilisation de la commande "equipe_contient"  

Si vous avez lu le point précédent, vous vous souviendrez que la méthode renvoie toujours un booléen (vrai / faux) sinon, ben je vous le dis maintenant. Et où utilise-t-on un système de vrai / faux sur RMXP ? "Dans les évents !" Oui, dans les évents... Mais encore ? "Dans les conditions !" Voilà ! Donc nous allons passer par une condition, et pour être plus exact, par la partie scriptée des conditions.

Maintenant que nous savons où mettre la commande, il faudrait bien que je vous explique quoi mettre, non ? Non ? Bon ben je rentre alors... Si ? Ah... Voici comment se compose la commande "equipe_contient" :
Code:


equipe_contient(hash)



hash est en réalité un type de valeur. Il s'agit d'une liste ordonnée. Voici comment elle se compose, de manière générale :
Code:


{"Clé 1" => "Valeur 1", "Clé 2" => "Valeur 2", ..., "Clé X" => "Valeur X"}


où X sera le nombre de fonctions que vous allez y mettre. Mais quel est l'intérêt de ces listes ? Vous n'êtes pas obligés de mettre une clé pour pouvoir mettre la clé suivante !

Ah oui, qu'est ce que des clés ? Ce sont en fait des étiquettes "collées" à la valeur correspondante. En appelant la clé, vous renvoyez la valeur.

NB : ici j'ai mis des valeurs entre "" car c'est sous cette forme que devront être rentrées les valeurs dans cette fonction, mais la liste ordonnée admet tous types de valeurs, normalement. C'est en fait la méthode qui se chargera de convertir le format texte en format utilisable pour elle.

Si vous avez été attentif au point précédent, vous saurez déjà que les 42 fonctions listées ci-dessous se découpent en 2 grandes catégories (les dénombrables et les indénombrables).

Les dénombrables peuvent être testées au moyen de 7 opérateurs différents : "==" (est égal à), ">=" (est supérieur ou égal à), "<=" (est inférieur ou égal à), ">" (est strictement supérieur à), "<" (est strictement inférieur à), "!=" (est différent de) et "%" (est divisible par).
NB : % est en réalité l'opérateur MODULO (renvoie le reste de la division de A par B) mais ici je m'en sers pour tester si ce reste est égal à 0.

Les indénombrables ne peuvent, quant à eux, être testés que par deux opérateurs différents : "==" et "!=".

Voici donc les fonctions qui correspondent à ces différentes catégories :
  • Les dénombrables :
    • "LEVEL" : C'est le niveau des pokémons de l'équipe.
    • "MAX_HP" : C'est le nombre de PVs max des pokémons de l'équipe.
    • "HP" : C'est le nombre de PVs restants des pokémons de l'équipe.
    • "%_HP" : C'est le % de PVs restants (par rapport aux PVs max du pokémon) des pokémons de l'équipe.
    • "ATK" : C'est la stat attaque des pokémons de l'équipe.
    • "DFE" : C'est la stat défense des pokémons de l'équipe.
    • "SPD" : C'est la stat vitesse des pokémons de l'équipe.
    • "ATS" : C'est la stat attaque spéciale des pokémons de l'équipe.
    • "DFS" : C'est la stat défense spéciale des pokémons de l'équipe.
    • "LOYALTY" : C'est la loyauté des pokémons de l'équipe.
    • "HEIGHT" : C'est la taille des pokémons de l'équipe.
    • "WEIGHT" : C'est le poids des pokémons de l'équipe.
    • "RARENESS" : C'est la rareté des pokémons de l'équipe.
    • "SKILLS_POWER" : C'est la puissance des attaques des pokémons de l'équipe.
    • "SKILLS_ACCURACY" : C'est la précision des attaques des pokémons de l'équipe.
    • "SKILLS_EFFECT_CHANCE" : C'est le % de chances d'exécution de l'effet des attaques des pokémons de l'équipe.
    • "SKILLS_PRIORITY" : C'est la priorité des attaques des pokémons de l'équipe.
    • "SKILLS_PP" : C'est le nombre de PPs restants aux attaques des pokémons de l'équipe.
    • "SKILLS_MAX_PP" : C'est le nombre de PPs max des attaques des pokémons de l'équipe.
    • "SKILLS_%_PP" : C'est le % de PPs restants (par rapport aux PPs max de l'attaque) aux pokémons de l'équipe.

  • Les indénombrables :
    • "ID" : C'est l'ID des pokémons de l'équipe.
    • "ID_BIS" : C'est l'ID secondaire (régional) des pokémons de l'équipe.
    • "NAME" : C'est le nom des pokémons de l'équipe.
    • "GIVEN_NAME" : C'est le surnom des pokémons de l'équipe.
    • "TYPES" : Ce sont les deux types des pokémons de l'équipe.
    • "TYPE1" : C'est le premier type des pokémons de l'équipe.
    • "TYPE2" : C'est le second type des pokémons de l'équipe.
    • "STATUS" : C'est le statut des pokémons de l'équipe.
    • "GENDER" : C'est le sexe des pokémons de l'équipe.
    • "SHINY" : C'est le caractère shiny (ou non) des pokémons de l'équipe.
    • "ITEM_HOLD" : C'est l'ID de l'objet tenu par les pokémons de l'équipe.
    • "EGG" : C'est le statut oeuf (oeuf ou non) des pokémons de l'équipe.
    • "BREED_GROUP" : Ce sont les groupes d'oeufs compatibles avec les pokémons de l'équipe.
    • "FORM" : C'est la forme alternative des pokémons de l'équipe.
    • "SKILLS_TYPE" : C'est le type des attaques des pokémons de l'équipe.
    • "SKILLS" : Ce sont les ID des attaques des pokémons de l'équipe.
    • "SKILLS_NAME" : Ce sont les noms des attaques des pokémons de l'équipe.
    • "SKILLS_EFFECT" : C'est l'ID de l'effet des attaques des pokémons de l'équipe.
    • "SKILLS_TARGET" : Ce sont les cibles des attaques des pokémons de l'équipe.
    • "SKILLS_TAG" : C'est le caractère direct ou non des attaques des pokémons de l'équipe.
    • "SKILLS_TABLE" : Ce sont l'ensemble des ID des attaques qu'ont pu apprendre ou que pourront apprendre les pokémons de l'équipe.7
    • "SKILLS_ALLOW" : C'est l'ensemble des CT/CS que peuvent apprendre les pokémons de l'équipe.


Quelque soit la fonction étudiée, il faut savoir que la valeur doit tout de même être logique ! Ne mettez pas "VELO COURSE" comme valeur à la fonction "skills" ! (à moins que vous ayez une attaque de ce nom ?)

La commande "equipe_contient" renverra donc soit true (vrai) soit false (faux) et donc selon, la condition exécutera les commandes si vrai ou si faux.

Ainsi, par exemple, pour regarder si j'ai au moins un pokémon de type FEU / VOL connaissant au moins une attaque SOL dans mon équipe, je ferais :
Code:


equipe_contient({"TYPE1" => "== Feu", "TYPE2" => "== Vol", "SKILLS_TYPE" => "== SOL"})



NB : les critères définis dans la liste ordonnées seront appliqués au même pokémon (la méthode ne renverra true que si au moins un pokémon répond à l'ensemble des critères définis) mais pas forcément aux mêmes attaques ! Ainsi, vous pourrez tester si un pokémon possède au moins une attaque de type SOL et si au moins une de ses attaques a plus de 20 PPs, mais vous ne pourrez pas tester si ce même pokémon a appris une attaque de type SOL dont les PP dépasseraient 20 !

NB2 : Si vous souhaitez utiliser l'index du premier pokémon répondant aux critères, il est enregistré dans la variable @index_poke. Si aucun pokémon ne répond aux critères, alors @index_poke vaudra -1.
Revenir en haut  



Ajouter une nouvelle fonction à la méthode "equipe_contient"  

Pour ajouter une nouvelle fonction, référez-vous aux fonctions déjà existantes, et aux syntaxes générales. La seule chose que je peux ajouter ici, c'est que dans tous les cas, une fonction doit être ajoutée avant ou après une fonction déjà existante, c'est à dire immédiatement avant un "if hash[...]".
Revenir en haut  



Conseils de l'auteur  

Vous pouvez par exemple vous servir de cette méthode pour une entrée dans un lieu où les pokémons possédant des attaques de type glace sont interdits. Vous pourrez également vous en servir pour le vieillard qui donne la CT RETOUR / FRUSTRATION selon certains critères... Enfin les possibilités de cette commande ne sont limitées que par votre imagination !
Revenir en haut  



Vous êtes perdus  

Un seul remède : vous relisez ce tuto et vous appliquez bêtement ce que j'ai écris sans tenir compte de mes explications. Ou, si vous tenez absolument à comprendre ce que vous faites, alors relisez ce tuto autant de fois que nécessaire
Revenir en haut  

Posté par Alex le 23 Aoû - 22:44 (2008)
Super même si je ne comprends pas.
Mais ca va en aider beaucoup :mrgreen:

Posté par Sphinx le 23 Aoû - 22:52 (2008)
=) et cette fois on peut sabrer le champ's, c'est ma première méthode complète Clin d'œil foireux



puisse-t-elle servir au plus grand nombre ^_^

Posté par Speed le 23 Aoû - 23:41 (2008)
Hmm, j'ai une petite idée de comment m'en servir dans ma zone de combat =)

Merci, Sphinx !

Posté par Sphinx le 10 Sep - 05:04 (2008)
^_^ de rien Speed ^_^


edit : maj du tuto, j'ai ajouté 2 - 3 choses =)


reedit : violente maj, j'ai tout repris de 0 pour le mettre au goût du jour =) Seule une méthode manque "cruellement" (enfin plus ou moins) à l'appel : la méthode Evolve_method, pour une simple raison, je n'ai pas réussi à faire lire la totalité des méthodes d'évolution des pokémons Lordork chez mémé