搜索附件  
同能RPG制作大师 附件中心 同能RM技术讨论区 RPG Maker XP 讨论区 存档位真无限扩展 v2.1: SceneFileEx.zip

存档位真无限扩展 v2.1: SceneFileEx.zip

 

存档位真无限扩展 v2.1:
对本人2006年同名脚本的修订,去掉了所有设置项改成自适应,这次是真·无限了,100个,1000个随便你,只受磁盘空间的限制
实现原理:
本系统会自己检测所有从1开始连续编号的存档文件,并提供一个另存为空位,实现线性无限扩展。因此,第一次存档时,存档位只有1个而不是系统默认的4个,这是正常现象,它会随着你存档数目的增加而增加。
更新v2.1
1. 改善刷新方式,感谢@RyanBern
2. 新增翻页方式,最多一次可翻256,没有这么多存档时直接首尾而不是冻结
3. 优化显示效果,存档不足4个或不能被4整除时有空窗口占位,不会有黑边
4. 增加了对于Scene_Load检索的支持

其他见脚本说明:
RUBY 代码
  1. #==============================================================================
  2. # ■ 存档位真·无限扩展 v2.1 by SailCat
  3. #------------------------------------------------------------------------------
  4. #   方法:插入到Main之前使用。
  5. #   版本:v2.1 (Build 171011)
  6. #   效果:存档位真·无限扩展,不需要配置,系统自动检测根据存档逐一扩展
  7. #   冲突:和其他存档扩展脚本冲突
  8. #   操作:上下翻1,左右翻4,Ctrl+上下翻16,Ctrl+左右翻64,LR翻256,Ctrl+LR头尾
  9. #==============================================================================
  10. class Scene_File
  11.   #--------------------------------------------------------------------------
  12.   # ● 追加定义
  13.   #--------------------------------------------------------------------------
  14.   attr_reader  :top_index# 首项 索引值
  15.   unless method_defined? :sailcat_initialize
  16.     alias sailcat_initialize initialize
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #     help_text : 帮助窗口显示的字符串
  21.   #--------------------------------------------------------------------------
  22.   def initialize(help_text)
  23.     sailcat_initialize(help_text)
  24.     @file_count ||= save_count
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 设置首项,重绘首项之后的4个窗口
  28.   #     index : 新的首项
  29.   #--------------------------------------------------------------------------
  30.   def top_index=(index)
  31.     index = [0, [index / 4 * 4, @file_count - 1].min].max
  32.     if@top_index != index
  33.       @top_index = index
  34.       redraw_windows
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 主处理
  39.   #--------------------------------------------------------------------------
  40.   def main
  41.     # 生成帮助窗口
  42.     @help_window = Window_Help.new
  43.     @help_window.set_text(@help_text)
  44.     # 选择最后操作的文件
  45.     @file_index = [@file_count - 1, $game_temp.last_file_index].min
  46.     # 只刷新需要显示的窗口
  47.     self.top_index = @file_index
  48.     @savefile_windows[@file_index % 4].selected = true
  49.     # 执行过渡
  50.     Graphics.transition
  51.     # 主循环
  52.     loopdo
  53.       # 刷新游戏画面
  54.       Graphics.update
  55.       # 刷新输入信息
  56.       Input.update
  57.       # 刷新画面
  58.       update
  59.       # 如果画面被切换的话就中断循环
  60.       if$scene != self
  61.         break
  62.       end
  63.     end
  64.     # 准备过渡
  65.     Graphics.freeze
  66.     # 释放窗口
  67.     @help_window.dispose
  68.     for i in@savefile_windows
  69.       i.dispose
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 刷新画面
  74.   #--------------------------------------------------------------------------
  75.   def update
  76.     # 刷新窗口
  77.     @help_window.update
  78.     for i in@savefile_windows[0..3]
  79.       i.update
  80.     end
  81.     # 按下 C 键的情况下
  82.     if Input.trigger?(Input::C)
  83.       # 调用过程 on_decision (定义继承目标)
  84.       on_decision(make_filename(@file_index))
  85.       $game_temp.last_file_index = @file_index
  86.       return
  87.     end
  88.     # 按下 B 键的情况下
  89.     if Input.trigger?(Input::B)
  90.       # 调用过程 on_cancel (定义继承目标)
  91.       on_cancel
  92.       return
  93.     end
  94.     # 按下下方向键的情况下
  95.     if Input.repeat?(Input::DOWN)
  96.       move_index(Input.press?(Input::CTRL) ? 16 : 1)
  97.       return
  98.     end
  99.     # 按下上方向键的情况下
  100.     if Input.repeat?(Input::UP)
  101.       move_index(Input.press?(Input::CTRL) ? -16 : -1)
  102.       return
  103.     end
  104.     # 按下左方向键的情况下
  105.     if Input.repeat?(Input::LEFT)
  106.       move_index(Input.press?(Input::CTRL) ? -64 : -4)
  107.       return
  108.     end
  109.     # 按下右方向键的情况下
  110.     if Input.repeat?(Input::RIGHT)
  111.       move_index(Input.press?(Input::CTRL) ? 64 : 4)
  112.       return
  113.     end
  114.     # 按下 R 键的情况下
  115.     if Input.trigger?(Input::R)
  116.       Input.press?(Input::CTRL) ? set_index(-1) : move_index(256)
  117.       return
  118.     end
  119.     # 按下 L 键的情况下
  120.     if Input.trigger?(Input::L)
  121.       Input.press?(Input::CTRL) ? set_index(0) : move_index(-256)
  122.       return
  123.     end
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 生成文件名
  127.   #     file_index : 文件名的索引 (0~3)
  128.   #--------------------------------------------------------------------------
  129.   def make_filename(file_index)
  130.     return"Save#{file_index + 1}.rxdata"
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 移动光标
  134.   #     distance : 移动的距离
  135.   #--------------------------------------------------------------------------
  136.   def move_index(distance)
  137.     if@file_index == 0and distance < 0
  138.       set_index(-1)
  139.     elsif@file_index == @file_count - 1and distance > 0
  140.       set_index(0)
  141.     else
  142.       set_index([0, [@file_index + distance, @file_count - 1].min].max)
  143.     end
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 设置光标位置
  147.   #     new_index : 新光标位置
  148.   #--------------------------------------------------------------------------
  149.   def set_index(new_index)
  150.     new_index += @file_countif new_index < 0
  151.     # 演奏光标 SE
  152.     $game_system.se_play($data_system.cursor_se)
  153.     # 光标移动到新位置
  154.     @savefile_windows[@file_index % 4].selected = false
  155.     @file_index = new_index
  156.     self.top_index = new_index
  157.     @savefile_windows[@file_index % 4].selected = true
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 检测存档数目
  161.   #--------------------------------------------------------------------------
  162.   def save_count
  163.     i = 0
  164.     whileFileTest.exists?(make_filename(i))
  165.       i += 1
  166.     end
  167.     returnself.is_a?(Scene_Save) ? i + 1 : i
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 重绘存档文件窗口
  171.   #--------------------------------------------------------------------------
  172.   def redraw_windows
  173.     # 生成存档文件窗口
  174.     @savefile_windows.each{ |i| i.dispose}unless@savefile_windows == nil
  175.     @savefile_windows = []
  176.     for i in@top_index...[@top_index + 4, @file_count].min
  177.       filename = make_filename(i)
  178.       window = Window_SaveFile.new(i, filename)
  179.       window.y = i % 4 * 104 + 64
  180.       @savefile_windows.push(window)
  181.     end
  182.     (4 - @savefile_windows.size).timesdo |i|
  183.       window = Window_Base.new(0, 376 - i * 104, 640, 104)
  184.       window.opacity = window.back_opacity = 128
  185.       @savefile_windows.push(window)
  186.     end
  187.   end
  188. end
  189. class Scene_Load < Scene_File
  190.   #--------------------------------------------------------------------------
  191.   # ● 初始化对像
  192.   #--------------------------------------------------------------------------
  193.   def initialize
  194.     # 再生成临时对像
  195.     $game_temp = Game_Temp.new
  196.     # 选择存档时间最新的文件
  197.     $game_temp.last_file_index = 0
  198.     latest_time = Time.at(0)
  199.     @file_count = save_count
  200.     for i in0...@file_count
  201.       File.open(make_filename(i), "r")do |f|
  202.         if f.mtime > latest_time
  203.           latest_time = f.mtime
  204.           $game_temp.last_file_index = i
  205.         end
  206.       end
  207.     end
  208.     super("要载入哪个文件?")
  209.   end
  210. end
复制代码



范例工程点此下载:








             本帖来自P1论坛作者来自网络,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=403346  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
Loading...

QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

GMT+8, 2024-11-22 20:47 , Processed in 0.050992 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部