[RMVX]Neo Message System

Section pour les scripts RPG Maker VX !

[RMVX]Neo Message System

Message par Martial » 16 Fév 2008, 15:55

Salut ! :))

Le Neo Message System est un script RPG Maker VX qui ajoute des fonctionnalités aux messages. Ainsi, il vous sera possible d'afficher le nom de la carte ou bien le prix d'un objet en quelques touches.

Créer un nouveau script au-dessus de Main, nommer le comme bon vous semble et coller-y ceci:

Code : Tout sélectionner
#==============================================================================
# [VX] NMS - Neo Message System by Woratana
#------------------------------------------------------------------------------
# Version: 1.0
# Released on: 03/02/2008
# by Woratana [woratana@hotmail.com]
#
# Special Thanks: AMS R4 - Dubealex
#
=begin
+[Features Version 1.0]+
\map - Show Map Name

\nc[actor id from database] - Show Class of Actor
\np[1 to 4 (member order in party)] - Show Name of Actor who is in that order
\nm[monster] - Show Name of Monster
\nt[troop id] - Show Name of Troop
\ni[item id] - Show Name of Item
\price[item id] - Show Price of Item
\nw[weapon id] - Show Name of Weapon
\na[armor -id] - Show Name of Armor

\font[font name] - Change Font to "font name" (case sensitive font's name)
\size[font size] - Change Font Size to "font size" (number)
\ref = Reset font to Default Font Name
\res = Reset Font Size to Default Font Size
=end
#==============================================================================

module NMS
  #===========================
  # SETUP NMS FEATURES HERE!
  #=========================
  FONT_NAME = "Arial" # Default Font Name
  FONT_SIZE = 20 # Default Font Size
end

class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ? ??
  #--------------------------------------------------------------------------
  MAX_LINE = 4                            # ????
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def initialize
    super(0, 288, 544, 128)
    self.z = 200
    self.active = false
    self.index = -1
    self.openness = 0
    @opening = false            # ??????????????
    @closing = false            # ??????????????
    @text = nil                 # ??????????
    @contents_x = 0             # ????????? X ??
    @contents_y = 0             # ????????? Y ??
    @line_count = 0             # ???????????
    @wait_count = 0             # ????????
    @background = 0             # ?????
    @position = 2               # ????
    @show_fast = false          # ??????
    @line_show_fast = false     # ?????????
    @pause_skip = false         # ?????????
    # NMS
    $game_message.nms_fontname = NMS::FONT_NAME if $game_message.nms_fontname == nil
    $game_message.nms_fontsize = NMS::FONT_SIZE if $game_message.nms_fontsize == nil
    @nms = $game_message
    create_gold_window
    create_number_input_window
    create_back_sprite
  end
  #--------------------------------------------------------------------------
  # ? ??
  #--------------------------------------------------------------------------
  def dispose
    super
    dispose_gold_window
    dispose_number_input_window
    dispose_back_sprite
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def update
    super
    update_gold_window
    update_number_input_window
    update_back_sprite
    update_show_fast
    unless @opening or @closing             # ???????????
      if @wait_count > 0                    # ????????
        @wait_count -= 1
      elsif self.pause                      # ???????
        input_pause
      elsif self.active                     # ??????
        input_choice
      elsif @number_input_window.visible    # ?????
        input_number
      elsif @text != nil                    # ????????
        update_message                        # ????????
      elsif continue?                       # ?????
        start_message                         # ????????
        open                                  # ????????
        $game_message.visible = true
      else                                  # ??????
        close                                 # ?????????
        $game_message.visible = @closing
      end
    end
  end
  #--------------------------------------------------------------------------
  # ? ???????????
  #--------------------------------------------------------------------------
  def create_gold_window
    @gold_window = Window_Gold.new(384, 0)
    @gold_window.openness = 0
  end
  #--------------------------------------------------------------------------
  # ? ????????????
  #--------------------------------------------------------------------------
  def create_number_input_window
    @number_input_window = Window_NumberInput.new
    @number_input_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def create_back_sprite
    @back_sprite = Sprite.new
    @back_sprite.bitmap = Cache.system("MessageBack")
    @back_sprite.visible = (@background == 1)
    @back_sprite.z = 190
  end
  #--------------------------------------------------------------------------
  # ? ???????????
  #--------------------------------------------------------------------------
  def dispose_gold_window
    @gold_window.dispose
  end
  #--------------------------------------------------------------------------
  # ? ????????????
  #--------------------------------------------------------------------------
  def dispose_number_input_window
    @number_input_window.dispose
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def dispose_back_sprite
    @back_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ? ???????????
  #--------------------------------------------------------------------------
  def update_gold_window
    @gold_window.update
  end
  #--------------------------------------------------------------------------
  # ? ????????????
  #--------------------------------------------------------------------------
  def update_number_input_window
    @number_input_window.update
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def update_back_sprite
    @back_sprite.visible = (@background == 1)
    @back_sprite.y = y - 16
    @back_sprite.opacity = openness
    @back_sprite.update
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def update_show_fast
    if self.pause or self.openness < 255
      @show_fast = false
    elsif Input.trigger?(Input::C) and @wait_count < 2
      @show_fast = true
    elsif not Input.press?(Input::C)
      @show_fast = false
    end
    if @show_fast and @wait_count > 0
      @wait_count -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ? ????????????????????
  #--------------------------------------------------------------------------
  def continue?
    return true if $game_message.num_input_variable_id > 0
    return false if $game_message.texts.empty?
    if self.openness > 0 and not $game_temp.in_battle
      return false if @background != $game_message.background
      return false if @position != $game_message.position
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def start_message
    @text = ""
    for i in 0...$game_message.texts.size
      @text += "  " if i >= $game_message.choice_start
      @text += $game_message.texts[i].clone + "\x00"
    end
    @item_max = $game_message.choice_max
    convert_special_characters
    reset_window
    new_page
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      name = $game_message.face_name
      index = $game_message.face_index
      draw_face(name, index, 0, 0)
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end
  #--------------------------------------------------------------------------
  # ? ????
  #--------------------------------------------------------------------------
  def new_line
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      @contents_x = 112
    end
    @contents_y += WLH
    @line_count += 1
    @line_show_fast = false
  end
  #--------------------------------------------------------------------------
  # Convert Special Character
  #--------------------------------------------------------------------------
  def convert_special_characters
    # Woratana's Map Name
    @text.gsub!(/\\[Mm]ap/) { nms_get_map_name }
    # Woratana's Actor Class Name
    @text.gsub!(/\\[Nn][Cc]\[([0-9]+)\]/i) { $data_classes[$data_actors[$1.to_i].class_id].name }
    # Woratana's Party Actor Name
    @text.gsub!(/\\[Nn][Pp]\[([0-9]+)\]/i) { $game_party.members[($1.to_i - 1)].name }
    # Woratana's Monster Name
    @text.gsub!(/\\[Nn][Mm]\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name }
    # Woratana's Troop Name
    @text.gsub!(/\\[Nn][Tt]\[([0-9]+)\]/i) { $data_troops[$1.to_i].name }
    # Woratana's Item Name
    @text.gsub!(/\\[Nn][Ii]\[([0-9]+)\]/i) { $data_items[$1.to_i].name }
    # Woratana's Item Price
    @text.gsub!(/\\[Pp]rice\[([0-9]+)\]/i) { $data_items[$1.to_i].price }
    # Woratana's Weapon Name
    @text.gsub!(/\\[Nn][Ww]\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name }
    # Woratana's Armor Name
    @text.gsub!(/\\[Nn][Aa]\[([0-9]+)\]/i) { $data_armors[$1.to_i].name }
   
    # Woratana's Font Name Change
    @text.gsub!(/\\[Ff]ont\[(.*?)\]/) do
     @nms.nms_fontname = $1.to_s
     @text.sub!(/\\[Ff]ont\[(.*?)\]/) { "" }
   end
    # Woratana's Font Size Change
    @text.gsub!(/\\[Ss]ize\[(.*?)\]/) do
     @nms.nms_fontsize = $1.to_i
     @text.sub!(/\\[Ss]ize\[(.*?)\]/) { "" }
   end
    # Woratana's Reset Font Size
    @text.gsub!(/\\[Rr]ef/) do
     @nms.nms_fontname = NMS::FONT_NAME
     @text.sub!(/\\[Rr]ef\[(.*?)\]/) { "" }
   end
    # Woratana's Reset Font Size
    @text.gsub!(/\\[Rr]es/) do
     @nms.nms_fontsize = NMS::FONT_SIZE
     @text.sub!(/\\[Rr]es\[(.*?)\]/) { "" }
   end
   
   
    @text.gsub!(/\\[Vv]\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
    @text.gsub!(/\\[Nn]\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
    @text.gsub!(/\\[Cc]\[([0-9]+)\]/i) { "\x01[#{$1}]" }
    @text.gsub!(/\\[Gg]/)              { "\x02" }
    @text.gsub!(/\\\./)             { "\x03" }
    @text.gsub!(/\\\|/)             { "\x04" }
    @text.gsub!(/\\!/)              { "\x05" }
    @text.gsub!(/\\>/)              { "\x06" }
    @text.gsub!(/\\</)              { "\x07" }
    @text.gsub!(/\\\^/)             { "\x08" }
    @text.gsub!(/\\\\/)             { "\\" }
  end
  #--------------------------------------------------------------------------
  # ? ??????????????
  #--------------------------------------------------------------------------
  def reset_window
    @background = $game_message.background
    @position = $game_message.position
    if @background == 0   # ???????
      self.opacity = 255
    else                  # ?????????????
      self.opacity = 0
    end
    case @position
    when 0  # ?
      self.y = 0
      @gold_window.y = 360
    when 1  # ?
      self.y = 144
      @gold_window.y = 0
    when 2  # ?
      self.y = 288
      @gold_window.y = 0
    end
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    @gold_window.close
    @number_input_window.active = false
    @number_input_window.visible = false
    $game_message.main_proc.call if $game_message.main_proc != nil
    $game_message.clear
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def update_message
    loop do
      c = @text.slice!(/./m)            # ???????
      case c
      when nil                          # ??????????
        finish_message                  # ????
        break
      when "\x00"                       # ??
        new_line
        if @line_count >= MAX_LINE      # ????????
          unless @text.empty?           # ??????????
            self.pause = true           # ????????
            break
          end
        end
      when "\x01"                       # \C[n]  (?????)
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"                       # \G  (?????)
        @gold_window.refresh
        @gold_window.open
      when "\x03"                       # \.  (???? 1/4 ?)
        @wait_count = 15
        break
      when "\x04"                       # \|  (???? 1 ?)
        @wait_count = 60
        break
      when "\x05"                       # \!  (????)
        self.pause = true
        break
      when "\x06"                       # \>  (???? ON)
        @line_show_fast = true
      when "\x07"                       # \<  (???? OFF)
        @line_show_fast = false
      when "\x08"                       # \^  (??????)
        @pause_skip = true
      else                              # ?????
        self.contents.font.name = @nms.nms_fontname
        self.contents.font.size = @nms.nms_fontsize
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
      end
      break unless @show_fast or @line_show_fast
    end
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def finish_message
    if $game_message.choice_max > 0
      start_choice
    elsif $game_message.num_input_variable_id > 0
      start_number_input
    elsif @pause_skip
      terminate_message
    else
      self.pause = true
    end
    @wait_count = 10
    @text = nil
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def start_choice
    self.active = true
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def start_number_input
    digits_max = $game_message.num_input_digits_max
    number = $game_variables[$game_message.num_input_variable_id]
    @number_input_window.digits_max = digits_max
    @number_input_window.number = number
    if $game_message.face_name.empty?
      @number_input_window.x = x
    else
      @number_input_window.x = x + 112
    end
    @number_input_window.y = y + @contents_y
    @number_input_window.active = true
    @number_input_window.visible = true
    @number_input_window.update
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def update_cursor
    if @index >= 0
      x = $game_message.face_name.empty? ? 0 : 112
      y = ($game_message.choice_start + @index) * WLH
      self.cursor_rect.set(x, y, contents.width - x, WLH)
    else
      self.cursor_rect.empty
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def input_pause
    if Input.trigger?(Input::B) or Input.trigger?(Input::C)
      self.pause = false
      if @text != nil and not @text.empty?
        new_page if @line_count >= MAX_LINE
      else
        terminate_message
      end
    end
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def input_choice
    if Input.trigger?(Input::B)
      if $game_message.choice_cancel_type > 0
        Sound.play_cancel
        $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
        terminate_message
      end
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      $game_message.choice_proc.call(self.index)
      terminate_message
    end
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def input_number
    if Input.trigger?(Input::C)
      Sound.play_decision
      $game_variables[$game_message.num_input_variable_id] =
        @number_input_window.number
      $game_map.need_refresh = true
      terminate_message
    end
  end
 
   def nms_get_map_name
    mapdata = load_data("Data/MapInfos.rvdata")
    map_id = $game_map.map_id
    return mapdata[map_id].name
  end
 
end # Class End

#==============================================================================
# Game_Message
#------------------------------------------------------------------------------
# Store NMS Variables
#==============================================================================
class Game_Message
  attr_accessor :nms_fontname, :nms_fontsize
end



Instructions:

Voici maintenant, les possibilités qu'offre le scrpit:


\map - Montre le nom de la carte

\nc[ID du Héros venant de la base de donnée] - Montre la classe du héros dont l'ID a été choisi
\np[1 à 4 (ordre des membre dans l'équipe)] - Montre le nom du Héros qui correspond au nombre choisi (dans l'ordre). Attention, si vous mettez 2 alors qu'il n'y a qu'un personnage dans l'équipe, le script vous affichera une erreur.
\nm[monstre] - Montre le nom du monstre
\nt[ID du groupe de monstre] - Montre le nom du groupe de monstre choisi
\ni[ID d'un objet] - Montre le nom d'un objet
\price[ID d'un objet] - Montre le prix de l'objet
\nw[ID d'une arme] - Montre le nom de l'arme
\na[ID d'une armure] - Montre le nom de l'armure

\font[nom de la Police] - Change la Police par le "nom de la Police" que vous avez choisi (sensible à la case (majuscule et minuscule))
\size[taille de la Police] - Change la taille de la Police par la "taille de la Police" que vous avez choisi (un nombre)
\ref = Remet le nom de la Police par défaut
\res = Remet la taille de la Police par défaut


Démo:

Neo Message System.rar
Démo du Neo Message System !
(347.27 Kio) Téléchargé 377 fois
L'important n'est pas de connaître mais de savoir trouver !
La gentillesse ou la franchise ? Que choisir ?
Vive les otakus !!
Retourner sur le site
Avatar de l’utilisateur
Martial
Administrateur
Administrateur
 
Message(s) : 2520
Inscription : 10 Nov 2006, 23:41
Localisation : Rambouillet
Meilleurs scores: 12

Re: [RMVX]Neo Message System

Message par Amathlog » 23 Août 2008, 17:57

C'est sympa !
Mais il manque une fonctionnalité importante :
On pas pas afficher la valeur d'une variable -_-'
Et moi c'est ce qu'il me faudrait !
Avatar de l’utilisateur
Amathlog
Modérateur
Modérateur
 
Message(s) : 1510
Inscription : 14 Jan 2007, 19:53
Meilleurs scores: 2


Retour vers Scripts (RGSS2)

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron