扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 145|回复: 0

[转载发布] 存档位真无限扩展 v2.1

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2339

    主题

    404

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10640
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13411

    灌水之王

    发表于 2024-4-20 00:10:38 | 显示全部楼层 |阅读模式
    对本人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在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-3-15 16:56 , Processed in 0.138669 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表