查看: 1944|回复: 2

[已经过期] 如何稍微修改这个选择角色的脚本

[复制链接]
梦石
0
星屑
55
在线时间
7 小时
注册时间
2015-8-14
回帖
3
发表于 2015-8-17 19:47:49 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
原脚本网址: http://www.atelier-rgss.com/RGSS/Menu/VX_Menu07.html

[pre lang="ruby"]#==============================================================================
# MOG VX - Character Select V1.0
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Scene de seleção de personagens.
#==============================================================================
# 1 - Crie uma pasta com o nome MENUS. (GRAPHICS/MENUS)
# 2 - Deverão conter as seguintes imagens nesta pasta.
#
# Background
# Char_Layout01
# Char_Layout02
# Char_Status_Layout
#
# 3 - Será necessário ter o arquivo Number_Char.png na pasta (GRAPHICS/SYSTEM)
# 4 - Além destes arquivos você deverá ter as imagens dos personagens.
# Você deverá nomear as imagens da seguinte forma.
#
# Nome_do_personagem + _picture
#
# Exemplo:
#
# Ralph_picture.png
#
# Grave a imagem na pasta (GRAPHICS/MENUS)
#
# 5 - Para chamar o script use o seguinte comando.
#
# $scene = Scene_Character_Select.new
#
#==============================================================================
# ** Window_Base
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)     
  #--------------------------------------------------------------------------
  # X - Posição na horizontal
  # Y - Posição na vertical
  # VALUE - Valor Numérico
  # FILE_NAME - Nome do arquivo
  # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita  
  # SPACE - Espaço entre os números.
  # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
  # FRAME_INDEX - Definição do quadro a ser utilizado.
  #--------------------------------------------------------------------------  
  def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)     
     number_image = Cache.system(file_name)
     frame_max = 1 if frame_max < 1
     frame_index = frame_max -1 if frame_index > frame_max -1
     align = 2 if align > 2
     cw = number_image.width / 10
     ch = number_image.height / frame_max
     h = ch * frame_index
     number = value.abs.to_s.split(//)
     case align
        when 0
           plus_x = (-cw + space) * number.size
        when 1
           plus_x = (-cw + space) * number.size
           plus_x /= 2
        when 2  
           plus_x = 0
     end
     for r in 0..number.size - 1      
         number_abs = number[r].to_i
         number_rect = Rect.new(cw * number_abs, h, cw, ch)
         self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)        
     end      
   end
  #--------------------------------------------------------------------------
  # draw_char_window_status  
  #--------------------------------------------------------------------------  
  def draw_char_window_status(x,y)
    image = Cache.menu("Char_Status_Layout")   
    cw = image.width  
    ch = image.height
    src_rect = Rect.new(0, 0, cw, ch)   
    self.contents.blt(x , y , image, src_rect)     
  end     
end  
#==============================================================================
# ** Window_Character_Status
#==============================================================================
class Window_Character_Status < Window_Base
  attr_accessor :index
  #--------------------------------------------------------------------------
  # * initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 0, 400, 130)
    self.opacity = 0
    actor_id = []
    @index = actor
    for i in 1...$data_actors.size
      actor_id.push($game_actors)
    end
    @actor = actor_id[actor -1]
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.bold = true
    self.contents.font.italic = true
    draw_char_window_status(0, 6)   
    draw_actor_face(@actor, 0, 0)
    draw_actor_name(@actor, 140, -5)
    draw_actor_class(@actor, 60, 70)   
    draw_picture_number(155,20,@actor.maxhp, "Number_char",1)   
    draw_picture_number(145,48,@actor.maxmp, "Number_char",1)   
    draw_picture_number(228,28,@actor.atk, "Number_char",1)   
    draw_picture_number(297,28,@actor.def, "Number_char",1)  
    draw_picture_number(207,68,@actor.spi, "Number_char",1)  
    draw_picture_number(277,68,@actor.agi, "Number_char",1)  
  end
end

#==============================================================================
# ** Cache
#==============================================================================
module Cache
  #--------------------------------------------------------------------------
  # Menu
  #--------------------------------------------------------------------------  
  def self.menu(filename)
    load_bitmap("Graphics/Menus/", filename)
  end  
end  
#==============================================================================
# ** Scene Character Select
#==============================================================================
class Scene_Character_Select < Scene_Base
  #--------------------------------------------------------------------------
  # * initialize
  #--------------------------------------------------------------------------
  def initialize
      @char_index = 1
      @char_max = $data_actors.size - 1
      @pw_x = 300
      @aw_x = 200     
      @nw_x = 100         
  end
  #--------------------------------------------------------------------------
  # * Start
  #--------------------------------------------------------------------------
  def start
    super
    create_layout
    create_window_status
    create_char_image
    reset_position(0)      
  end
  #--------------------------------------------------------------------------
  # * create_background
  #--------------------------------------------------------------------------   
  def create_layout
      @background = Plane.new  
      @background.bitmap = Cache.menu("Background")
      @background.z = 0
      @layout_01 = Sprite.new  
      @layout_01.bitmap = Cache.menu("Char_Layout01")
      @layout_01.z = 10      
      @layout_02 = Sprite.new  
      @layout_02.bitmap = Cache.menu("Char_Layout02")
      @layout_02.blend_type = 1
      @layout_02.z = 1  
  end  
  #--------------------------------------------------------------------------
  # * create_window_status
  #--------------------------------------------------------------------------  
  def create_window_status
    @window_status = []
    for i in 1...$data_actors.size
        @window_status = Window_Character_Status.new(i)
        @window_status.z = 7
    end
        check_active_window
  end  
  #--------------------------------------------------------------------------
  # * create_window_status
  #--------------------------------------------------------------------------  
  def create_char_image
   
      @actor_picture = []
      actor_id = []
      for i in 1...$data_actors.size
          actor_id.push($game_actors)
          actor = actor_id[i - 1]
          @actor_picture = Sprite.new
          @actor_picture.bitmap = Cache.menu(actor.name + "_Picture")
      end   
      check_active_picture
  end
  #--------------------------------------------------------------------------
  # * check_active_window
  #--------------------------------------------------------------------------   
  def check_active_window
     for i in 1...$data_actors.size
        @pw = @char_index - 1
        @pw = 1 if @pw > @char_max
        @pw_y = 32
        @pw = @char_max if @pw < 1
        @aw = @char_index
        @aw_y = 160
        @nw = @char_index + 1
        @nw = 1 if @nw > @char_max
        @nw = @char_max if @nw < 1
        @nw_y = 288
        case @window_status.index
            when @pw,@aw,@nw
                 @window_status.visible = true
            else
                 @window_status.visible = false
        end
      end  
  end   
  #--------------------------------------------------------------------------
  # * check_active_picture  
  #--------------------------------------------------------------------------   
  def check_active_picture  
      for i in 1...$data_actors.size     
        case @window_status.index
            when @pw,@aw,@nw
                 @actor_picture.visible = true
                 @actor_picture[@pw].z = 4
                 @actor_picture[@aw].z = 6   
                 @actor_picture[@nw].z = 4      
                 @actor_picture[@pw].opacity = 120
                 @actor_picture[@aw].opacity = 255
                 @actor_picture[@nw].opacity = 120            
            else
                 @actor_picture.visible = false
        end     
      end
  end      
  #--------------------------------------------------------------------------
  # * pre_terminate
  #--------------------------------------------------------------------------
  def pre_terminate
    super
    RPG::BGM.fade(2500)
    Graphics.fadeout(60)
    Graphics.wait(40)
    RPG::BGM.stop
  end  
  #--------------------------------------------------------------------------
  # * terminate
  #--------------------------------------------------------------------------
  def terminate
    super
    for i in 1...$data_actors.size
        @window_status.dispose
        @actor_picture.bitmap.dispose
        @actor_picture.dispose        
    end   
    @background.bitmap.dispose
    @background.dispose
    @layout_01.bitmap.dispose   
    @layout_01.dispose
    @layout_02.bitmap.dispose   
    @layout_02.dispose   
  end
  #--------------------------------------------------------------------------
  # * update
  #--------------------------------------------------------------------------
  def update
    super
    @background.ox += 1
    update_select
    update_slide_window
    update_slide_image
  end
  #--------------------------------------------------------------------------
  # * update_slide_window
  #--------------------------------------------------------------------------  
  def update_slide_window
      @window_status[@aw].x += 1 if @window_status[@aw].x < 0
      @window_status[@nw].x -= 2 if @window_status[@nw].x > -30
      @window_status[@pw].x -= 2 if @window_status[@pw].x > -30
      slide_window_y(@pw,@pw_y)
      slide_window_y(@aw,@aw_y)
      slide_window_y(@nw,@nw_y)
  end
  #--------------------------------------------------------------------------
  # * update_slide_image   
  #--------------------------------------------------------------------------  
  def update_slide_image   
      slide_picture_x(@pw,@pw_x,15)
      slide_picture_x(@aw,@aw_x,5)
      slide_picture_x(@nw,@nw_x,15)
  end
  #--------------------------------------------------------------------------
  # * slide_picture_x
  #--------------------------------------------------------------------------   
  def slide_picture_x(i,x_pos,speed)
      if @actor_picture.x < x_pos
         @actor_picture.x += speed
         @actor_picture.x = x_pos if @actor_picture.x > x_pos
      end  
      if @actor_picture.x > x_pos
         @actor_picture.x -= speed
         @actor_picture.x = x_pos if @actor_picture.x < x_pos        
       end            
  end     
  #--------------------------------------------------------------------------
  # * slide_window_y
  #--------------------------------------------------------------------------   
  def slide_window_y(i,y_pos)
      if @window_status.y < y_pos
         @window_status.y += 15
         @window_status.y = y_pos if @window_status.y > y_pos
      end  
      if @window_status.y > y_pos
         @window_status.y -= 15
         @window_status.y = y_pos if @window_status.y < y_pos        
       end            
  end   
  #--------------------------------------------------------------------------
  # * reset_position
  #--------------------------------------------------------------------------     
  def reset_position(diretion)
      check_active_window
      check_active_picture
      case diretion
         when 0
            @window_status[@pw].y = -64
            @actor_picture[@pw].x = 100
         when 1  
            @window_status[@nw].y = 440
            @actor_picture[@nw].x = 400
      end        
  end  
  #--------------------------------------------------------------------------
  # * update_select
  #--------------------------------------------------------------------------
  def update_select
     if Input.trigger?(Input::DOWN) or Input.trigger?(Input::LEFT)
        Sound.play_cursor
        @char_index += 1
        @char_index = 1 if @char_index > @char_max
        if @char_max < 3         
           reset_position(0)
        else  
           reset_position(1)
        end   
     elsif Input.trigger?(Input::UP) or Input.trigger?(Input::RIGHT)
        Sound.play_cursor
        @char_index -= 1
        @char_index = @char_max if @char_index < 1
        reset_position(0)
     elsif Input.trigger?(Input::C)     
        Sound.play_decision
        $game_party.add_actor(@char_index)
        $scene = Scene_Map.new
     end
  end
end  

$mog_rgssvx_character_select = true[/pre]

这是原脚本的选择图画
5424.jpg

而这个脚本是从$data.actor.size有多少就能选多少人物
假设有6个人物设置 他就会让你从6个中挑一个当主角
886.jpg

那如果今天我想设置 从3号~5号 三个人物中挑一个当主角
该怎么设定啊 我老是失败
请各位大神救救{:2_270:}
梦石
0
星屑
898
在线时间
421 小时
注册时间
2015-7-5
回帖
126
发表于 2015-8-17 22:37:46 | 显示全部楼层
把97行for i in 1...$data_actors.size 改成 for i in 3...6大概就可以了。
回复

使用道具 举报

梦石
0
星屑
55
在线时间
7 小时
注册时间
2015-8-14
回帖
3
 楼主| 发表于 2015-8-18 11:21:09 | 显示全部楼层
回覆上面的大大:

改完之后出现了这个问题

77788.jpg

这是什么意思呢 ( 我的角色头像都有放

麻烦大大了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部