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

Type Save File Name

Iniciado por LoboShow, 05/03/2013 às 23:43

Type Save File Name

Compativel com: RMXP
Compatibilidade: ?
Facilidade de uso: ?
Lag gerado: ?

[box class=titlebg]
Para que serve o script
[/box]
O script muda a Scene_Save e Load para que o jogador possa escolher o nome do arquivo, como numa versão muito primitiva de um diálogo de salvar/carregar arquivos, já que você não vê os arquivos que existem na pasta.
Pra melhorar um pouco, o script salva o nome do último arquivo
carregado, para facilitar na hora do Load.

[box class=titlebg]
Imagens
[/box]

[box class=titlebg]
Script
[/box]
begin
#Script criado por kjr
#Membro da comunidade JogosRPG(www.jogosrpg.com.br)
#=================================================================
#            T y p e   S a v e   F i l e   N a m e
#=================================================================

#Com esse script o jogador vai poder digitar o nome do arquivo de
#save, ao invés de usar os saves pré-definidos. Basta colar acima
#de Main.
module TSFN
  #Sprite de fundo
  #Coloque true se quiser usar para a Scene_Save e Load o mesmo
  #fundo da tela de título
  SAME_AS_TITLE = true
  #Caso a opção SAME_AS_TITLE seja false, coloque aqui o nome do
  #Title, que será usado como fundo
  SPRITE_FILENAME = ""
end
class Scene_File
  def main
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @filename_window = Window_TypeOL.new(160,208,320,64)
    @sprite = Sprite.new
    if TSFN::SAME_AS_TITLE
      @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    else
      @sprite.bitmap = RPG::Cache.title(TSFN::SPRITE_FILENAME)
    end
    if $game_temp != nil
      @filename_window.text = $game_temp.last_file_index
    end
    Graphics.transition
    while $scene == self
      Graphics.update
      Input.update
      update
    end
    Graphics.freeze
    @help_window.dispose
    @filename_window.dispose
  end
  def update
    @help_window.update
    @filename_window.update
    KJR_Type.type(@filename_window)
    if Input.trigger?(Input::C)
      on_decision("#{@filename_window.text}.rxdata")
      if $game_temp != nil
        $game_temp.last_file_index = @filename_window.text
        lfi = File.open("LFI.txt","w")
        lfi.write($game_temp.last_file_index)
        lfi.close
      end
      return
    end
    if Input.trigger?(Input::B)
      on_cancel
      return
    end
  end
end
class Scene_Title
  def main
    if $BTEST
      battle_test
      return
    end
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $game_system = Game_System.new
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    s1 = "Novo Jogo"
    s2 = "Continuar"
    s3 = "Sair"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    @continue_enabled = false
    if FileTest.exists?("LFI.txt")
      @continue_enabled = true
    end
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end
end
class Game_Temp
  alias kjr_savefilename_new initialize
  def initialize
    kjr_savefilename_new
    @last_file_index = ""
  end
end
class Scene_Save < Scene_File
  def initialize
    super("Digite o nome do arquivo no qual gostaria de salvar:")
  end
end
class Scene_Load < Scene_File
  def initialize
    $game_temp = Game_Temp.new
    lfi = File.open("LFI.txt","r")
    $game_temp.last_file_index = lfi.readlines[0]
    lfi.close
    super("Digite o nome do arquivo o qual gostaria de carregar:")
  end
end
class String
  def backspace
    nth = length - 1
    slice!(nth,1)
  end
  def vazio?
    return true if self == "" or self == nil
    return false
  end
end
class Window_Empty < Window_Base
  attr_accessor:text
  def initialize(x,y,w,h)
    super(x,y,w,h)
    self.contents = Bitmap.new(w-32,h-32)
    self.contents.font.size = 19
    @text = ""
  end
  def clear
    self.contents.clear
  end
  def update
    self.contents.draw_text(0,0,self.width,32,@text.to_s,1)
    super
  end
end
class Window_Type < Window_Empty
  attr_accessor:typed_text
  attr_accessor:line_index
  attr_accessor:extra_char
  def initialize(x,y,w,h)
    super(x,y,w,h)
    self.contents.font.size = 17
    @typed_text = []
    empty!
    @line_index = 0
    @extra_char = ""
    @width = w
  end
  def empty!
    @typed_text.clear
    push_str
  end
  def push_str
    for i in 0..25
      @typed_text.push("")
    end
  end
  def clear
    self.contents.clear
    @line_index = 0
    empty!
  end
  def update
    if @pre_text != @typed_text[@line_index]
      refresh
    end
  end
  def refresh
    @pre_text = @typed_text[@line_index].dup
    self.contents.clear
    for i in 0..21
      text = @typed_text[i]
      self.contents.draw_text(0,i*20,@width-32,20,text)
    end
  end
end
class Window_TypeOL < Window_Empty
  attr_accessor:typed_text
  attr_accessor:line_index
  attr_accessor:extra_char
  def initialize(x,y,w,h)
    super(x,y,w,h)
    self.contents.font.size = 18
    @typed_text = []
    @typed_text.push("")
    @line_index = 0
    @extra_char = ""
    @width = w
  end
  def text
    return @typed_text[0]
  end
  def text=(ntext)
    @typed_text[0] = ntext
  end
  def clear
    self.contents.clear
  end
  def update
    if @pre_text != @typed_text[@line_index]
      refresh
    end
  end
  def refresh
    @pre_text = @typed_text[@line_index].dup
    self.contents.clear
    text = @typed_text[0]
    self.contents.draw_text(0,0,@width-32,20,text)
  end
end
module KJR_Type
  def self.type(window,multiline=false)
    unless multiline
      type(window)
    else
      typeS(window)
    end
  end
  def self.type(type_window)
    if Input.repeat?(Input::Back)
      type_window.typed_text[type_window.line_index].backspace
      return
    elsif Input.repeat?(Input::Space)
      type_window.typed_text[type_window.line_index] += " "
    end
    for valor in 65...90
      if Input.repeat?(valor)
        letra = Input::Letters.index(valor)
        type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? letra.upcase : letra.downcase)
        break
      end
    end
    for valor in 48...57
      if Input.repeat?(valor)
        numero = Input::Numberkeys.index(valor)
        if type_window.extra_char != ""
          type_window.typed_text[type_window.line_index] += type_window.extra_char
        end
        unless Input.press?(Input::Shift)
          type_window.typed_text[type_window.line_index] += numero.to_s
        else
          v = valor - 48
          case v
          when 0
            type_window.typed_text[type_window.line_index] += ")"
          when 1
            type_window.typed_text[type_window.line_index] += "!"
          when 2
            type_window.typed_text[type_window.line_index] += "@"
          when 3
            type_window.typed_text[type_window.line_index] += "#"
          when 4
            type_window.typed_text[type_window.line_index] += "$"
          when 5
            type_window.typed_text[type_window.line_index] += "%"
          when 6
            type_window.extra_char = "¨"
          when 7
            type_window.typed_text[type_window.line_index] += "&"
          when 8
            type_window.typed_text[type_window.line_index] += "*"
          when 9
            type_window.typed_text[type_window.line_index] += "("
          end
        end
        break
      end
    end
    for valor in 96...105
      if Input.repeat?(valor)
        if type_window.extra_char != ""
          type_window.typed_text[type_window.line_index] += type_window.extra_char
        end
        numero = Input::Numberpad.index(valor)
        type_window.typed_text[type_window.line_index] += numero.to_s
        break
      end
    end
  end
  def typeS(type_window)
    if Input.repeat?(Input::Back)
      type_window.typed_text[type_window.line_index].backspace
      return
    elsif Input.repeat?(Input::Space)
      if type_window.extra_char != ""
        type_window.typed_text[type_window.line_index] += type_window.extra_char
        type_window.extra_char = ""
      else
        type_window.typed_text[type_window.line_index] += " "
      end
      return
    elsif Input.repeat?(Input::Underscore)
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? "_" : "-")
      return
    elsif Input.repeat?(Input::Equal)
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? "+" : "=")
      return
    elsif Input.repeat?(Input::Dot)
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? ">" : ".")
      return
    elsif Input.repeat?(Input::Lb)
      type_window.extra_char = (Input.press?(Input::Shift) ? "`" : "´")
      return
    elsif Input.repeat?(Input::Rb)
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? "{" : "[")
      return
    elsif Input.repeat?(Input::Collon)
      letra = "ç"
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? letra.upcase : letra.downcase)
      return
    elsif Input.repeat?(Input::Comma)
      type_window.typed_text[type_window.line_index] += (Input.press?(Input::Shift) ? "<" : ",")
      return
    elsif Input.repeat?(Input::Quote)
      type_window.extra_char = (Input.press?(Input::Shift) ? "^" : "~")
      return
    end
    for valor in 65...91
      if Input.repeat?(valor)
        letra = Input::Letters.index(valor)
        unless type_window.extra_char == ""
        if type_window.extra_char == "´"
            if valor == 65
              letra = (Input.press?(Input::Shift) ? "Á" : "á")
              zerar = true
            elsif valor == 69
              letra = (Input.press?(Input::Shift) ? "É" : "é")
              zerar = true
            elsif valor == 73
              letra = (Input.press?(Input::Shift) ? "Í" : "í")
              zerar = true
            elsif valor == 79
              letra = (Input.press?(Input::Shift) ? "Ó" : "ó")
              zerar = true
            elsif valor == 85
              letra = (Input.press?(Input::Shift) ? "Ú" : "ú") 
              zerar = true
            end
        elsif type_window.extra_char == "^"
            if valor == 65
              letra = (Input.press?(Input::Shift) ? "Â" : "â")
              zerar = true
            elsif valor == 69
              letra = (Input.press?(Input::Shift) ? "Ê" : "ê")
              zerar = true
            elsif valor == 79
              letra = (Input.press?(Input::Shift) ? "Ô" : "ô")
              zerar = true
            end
        elsif type_window.extra_char == "`"
            if valor == 65
              letra = (Input.press?(Input::Shift) ? "À" : "à")
              zerar = true
            end
        elsif type_window.extra_char == "~"
            if valor == 65
              letra = (Input.press?(Input::Shift) ? "Ã" : "ã")
              zerar = true
            elsif valor == 79
              letra = (Input.press?(Input::Shift) ? "Õ" : "õ")
              zerar = true
            end
        elsif type_window.extra_char == "¨"
            if valor == 85
              letra = (Input.press?(Input::Shift) ? "Ü" : "ü")
              zerar = true
            elsif valor == 89
              letra = (Input.press?(Input::Shift) ? "Y" : "ÿ")
              zerar = true
            end
          end


[box class=titlebg]
Créditos e Avisos
[/box]
Criador: kjr

Este script esta com erro, poderia conserta-lo? Agradeço.

  Não sou scripter nem nada do tipo, só postei aqui.  Se quiser usá-lo, peça para alguém arrumar pra você.

Citação de: ViniciusReis online 09/04/2013 às 13:22
Este script esta com erro, poderia conserta-lo? Agradeço.
Se colocar especificamente o erro nesse tópico, talvez eu possa ajudar ^^, mas especificar tipo oque aparece, a mensagem e talz..

Básicamente o erro que apareceu pra mim foi esse aqui, não sei se pode ser o mesmo citado acima, mas creio que sim!

Spoiler
[close]

"Arruma ai pra gente, tio Razen!"

-Araços


@/

1°: Está faltando 6 end no fim do script, basta coloca-los algo assim:
end
end
end
end
end
end


2°: Mesmo resolvendo esse problema, o script requer um Input Module, ou um script de teclado como quiser, o que não é mencionado no tópico, nem no cabeçalho do script.  :¬¬: