Sujet n°3361
Posté par Pyros le 4 Avr - 19:09 (2009)
Titre : Problème avec les pokémons sauvages
Bon voila. J'ai commencé ce tuto car j'ai un gros problèmes avec mon projet de Pokémon. Comme l'indique le titre, lorsque je commence mon jeu tout se passe bien, puis arriver aux hautes herbes, je veut essayer un combat mais ils y a un bug.
Voila les images



Et voila le rapport Log.txt

---------- Erreur de script : Scene_Map ----------
----- Type
NoMethodError

----- Message
- ARGS - [[16, 2, 4]]
undefined method `est_type' for #<Scene_Map:0x86fa990>

----- Position dans Scene_Map
Ligne 262

----- Backtrace
Script : Scene_Map | Ligne : 262 | Méthode : in `call_battle'
Script : Scene_Map | Ligne : 258 | Méthode : in `each'
Script : Scene_Map | Ligne : 258 | Méthode : in `call_battle'
Script : Scene_Map | Ligne : 143 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update_passminimap'
Script : Minimap | Ligne : 44 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main_passminimap'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main_passminimap'
Script : Minimap | Ligne : 31 | Méthode : in `main'
Script : Main | Ligne : 49


Merci de bien vouloir m'aider.

Posté par Sphinx le 4 Avr - 19:40 (2009)
copie moi ton script Scene_Map que jte le corrige


(@ pal : ouaip, jsais que t'as pas de pbs en le remplacant par la version de 0.7, mais on sait jms, et c juste supprimer 2-3 lignes pr tout refaire fonctionner Clin d'œil foireux)

Posté par Pyros le 4 Avr - 19:47 (2009)
Merci de m'aider, ca faisait un moment que je n'arrivais pas a commencer mes combats. :cry:

Edit : Desolé j'ai fait une petite bétise je réenvoie la bonne ligne

if est_type($random_encounter[tag][i]) == "Pokemon" or $random_encounter[tag][i][2] != nil

P.S : Je n'ai pas copier les commentaires, je pense que tu n'en n'auras pas besoin.

Posté par Krosk le 4 Avr - 19:51 (2009)
Met ton code entre balise code et balise spoiler stp.

Sphinx, je voit souvent ce bug du "est_type", c'est un bug de script incorrect ou c'est une fausse manoeuvre du maker ?

Posté par Pyros le 4 Avr - 19:54 (2009)
Le voila

Code:
[hide=Spoiler] if est_type($random_encounter[tag][i]) == "Pokemon" or $random_encounter[tag][i][2] != nil[/hide]

Posté par Pαlвσlѕку le 4 Avr - 20:17 (2009)
Il voulait dire comme ça :

Script
Code:
if est_type($random_encounter[tag][i]) == "Pokemon" or $random_encounter[tag][i][2] != nil

Sphinx a écrit:
(@ pal : ouaip, jsais que t'as pas de pbs en le remplacant par la version de 0.7, mais on sait jms, et c juste supprimer 2-3 lignes pr tout refaire fonctionner Clin d'œil foireux)


>> Tu pourrais m'envoyé par MP ce que je dois modifier ?

Posté par Sphinx le 4 Avr - 21:46 (2009)
>> en fait, c'est un bout de code parasite que j'ai oublié de supprimer dans 4G+ (honte à moi, jsais, mais aucun test ne l'avait réveillé x'() mais ne pouvant plus redémarrer l'ordi sur lequel je préparais une version à jour (corrigeant entre autre ce ***** de bug)


Bon, théoriquement ce script Scene_Map devrait régler ce bug :

Code
Code:
#==============================================================================
# ■ Scene_Map
# Pokemon Script Project - Krosk
# 18/07/07
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
# Variables appelées:
# $random_encounter
#   Défini les monstres rencontrés sur la map et la fréquence d'apparition
#   A définir de manière automatique par le logiciel, ou de manière manuelle
#   en processus parallèle sur chaque map comme ci:
#     set_encounter(rate, list1, list2, list3, list4)
#     'rate' correspond à la fréquence d'apparition
#     'listx' correspond à la liste de Pokémons, défini comme:
#         x = tag terrain
#         listx = [écart, [id, level, rareté locale] , [id, level, rl] , ... ]
#
#     $random_encounter[0] = rate
#     $random_encounter[1] = list1
#     $random_encounter[2] = list2
#     $random_encounter[3] = list3
#     $random_encounter[4] = list4
#-----------------------------------------------------------------------------

class Scene_Map
  attr_accessor :spriteset

  def call_menu
    # Redéfinition
    $game_temp.menu_calling = false
    if $game_temp.menu_beep
      $game_system.se_play($data_system.decision_se)
      $game_temp.menu_beep = false
    end
    $game_player.straighten
    $scene = POKEMON_S::Pokemon_Menu.new
  end
 
  def call_save
    $game_player.straighten
    $scene = POKEMON_S::Pokemon_Save.new
  end
 
  def update
    loop do
      $game_map.update
      $game_map.refresh
      $game_system.map_interpreter.update
      $game_player.update
      $game_system.update
      $game_screen.update
      unless $game_temp.player_transferring
        break
      end
      transfer_player
      if $game_temp.transition_processing
        break
      end
    end
   
    $use_rec_item = false
   
    @spriteset.update
    @message_window.update
   
    if $game_temp.gameover
      $scene = Scene_Gameover.new
      return
    end
   
    if $game_temp.to_title
      $scene = Scene_Title.new
      return
    end
   
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
   
    if $game_temp.message_window_showing
      return
    end
   
    # Comptage Rencontre aléatoire
    if $random_encounter != [0] and $game_player.encounter_count == 0
      tag = $game_player.terrain_tag
      unless $game_system.map_interpreter.running? or
              $game_system.encounter_disabled or
              tag == 0
       
        enemy_list = $random_encounter[tag]
        if enemy_list != nil and enemy_list.length > 1
          $game_temp.battle_calling = true
        end
      end
    end
   
    if Input.trigger?(Input::B)
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
   
    if Input.trigger?(Input::A)
      unless $game_system.map_interpreter.running? or
             $rec_item_id == nil
        $use_rec_item = true
      end
    end
   
    if $DEBUG and Input.press?(Input::F9)
      $game_temp.debug_calling = true
    end
   
    # Map monde
    if $game_map.map_id == POKEMON_S::_WMAPID
      $game_temp.menu_calling = false
      $game_temp.menu_beep = false
      $game_temp.debug_calling = false
      if Input.trigger?(Input::B)
        $game_temp.back_calling = true
      end
      if Input.dir4 == 2 or Input.dir4 == 4 or Input.dir4 == 6 or
          Input.dir4 == 8
        $game_temp.world_map_event_checking = true
      end
      unless $game_player.moving?
        $game_player.check_world_map
      end
    end
   
    unless $game_player.moving?
      if $game_temp.battle_calling
        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      elsif $game_temp.back_calling
        call_back_world_map
      elsif $use_rec_item
        int = Interpreter.new
        int.utiliser($rec_item_id)
      end
      $pokemon_party.maj_quetes
    end
   
  end

  #---------------------------------------------------
  # Reset de la variable $random_encounter
  # au changement de map
  #---------------------------------------------------
  def transfer_player
    # Raz Random Encounter
    $random_encounter = [0]
    # Indicateur Force
    $on_strength = false
   
    $game_temp.player_transferring = false

    if $game_map.map_id != $game_temp.player_new_map_id
      $game_map.setup($game_temp.player_new_map_id)
    end
   
    # Random Encounter
    if $game_map.encounter_list != []
      for i in 1..7
        if $random_encounter[i] == nil
          $random_encounter[i] = []
        end
      end
      update_encounter
    end
   
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)

    case $game_temp.player_new_direction
    when 2  # 下
      $game_player.turn_down
    when 4  # 左
      $game_player.turn_left
    when 6  # 右
      $game_player.turn_right
    when 8  # 上
      $game_player.turn_up
    end

    $game_player.straighten
    $game_map.update
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      Graphics.transition(20)
    end
   
    $game_map.autoplay
    Graphics.frame_reset
    Input.update
  end
 
  def update_encounter
    # Fréquence
    $random_encounter[0] = (2880 / (16.0 * $game_map.encounter_step)).to_i
    # Liste
    for list_id in $game_map.encounter_list
      tag = $data_encounter[list_id][0]
      switch_id = $data_encounter[list_id][3]
      # Vérification de switch
      if (switch_id == 0 or $game_switches[switch_id]) and tag > 0
        $random_encounter[tag] = $data_encounter[list_id][2]
      end
    end
  end
 
  def call_battle
    tag = $game_player.terrain_tag
   
    $game_temp.battle_calling = false
    $game_temp.menu_calling = false
    $game_temp.menu_beep = false
   
    $game_player.make_encounter_count
   
    x = rand(100)
    undist_rate = 100
    call = false
    pokemon = nil
    number = 0
   
    for i in 1..$random_encounter[tag].length-1
      if $random_encounter[tag][i] == nil
        number += 1
      elsif $random_encounter[tag][i][2] == nil and $random_encounter[tag][i][20] == nil
        number += 1
      else
        undist_rate -= $random_encounter[tag][i][2]
      end
    end
   
    until pokemon != nil
      for i in 1..$random_encounter[tag].length-1
        if call
          next
        end
        if number != 0
          x -= undist_rate/number
        end
        if x < 0
          level = $random_encounter[tag][i][1]
          id = $random_encounter[tag][i][0]
          level -= rand($random_encounter[tag][0])
          if level < 1
            level = 1
          end
          pokemon = POKEMON_S::Pokemon.new(id, level)
          call = true
          # Paramètres optionnels
          # Moveset
          if $random_encounter[tag][i][5] != nil
            j = 0
            for skill in $random_encounter[tag][i][5]
              if skill.type == Fixnum and skill > 0
                pokemon.skills_set[j] = POKEMON_S::Skill.new(skill)
              elsif skill.type == String
                pokemon.skills_set[j] = POKEMON_S::Skill.new(POKEMON_S::Skill_Info.id(skill))
              end
              if skill == "AUCUN"
                pokemon.skills_set[j] = nil
              end
              j += 1
            end
            pokemon.skills_set.compact!
          end
          # Stats avancées
          if $random_encounter[tag][i][4] != nil and $random_encounter[tag][i][4].length == 6
            pokemon.dv_modifier($random_encounter[tag][i][4])
          end
          # Genre
          if $random_encounter[tag][i][6] != nil
            pokemon.set_gender($random_encounter[tag][i][6])
          end
          # Forme
          if $random_encounter[tag][i][7] != nil
            pokemon.form = $random_encounter[tag][i][7]
          end
          # Shiny
          if $random_encounter[tag][i][8] != nil
            pokemon.shiny = $random_encounter[tag][i][8]
          end
          # Table stats
          if $random_encounter[tag][i][9] != nil
            pokemon.table_stats = $random_encounter[tag][i][9]
          end
          # Table types
          if $random_encounter[tag][i][10] != nil
            pokemon.table_type = $random_encounter[tag][i][10]
          end
          # Skill types
          if $random_encounter[tag][i][11] != nil
            pokemon.table_skill_type = $random_encounter[tag][i][11]
          end
          # Nature
          if $random_encounter[tag][i][12].type == String
            for i in 0...POKEMON_S::NATURE.size
              if POKEMON_S::NATURE[i][0] == $random_encounter[tag][i][12]
                pokemon.nature = POKEMON_S::NATURE[i]
                break
              end
            end
          elsif $random_encounter[tag][i][12].type == Array and $random_encounter[tag][i][12].size == 6
            pokemon.nature = $random_encounter[tag][i][12]
          end
        end
      end
    end
   
    if $pokemon_party.repel_count > 0 and level < $pokemon_party.max_level
      $game_player.make_encounter_count
      return
    end
   
   
   
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    $game_system.se_play($data_system.battle_start_se)
    $game_player.straighten
   
    $scene = POKEMON_S::Pokemon_Battle_Wild.new($pokemon_party, pokemon)
  end
end


Remplace ton script Scene_Map (le 2° de la liste) par ce script et dis moi si ca marche =)

Posté par Pyros le 4 Avr - 22:24 (2009)
Ben ton script ne fonctionne pas. Je ne sais pas ce qui pourrait causer ca car le jeu se bloque, la musique continue puis RMXP se ferme sans message d'erreur.

Posté par Sphinx le 4 Avr - 23:18 (2009)
hein ?

perso, jl'ai essayé (parce que palbol m'a rapporté un bug ????????) mais je n'ai eu aucun soucis ^o^"

>> version à jour de 4G+ en préparation, dispo sous peu (je veux d'abord lui faire passer quelques tests Clin d'œil foireux)

Posté par Pyros le 7 Avr - 14:28 (2009)
Ben je vais le réesayer, pour voir si je n'ai pas fait une erreur, et je te préviens de tout avancement

Posté par Sphinx le 7 Avr - 16:49 (2009)
d'accord ^o^' (si ca marche pas, te faudra att qques j, je ne vais pas trop tarder à sortir une nouvelle mise à jour complète, ainsi qu'un patch correctif Clin d'œil foireux)