Partagez
Aller en bas
croknoks
croknoks
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 09/03/2013

World Map Warp Empty World Map Warp

le Lun 18 Mar 2013 - 23:15
Voici un système de gestion de carte du monde à la manière de Final Fantasy Tactics Advance.
Pour ceux qui ne connaissent pas, ce système de carte du monde est simple : un fond de map sur lequel on dispose les icone représentant des lieux.
Le joueur a la possibilité de passer d'un lieu à l'autre en utilisant juste les touches haut/bas du clavier.

Nom : CN_WorldMapWarp
Auteur : CrokNoks
Site l'auteur : http://blog.noks.homeip.net/
Date: 17/03/2013
Dernière MAJ: 18/03/2013
Version : 0.9.1 (béta)
Type de script: Plug and pray play.
Licence: Utilisation non-commercial uniquement. Me demandez avant de faire des modifications et avant de partager. Me citez dans les crédits (avec les deux majuscules :p.)

Avant de commencer, ce n'est qu'une version béta car la présence de bug est possible. De plus merci d'être indulgent car c'est mon premier script RGSS3.

Voici donc pour commencer le script
Spoiler:

Code:
#==============================================================================
#    World Map Warp
#    Version: 0.9
#    Author: CrokNoks
#    Date: 17/03/2013
#    Version Date         Author           Comment
#    0.9     17/03/2013   CrokNoks         Beta version for LePalaisDuMaking
#    0.9.1   18/03/2013   CrokNoks         Add : disable the command in the menu
#
# Licence: Utilisation non-commercial uniquement.
# Me demandez avant de faire des modifications et avant de partager.
# Me citez dans les crédits (avec les deux majuscules :p.)
#
# A venir : Une ligne de description multiligne et ajout d'un menu lors de la validation du lieu.
#    
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=begin

INSTRUCTIONS

Le fond de carte utilisé pour l'a vue doit être placé dans Graphics/Pictures
et doit porter le nom de world_map (voir MAP_NAME pour changer le nom
Ce fond de carte doit AU MINIMUM avoir la taille de la fenètre. Si elle est plus grande, le fond de map se déplacera.

Ajout d'une map au système :
 - Mettre ces lignes dans la block 'notes' de la map.
<map info warp>
direction 2
entry_point 12 12
map_coord 165 135
known yes
icons 15 12    
<description>
Voici une jolie description.
</description>
</map info warp>
 - Changer les informations :
 direction : direction dans laquelle sera tourné le perso après l'arrivé sur cette carte. (facultatif, voir DEFAULT_DIRECTION)
 entry_point : coordonnées de la carte actuelle à laquelle, le perso doit être téléporté
 map_coord : coordonnées à laquelle il faut afficher l'icone et/ou le nom du lieu sur la carte du monde.
 known : yes|no|true|false : permet de masquer/afficher un lieu au joueur. (facultatif voir DEFAULT_KNOWN)
 icons : numéros des icones à utilier lorsque le lieu est sélectionné ou non sur la carte du monde. (facultatif, voir CUSTOM_ICONS)
 block description : ajouter une description visible en haut de la map. (facultatif)
 
 Le nom et l'id de la map sont récupérés automatiquement.
 
 L'id de la map se situe en bas à droite de l'éditeur (à coté des coordonnées)
 
 Pour connaitre l'état 'known d'une map :
  $game_wmw.get(map_id).known
  map_id : id de la map à vérifier
 Pour changer l'état 'known' par event :
  $game_wmw.known(map_id,bool)
  map_id : id de la map à modifier.
  bool : true/false
 Pour appeller la vue :
  SceneManager.call(Scene_WorldMap)
=end
module CN_WorldMapWarp
   module Config
      # Nom du fichier image (must be the Graphics/Pictures folder)
      MAP_NAME = "world_map"
      
      # Pour avoir l'acces par le menu
      IN_MENU = true
    # Nom dans le menu
      ENTRY_NAME = "Carte"
      
    # Si TRUE affiche les noms des lieux sur la carte
      SHOW_LOCATION_NAME = true
    # Si TRUE affiche le nom uniquement si lieu selectionné, ne fonctionne que si SHOW_LOCATION_NAME vaut true
    SHOW_ONLY_SELECTED_LOCATION_NAME = true
    
    # Si -1 utilise la police par défaut
      TEXT_FONT = -1    
    #Si -1 utilise la taille défaut
      TEXT_SIZE = -1
      
    # Numéro du tile de couleur dans le windowskin.
      TEXT_COLOR = 1 # couleur du texte par défaut
      CURRENT_LOC_TEXT_COLOR = 9 # couleur à utiliser sur le lieu séléctionné
      PREVIOUS_LOC_TEXT_COLOR = 4 # couleur à utiliser sur le lieu où l'on a activé la carte
    UNKNOWN_LOC_TEXT_COLOR = 2 # couleur à utiliser pour les lieux inconnu. Ne fonctionne qu'avec DISPLAY_ALL
            
      # Icones par défaut à utiliser si icone non fournis ou si CUSTOM_ICONS = FALSE
      LOCATION_ICONS = [184, 187]

      # si TRUE utilise les icones défini dans la liste de lieu.
    # Sinon Utilise les deux icones présentent ci-dessus.
      CUSTOM_ICONS = true
            
      # Si False, n'affichera pas les lieux inconnus
      DISPLAY_ALL = true
    
    # Si true active la téléportation même pour les lieux non débloqué.
    TELEPORT_FOR_ALL = false
    # Valeur du fondu lors de la téléportation.
    TELEPORT_FADE_TIME = 50
    
      # affichera le texte suivant si DISPLAY_ALL est vrai
      UNKNOWN_TEXT = "??????"
    # affichera le texte suis en description si DISPLAY_ALL est vrai
    UNKNOWN_DESCRIPTION = "??????"
    
    # si TRUE affiche la liste des lieux.
    LIST_OF_LOCATION = true
    
    # Valeur par défaut pour le paramètre known d'un Location
    DEFAULT_KNOWN = true
    
    #valeur par Défaut pour la direction du joueur.
    DEFAULT_DIRECTION = 2 # 2 => bas, 4 => gauche, 6 => droite, 8 => haut
  end
  
  module REGEXP
    module CLASS
      
      MAP_INFO_WARP_ON =
        /<(?:MAP_INFO_WARP|map info warp)>/i
      MAP_INFO_WARP_OFF =
        /<\/(?:MAP_INFO_WARP|map info warp)>/i
      MAP_INFO_DIR_STR = /DIRECTION[ ](\d+)/i
      MAP_INFO_ENTRY_POINT_STR = /ENTRY_POINT[ ](\d+) (\d+)/i
      MAP_INFO_MAP_COORD_STR = /MAP_COORD[ ](\d+) (\d+)/i
      MAP_INFO_MAP_KNOWN_STR = /KNOWN[ ](yes|no|true|false)/i
      MAP_INFO_MAP_ICONS_STR = /icons[ ](\d+) (\d+)/i
      MAP_INFO_MAP_DESC_ON = /<description>/i
      MAP_INFO_MAP_DESC_OFF = /<\/description>/i
      
    end # CLASS
  end # REGEXP
  
end

#==============================================================================
# ** Game_WMW
#------------------------------------------------------------------------------
# This gama object is for manage locations and display the
# list of location and the map
#==============================================================================
class  Game_WMW

  attr_accessor :maplocations
  attr_accessor :prev_map
  attr_accessor :menu_enabled
  
  def initialize
    @menu_enabled = true
    @maplocations = []
    make_location_list
    sort_location_list    
  end
  
   #--------------------------------------------------------------------------
  # * Generate location list
   #--------------------------------------------------------------------------
  def make_location_list
    $data_mapinfos.each do |map_id,item|
      map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
      loc = get_notetags(map)
      if !loc.nil?
        loc.map_id = map_id
        loc.name = item.name if loc.name == ''
        @maplocations.push(loc)
      end
    end    
  end
  
   #--------------------------------------------------------------------------
  # * Sort location list to north -> south order
   #--------------------------------------------------------------------------
  def sort_location_list
    @maplocations.sort! { |a, b| a.icon_y <=> b.icon_y}
  end  
  
   #--------------------------------------------------------------------------
  # * Set known value for id
   #--------------------------------------------------------------------------
  def known(map_id,know)
    item = get(map_id)
    item.known = know unless item.nil?
  end
  
   #--------------------------------------------------------------------------
  # * Get the map's note tag
   #--------------------------------------------------------------------------
  def get_notetags(map)
    map_unlock_on = false
    map_unlock_desc_on = false
    loc = Location.new(0,map.display_name)
    loc.description= ''
    #---
    map.note.split(/[\r\n]+/).each do |line|
      case line
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_WARP_ON
        map_unlock_on = true
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_WARP_OFF
        map_unlock_on = false
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_DIR_STR
        next unless map_unlock_on
        loc.direction = $1.to_i
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_ENTRY_POINT_STR
        next unless map_unlock_on
        loc.entry_x = $1.to_i
        loc.entry_y = $2.to_i
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_MAP_COORD_STR
        next unless map_unlock_on
        loc.icon_x = $1.to_i
        loc.icon_y = $2.to_i
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_MAP_KNOWN_STR
        next unless map_unlock_on
        loc.known = ($1== 'yes')
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_MAP_ICONS_STR
        next unless map_unlock_on
        loc.selected_icon = $1.to_i
        loc.deselected_icon = $2.to_i
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_MAP_DESC_ON
        map_unlock_desc_on = true
      when CN_WorldMapWarp::REGEXP::CLASS::MAP_INFO_MAP_DESC_OFF
        map_unlock_desc_on = false
      else
        loc.description += ' '+line if map_unlock_desc_on
      end
    end
    return loc if loc.icon_x >=0 && loc.icon_y >=0
    return nil
  end

   #--------------------------------------------------------------------------
   # * Determine what icon to use for location
   #--------------------------------------------------------------------------
   def determine_location_icon(loc_id,selected_loc_id)
    location_icon = CN_WorldMapWarp::Config::LOCATION_ICONS
    b_custom_icons = CN_WorldMapWarp::Config::CUSTOM_ICONS
    b_selected_map = loc_id == selected_loc_id
    location = get(loc_id)
    if b_custom_icons
      location_icon = [
        (location.deselected_icon == nil) ? location_icon[0] : location.deselected_icon,
            (location.selected_icon == nil) ? location_icon[1] : location.selected_icon
      ]
    end
    
    icon_code = (b_selected_map)? location_icon[1] : location_icon[0]
    enabled = b_selected_map
    
      return {:icon => icon_code, :enabled => enabled}
   end
  
   #--------------------------------------------------------------------------
  # * Get a location by map_id
   #--------------------------------------------------------------------------
  def get(map_id)
    @maplocations.each do |item|
      return item if item.map_id == map_id
    end
    return nil
  end
  
   #--------------------------------------------------------------------------
  # * Get a location by map_id
   #--------------------------------------------------------------------------
  def get_index(map_id)
    @maplocations.each do |index,item|
      return index if item.map_id == map_id
    end
    return nil
  end
  
   #--------------------------------------------------------------------------
  # * Determine what color to use for name
   #--------------------------------------------------------------------------
  def determine_location_color(loc_id,selected_loc_id)
    color = CN_WorldMapWarp::Config::TEXT_COLOR
    b_selected_map = loc_id == selected_loc_id
    location = get(loc_id)
    return  {:color => text_color(0), :enabled => false} if location.nil?
    color = CN_WorldMapWarp::Config::PREVIOUS_LOC_TEXT_COLOR if location.map_id == @prev_map
    color = CN_WorldMapWarp::Config::CURRENT_LOC_TEXT_COLOR if b_selected_map
    
    enabled = location.known
    enabled = false if color == CN_WorldMapWarp::Config::PREVIOUS_LOC_TEXT_COLOR
    
      return {:color => text_color(color), :enabled => enabled}
  end
  
   #--------------------------------------------------------------------------
  # * Convert  color sprite number into color value
   #--------------------------------------------------------------------------
  def text_color(n)
    return Window_Base.new(0,0,0,0).text_color(n)
  end
end

#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
#  This window is for selecting a context to display the
# list of location and the map
#==============================================================================
class Window_Map < Window_Command
   #--------------------------------------------------------------------------
   # * Object Initialization
   #--------------------------------------------------------------------------
   def initialize(pY)
      super(0, pY)
      $game_wmw.prev_map = $game_map.map_id
      @called_from = 0
      @map = Window_Base.new(50, 50, 50, 50)
      @map_image = Cache.picture(CN_WorldMapWarp::Config::MAP_NAME)

      make_location_list
  end
  
  
   #--------------------------------------------------------------------------
   # * Get Window Width
   #--------------------------------------------------------------------------
  def initialize_map()
    x = 0
    y = 0
    x = @location_window.width if CN_WorldMapWarp::Config::LIST_OF_LOCATION && !@location_window.nil?
    y = @location_window.help_window.height if !@location_window.help_window.nil?
    width = Graphics.width
    height = Graphics.height
    
    @map.dispose
    # map is positioned at (-32, -32) as the bitmap is offset by a border
    # of 32 pixels, and this is needed to the image to start at (0, 0)
    @map = Window_Base.new(-32,-32,@map_image.width + 64, @map_image.height + 64)
    @map.z = -10
    @map.contents.dispose
    @map.contents = Bitmap.new(@map.width-32, @map.height-32)
    @map.contents.blt(0, 0, @map_image, Rect.new(0, 0, @map_image.width, @map_image.height))
    
    
    @map.viewport = Viewport.new(x, y, width, height)
   end
  
   #--------------------------------------------------------------------------
   # * Get Window Width
   #--------------------------------------------------------------------------
   def window_width
      return 200
   end
  
   #--------------------------------------------------------------------------
   # * Get Digit Count
   #--------------------------------------------------------------------------
   def col_max
      return 1
   end

   #--------------------------------------------------------------------------
   # * Create Command List
   #--------------------------------------------------------------------------
   def make_command_list
   end
  
   #--------------------------------------------------------------------------
  # * Move player if the selected map is the current map
   #--------------------------------------------------------------------------
  def move_player
    # if the selected location is map the player is on
    Sound.play_cancel

    # find the opposite direction
    opp_direction = case $game_player.direction
    when 2
      8 # down -> up
    when 4
      6 # left -> right
    when 6
      4 # right -> left
    when 8
      2 # up -> down
    end

    # turn the player round and exit
    player_transition($game_wmw.prev_map,
    $game_player.x,
    $game_player.y,
    opp_direction)
  end
  
   #--------------------------------------------------------------------------
  # * teleport player
   #--------------------------------------------------------------------------
  def teleport
    return if @selected_location.known==false && CN_WorldMapWarp::Config::TELEPORT_FOR_ALL==false
    if @selected_location.map_id == $game_wmw.prev_map
      move_player
    else
      # put the player in the new map
      player_transition(@selected_location.map_id,
      @selected_location.entry_x,
      @selected_location.entry_y,
      @selected_location.direction)
    end
  end
  
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
   def update
      super
      # move map according to velocities
      refresh_window_position
   end
   
   #--------------------------------------------------------------------------
   # * Display icone on the map
   #--------------------------------------------------------------------------
   def draw_map_icon(x, y, location)
      icon = $game_wmw.determine_location_icon(location.map_id, @selected_location.map_id)
      @map.draw_icon(icon[:icon], x, y, icon[:enabled])
  end
  
  #--------------------------------------------------------------------------#
  # * Display text on the map
  #--------------------------------------------------------------------------#
  def draw_map_text(x,y,location)
    b_is_selected = location.map_id == @selected_location.map_id
    return unless CN_WorldMapWarp::Config::SHOW_LOCATION_NAME
    return if (CN_WorldMapWarp::Config::SHOW_ONLY_SELECTED_LOCATION_NAME == true && b_is_selected==false )
      text = location.name   
    text = CN_WorldMapWarp::Config::UNKNOWN_TEXT unless location.known
      # set new font properties only if the value isn't -1
      # in which case defaults will be used
      @map.contents.font.size = CN_WorldMapWarp::Config::TEXT_SIZE unless CN_WorldMapWarp::Config::TEXT_SIZE == -1
      @map.contents.font.name = CN_WorldMapWarp::Config::TEXT_FONT unless CN_WorldMapWarp::Config::TEXT_FONT == -1

      # width and height set AFTER the above to get correct metrics
      height = @map.contents.text_size(text).height+5
      width = @map.contents.text_size(text).width

      color = $game_wmw.determine_location_color(location.map_id, @selected_location.map_id)
    
    @map.change_color(color[:color], color[:enabled])
      @map.draw_text(x+25, y, width, height, text)
   end

   #--------------------------------------------------------------------------
  # * Load the selected map and move the player to the right place
   #--------------------------------------------------------------------------
  def player_transition(map_id, x, y, dir)
      # slightly custom transition script
      $game_map.setup(map_id)
      $game_player.moveto(x, y)
      $game_player.set_direction(dir)
   end
  
  #--------------------------------------------------------------------------
  # * Set Item Window
  #--------------------------------------------------------------------------
  def location_window=(location_window)
    @location_window = location_window
    @location_window.activate
    @location_window.select_last
   
    initialize_map
    update
  end
  
   #--------------------------------------------------------------------------
  # * Generate the lsit of location to display
   #--------------------------------------------------------------------------
  def make_location_list
    @known_locations = []
    $game_wmw.maplocations.each do |loc|
      @known_locations.push(loc) if (loc.known || CN_WorldMapWarp::Config::DISPLAY_ALL)
    end
  end
  
   #--------------------------------------------------------------------------
  # * Display map and location
   #--------------------------------------------------------------------------
  def refresh_window_position
    return if @known_locations.size == 0
    
    @selected_location = @known_locations[@location_window.index]
    # jump straight to the target position
    @target_x = [[@selected_location.icon_x, 172].max, @map_image.width-172-16].min
    @target_y = [[@selected_location.icon_y, 208].max, @map_image.height-208-16].min

    @map.x = 172 - 32 - @target_x
    @map.y = 208 - 32 - @target_y

    @map.contents.clear
    @map.contents.blt(0, 0, @map_image, Rect.new(0, 0, @map_image.width, @map_image.height), 255)

    @known_locations.each do |location|
      draw_map_icon(location.icon_x, location.icon_y, location)
      draw_map_text(location.icon_x, location.icon_y, location)
    end
  end
 
end

#==============================================================================
# ** Window_MapLocations
#------------------------------------------------------------------------------
#  This window is for selecting a category of normal items and equipment
# on the item screen or shop screen.
#==============================================================================
class Window_MapLocations < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x, y,width,height)
    if !CN_WorldMapWarp::Config::LIST_OF_LOCATION
      x = 0
      y = 0
      width = 0
      height = 0
    end
    
    super
    
    @data = []
    @save_index = 0
    make_item_list
    determine_index
    refresh
  end
  
   #--------------------------------------------------------------------------
  # * Get the index of the current location
   #--------------------------------------------------------------------------
  def determine_index
    map_id = $game_map.map_id
    @save_index = 0
    for i in 0..@data.size-1
        @save_index = i if @data[i].map_id==map_id
    end
    
  end  
  
  #--------------------------------------------------------------------------
  # * Get Digit Count
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  
  def width
    return 200
  end
  #--------------------------------------------------------------------------
  # * Get Number of Items
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 0
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # * Get Activation State of Selection Item
  #--------------------------------------------------------------------------
  def current_item_enabled?
    if @data[index]
      if @data[index].known==false && CN_WorldMapWarp::Config::TELEPORT_FOR_ALL==false
        return false
      end
      return true
    end
  end

  #--------------------------------------------------------------------------
  # * Create Item List
  #--------------------------------------------------------------------------
  def make_item_list
    @data.clear
    tabItem = $game_wmw.maplocations
    tabItem.each do |item|
      if item
        if item.known || CN_WorldMapWarp::Config::DISPLAY_ALL
          @data.push(item.clone)
        end
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # * Restore Previous Selection Position
  #--------------------------------------------------------------------------
  def select_last
    select((@data.size == 0 ? nil : (@data.size > @save_index) ? @save_index : @data.size - 1))
  end
  
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    location = @data[index]
    return unless location
    return if CN_WorldMapWarp::Config::DISPLAY_ALL==false && location.known==false    
    rect = item_rect(index)
    rect.width -= 4
    draw_item_icon(location, rect.x, rect.y)
    draw_item_name(location, rect.x, rect.y)
    
  end
  
  #--------------------------------------------------------------------------
  # * Draw Item Icon
  #--------------------------------------------------------------------------
  def draw_item_icon(item, x, y)
    icon = item.selected_icon    
    icon = CN_WorldMapWarp::Config::LOCATION_ICONS[1] if icon.nil? || !CN_WorldMapWarp::Config::CUSTOM_ICONS
    return if icon.nil?
    draw_icon(icon, x, y, true)
  end
  
  #--------------------------------------------------------------------------
  # * Draw Item Name
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, width = 172)    
      text = item.name   
    text = CN_WorldMapWarp::Config::UNKNOWN_TEXT unless item.known
    color = $game_wmw.determine_location_color(item.map_id,@data[@index].map_id)
    change_color(normal_color, true)

    draw_text(x + 24, y, width, line_height, text)
  end

  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    create_contents
    draw_all_items
  end
  
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
  end
  
  #--------------------------------------------------------------------------
  # * Update Help Text
  #--------------------------------------------------------------------------
  def update_help
    item = @data[index]
    if item
      item.description = CN_WorldMapWarp::Config::UNKNOWN_DESCRIPTION unless item.known
      item.description = item.description_real if item.known
      @help_window.set_item(item)
    end
  end
end

#==============================================================================
# ** Scene_WorldMap
#------------------------------------------------------------------------------
#  This Scene performs Wolrd Map Warping
#==============================================================================
class Scene_WorldMap < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window
    create_location_window
    create_context_window
  end
  
  #--------------------------------------------------------------------------
  # * Create Context Window
  #--------------------------------------------------------------------------
  def create_context_window
    wy = 0
    wh = Graphics.height - wy
    @mapwarp_window = Window_Map.new(wh)
    @mapwarp_window.viewport = @viewport
    @mapwarp_window.set_handler(:cancel, method(:return_scene))
    
    @mapwarp_window.location_window = @location_window
    @mapwarp_window.help_window = @help_window
  end

  #--------------------------------------------------------------------------
  # * Create Locations Window
  #--------------------------------------------------------------------------
  def create_location_window
    wy = @help_window.height
    wh = Graphics.height - wy
    @location_window = Window_MapLocations.new(0, wy,200,wh)
    @location_window.viewport = @viewport
    @location_window.set_handler(:ok,    method(:on_location_ok))
    @location_window.help_window = @help_window
  end

  #--------------------------------------------------------------------------
  # * What to do when the player have choose a location
  #--------------------------------------------------------------------------
  def on_location_ok
    Graphics.fadeout(CN_WorldMapWarp::Config::TELEPORT_FADE_TIME)    
    @mapwarp_window.call_handler(:cancel) if SceneManager.scene_is?(Scene_WorldMap)
    SceneManager.scene().return_scene if SceneManager.scene_is?(Scene_Menu)
    @mapwarp_window.teleport
    $scene = Scene_Map.new
  end
end
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
#  This command window appears on the menu screen.
#==============================================================================
class Window_MenuCommand < Window_Command
    
  #--------------------------------------------------------------------------
  # * add_main_commands
  #--------------------------------------------------------------------------
  alias cnwp_add_main_commands add_main_commands
  def add_main_commands
    cnwp_add_main_commands
    add_command(CN_WorldMapWarp::Config::ENTRY_NAME, :worldmap, $game_wmw.menu_enabled) if CN_WorldMapWarp::Config::IN_MENU
  end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================
class Scene_Menu < Scene_MenuBase

  #--------------------------------------------------------------------------
  # * create_command_window
  #--------------------------------------------------------------------------
  alias cnwp_create_command_window create_command_window
  def create_command_window
    cnwp_create_command_window
    @command_window.set_handler(:worldmap, method(:command_worldmap)) if CN_WorldMapWarp::Config::IN_MENU
  end
  
  #--------------------------------------------------------------------------
  # * command_alchimie
  #--------------------------------------------------------------------------
  def command_worldmap
    SceneManager.call(Scene_WorldMap)
  end
end

class Location
   def initialize(map_id=0,
      name='',
      direction=0,
      entry_coords=[nil,nil],
      icon_coords=[-1,-1],
      location_known=nil,
      custom_icons = [nil, nil])

   @name = name
   @direction = direction
   @entry_x = entry_coords[0]
   @entry_y = entry_coords[1]
   @map_id = map_id
   @icon_x = icon_coords[0]
   @icon_y = icon_coords[1]
   @known = location_known
   @icon_index = @deselected_icon
   @deselected_icon = custom_icons[0]
   @selected_icon = custom_icons[1]
  
  @known = CN_WorldMapWarp::Config::DEFAULT_KNOWN if @known.nil?
  @direction = CN_WorldMapWarp::Config::DEFAULT_DIRECTION if @direction==0
  end

  # all can be modified
  attr_accessor :name
  attr_accessor :direction
  attr_accessor :entry_x
  attr_accessor :entry_y
  attr_accessor :map_id
  attr_accessor :icon_x
  attr_accessor :icon_y
  attr_accessor :known
  attr_accessor :selected_icon
  attr_accessor :deselected_icon
  attr_accessor :icon_index
  attr_accessor :description
  attr_accessor :description_real
  
  def description=(text)
      @description_real = @description = text      
  end
  

end

#==============================================================================
# *** DataManager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - self.extract_save_contents
#==============================================================================

module DataManager
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Extract Save Contents
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  class <<self; alias cn_extractsavecons_wmw extract_save_contents;  end
  def self.extract_save_contents(contents)
    cn_extractsavecons_wmw(contents)
    $game_wmw = contents[:wmw]
  end
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Save WMW Contents
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  class <<self; alias cn_make_save_contents_wmw make_save_contents; end
  def self.make_save_contents
    contents = cn_make_save_contents_wmw
    contents[:wmw] = $game_wmw
    contents
  end  
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Initialize WMW Contents
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  class <<self; alias cn_create_game_objects_wmw create_game_objects; end
  def self.create_game_objects
    cn_create_game_objects_wmw
    $game_wmw = Game_WMW.new
  end  
end

Description

Ce script lit automatiquement le champs note de toutes les cartes définis dans le projet. Analyse le contenu et si ça correspond, ajoute cette carte à la liste des lieux affichable par le script.

De plus, le script est livré avec un le pack Sauvegarde, qui permet à la liste des lieux d'être enregistrée dans la sauvegarde du joueur.

Installation et utilisation

Comme pour tout bon script, il suffit de le mettre dans materials, juste au dessus de Main.
Ensuite, il vous faut un fond de carte. Une image sur laquelle vos lieux seront positionnés. Il faudra le mettre dans Graphics/Pictures mais ça vous vous en doutez. Cette image pourra porter le nom que vous voulez, il suffira de le changer au début du script.

Enfin voici un exemple de code à mettre dans le champs note de votre carte.
Spoiler:

Code:
<map info warp>
direction 2
entry_point 12 12
map_coord 165 135
known yes
icons 15 12    
<description>
Voici une jolie description.
</description>
</map info warp>

Expliquons un peu ce code barbare :

  • direction : Facultatif  la direction dans laquelle sera tourné le perso en arrivant sur la carte. 2 pour le bas, 4 pour la gauche, 6 pour la droite et 8 pour le haut. Prendra la valeur par de DEFAULT_DIRECTION s'elle n'est pas fournis.
  • entry_point : Obligatoire coordonnées aux quelles le perso devra être téléporté.
  • map_coord : Obligatoire Coordonnées aux quelles l'icone sera positionnée sur le fond de carte.
  • known : Facultatif yes/true/no/false. Si yes ou true, ce lieu sera connu du joueur et pourra s'y téléporter. Sinon les informations comme le nom et la description lui seront cachés. Prendra la valeur de DEFAULT_KNOWN s'il n'est pas fournis.
  • icons : Facultatif le premier chiffre correspond à l'icone si le lieu n'est pas sélectionné sur la vue et la second, si il est sélectionné. Prendra la valeur de LOCATION_ICONS si elle n'est pas fournis.
  • description : Facultatif Une petite phrase pour faire plaisir ?


Le nom et l'id de la map sont récupérés automatique au chargement. De plus si le 'nom affiché' n'est pas fournis, le nom de la carte sera utilisé à la place (voir les 3 derniers screens)

Vous avez vu certains des éléments modifiable. Voici ceux qui vous manquent :

  • Changer la durée du fondu lors de la téléportation (TELEPORT_FADE_TIME).
  • Forcer la téléportation (TELEPORT_FOR_ALL) même pour les lieux qui ne sont pas connus.
  • Changer les textes de remplacement pour les lieux inconnus (UNKNOWN_TEXT et UNKNOWN_DESCRIPTION)
  • D'afficher ou masquer la liste des lieux sur la vue de la carte du monde. (LIST_OF_LOCATION)
  • D'afficher la vue carte du monde depuis le menu (IN_MENU) et changer son libellé (ENTRY_NAME)
  • D'utiliser un jeu d'icone pour tous les lieux (LOCATION_ICONS activable graçe à CUSTOM_ICONS)
  • D'afficher ou masquer les noms des lieux sur la carte du monde (SHOW_LOCATION_NAME)
  • De n'afficher que le lieu actuellement sélectionné par le joueur ( SHOW_LOCATION_NAME doit valoir true :  SHOW_ONLY_SELECTED_LOCATION_NAME)
  • D'afficher les lieux avec différentes couleurs personnalisables (TEXT_COLOR, CURRENT_LOC_TEXT_COLOR, PREVIOUS_LOC_TEXT_COLOR, UNKNOWN_LOC_TEXT_COLOR)
  • D'afficher ou masquer les lieux que vous voulez quand vous le voulez, grâce à une petit ligne de script. (voir plus bas)
  • D'afficher la vue de la carte du monde à partir d'un event (voir plus bas)
  • D'utiliser la téléportation traditionnel pour changer de map (c'est important de le préciser).


Astuces
Appeler la vue de la carte à partir d'un event :
Code:
SceneManager.call(Scene_WorldMap)
Pour changer une carte de connus <->inconnus :
Code:
$game_wmw.known(map_id,bool)
Pour connaitre l'état connus/inconnus d'une carte :
Code:
$game_wmw.get(map_id).known
Pour désactiver la commande dans le menu :
Code:
$game_wmw.menu_enabled=false

Voici maintenant les Screens :

Uniquement la carte et la fenêtre de description pour un lieu connu du joueur et un autre inconnu du joueur :
Spoiler:

World Map Warp 20130317232403worldmapp
World Map Warp 20130317232553worldmapp
La même que la première image ci-dessus, à ceci près que la fenêtre contenant la liste des lieux est activée.
Spoiler:
World Map Warp 20130317232700worldmapp

Enfin les derniers pour la route, le champs note des 3 cartes utilisées dans la démo :
Spoiler:

World Map Warp 20130317232809propritsd
World Map Warp 20130317232837propritsd
World Map Warp 20130317232826propritsd

J'ai enfin fini, vous pouvez maintenant m'envoyer vos questions, remarques, tomates, petites culottes, chaussons, chats, corbeaux morts ... Je prends tout !

Merci.



Dernière édition par croknoks le Ven 24 Oct 2014 - 16:51, édité 1 fois
Elisa'
Elisa'
Staffeux retraité

Nombre de messages : 2924
Age : 21
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris World Map Warp 344805World Map Warp 344805
[Coco' Smile]
Plus que 2 ans avant d'épouser Coco' ! Compte à rebours lancé !
[Auto-distinction]

Adepte du "Je le savais" alors qu'elle le savait pas.
Date d'inscription : 30/05/2009

World Map Warp Empty Re: World Map Warp

le Dim 24 Mar 2013 - 12:09
Ca a l'air très sympathique comme script, merci du partage !
+5 pts de participation.

_________________


Cliquez ici pour voter pour la commu'
World Map Warp Banner
croknoks
croknoks
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 09/03/2013

World Map Warp Empty Re: World Map Warp

le Dim 24 Mar 2013 - 13:22
Merci. C'est une version assez simpliste, sur laquelle il reste il reste beaucoup de chose à ajouter mais au moins elle est fonctionnelle.
LightNox
LightNox
Membre

Nombre de messages : 1759
Age : 29
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008

World Map Warp Empty Re: World Map Warp

le Dim 24 Mar 2013 - 18:10
Vraiment pas mal comme système merci du partage Wink
Asagi
Asagi
Membre

Nombre de messages : 290
Age : 25
Localisation : France
Distinction : aucune
Date d'inscription : 30/01/2011

World Map Warp Empty Re: World Map Warp

le Dim 24 Mar 2013 - 22:30
Ce script est tout simplement génial, je l'attendez depuis si longtemps le voila enfin ! merci du partage je rechercher ce script depuis un bon moment Smile
croknoks
croknoks
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 09/03/2013

World Map Warp Empty Re: World Map Warp

le Jeu 4 Avr 2013 - 23:49
Petite mise à jour : sur mon site est disponible une nouvelle version du script.ici
Ajout : possibilité de désactiver temporairement la téléportation pour une carte données en utilisant $game_wmw.teleport(map_id,bool)
ainsi que quelques petites corrections mineurs comme l'impossibilité de quitter la map si on désactive l'ajout dans le menu.
Asagi
Asagi
Membre

Nombre de messages : 290
Age : 25
Localisation : France
Distinction : aucune
Date d'inscription : 30/01/2011

World Map Warp Empty Re: World Map Warp

le Sam 6 Avr 2013 - 14:54
Bonjour, ça serait possible de publier le lien d'une démo?, ça serait bien par ce que tout script compliquer j'ai toujours appris a les utiliser en s’entraînant sur la démo x) sinon pas grave j'me débrouillerait.
croknoks
croknoks
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 09/03/2013

World Map Warp Empty Re: World Map Warp

le Lun 8 Avr 2013 - 10:05
Salut Asagi. Une démo a été ajoutée sur le github. Si tu as des questions, n'hésite pas.
cloudclip
cloudclip
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 08/01/2013

World Map Warp Empty Re: World Map Warp

le Mar 14 Oct 2014 - 14:05
Bonjour j'ai teste et c'est genial seul Pb j aurai voulu savoir si c'est possible de mettre plusieurs carte

exemple j'ai la carte du monde super mes je voudrai aussi kan on rentre dans une ville que sa soi la carte qui s afiche et non le monde et kan je sort de la ville que sa affiche le monde et non la ville merci
cloudclip
cloudclip
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 08/01/2013

World Map Warp Empty Re: World Map Warp

le Mar 14 Oct 2014 - 17:54
je voudrai desactiver les teleportation comme faire
croknoks
croknoks
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 09/03/2013

World Map Warp Empty Re: World Map Warp

le Ven 24 Oct 2014 - 2:38
Bonjour,
Malheureusement, ce script n'est pas prévu pour faire s'afficher plusieurs cartes différentes de ce type.
L'activation des téléportations pour tous les lieux se fait via l'appel à la méthode :
$game_wmw.teleport_for_all([true|false])

Mais, après avoir vu un système plus avancé dans Tales Of Graces, je compte m'y remettre sous peu et améliorer grandement le système.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum