Sujet n°11804
Posté par Akito アート le 1 Aoû - 14:53 (2012)
Titre : [Résolu] Bug Follow Me
Bonjour,


J'ai un bug avec le Follow Me.
Quand j'installe le Follow Me, quand je séléctionne la partie ou je veux jouer,
j'ai un problème dans le script Sprite_Character ligne 29.
Je ne vois pas pourquoi, et quand j'enlève le Follow Me, plus de bug !


Voici le log de PSP DS:


de script : Sprite_Character ----------
----- Version du logiciel : PSP DS v0.4
----- Type
NoMethodError


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


----- Position dans Sprite_Character
Ligne 29


----- Backtrace
Script : Sprite_Character | Ligne : 29 | Méthode : in `update'
Script : Sprite_Character | Ligne : 21 | Méthode : in `initialize'
Script : Follow Me | Ligne : 87 | Méthode : in `new'
Script : Follow Me | Ligne : 87 | Méthode : in `initialize'
Script : Scene_Map | Ligne : 13 | Méthode : in `new'
Script : Scene_Map | Ligne : 13 | Méthode : in `main'
Script : Main | Ligne : 58



Je n'arrive pas à résoudre ce problème.


Merci d'avance.


Cordialement, Soria.

Posté par Arc-Arceus le 3 Aoû - 08:32 (2012)
C'est bizarre, on dirait que ton jeu a paumé l'id du chara de ton follower...
Publie ton script pour que l'on puisse détecter le problème.

Posté par Akito アート le 19 Aoû - 14:56 (2012)
J'utilise le script original de Brendan. Je n'ai pas mis le code sous Spoiler car il bug.
Le voici:

Code:
#==============================================================================  
# ■ Follow Me Pokémon  
# par Brendan75  
#-----------------------------------------------------------------------------  
# Rend le premier pokémon de l'équipe visible sur la map.  
#==============================================================================  
  
PKM_TRANSPARENT_SWITCHES = 50 # Index de l'interrupteur pour rendre invisible  
  
class Follower_Pkm < Game_Character   
  include POKEMON_S  
    
  def initialize  
    super()  
    @through = false  
    @step_anime = true  
    @pkm_id = 0  
  end  
    
  def update  
    if $pokemon_party.size != 0  
      @pkm_id = $pokemon_party.actors[0].id  
      string = "pkm #{sprintf('%03d', @pkm_id)}.png"  
      if @character_name != string  
        @character_name = string  
        @character_hue = 0  
        @opacity = 255  
        @blend_type = 0  
      end  
      if @opacity != ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)  
        @opacity = ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)  
      end  
    else  
      @character_name = ""  
    end  
    self.move_speed = $game_player.move_speed  
    super  
  end  
    
  def screen_z(height = 0)   
    if $game_player.x == @x and $game_player.y == @y    
      return $game_player.screen_z(height) - 1  
    end  
    super(height)   
  end  
    
  def check_event_trigger_touch(x, y) end  
      
  def passable?(x, y, d)  
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)  
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)  
    unless $game_map.valid?(new_x, new_y)  
      return false  
    end  
    if @through  
      return true  
    end  
    unless $game_map.passable?(x, y, d, self)  
      return false  
    end  
    unless $game_map.passable?(new_x, new_y, 10 - d)  
      return false  
    end  
    for event in $game_map.events.values  
      if event.x == new_x and event.y == new_y  
        unless event.through  
          if self != $game_player  
            return false  
          end  
          if event.character_name != ""  
            return false  
          end  
        end  
      end  
    end  
    return true  
  end  
end  
  
#-----------------------------------------------------------------------------  
# ● Spriteset Map  
#-----------------------------------------------------------------------------  
class Spriteset_Map  
  alias follow_me_initialize initialize  
  def initialize  
    follow_me_initialize  
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_party.follower_pkm))  
    update  
  end  
end  
  
#-----------------------------------------------------------------------------  
# ● Scene Map  
#-----------------------------------------------------------------------------  
class Scene_Map  
  alias follow_me_transfer_player transfer_player  
  def transfer_player  
    $game_party.erase_moves  
    follow_me_transfer_player  
  end  
    
  alias follow_me_update update  
  def update  
    follow_me_update  
    $game_party.follower_pkm.update  
  end  
end  
  
#-----------------------------------------------------------------------------  
# ● Game Player  
#-----------------------------------------------------------------------------  
class Game_Player  
  alias follow_me_moveto moveto  
  def moveto(x, y)  
    follow_me_moveto(x, y)  
    $game_party.follower_pkm.moveto(x, y)  
  end  
    
  def move_down(turn_enabled = true)  
    if passable?(@x, @y, 2)  
      $game_party.move_party_actors  
      $game_party.add_move_list(Input::DOWN, turn_enabled)  
    end  
    super(turn_enabled)  
  end  
    
  def move_left(turn_enabled = true)  
    if passable?(@x, @y, 4)  
      $game_party.move_party_actors  
      $game_party.add_move_list(Input::LEFT, turn_enabled)  
    end  
    super(turn_enabled)  
  end  
    
  def move_right(turn_enabled = true)  
    if passable?(@x, @y, 6)  
      $game_party.move_party_actors  
      $game_party.add_move_list(Input::RIGHT, turn_enabled)  
    end  
    super(turn_enabled)  
  end  
    
  def move_up(turn_enabled = true)  
    if passable?(@x, @y, 8)  
      $game_party.move_party_actors  
      $game_party.add_move_list(Input::UP, turn_enabled)  
    end   
    super(turn_enabled)  
  end  
end  
  
#-----------------------------------------------------------------------------  
# ● Game Party  
#-----------------------------------------------------------------------------  
class Game_Party  
  include POKEMON_S  
  attr_accessor :follower_pkm  
    
  alias follow_me_initialize initialize  
  def initialize  
    follow_me_initialize  
    @follower_pkm = Follower_Pkm.new   
    @next_move = nil  
  end  
    
  def move_party_actors  
    case @next_move.type  
    when Input::DOWN  
      @follower_pkm.move_down(@next_move.turn_enabled)  
    when Input::LEFT  
      @follower_pkm.move_left(@next_move.turn_enabled)  
    when Input::RIGHT  
      @follower_pkm.move_right(@next_move.turn_enabled)  
    when Input::UP  
      @follower_pkm.move_up(@next_move.turn_enabled)  
    else  
      return  
    end  
    erase_moves  
  end  
      
  def add_move_list(type, turn_enabled)   
    @next_move = Move_List_Element.new(type, turn_enabled)  
  end  
    
  def erase_moves  
    @next_move = nil  
  end  
end  
  
#-----------------------------------------------------------------------------  
# ● Move List Element  
#-----------------------------------------------------------------------------  
class Move_List_Element   
  attr_reader :type  
  attr_reader :turn_enabled  
    
  def initialize(type, turn_enabled)  
    @type = type  
    @turn_enabled = turn_enabled  
  end  
end  




J'espère que l'on pourra régler mon problème.

Posté par Solfay le 19 Aoû - 15:16 (2012)
Est-ce que par hasard tu as joué à ton jeu, sauvegardé, ajouté le script plus tard et essayé de recharger ta partie ?
Si oui, il faut que tu recommences une partie alors.

Posté par Akito アート le 19 Aoû - 17:17 (2012)
Non, en fait c'est dès que je lance le jeu.

Posté par The_Doctor le 21 Aoû - 11:51 (2012)
il te manque des bout de code je croit voici mon follow me :

Follow me
#==============================================================================
# ■ Follow Me Pokémon
# par Brendan75
#-----------------------------------------------------------------------------
# Rend le premier pokémon de l'équipe visible sur la map.
#==============================================================================

PKM_TRANSPARENT_SWITCHES = 50 # Index de l'interrupteur pour rendre invisible

class Follower_Pkm < Game_Character
include POKEMON_S

def initialize
super()
@through = false
@step_anime = true
@pkm_id = 0
@shiney = false
end

def update
if $pokemon_party.size != 0
@pkm_id = $pokemon_party.actors[0].id
@shiney = $pokemon_party.actors[0].shiny
if @shiney
string = "#{sprintf('%03d', @pkm_id)}s_0.png"
else
string = "#{sprintf('%03d', @pkm_id)}_0.png"
end
if @character_name != string
@character_name = string
@character_hue = 0
@opacity = 255
@blend_type = 0
end
if @opacity != ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)
@opacity = ($game_switches[PKM_TRANSPARENT_SWITCHES] ? 0 : 255)
end
else
@character_name = ""
end
self.move_speed = $game_player.move_speed
super
end

def screen_z(height = 0)
if $game_player.x == @x and $game_player.y == @y
return $game_player.screen_z(height) - 1
end
super(height)
end

def check_event_trigger_touch(x, y) end

def passable?(x, y, d)
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
unless $game_map.valid?(new_x, new_y)
return false
end
if @through
return true
end
unless $game_map.passable?(x, y, d, self)
return false
end
unless $game_map.passable?(new_x, new_y, 10 - d)
return false
end
for event in $game_map.events.values
if event.x == new_x and event.y == new_y
unless event.through
if self != $game_player
return false
end
if event.character_name != ""
return false
end
end
end
end
return true
end
end

#-----------------------------------------------------------------------------
# ● Spriteset Map
#-----------------------------------------------------------------------------
class Spriteset_Map
alias follow_me_initialize initialize
def initialize
follow_me_initialize
@character_sprites.push(Sprite_Character.new(@viewport1, $game_party.follower_pkm))
update
end
end

#-----------------------------------------------------------------------------
# ● Scene Map
#-----------------------------------------------------------------------------
class Scene_Map
alias follow_me_transfer_player transfer_player
def transfer_player
$game_party.erase_moves
follow_me_transfer_player
end

alias follow_me_update update
def update
follow_me_update
$game_party.follower_pkm.update
end
end

#-----------------------------------------------------------------------------
# ● Game Player
#-----------------------------------------------------------------------------
class Game_Player
alias follow_me_moveto moveto
def moveto(x, y)
follow_me_moveto(x, y)
$game_party.follower_pkm.moveto(x, y)
end

def move_down(turn_enabled = true)
if passable?(@x, @y, 2)
$game_party.move_party_actors
$game_party.add_move_list(Input::DOWN, turn_enabled)
end
super(turn_enabled)
end

def move_left(turn_enabled = true)
if passable?(@x, @y, 4)
$game_party.move_party_actors
$game_party.add_move_list(Input::LEFT, turn_enabled)
end
super(turn_enabled)
end

def move_right(turn_enabled = true)
if passable?(@x, @y, 6)
$game_party.move_party_actors
$game_party.add_move_list(Input::RIGHT, turn_enabled)
end
super(turn_enabled)
end

def move_up(turn_enabled = true)
if passable?(@x, @y, 8)
$game_party.move_party_actors
$game_party.add_move_list(Input::UP, turn_enabled)
end
super(turn_enabled)
end
end

#-----------------------------------------------------------------------------
# ● Game Party
#-----------------------------------------------------------------------------
class Game_Party
include POKEMON_S
attr_accessor :follower_pkm

alias follow_me_initialize initialize
def initialize
follow_me_initialize
@follower_pkm = Follower_Pkm.new
@next_move = nil
end

def move_party_actors
case @next_move.type
when Input::DOWN
@follower_pkm.move_down(@next_move.turn_enabled)
when Input::LEFT
@follower_pkm.move_left(@next_move.turn_enabled)
when Input::RIGHT
@follower_pkm.move_right(@next_move.turn_enabled)
when Input::UP
@follower_pkm.move_up(@next_move.turn_enabled)
else
return
end
erase_moves
end

def add_move_list(type, turn_enabled)
@next_move = Move_List_Element.new(type, turn_enabled)
end

def erase_moves
@next_move = nil
end
end

#-----------------------------------------------------------------------------
# ● Move List Element
#-----------------------------------------------------------------------------
class Move_List_Element
attr_reader :type
attr_reader :turn_enabled

def initialize(type, turn_enabled)
@type = type
@turn_enabled = turn_enabled
end
end


Dsl mais je sais pas comment mattre en code

Posté par Silver le 21 Aoû - 13:01 (2012)
Pour cela il suffit d'utiliser la balise
Code:
 [code] [/code]

Cela rend les différentes méthodes et classes plus lisibles.

Posté par The_Doctor le 21 Aoû - 13:05 (2012)
merci beaucoup je saurai

Posté par Akito アート le 21 Aoû - 13:10 (2012)
Merci mais c'est le même ou alors il ne fonctionne pas car il y a le même bug.

Posté par The_Doctor le 21 Aoû - 13:53 (2012)
essai de demarrer une nouvelle partie

Posté par Akito アート le 21 Aoû - 16:12 (2012)
Le problème est résolu par Solfay et d'autres.
J'avais beau créer un nouvelle partie, rien n'y faisait.
J'ai réessayé et ça à fonctionné.


Je remerci toutes les personnes qui m'ont aidé.