Sujet n°5645
Posté par Nuri Yuri le 20 Déc - 18:16 (2009)
Titre : Bug maplink !
J'ai fait un script d'auto téléportation et quand je l'active par un évent il me met une erreur :
---------- Erreur de script : MAPLINK ----------
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `update' for #<Plane:0x4b0d5e0>

----- Position dans MAPLINK
Ligne 256

----- Backtrace
Script : MAPLINK | Ligne : 256 | Méthode : in `update'
Script : Scene_Map | Ligne : 61 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 53

Le script Maplink :
script
Code:
#==============================================================================
# ■ MAPLINK
# Pokemon Script Project - Krosk
# 19/01/08
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
# Gestion de jonction de cartes
#-----------------------------------------------------------------------------
if POKEMON_S::MAPLINK 
  class Spriteset_Map
    def initialize
      @viewport1 = Viewport.new(0, 0, 640, 480)
      @viewport2 = Viewport.new(0, 0, 640, 480)
      @viewport3 = Viewport.new(0, 0, 640, 480)
      @viewportc = Viewport.new(0, 0, 640, 480)
      @viewportc.z = 2
     
      @viewport2.z = 200
      @viewport3.z = 5000
   
      @viewportlink1 = Viewport.new(0, -240, 640, 240)
      @viewportlink1.z = 1
      @viewportlink2 = Viewport.new(640, 0, 320, 480)
      @viewportlink2.z = 1
      @viewportlink3 = Viewport.new(0, 480, 640, 240)
      @viewportlink3.z = 1 
      @viewportlink4 = Viewport.new(-320, 0, 320, 480)
      @viewportlink4.z = 1
     
      # Bordures 1
      if $map_link[1] != nil and $map_link[1][0] != 0
        @tilemaplink1 = Tilemap.new(@viewportlink1)
        map = load_data(sprintf("Data/Map%03d.rxdata", $map_link[1][0]))
        tileset = $data_tilesets[map.tileset_id]
        tileset_name = tileset.tileset_name
        @tilemaplink1.tileset = RPG::Cache.tileset(tileset.tileset_name)
        for i in 0..6
          autotile_name = tileset.autotile_names[i]
          @tilemaplink1.autotiles[i] = RPG::Cache.autotile(autotile_name)
        end
        @tilemaplink1.map_data = map.data
        @tilemaplink1.priorities = tileset.priorities
        @tilemaplink1.oy = map.height * 32 - 240 - 96# + $game_map.display_y / 4
      else
        @tilemaplink1 = Plane.new(@viewportlink1)
        @tilemaplink1.bitmap = RPG::Cache.picture("black.png")
      end
     
      # Bordures 2
      if $map_link[2] != nil and $map_link[2][0] != 0
        @tilemaplink2 = Tilemap.new(@viewportlink2)
        map = load_data(sprintf("Data/Map%03d.rxdata", $map_link[2][0]))
        tileset = $data_tilesets[map.tileset_id]
        tileset_name = tileset.tileset_name
        @tilemaplink2.tileset = RPG::Cache.tileset(tileset.tileset_name)
        for i in 0..6
          autotile_name = tileset.autotile_names[i]
          @tilemaplink2.autotiles[i] = RPG::Cache.autotile(autotile_name)
        end
        @tilemaplink2.map_data = map.data
        @tilemaplink2.priorities = tileset.priorities
        @tilemaplink2.ox = 96
      else
        @tilemaplink2 = Plane.new(@viewportlink2)
        @tilemaplink2.bitmap = RPG::Cache.picture("black.png")
      end
     
      # Bordures 3
      if $map_link[3] != nil and $map_link[3][0] != 0
        @tilemaplink3 = Tilemap.new(@viewportlink3)
        map = load_data(sprintf("Data/Map%03d.rxdata", $map_link[3][0]))
        tileset = $data_tilesets[map.tileset_id]
        tileset_name = tileset.tileset_name
        @tilemaplink3.tileset = RPG::Cache.tileset(tileset.tileset_name)
        for i in 0..6
          autotile_name = tileset.autotile_names[i]
          @tilemaplink3.autotiles[i] = RPG::Cache.autotile(autotile_name)
        end
        @tilemaplink3.map_data = map.data
        @tilemaplink3.priorities = tileset.priorities
        @tilemaplink3.oy = 96
      else
        @tilemaplink3 = Plane.new(@viewportlink3)
        @tilemaplink3.bitmap = RPG::Cache.picture("black.png")
      end
     
      # Bordures 4
      if $map_link[4] != nil and $map_link[4][0] != 0
        @tilemaplink4 = Tilemap.new(@viewportlink4)
        map = load_data(sprintf("Data/Map%03d.rxdata", $map_link[4][0]))
        tileset = $data_tilesets[map.tileset_id]
        tileset_name = tileset.tileset_name
        @tilemaplink4.tileset = RPG::Cache.tileset(tileset.tileset_name)
        for i in 0..6
          autotile_name = tileset.autotile_names[i]
          @tilemaplink4.autotiles[i] = RPG::Cache.autotile(autotile_name)
        end
        @tilemaplink4.map_data = map.data
        @tilemaplink4.priorities = tileset.priorities
        @tilemaplink4.ox = map.width * 32 - 320 - 96
      else
        @tilemaplink4 = Plane.new(@viewportlink4)
        @tilemaplink4.bitmap = RPG::Cache.picture("black.png")
      end
   
      @tilemap = Tilemap.new(@viewport1)
      @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
      for i in 0..6
        autotile_name = $game_map.autotile_names[i]
        @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
      end
      @tilemap.map_data = $game_map.data
      @tilemap.priorities = $game_map.priorities
     
      @panorama = Plane.new(@viewportc)
      @panorama.z = -1000
     
      @fog = Plane.new(@viewportc)
      @fog.z = 3000
     
      @character_sprites = []
      for i in $game_map.events.keys.sort
        sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
        @character_sprites.push(sprite)
      end
      @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
     
      @weather = RPG::Weather.new(@viewportc)
     
      @picture_sprites = []
      for i in 1..50
        @picture_sprites.push(Sprite_Picture.new(@viewport2,
          $game_screen.pictures[i]))
      end
     
      @timer_sprite = Sprite_Timer.new
     
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK == false
        @viewportlink1.visible = false
        @viewportlink2.visible = false
        @viewportlink3.visible = false
        @viewportlink4.visible = false
      end
     
      update
    end
    #--------------------------------------------------------------------------
    # ● 解放
    #--------------------------------------------------------------------------
    def dispose
      @tilemap.tileset.dispose
      for i in 0..6
        @tilemap.autotiles[i].dispose
      end
      @tilemap.dispose
      # パノラマプレーンを解放
      @panorama.dispose
      # フォグプレーンを解放
      @fog.dispose
      # キャラクタースプライトを解放
      for sprite in @character_sprites
        sprite.dispose
      end
      # 天候を解放
      @weather.dispose
      # ピクチャを解放
      for sprite in @picture_sprites
        sprite.dispose
      end
      # タイマースプライトを解放
      @timer_sprite.dispose
      # ビューポートを解放
      @viewport1.dispose
      @viewport2.dispose
      @viewport3.dispose
      @viewportc.dispose
      @viewportlink1.dispose
      @viewportlink2.dispose
      @viewportlink3.dispose
      @viewportlink4.dispose
    end
    #--------------------------------------------------------------------------
    # ● フレーム更新
    #--------------------------------------------------------------------------
    def update
      # パノラマが現在のものと異なる場合
      if @panorama_name != $game_map.panorama_name or
         @panorama_hue != $game_map.panorama_hue
        @panorama_name = $game_map.panorama_name
        @panorama_hue = $game_map.panorama_hue
        if @panorama.bitmap != nil
          @panorama.bitmap.dispose
          @panorama.bitmap = nil
        end
        if @panorama_name != ""
          @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
        end
        Graphics.frame_reset
      end
      # フォグが現在のものと異なる場合
      if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
        @fog_name = $game_map.fog_name
        @fog_hue = $game_map.fog_hue
        if @fog.bitmap != nil
          @fog.bitmap.dispose
          @fog.bitmap = nil
        end
        if @fog_name != ""
          @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
        end
        Graphics.frame_reset
      end
     
      @tilemap.ox = $game_map.display_x / 4
      @tilemap.oy = $game_map.display_y / 4
      @tilemap.update
   
      xo = [$game_player.real_x/4 - 320 + 16, 0].min
      yo = [$game_player.real_y/4 - 240 + 16, 0].min
      xd = [320 + 16 - ($game_map.width * 32 - $game_player.real_x/4), 0].max
      yd = [240 + 16 - ($game_map.height * 32 - $game_player.real_y/4), 0].max
      #@viewport1.rect = Rect.new(-xo - xd, - yo - yd, 640 + xo, 480 + yo)
     
      @viewportlink1.rect.y = -240-yo
      if yo != 0
        if $map_link[1] != nil and $map_link[1][0] != 0
          @tilemaplink1.ox = $game_map.display_x / 4 - $map_link[1][1] * 32
          @tilemaplink1.update
        end
        @viewportlink1.update
      end
     
      @viewportlink2.rect.x = 640-xd
      if xd != 0
        if $map_link[2] != nil and $map_link[2][0] != 0
          @tilemaplink2.oy = $game_map.display_y / 4 - $map_link[2][1] * 32
          @tilemaplink2.update
        end
        @viewportlink2.update
      end
     
      @viewportlink3.rect.y = 480-yd
      if yd != 0
        if $map_link[3] != nil and $map_link[3][0] != 0
          @tilemaplink3.ox = $game_map.display_x / 4 - $map_link[3][1] * 32
          @tilemaplink3.update
        end
        @viewportlink3.update
      end
     
      @viewportlink4.rect.x = -320 - xo
      if xo != 0
        if $map_link[4] != nil and $map_link[4][0] != 0
          @tilemaplink4.oy = $game_map.display_y / 4 - $map_link[4][1] * 32
          @tilemaplink4.update
        end
        @viewportlink4.update
      end
   
      # パノラマプレーンを更新
      @panorama.ox = $game_map.display_x / 8
      @panorama.oy = $game_map.display_y / 8
      # フォグプレーンを更新
      @fog.zoom_x = $game_map.fog_zoom / 100.0
      @fog.zoom_y = $game_map.fog_zoom / 100.0
      @fog.opacity = $game_map.fog_opacity
      @fog.blend_type = $game_map.fog_blend_type
      @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
      @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
      @fog.tone = $game_map.fog_tone
      # キャラクタースプライトを更新
      for sprite in @character_sprites
        sprite.update
      end
      # 天候グラフィックを更新
      @weather.type = $game_screen.weather_type
      @weather.max = $game_screen.weather_max
      @weather.ox = $game_map.display_x / 4
      @weather.oy = $game_map.display_y / 4
      @weather.update
      # ピクチャを更新
      for sprite in @picture_sprites
        sprite.update
      end
      # タイマースプライトを更新
      @timer_sprite.update
      # 画面の色調とシェイク位置を設定
      @viewportc.tone = $game_screen.tone
      @viewport1.ox = $game_screen.shake
      # 画面のフラッシュ色を設定
      @viewport3.color = $game_screen.flash_color
      # ビューポートを更新
      @viewport1.update
      @viewport3.update
      @viewportc.update
    end
  end

  class Game_Map
    def scroll_down(distance)
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK
        @display_y = @display_y + distance
      else
        @display_y = [@display_y + distance, (self.height - 15) * 128].min
      end
    end
   
    def scroll_left(distance)
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK
        @display_x = @display_x - distance
      else
        POKEMON_S::_MAPLINK = false
        @display_x = [@display_x - distance, 0].max
      end
    end
   
    def scroll_right(distance)
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK
        @display_x = @display_x + distance
      else
        POKEMON_S::_MAPLINK = false
        @display_x = [@display_x + distance, (self.width - 20) * 128].min
      end
    end
   
    def scroll_up(distance)
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK
        @display_y = @display_y - distance
      else
        POKEMON_S::_MAPLINK = false
        @display_y = [@display_y - distance, 0].max
      end
    end
  end
 
  class Game_Player < Game_Character
    def center(x, y)
      if POKEMON_S::_MAPLINK != nil and POKEMON_S::_MAPLINK
        $game_map.display_x = x * 128 - CENTER_X
        $game_map.display_y = y * 128 - CENTER_Y
      else
        max_x = ($game_map.width - 20) * 128
        max_y = ($game_map.height - 15) * 128
        $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
        $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max       
      end
    end
  end
 

 
  class Interpreter
    # ------------------------------------------------------
    # jonction_map(N_id, N_x, E_id, E_y, S_id, S_x, O_id, O_y)
    # ------------------------------------------------------
    def jonction_map(n_id = 0, n_x = 0, e_id = 0, e_y = 0, s_id = 0, s_x = 0, o_id = 0, o_y = 0)
      if $map_link == nil
        $map_link = {}
      end
      $map_link[1] = [n_id, n_x]
      $map_link[2] = [e_id, e_y]
      $map_link[3] = [s_id, s_x]
      $map_link[4] = [o_id, o_y]
    end
   
    def command_201
      if $game_temp.in_battle
        return true
      end
      if $game_temp.player_transferring or
         $game_temp.message_window_showing or
         $game_temp.transition_processing
        return false
      end
      $game_temp.player_transferring = true
      if @parameters[0] == 0
        $game_temp.player_new_map_id = @parameters[1]
        $game_temp.player_new_x = @parameters[2]
        $game_temp.player_new_y = @parameters[3]
        $game_temp.player_new_direction = @parameters[4]
      else
        $game_temp.player_new_map_id = $game_variables[@parameters[1]]
        $game_temp.player_new_x = $game_variables[@parameters[2]]
        $game_temp.player_new_y = $game_variables[@parameters[3]]
        $game_temp.player_new_direction = @parameters[4]
      end
      jonction_map
      @index += 1
      if @parameters[5] == 0
        Graphics.freeze
        $game_temp.transition_processing = true
        $game_temp.transition_name = ""
      end
      return false
    end
  end
else
  class Interpreter
    def jonction_map(n_id = 0, n_x = 0, e_id = 0, e_y = 0, s_id = 0, s_x = 0, o_id = 0, o_y = 0)
      print("MAPLINK est désactivé.")
      POKEMON_S::_MAPLINK = false
    end
   
    def desactiver_maplink
      POKEMON_S::_MAPLINK = false
    end
   
    def activer_maplink
      POKEMON_S::_MAPLINK = true
    end
  end
end

le script que j'utilise (ne pas me le prendre):
Code:

##########################################
#¤Systeme autoteleportation !                                        #
#©R O.LAB.              crédit obligatoir                             #
##########################################
def auto_tele(mnd, dnd, msd, dsd, met, det, mot, dot, mfm, dfmx,dfmy, maxx, maxy, maxynd, maxxot)
    $map_nord  = mnd
    $dec_nord = dnd
    $map_sud  = msd
    $dec_sud = dsd
    $map_est  = met
    $dec_est = det
    $map_ouest  = mot
    $dec_ouest = dot
    $map_mar  = mfm
    $dec_mar_x = dfmx
    $dec_mar_y = dfmy
    $max_x  = maxx
    $max_y = maxy
    $max_y_nord = maxynd
    $max_x_ouest = maxxot
    $game_switches[4] = true
    jonction_map($map_nord, $dec_nord, $map_est , $dec_est, $map_sud, $dec_sud , $map_ouest, $dec_ouest)
    $fdhkgkgfjhfdg = 2
  end

while $fdhkgkgfjhfdg == 2
    if $game_player.x == $max_x
      #teleport
      $game_temp.player_new_map_id = $map_est
      $game_temp.player_new_x = 2
      $game_temp.player_new_y = $game_player.y + $dec_est
      $game_temp.player_new_direction = $game_player.direction
      $fdhkgkgfjhfdg = 1
    elsif $game_player.x == 1
      #teleport
      $game_temp.player_new_map_id = $map_ouest
      $game_temp.player_new_x = $max_x_ouest - 1
      $game_temp.player_new_y = $game_player.y + $dec_ouest
      $game_temp.player_new_direction = $game_player.direction
      $fdhkgkgfjhfdg = 1
    elsif $game_player.y == $max_y
      #teleport
      $game_temp.player_new_map_id = $map_sud
      $game_temp.player_new_x = $game_player.x + $dec_sud
      $game_temp.player_new_y = 2
      $game_temp.player_new_direction = $game_player.direction
      $fdhkgkgfjhfdg = 1
    elsif $game_player.y == 1
      #teleport
      $game_temp.player_new_map_id = $map_nord
      $game_temp.player_new_x = $game_player.x + $dec_nord
      $game_temp.player_new_y = $max_y_nord -1
      $game_temp.player_new_direction = $game_player.direction
      $fdhkgkgfjhfdg =1
    end
    if $game_player.terrain_tag == 5
      if $pokemon_party.got_skill("PLONGEE")
        if Input.trigger?(Input::C)
          #teleport
          $game_temp.player_new_map_id = $map_mar
          $game_temp.player_new_x = $game_player.x + $dec_mar_x
          $game_temp.player_new_y = $game_player.y + $dec_mar_y
          $game_temp.player_new_direction = $game_player.direction
          $fdhkgkgfjhfdg = 1
        end
      end
    end
  end

La commande utilisée dans l'event :
auto_tele(85, 0, 84, 0, 87, 0, 86, 0, 0, 0, 0, 19, 14, 14, 19)

Voila

Posté par Ace Attorney Man le 20 Déc - 18:42 (2009)
A quoi il sert, en gros ?

Posté par Nuri Yuri le 21 Déc - 15:58 (2009)
Heu ... je fait pas un partage j'ai juste demandé pourquoi ca bug ...

Posté par Ace Attorney Man le 21 Déc - 18:45 (2009)
Je sais, mais comment on t'aide si on ne sait pas à quoi ça sert ? --"

Posté par :Youri: le 22 Déc - 11:35 (2009)
Ba c'est un systeme d'auto teleportation mais il a l'air de ne pas aimer le maplink donc je l'ai abandonner (en plus le map link ne fonctione plus dans mon jeu ...)

Posté par Ace Attorney Man le 22 Déc - 12:55 (2009)
O

K

?