O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

M+ CharacterCreation

Iniciado por M3T, 25/06/2014 às 17:56

25/06/2014 às 17:56 Última edição: 25/06/2014 às 18:19 por M3T

CharacterCreation
v1.0


Compativel com: RMVXAce
Compatibilidade: boa
Facilidade de uso: fácil
Lag gerado: nulo



Introdução e Características
Este script faz com que, na tela de título, ao selecionar "Novo Jogo", apareça uma de criação de personagem. Você pode definir o sexo, a classe, o gráfico e o nome do personagem no momento.
A compatibilidade só não é perfeita pois é provável que o script não funcione bem junto com script de tela de título muito personalizados. Mas, para os que não fizerem modificações muito grandes, a compatibilidade aumenta.
OBS: As medidas das janelas estão boas, não recomendo que altere.



Instruções de uso
- Crie um novo script na seção "Scripts Adicionais"
- Configure os gráficos, o personagem usado, as classes e as switches para masculino/feminino
- Configure os termos (se necessário)



Multimídia
[hs width=216 height=164]http://i.imgur.com/2pMd0G7.png[/hs] [hs width=216 height=164]http://i.imgur.com/EoVdPj7.png[/hs]



Script
#==============================================================================
# ** M+ CharacterCreation
# * Por: M3T
# * 25/06/2014
# * 1.0
#------------------------------------------------------------------------------
#  Este script cria uma janela para criação de personagens na tela de título.
#==============================================================================
module MPlus
  # Comprimento da janela de escolhas
  CCS_width = 170
  # Largura da janela de escolhas
  CCS_height = 200
  # Comprimento da janela de informações
  CCI_width = 300
  # Largura da janela de informações
  CCI_height = 100
  # Personagem que será usado para a criação
  CC_Actor = 1
  # Sintaxe - [["nome_do_charset", index_no_charset], ["n_d_c", index]]
  # index_no_charset é o número de 0 a 7 que o gráfico do personagem está.
  # Os ["nome_do_charset", index_no_charset] devem ser separados por
  # vírgulas dentro do [].
  # Gráficos Masculinos
  CC_Graphics_Male = [["Actor4", 0], ["Actor3", 0], ["Actor4", 4]]
  # Gráficos Femininos
  CC_Graphics_Female = [["Actor4", 1], ["Actor4", 2], ["Actor2", 1]]
  # IDs das classes disponíveis para escolha (entre [], separado por vírgulas)
  CC_Classes = [1, 2, 3, 4, 5, 6, 7, 8]
  # Switch que será definida se o sexo for Masculino
  CC_MaleSwitch = 81
  # Switch que será definida se o sexo for Feminino
  CC_FemaleSwitch = 82
  
  # * Termos - Só altere caso realmente necessário.
  CC_Male = "Masculino" # Termo de Gênero Masculino
  CC_Female = "Feminino" # Termo de Gênero Feminino
  CC_GenderTerm = "Sexo" # Termo de Gênero
  CC_NameTerm = "Nome" # Termo de Nome
  CC_ChangeNameTerm = "Mudar Nome" # Termo de Mudar Nome
  CC_GraphicTerm = "Gráfico" # Termo de Gráfico
  CC_ClassTerm = "Classe" # Termo de Classe
  
  # * Não mexer
  CharacterCreation = 1.0
end

#==============================================================================
# ** Window_CreateCharacter
#------------------------------------------------------------------------------
#  Esta janela é a janela de seleção da criação de personagem.
#==============================================================================

class Window_CreateCharacter < Window_Selectable
  include MPlus
  def initialize
    x = 544 - window_width - 20
    y = 416 / 2 - window_height / 2
    super(x, y, window_width, window_height)
    @index = 0
    @cursor_fix = false
    @cursor_all = false
    activate
    refresh
  end
  #--------------------------------------------------------------------------
  # * Aquisição do número máximo de itens
  #--------------------------------------------------------------------------
  def item_max
    return 4
  end
  #--------------------------------------------------------------------------
  # * Aquisição da altura dos itens
  #--------------------------------------------------------------------------
  def item_height
    return CCS_height / 5
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
  def window_width
    CCS_width
  end
  #--------------------------------------------------------------------------
  # * Aquisição da altura da janela
  #--------------------------------------------------------------------------
  def window_height
    CCS_height
  end
  
  def item_rect_for_text(index)
    rect = item_rect(index)
    rect.x += 4
    rect.width = window_width - 15
    rect
  end
  #--------------------------------------------------------------------------
  # * Desenhar a janela
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    rect = item_rect_for_text(0)
    self.contents.draw_text(rect, CC_ChangeNameTerm, 0)
    rect = item_rect_for_text(1)
    self.contents.draw_text(rect, "<< #{CC_GenderTerm} >>", 0)
    rect = item_rect_for_text(2)
    self.contents.draw_text(rect, "<< #{CC_GraphicTerm} >>", 0)
    rect = item_rect_for_text(3)
    self.contents.draw_text(rect, "<< #{CC_ClassTerm} >>", 0)
  end
end

#==============================================================================
# ** Window_CharacterInfos
#------------------------------------------------------------------------------
#  Esta janela mostra as informações durante a criação de personagem.
#==============================================================================

class Window_CharacterInfos < Window_Base
  include MPlus
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize
    x = 20
    y = 416 / 2 - window_height / 2
    super(x, y, window_width, window_height)
    @sex = 0
    @class = 1
    @graphic = 0
    @actor_name = ""
    refresh
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
  def window_width
    CCI_width
  end
  #--------------------------------------------------------------------------
  # * Aquisição da altura da janela
  #--------------------------------------------------------------------------
  def window_height
    CCI_height
  end
  #--------------------------------------------------------------------------
  # * Trocar o Gênero
  #--------------------------------------------------------------------------
  def sex_change
    @sex == 0 ? @sex = 1 : @sex = 0
    @graphic = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Classe - Esquerda
  #--------------------------------------------------------------------------
  def class_left
    @class -= 1
    @class = CC_Classes.size if @class < 1
    refresh
  end
  #--------------------------------------------------------------------------
  # * Classe - Direita
  #--------------------------------------------------------------------------
  def class_right
    @class += 1
    @class = 1 if @class > CC_Classes.size
    refresh
  end
  #--------------------------------------------------------------------------
  # * Gráficos - Esquerda
  #--------------------------------------------------------------------------
  def graphic_left
    @graphic -= 1
    size = @sex == 0 ? CC_Graphics_Male.size : CC_Graphics_Female.size
    @graphic =  size - 1 if @graphic < 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Gráficos - Direita
  #--------------------------------------------------------------------------
  def graphic_right
    @graphic += 1
    size = @sex == 0 ? CC_Graphics_Male.size : CC_Graphics_Female.size
    @graphic = 0 if @graphic > size - 1
    refresh
  end
  #--------------------------------------------------------------------------
  # * Nome do Personagem
  #--------------------------------------------------------------------------
  def actor_name
    $game_actors[CC_Actor].name
  end
  #--------------------------------------------------------------------------
  # * Desenhar a janela
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    chname = @sex == 0 ? CC_Graphics_Male[@graphic][0] : CC_Graphics_Female[@graphic][0]
    chindex = @sex == 0 ? CC_Graphics_Male[@graphic][1] : CC_Graphics_Female[@graphic][1]
    draw_face(chname, chindex, window_width - 160, 0)
    draw_character(chname, chindex, window_width - 50, 35)
    self.contents.draw_text(0, 0, 300, 24, "#{CC_NameTerm}: " + actor_name)
    sex = @sex == 0 ? CC_Male : CC_Female
    self.contents.draw_text(0, 0, 300, 72, "#{CC_GenderTerm}: " + sex)
    cln = $data_classes[@class].name
    self.contents.draw_text(0, 0, 300, 120, "#{CC_ClassTerm}: " + cln)
  end
  #--------------------------------------------------------------------------
  # * Aquisição de informações
  #--------------------------------------------------------------------------
  def infos
    chname = @sex == 0 ? CC_Graphics_Male[@graphic][0] : CC_Graphics_Female[@graphic][0]
    chindex = @sex == 0 ? CC_Graphics_Male[@graphic][1] : CC_Graphics_Female[@graphic][1]
    return [@class, @sex, chname, chindex]
  end
end

#==============================================================================
# ** Window_Confirm
#------------------------------------------------------------------------------
#  Esta janela confirma a decisão
#==============================================================================

class Window_Confirm < Window_Command
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
    update_placement
    self.openness = 0
    open
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
  def window_width
    return 160
  end
  #--------------------------------------------------------------------------
  # * Atualização da posição da janela
  #--------------------------------------------------------------------------
  def update_placement
    self.x = (Graphics.width - width) / 2
    self.y = (Graphics.height - height) / 2
  end
  #--------------------------------------------------------------------------
  # * Criação da lista de comandos
  #--------------------------------------------------------------------------
  def make_command_list
    add_command("Confirmar",  :confirmed)
    add_command(Vocab::cancel,   :cancelled)
  end
end

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da tela de título.
#==============================================================================

class Scene_Title < Scene_Base
  include MPlus
  #--------------------------------------------------------------------------
  # * Comando [Novo Jogo]
  #--------------------------------------------------------------------------
  def command_new_game
    DataManager.setup_new_game
    close_command_window
    create_cc_window
  end
  #--------------------------------------------------------------------------
  # * Criar Janelas de Criação de Personagem
  #--------------------------------------------------------------------------
  def create_cc_window
    @ccs_window = Window_CreateCharacter.new
    @cci_window = Window_CharacterInfos.new
    @cc = true
  end
  #--------------------------------------------------------------------------
  # * Fechar Janelas de Criação de Personagem
  #--------------------------------------------------------------------------
  def close_cc_window
    @cc = false
    @ccs_window.close
  end
  #--------------------------------------------------------------------------
  # * Começar o Jogo
  #--------------------------------------------------------------------------
  def start_game
    infos = @cci_window.infos
    actor = $game_actors[CC_Actor]
    actor.change_class(infos[0])
    actor.set_graphic(infos[2], infos[3], infos[2], infos[3])
    actor.mp = actor.mmp; actor.hp = actor.mhp
    $game_player.set_graphic(infos[2], infos[3])
    $game_switches[CC_MaleSwitch] = true if infos[1] == 0
    $game_switches[CC_FemaleSwitch] = true if infos[1] == 1
    fadeout_all
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
  end
  #--------------------------------------------------------------------------
  # * Atualização
  #--------------------------------------------------------------------------
  alias acc_update update
  def update
    acc_update if !@cc && !@cc_inp
    cc_update if @cc && !@cc_inp
    inp_update if @cc_inp && !@cc
  end
  #--------------------------------------------------------------------------
  # * Atualização das Janelas
  #--------------------------------------------------------------------------
  def cc_update
    Graphics.update
    Input.update
    @ccs_window.update
    @cci_window.update
    if Input.trigger?(:C)
      case @ccs_window.index
      when 0
        start_input
      when 1, 2, 3
        @cc = false
        @ccs_window.deactivate
        create_confirm_window
      end
    end
    if Input.trigger?(:RIGHT)
      case @ccs_window.index
      when 1
        @cci_window.sex_change
      when 2
        @cci_window.graphic_right
      when 3
        @cci_window.class_right
      end
    end
    if Input.trigger?(:LEFT)
      case @ccs_window.index
      when 1
        @cci_window.sex_change
      when 2
        @cci_window.graphic_left
      when 3
        @cci_window.class_left
      end
    end
    if Input.trigger?(:B)
      close_cc_window
      @cci_window.close
      @command_window.open
      @command_window.activate
    end
  end
  #--------------------------------------------------------------------------
  # * Abrir Janela de Confirmação
  #--------------------------------------------------------------------------
  def create_confirm_window
    @confirm_window = Window_Confirm.new
    @confirm_window.set_handler(:confirmed, method(:start_game))
    @confirm_window.set_handler(:cancelled, method(:close_confirm_window))
  end
  #--------------------------------------------------------------------------
  # * Fechamento da Janela de Confirmação
  #--------------------------------------------------------------------------
  def close_confirm_window
    @confirm_window.dispose
    @confirm_window = nil
    @cc = true
    @ccs_window.activate
  end
  #--------------------------------------------------------------------------
  # * Atualização da Janela de Nome
  #--------------------------------------------------------------------------
  def inp_update
    Graphics.update
    Input.update
    @edit_window.update
    @input_window.update
  end
  #--------------------------------------------------------------------------
  # * Inicialização da Janela de Nome
  #--------------------------------------------------------------------------
  def start_input
    close_cc_window
    @cc_inp = true
    @actor = $game_actors[MPlus::CC_Actor]
    @actor.name = ""
    @actor.set_graphic("", 0, "", 0)
    @edit_window = Window_NameEdit.new(@actor, 11)
    @input_window = Window_NameInput.new(@edit_window)
    @input_window.set_handler(:ok, method(:on_input_ok))
  end
  #--------------------------------------------------------------------------
  # * Entrada [Confirmação]
  #--------------------------------------------------------------------------
  def on_input_ok
    @actor.name = @edit_window.name
    @edit_window.dispose
    @input_window.dispose
    @edit_window = nil
    @input_window = nil
    @cc_inp = false
    @ccs_window.open
    @ccs_window.activate
    @cc = true
    @cci_window.refresh
  end
end

Script bem diferente... já tinha visto um desses mas é bem simples.

Enfim, parabéns ae pelo feito e valeu por nos disponibiliza-lo :ok:
Prazer, Terror dos Modinha

Legal, com certeza dá pra adaptar em alguma coisa...

Esta muito bom e prático  :derp:
Parabéns!