Partagez
Aller en bas
glumo
glumo
Membre

Nombre de messages : 14
Localisation : Maison de retraite
Distinction : aucune
Date d'inscription : 05/09/2009

[résolu] Souci Neo-Face System Advance {Version 3.1} + Name Box Empty [résolu] Souci Neo-Face System Advance {Version 3.1} + Name Box

le Ven 11 Sep 2009 - 19:13
Bonjour,

J'ai utilisé le script "Neo-Face System Advance {Version 3.1} + Name Box" que voici:

Code:
#==============================================================================
# ? [VX] ? Neo-Face System Advance {Version 3.1} + Name Box ?
#------------------------------------------------------------------------------
# ? by Woratana [woratana@hotmail.com]
# ? Thaiware RPG Maker Community
# ? Special Thanks: Mako, Rabu, Yatzumo
#------------------------------------------------------------------------------
# Released on: 20/02/2008
#
# +[Features in NFS Advance (a.k.a. Neo Face System 3)]+
#
# ? For Both Face Systems
# ? 2 Show Face Effects! You can use them together~
# ? [New!] Move Effect << Move Face from outside the screen to inside
# ? Fade Effect << Fade in Face Picture
#
# ? Easier to change face side! Just type \side[side you want] in message box
# (This change will change side for all the next messages until you change face side again)
# (You can still change by call script: $game_message.side = side you want)
#----------------------------------------------------------------------
# ? FACE SIDE [a.k.a. Face Mode :)]
# ? \side[-1] << Switch to NORMAL Face System show in RIGHT SIDE
# ? \side[0] << Switch to NORMAL Face System show in LEFT SIDE
# ? \side[1] << Switch to NEO-FACE System show in LEFT SIDE
# ? \side[2] << Switch to NEO-FACE System show in RIGHT SIDE
#---------------------------------------------------------------------
#
# ? For Neo Face System
# ? Auto arrange Face Position (You can use any size of face file!)
# ? Choose to use 1 or 8 face(s) per file
#
# ? For Normal Face System
# ? Show face in right side!
#
# ? For Name Box
# ? Edit your name box easily~
# ? Change color of name text in game by call script
# $game_message.color = [Red,Green,Blue]
# ? Add text after name, e.g. add ":" after name >>result>> "name:"
# ? Move name box to right side when showing face in right side
# ? Change name text's font/size, and can  make it bold and/or has outline
#
# ? Call Name box by type this in message box:
# \na[name you want] << e.g. \na[Worale]
#
# ? If you don't want to type same name every time, use this way:
# \nn[name you want] << e.g. \nn[Worale]
# This will show the name box repeatly unless you have \na[name] in that window,
# and it will show until you type \nn[] to clear the repeat name.
#
#-----------------------------------------------------------------------------
#==============================================================================

class Window_Base
  #---------------------------------
  # [START] SETUP script PART
  #-------------------------------
 
  #------------------------------------------------
  # ** NEO-FACE / NORMAL FACE SYSTEM SETUP
  #----------------------------------------------
  DEFAULT_SIDE = 0 # Default Face Side when game start~
 
  FACE_X_PLUS = 0 # Move Face Horizontally (Left: -, Right: +)
  FACE_Y_PLUS = -112 # Move Face Vertically (Up: -, Down: +)
  TEXT_X_PLUS = 0 # Move Text Horizontally
  CHOICE_INPUT_X_PLUS = 10
  # Move Choices Text and Input Number Text Horizontally
 
  MOVE_TEXT = false#true # (true/false)
  # Move text to right side of face, when showing face in left side.
 
  #-------------------------------
  # ** NEO FACE SYSTEM
  #----------------------------
  EightFaces_File = false
  # For NeoFace System: Use 8 Faces per file (or) 1 Face per file (true/false)
 
  #-------------------------------------
  # **SHOW FACE EFFECT
  # * For both Face Systems *
  #----------------------------------
  FADE_EFFECT = false # Turn on/off fade effect (true/false)
  FADE_SPEED = 20 # Speed up face's fade effect by increase this number
 
  MOVE_EFFECT = false # Turn on/off "move in" effect (true/false)
  MOVE_SPEED = 10 # Speed up face's "move in" effect by increase this number
 
  #------------------------------------
  # ** NAME BOX / NAME TEXT SETUP
  #----------------------------------
  NAMEBOX_SKIN = "Window" # Windowskin of Name Box (In folder 'Graphics/System')
  NAMEBOX_OPACITY = 255 # Name Box Opacity (Lowest 0 - 255 Highest)
  NAMEBOX_BACK_OPACITY = 180 # Name Box Background Opacity
 
  NAMEBOX_X_PLUS = 115#20 # Move Name Box & Text Horizontally (both faces system)
  NAMEBOX_X_PLUS_NF = 140 # Addtional Name Box X only for NeoFace Name Box
  # When using NeoFace, X Plus will calculate by: NAMEBOX_X_PLUS + NAMEBOX_X_PLUS_NF
  NAMEBOX_Y_PLUS = 0 # Move Name Box & Text Vertically
 
  NAMEBOX_TEXT_LENGTH_PER_LETTER = 10 # Length of Text Per Letter (in pixel)
  NAMEBOX_TEXT_FONT = "UmePlus Gothic" # Name Text Font's Name
  NAMEBOX_TEXT_SIZE = 22 # Name Text Font's Size
  NAMEBOX_TEXT_HEIGHT_PLUS = 2 # Increase Name Text Height (For Big Size Text)

  NAMEBOX_TEXT_BOLD = false # Make Text in Name Box Bold
  NAMEBOX_TEXT_OUTLINE = false # Make Black Outline around Text (Good with Opacity = 0)
  NAMEBOX_TEXT_DEFAULT_COLOR = [173,216,230]#[255,255,255] # [Red,Green,Blue]: Name Text Color (RGB)
  # You can easily find color code for RGB (RedGreenBlue) color in Google :)
  # You are allow to change color in game by call script:
  # $game_message.color = [Red,Green,Blue]
 
  NAMEBOX_TEXT_AFTER_NAME = ":" # Add Text after Name, leave "" to disable.
 
  NAMEBOX_BOX_WIDTH_PLUS = 6 # Increase Name Box Width
  NAMEBOX_BOX_HEIGHT_PLUS = 7 # Increase Name Box Height
 
  MOVE_NAMEBOX = false
  # (true/false) Move Text Box to Right Side if showing Face in Right side.
 
  #---------------------------------
  # [END] SETUP script PART
  #-------------------------------
end
  $worale = {} if $worale == nil
  $worale["NeoFace"] = true
#==============================================================================
# Window_Message
#------------------------------------------------------------------------------
#==============================================================================
class Window_Message
    alias msg_ini initialize
 
    #------------------------------------
    # EDITED FROM ORIGINAL METHODS
    #----------------------------------
    def initialize
      msg_ini
      @face = Sprite.new
      @face.z = self.z + 5
      @nametxt = Sprite.new
      @nametxt.z = self.z + 15
      @namebox = nil
      @ori_x = 0
      @name_text = nil
    end
 
    alias msg_conspecha convert_special_characters
    def convert_special_characters
    clear_namebox if @namebox != nil
    msg_conspecha
 
    # CHECK FOR CALL NAME BOX/ CALL REPEAT NAME BOX/ CHANGE SIDE
    @text.scan(/\\na\[(.*?)\]/)
    if $1.to_s != ""
      @name_text = $1.to_s
      @text.sub!(/\\na\[(.*?)\]/) {}
    end
 
    @text.gsub!(/\\nn\[(.*?)\]/) do
      $game_message._name = $1.to_s
      a = ""
    end
 
    @text.scan(/\\side\[([-,0-9]+)\]/)
    if $1.to_s != ""
      $game_message.side = $1.to_i
      @text.sub!(/\\side\[([-,0-9]+)\]/) {}
    end
 
    @name_text = $game_message._name if @name_text == nil and $game_message._name != ""
    end
 
    def new_page
    contents.clear
    if @face.bitmap != nil
    @face.bitmap.dispose
    end
    if $game_message.face_name.empty?
    @contents_x = TEXT_X_PLUS
    else
      name = $game_message.face_name
      index = $game_message.face_index
      # CALL DRAW FACE METHOD
      draw_face2(name, self.x, self.y, index)
      # CHECK FOR MOVE EFFECT
      if MOVE_EFFECT == true
        @ori_x = @face.x
        if $game_message.side == 0 or $game_message.side == 1
          @face.x = 0 - @face.width
        else
          @face.x = 416 + @face.width
        end
      end
      @contents_x = get_x_face
    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 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_line
    if $game_message.face_name.empty? or MOVE_TEXT == false
      @contents_x = TEXT_X_PLUS
    else
      @contents_x = get_x_face
    end
    @contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 0
    @contents_y += WLH
    @line_count += 1
    @line_show_fast = false
  end
 
  def update
    super
    if @name_text != nil
      draw_name(@name_text,self.x,self.y)
    end
    update_gold_window
    update_number_input_window
    update_back_sprite
    update_show_fast
    if @face.bitmap != nil
      # UPDATE FADE IN EFFECT
      if @face.opacity < 255
        @face.opacity += FADE_SPEED
      end
      # UPDATE MOVE IN EFFECT
      if MOVE_EFFECT == true and @ori_x != @face.x
        if (@ori_x > @face.x and @face.x + MOVE_SPEED < @ori_x) or (@ori_x < @face.x and @face.x - MOVE_SPEED > @ori_x)
          @face.x += MOVE_SPEED if @ori_x > @face.x
          @face.x -= MOVE_SPEED if @ori_x < @face.x
        else
          @face.x = @ori_x
        end
      end
    end
    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
        if @face.bitmap != nil
        @face.bitmap.dispose
        end
        clear_namebox if @namebox != nil
        $game_message.visible = @closing
      end
    end
  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? or MOVE_TEXT == false
      @number_input_window.x = x - 23
    else
      case $game_message.side
      when 0
        @number_input_window.x = (x + 112) - 23
      when 1
        @number_input_window.x = (x + text_x) - 23
      when 2
        @number_input_window.x = x - 23
      when -1
        @number_input_window.x = x - 23
      end
    end
    @number_input_window.x += CHOICE_INPUT_X_PLUS
    @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
      if $game_message.face_name.empty?
      x = TEXT_X_PLUS
      else
      x = get_x_face
      end
      y = ($game_message.choice_start + @index) * WLH
      # CHANGE WIDTH OF CURSOR FOR CHOICE SELECT
      if $game_message.face_name.empty? or MOVE_TEXT == false
        facesize = x
      else
        facesize = get_x_face
        facesize += @face.width if $game_message.side == 2
        facesize += @face.width + 16 if $game_message.side == -1
      end
      self.cursor_rect.set(x, y, contents.width - facesize, WLH)
    else
      self.cursor_rect.empty
    end
  end
 
  #--------------------------------
  # ADDITIONAL METHODS
  #------------------------------
  # RETURN Text X-Coordinate, DEPENDS ON FACE SIDE
  def get_x_face
  if MOVE_TEXT == true
    case $game_message.side
    when 0
      return 112 + TEXT_X_PLUS
    when 1
      return text_x
    when 2
      return TEXT_X_PLUS
    else
      return TEXT_X_PLUS
    end
  else
    return TEXT_X_PLUS
  end
  end

  # RETURN Text X-Coordinate for Face Side = 1
  def text_x
    return @face.width + TEXT_X_PLUS
  end
 
  # Clear Name Box & Name Text
  def clear_namebox
    @nametxt.bitmap.dispose
    @namebox.dispose
    @namebox = nil
    @name_text = nil
  end
 
  #--------------------------------------
  # DRAW FACE [Both Systems] METHOD
  #------------------------------------
  def draw_face2(face_name, x, y, index = 0)
  if $game_message.side == 0 or $game_message.side == -1 or EightFaces_File == true
    # USE 8 FACES PER FILE
    bitmap = Cache.face(face_name)
    rect = Rect.new(0,0,0,0)
    rect.width = (bitmap.width / 4)
    rect.height = (bitmap.height / 2)
    rect.x = index % 4 * rect.width
    rect.y = index / 4 * rect.height
    @face.bitmap = Bitmap.new(rect.width,rect.height)
    @face.bitmap.blt(0,0,bitmap,rect)
    bitmap.dispose
  else
    # USE 1 FACES PER FILE
    @face.bitmap = Cache.face(face_name)
  end
  # SET X/Y OF FACE DEPENDS ON FACE SIDE
  if $game_message.side == 1
    @face.mirror = false
    @face.x = x + 6
    @face.y = y - (@face.height - 123)
  elsif $game_message.side == 2
    @face.mirror = true
    @face.x = x + (538 - @face.width)
    @face.y = y - (@face.height - 123)
  elsif $game_message.side == 0
    @face.mirror = false
    @face.x = x + 16
    @face.y = y + 16
  elsif $game_message.side == -1
    @face.mirror = true
    @face.x = self.contents.width - @face.width + 16
    @face.y = y + 16
  end
    @face.x += FACE_X_PLUS
    @face.y += FACE_Y_PLUS
    @face.opacity = 0 if FADE_EFFECT == true
  end
 
  #--------------------------------------
  # DRAW NAME BOX METHOD
  #-----------------------------------
  def draw_name(name,x,y)
    name = name + NAMEBOX_TEXT_AFTER_NAME
    namesize = calculate_name_size(name)
    @nametxt.bitmap = Bitmap.new(16 + (namesize * NAMEBOX_TEXT_LENGTH_PER_LETTER), 24 + NAMEBOX_TEXT_HEIGHT_PLUS)
    @nametxt.x = x + 8 + NAMEBOX_X_PLUS
    @nametxt.x += NAMEBOX_X_PLUS_NF if $game_message.side == 1 or $game_message.side == 2
    @nametxt.y = y - 20 + NAMEBOX_Y_PLUS
    @nametxt.x = 544 - @nametxt.x - @nametxt.width if MOVE_NAMEBOX == true and ($game_message.side == 2 or $game_message.side == -1)
    @namebox = Window.new
    @namebox.windowskin = Cache.system(NAMEBOX_SKIN)
    @namebox.z = self.z + 10
    @namebox.opacity = NAMEBOX_OPACITY
    @namebox.back_opacity = NAMEBOX_BACK_OPACITY
    @namebox.openness = 255
    @namebox.x = @nametxt.x - NAMEBOX_BOX_WIDTH_PLUS
    @namebox.y = @nametxt.y - NAMEBOX_BOX_HEIGHT_PLUS
    @namebox.width = @nametxt.bitmap.width + (NAMEBOX_BOX_WIDTH_PLUS * 2)
    @namebox.height = @nametxt.bitmap.height + (NAMEBOX_BOX_HEIGHT_PLUS * 2)
    @nametxt.bitmap.font.name = NAMEBOX_TEXT_FONT
    @nametxt.bitmap.font.size = NAMEBOX_TEXT_SIZE
    @nametxt.bitmap.font.bold = NAMEBOX_TEXT_BOLD
    if NAMEBOX_TEXT_OUTLINE == true
      # MAKE TEXT OUTLINE
      @nametxt.bitmap.font.color = Color.new(0,0,0)
      @nametxt.bitmap.draw_text(0,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
      @nametxt.bitmap.draw_text(0,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
      @nametxt.bitmap.draw_text(2,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
      @nametxt.bitmap.draw_text(2,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
    end
    @nametxt.bitmap.font.color = Color.new($game_message.color[0],$game_message.color[1],$game_message.color[2])
    @nametxt.bitmap.draw_text(1,1,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
    @name_text = nil
  end
 
  # CALCULATE REAL TEXT LENGTH (for Other Languages, e.g. Japanese)
  def calculate_name_size(name = "")
    name = name.scan(/./)
    return name.size
  end
 
end # Window_Message

#==============================================================================
# Game_Message: + store variables
#------------------------------------------------------------------------------
#==============================================================================
class Game_Message
  attr_accessor :side, :color, :_name
  alias wor_neoface_old_ini initialize
  def initialize
    @side = Window_Base::DEFAULT_SIDE
    @_name = ""
    @color = Window_Base::NAMEBOX_TEXT_DEFAULT_COLOR
    wor_neoface_old_ini
  end
end

#==============================================================================
# END Neo-Face System
# by Woratana (woratana@hotmail)
#==============================================================================

Mon but étant simplement d'ajouter une Name Box sur mes Boîtes de Dialogue. Aussi j'ai désactivé ce qui me semblait inutile (animation, etc.).

Cependant, lorsque je lance le jeu et que j'interagis avec l'évènement que j'ai modifié (en ajoutant, comme le prévoit le script, /na suivi du nom à afficher), j'obtiens un message d'erreur:

"script '( insert here )' line 435: NoMethodError occured.

undefined method `[]' or nil:NilClass"


A noter également que, mis à part ce bug sur cet évènement, les images censées apparaître sur les autres évènements (et sur lesquels je n'ai pas mis de /na[nom du perso]) n'apparaissent pas. Ou alors, c'est la ligne complète du faceset qui apparaît (soit quatre images au lieu d'une.


Edit/ Même en activant les effets d'animation, le bug est toujours là.



Edit²/ A défaut d'une correction de ce script pour le faire tourner correctement, je suis preneur si vous en avez un seulement pour afficher une NameBox (puisque c'est juste pour cela que j'ai voulu mettre ce script).


Edit^3
...finalement j'ai réussi à résoudre mon problème...
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 28
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

[résolu] Souci Neo-Face System Advance {Version 3.1} + Name Box Empty Re: [résolu] Souci Neo-Face System Advance {Version 3.1} + Name Box

le Dim 1 Aoû 2010 - 22:49
résolu => déplacé
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum