じ☆ve冰风 发表于 2026-7-26 11:54:17

Unlimited Save Slots for XP

If you find your players stumble and struggle in the only 4 save slots by default, you can use this script to liberate them.

The player can start to use save slot from the first one. Once they saved they got a second, empty one. Once they saved in the second slot the got a third one, and so on.
I personally tested ~1500 saves, without any performance issues or glitches.

Terms of Use:
1. Please keep the second line of this script in your game.
2. Free to use in any kind of game.
3. Redistributions are OK, but secondary development is not allowed for this script.

You can also download a demo in the attachment. But sadly enough, the base RGSS scripts are in mandarin owing to the version I'm using.

                Ruby:       
#==============================================================================
# ■ Unlimited Saves by SailCat
#------------------------------------------------------------------------------
#   Introduction:
#      This script allows unlimited number (albeit limited by disk space) of
#   saves to a game.
#
#   Installation Guide:
#      Insert this script before the "Main" section, preferably lower in your
#   set of plugin scripts.
#
#   Date of release:
#      Sep. 2, 2024 (version 1.0)
#
#   Effects:
#   1. Players can now save in unlimited slots instead of four.
#      * The "unlimited" number is done by checking a number sequence starting
#      from 1, and provide an empty slot always available. In this way, in the
#      first run of the game, where in the folder no saves exist. There can be
#      seen only one save slot instead of four. Don't worry, you save here and
#      you get a second empty slot next time you save, and a third, and more...
#
#   How to use:
#      To move cursor up or down by 1, press UP or DOWN arrows.
#      To move cursor up or down by 4, press LEFT or RIGHT arrows.
#      To move cursor up or down by 16, press Ctrl+UP or Ctrl+DOWN.
#      To move cursor up or down by 64, press Ctrl+LEFT or Ctrl+RIGHT.
#      To move cursor up or down by 256, press PGUP or PGDN keys.
#      To move cursor to the top or bottom, press Ctrl+PGUP or Ctrl+PGDN.
#==============================================================================

class Scene_File
#--------------------------------------------------------------------------
# ● Additional Attributes
#--------------------------------------------------------------------------
attr_reader:top_index # Top index of save file
unless method_defined? :sailcat_initialize
    alias sailcat_initialize initialize
end
#--------------------------------------------------------------------------
# ● Initialize
#   help_text : the text to help
#--------------------------------------------------------------------------
def initialize(help_text)
    sailcat_initialize(help_text)
    @file_count ||= save_count
end
#--------------------------------------------------------------------------
# ● Set top index and redraw the next four windows
#   index : new top index
#--------------------------------------------------------------------------
def top_index=(index)
    index = .min].max
    if @top_index != index
      @top_index = index
      redraw_windows
    end
end
#--------------------------------------------------------------------------
# ● Main processing
#--------------------------------------------------------------------------
def main
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @file_index = [@file_count - 1, $game_temp.last_file_index].min
    self.top_index = @file_index
    @savefile_windows[@file_index % 4].selected = true
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
      break
      end
    end
    Graphics.freeze
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
end
#--------------------------------------------------------------------------
# ● Update windows
#--------------------------------------------------------------------------
def update
    @help_window.update
    for i in @savefile_windows
      i.update
    end
    if Input.trigger?(Input::C)
      on_decision(make_filename(@file_index))
      $game_temp.last_file_index = @file_index
      return
    end
    if Input.trigger?(Input::B)
      on_cancel
      return
    end
    if Input.repeat?(Input::DOWN)
      move_index(Input.press?(Input::CTRL) ? 16 : 1)
      return
    end
    if Input.repeat?(Input::UP)
      move_index(Input.press?(Input::CTRL) ? -16 : -1)
      return
    end
    if Input.repeat?(Input::LEFT)
      move_index(Input.press?(Input::CTRL) ? -64 : -4)
      return
    end
    if Input.repeat?(Input::RIGHT)
      move_index(Input.press?(Input::CTRL) ? 64 : 4)
      return
    end
    if Input.trigger?(Input::R)
      Input.press?(Input::CTRL) ? set_index(-1) : move_index(256)
      return
    end
    if Input.trigger?(Input::L)
      Input.press?(Input::CTRL) ? set_index(0) : move_index(-256)
      return
    end
end
#--------------------------------------------------------------------------
# ● Make filename
#   file_index : index of file (0 to 3)
#--------------------------------------------------------------------------
def make_filename(file_index)
    return "Save#{file_index + 1}.rxdata"
end
#--------------------------------------------------------------------------
# ● Move cursor
#   distance : move by distance
#--------------------------------------------------------------------------
def move_index(distance)
    if @file_index == 0 and distance < 0
      set_index(-1)
    elsif @file_index == @file_count - 1 and distance > 0
      set_index(0)
    else
      set_index(.min].max)
    end
end
#--------------------------------------------------------------------------
# ● Set cursor
#   new_index : new cursor index
#--------------------------------------------------------------------------
def set_index(new_index)
    new_index += @file_count if new_index < 0
    $game_system.se_play($data_system.cursor_se)
    @savefile_windows[@file_index % 4].selected = false
    @file_index = new_index
    self.top_index = new_index
    @savefile_windows[@file_index % 4].selected = true
end
#--------------------------------------------------------------------------
# ● Test count of save files
#--------------------------------------------------------------------------
def save_count
    i = 0
    while FileTest.exists?(make_filename(i))
      i += 1
    end
    return self.is_a?(Scene_Save) ? i + 1 : i
end
#--------------------------------------------------------------------------
# ● Redraw windows
#--------------------------------------------------------------------------
def redraw_windows
    @savefile_windows.each { |i| i.dispose } unless @savefile_windows == nil
    @savefile_windows = []
    for i in @top_index...[@top_index + 4, @file_count].min
      filename = make_filename(i)
      window = Window_SaveFile.new(i, filename)
      window.y = i % 4 * 104 + 64
      @savefile_windows.push(window)
    end
    (4 - @savefile_windows.size).times do |i|
      window = Window_Base.new(0, 376 - i * 104, 640, 104)
      window.opacity = window.back_opacity = 128
      @savefile_windows.push(window)
    end
end
end

class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
    $game_temp = Game_Temp.new
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    @file_count = save_count
    for i in 0...@file_count
      File.open(make_filename(i), "r") do |f|
      if f.mtime > latest_time
          latest_time = f.mtime
          $game_temp.last_file_index = i
      end
      end
    end
    super("Which file to load?")
end
end




本贴来自国际rpgmaker官方论坛作者:SailCat处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/unlimited-save-slots-for-xp.171617/
页: [1]
查看完整版本: Unlimited Save Slots for XP