- #============================================================================== 
- # [PS0]截图存档 
- #      Window_SaveFile_Plus 
- #------------------------------------------------------------------------------ 
- #     一种带有截图的存档,同时可以自定义存档数量。 
- #============================================================================== 
- # [核心脚本] 
- #    - 快速储存Bitmap的Marshal         By 柳之一 
- #------------------------------------------------------------------------------ 
- # [更新记录] 
- #    - 2012.01.28 By 各种压力的猫君 
- #      * 去掉效率较差的双线性缩放算法; 
- #      * 新增存档管理功能(F5键,复制/移动/删除存档) 
- #    - 2011.12.27 By 各种压力的猫君 
- #      * 补上截图阴影; 
- #      * 新增“不缩放”截图(推荐使用,尤其是大分辨率); 
- #      * 修正选择不存在的存档时存档列表窗口卡死以及奇怪的SE; 
- #      * 新增“存档中”提示窗口、覆盖存档提示、删除存档功能(Z键,对应键盘D) 
- #    - 2011.12.26 By 各种压力的猫君 
- #      * 功能齐全的测试版 
- #    - 2011.12.16 By 各种压力的猫君 
- #      * 移植至RGSS3,遵循PS0协议; 
- #      * 丰富自定义选项,整合双线性插值算法精简版 
- #    - 2008.05.26 By 沉影不器 
- #      * 蓝本(VX新截图存档) 
- #------------------------------------------------------------------------------ 
- # [使用方法] 
- #    - 将本脚本插入到MAIN以上 
- #    - 删除原Scene_File、Window_SaveFile(或确保本脚本位于上述两个脚本以下) 
- #============================================================================== 
- $_PS0 = {} if $_PS0 == nil   
- $_PS0["Window_SaveFile_Plus"] = 20120128 
- #============================================================================== 
- # [PS0] 通用配置模块   
- #============================================================================== 
- module PS0 
-   module Window_SaveFile_Plus 
-   
-     # 最大存档数(范围正整数) 
-     MAX_SAVE = 18 
-   
-     # 存档目录(默认值 "Saves/";根目录 "") 
-     SAVE_DIR = "Saves/"     
-   
-     # 无存档时显示的文字 
-     NO_DATA  = "无存档" 
-   
-     # 保存时显示的信息 
-     SAVE_NOW = "存档中..." 
-   
-     # 复制存档时的帮助文字 
-     HELP_COPY = "要复制到哪个位置?" 
-   
-     # 移动存档时的帮助文字 
-     HELP_MOVE = "要移动到哪个位置?" 
-   
-     # 是否显示存档中窗口(true:显示;false:不显示) 
-     # - 分辨率较大时建议显示 
-     SHOW_SAVE_NOW = false 
-   
-     # 截图缩放使用的插值算法 
-     # - "NN" 最邻近(速度最快,质量最差,RM默认算法) 
-     # - "NZ" 不缩放(速度快,质量好,以主角为中心切边,非全屏) 
-     Zoom_Type = "NZ" 
-   
-     # 双线性插值能获得更好的截图缩放质量,但所需时间较最邻近插值更长。 
-     # 缩略图尺寸(范围整数,单位像素) 
-     # - VA默认分辨率(544×416)推荐使用340×260 
-     # - VA最大分辨率(640×480)推荐使用425×325 
-     # - 本脚本兼容分辨率解放,窗口大小将自动计算。 
-     #   请自行计算截图分辨率,注意要确保宽高比一致, 
-     #   若使用“不缩放”模式则可以不保持一致。 
-     Thumbnail_Width  = 340  # 宽度 
-     Thumbnail_Height = 260  # 高度 
-   
-     # 缩略图位置微调(范围整数,单位像素) 
-     Thumbnail_ox = -2    # 横向 
-     Thumbnail_oy = -2-32 # 纵向 
-   
-     # 各窗口切换时的渐变帧数 
-     TRANS_DURATION = 5 
-   
-   end 
- end 
- #============================================================================== 
- # [核心脚本] 快速储存Bitmap的Marshal By 柳之一 
- #============================================================================== 
- class Font 
-   def marshal_dump 
-   end 
-   def marshal_load(obj) 
-   end 
- end 
- class Bitmap 
-   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i') 
-   RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i') 
-   def _dump(limit) 
-     data = "rgba" * width * height 
-     RtlMoveMemory_pi.call(data, address, data.length) 
-     [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") 
-   end 
-   def self._load(str) 
-     w, h, zdata = str.unpack("LLa*") 
-     b = self.new(w, h) 
-     RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4) 
-     return b 
-   end 
-   def address 
-     buffer, ad = "rgba", object_id * 2 + 16 
-     RtlMoveMemory_pi.call(buffer, ad, 4) 
-     ad = buffer.unpack("L")[0] + 8 
-     RtlMoveMemory_pi.call(buffer, ad, 4) 
-     ad = buffer.unpack("L")[0] + 16 
-     RtlMoveMemory_pi.call(buffer, ad, 4) 
-     return buffer.unpack("L")[0] 
-   end 
- end 
- #============================================================================== 
- # ■ Game_Temp 
- #============================================================================== 
- class Game_Temp 
-   attr_accessor :save_bitmap 
-   attr_accessor :save_snapshoot 
-   alias new_initialize initialize 
-   def initialize 
-     new_initialize 
-     @save_bitmap = Bitmap.new(1, 1) 
-     @save_snapshoot = Bitmap.new(1, 1) 
-   end 
- end 
- #============================================================================== 
- # ■ SceneManager 
- #============================================================================== 
- module SceneManager 
-   def self.snapshot_for_save 
-     $game_temp.save_bitmap = Graphics.snap_to_bitmap 
-     unless FileTest.exist?(PS0::Window_SaveFile_Plus::SAVE_DIR) 
-       Dir.mkdir(PS0::Window_SaveFile_Plus::SAVE_DIR) 
-     end 
-   end 
- end 
- #============================================================================== 
- # ■ Scene_Map 
- #============================================================================== 
- class Scene_Map < Scene_Base 
-   alias save_terminate terminate 
-   def terminate 
-     SceneManager.snapshot_for_save 
-     save_terminate 
-   end 
- end 
- #============================================================================== 
- # ■ DataManager 
- #============================================================================== 
- module DataManager 
-   def self.save_file_exists? 
-     !Dir.glob(PS0::Window_SaveFile_Plus::SAVE_DIR + 'Save*.rvdata2').empty? 
-   end 
-   def self.make_filename(index) 
-     sprintf(PS0::Window_SaveFile_Plus::SAVE_DIR + "Save%02d.rvdata2", index + 1) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブヘッダの作成 
-   #-------------------------------------------------------------------------- 
-   def self.make_save_header 
-     d_rect = Rect.new(0, 0, PS0::Window_SaveFile_Plus::Thumbnail_Width, 
-                             PS0::Window_SaveFile_Plus::Thumbnail_Height) 
-     case PS0::Window_SaveFile_Plus::Zoom_Type 
-     when "NN" 
-       s_rect = $game_temp.save_bitmap.rect 
-       $game_temp.save_snapshoot = Bitmap.new(d_rect.width, d_rect.height) 
-       $game_temp.save_snapshoot.stretch_blt(d_rect, $game_temp.save_bitmap, s_rect) 
-     when "NZ" 
-       x = [[$game_player.screen_x - d_rect.width/2, 0].max, Graphics.width].min 
-       y = [[$game_player.screen_y - d_rect.height/2, 0].max, Graphics.height].min 
-       s_rect = Rect.new(x, y, d_rect.width, d_rect.height) 
-       $game_temp.save_snapshoot = Bitmap.new(d_rect.width, d_rect.height) 
-       $game_temp.save_snapshoot.blt(0, 0, $game_temp.save_bitmap, s_rect) 
-     end 
-     header = {} 
-     header[:characters] = $game_party.characters_for_savefile 
-     header[:playtime_s] = $game_system.playtime_s 
-     header[:snapshoot]  = $game_temp.save_snapshoot 
-     header 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブの実行 
-   #-------------------------------------------------------------------------- 
-   def self.save_game(index) 
-     saving_window = Window_Saving.new 
-     Graphics.update 
-     begin 
-       save_game_without_rescue(index) 
-     rescue 
-        delete_save_file(index) 
-        false 
-     end 
-     saving_window.dispose 
-     return true 
-   end 
- end 
- #============================================================================== 
- # ■ Window_Yes_Or_No 
- #------------------------------------------------------------------------------ 
- #  提供“是”、“否”两个选项的窗口(替换、删除存档用) 
- #============================================================================== 
- class Window_Yes_Or_No < Window_HorzCommand 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize(yes, no) 
-     [url=home.php?mod=space&uid=40913]@yes[/url] = yes 
-     @no = no 
-     super(130, 0) 
-     self.visible = false 
-     self.active = false 
-     [url=home.php?mod=space&uid=370741]@Index[/url] = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 桁数の取得 
-   #-------------------------------------------------------------------------- 
-   def col_max 
-     return 2 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● コマンドリストの作成 
-   #-------------------------------------------------------------------------- 
-   def make_command_list 
-     add_command(@yes,   :yes) 
-     add_command(@no,    :cancel) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 決定ボタンが押されたときの処理 
-   #-------------------------------------------------------------------------- 
-   def process_ok 
-     Input.update 
-     call_ok_handler 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 按下取消键时的处理 
-   #-------------------------------------------------------------------------- 
-   def process_cancel 
-     Input.update 
-     call_cancel_handler 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 启用窗口 
-   #-------------------------------------------------------------------------- 
-   def activate 
-     temp = self.y + self.height - Graphics.height 
-     if temp > 0 
-       self.y -= (temp + 12) 
-     end 
-     self.active = true 
-     self 
-   end 
- end 
- #============================================================================== 
- # ■ Window_Saving 
- #------------------------------------------------------------------------------ 
- #  显示保存信息的窗口 
- #============================================================================== 
- class Window_Saving < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     w = PS0::Window_SaveFile_Plus::SAVE_NOW.length * 16 + 32 
-     x = (Graphics.width - w)/2 
-     y = (Graphics.height - fitting_height(1))/2 
-     super(x, y, w, fitting_height(1)) 
-     self.visible = PS0::Window_SaveFile_Plus::SHOW_SAVE_NOW 
-     draw_text_ex(4, 0, PS0::Window_SaveFile_Plus::SAVE_NOW) 
-   end 
- end 
- #============================================================================== 
- # ■ Window_SaveManagerCommand 
- #------------------------------------------------------------------------------ 
- #  存档管理窗口 
- #============================================================================== 
- class Window_SaveManagerCommand < Window_Command 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化对象 
-   #-------------------------------------------------------------------------- 
-   def initialize(*args) 
-     @copy, @move, @delete, [url=home.php?mod=space&uid=9053]@cancel[/url] = args[0..3] 
-     super(130, 0) 
-     self.visible = false 
-     self.active = false 
-     @index = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取窗口的宽度 
-   #-------------------------------------------------------------------------- 
-   def window_width 
-     return 100 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取项目数 
-   #-------------------------------------------------------------------------- 
-   def item_max 
-     return 4 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 生成指令列表 
-   #-------------------------------------------------------------------------- 
-   def make_command_list 
-     add_command(@copy,   :copy  ) 
-     add_command(@move,   :move  ) 
-     add_command(@delete, :delete) 
-     add_command(@cancel, :cancel) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 按下确定键时的处理 
-   #-------------------------------------------------------------------------- 
-   def process_ok 
-     Input.update 
-     call_ok_handler 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 启用窗口 
-   #-------------------------------------------------------------------------- 
-   def activate 
-     temp = self.y + self.height - Graphics.height 
-     if temp > 0 
-       self.y -= (temp + 12) 
-     end 
-     self.active = true 
-     self 
-   end 
- end 
- #============================================================================== 
- # ■ Window_FileCommand 
- #------------------------------------------------------------------------------ 
- #  截图存档左侧的选择窗口。 
- #============================================================================== 
- class Window_FileCommand < Window_Command 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     super(0, 0) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● ウィンドウ幅の取得 
-   #-------------------------------------------------------------------------- 
-   def window_height 
-     return Graphics.height-fitting_height(1) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 表示行数の取得 
-   #-------------------------------------------------------------------------- 
-   def visible_line_number 
-     item_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● コマンドリストの作成 
-   #-------------------------------------------------------------------------- 
-   def make_command_list 
-     add_main_commands 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 主要コマンドをリストに追加 
-   #-------------------------------------------------------------------------- 
-   def add_main_commands 
-     for i in 1..PS0::Window_SaveFile_Plus::MAX_SAVE 
-       if i < 10 
-         text = Vocab::File + " 0" + i.to_s 
-       else 
-         text = Vocab::File + " " + i.to_s 
-       end 
-       add_command(text, :file) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 決定ボタンが押されたときの処理 
-   #-------------------------------------------------------------------------- 
-   def process_ok 
-   end 
- end 
- #============================================================================== 
- # ■ Window_SaveFile 
- #------------------------------------------------------------------------------ 
- #  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。 
- #============================================================================== 
- class Window_SaveFile < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #     index : セーブファイルのインデックス 
-   #-------------------------------------------------------------------------- 
-   def initialize(index) 
-     super(160, 0, Graphics.width-160, Graphics.height-fitting_height(1)) 
-     @file_index = index 
-     @selected = true 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● リフレッシュ 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     contents.clear 
-     change_color(normal_color) 
-     w = (self.width-PS0::Window_SaveFile_Plus::Thumbnail_Width-16)/2 
-     h = (self.height-PS0::Window_SaveFile_Plus::Thumbnail_Height-16)/2 
-     width  = w + PS0::Window_SaveFile_Plus::Thumbnail_ox 
-     height = h + PS0::Window_SaveFile_Plus::Thumbnail_oy 
-     draw_shadow(width+5, height+5) 
-     draw_text((self.width-32-PS0::Window_SaveFile_Plus::NO_DATA.length*16)/2, 
-               self.height/2-32, PS0::Window_SaveFile_Plus::NO_DATA.length*32, 
-               line_height, PS0::Window_SaveFile_Plus::NO_DATA) 
-     draw_party_characters(32, Graphics.height-fitting_height(1)-32) 
-     draw_playtime(-10, contents.height - line_height-10, contents.width - 4, 2) 
-     draw_snapshoot(width, height) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● パーティキャラの描画 
-   #-------------------------------------------------------------------------- 
-   def draw_party_characters(x, y) 
-     header = DataManager.load_header(@file_index) 
-     return unless header 
-     header[:characters].each_with_index do |data, i| 
-       draw_character(data[0], data[1], x + i * 48, y) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● プレイ時間の描画 
-   #-------------------------------------------------------------------------- 
-   def draw_playtime(x, y, width, align) 
-     header = DataManager.load_header(@file_index) 
-     return unless header 
-     draw_text(x, y, width, line_height, header[:playtime_s], 2) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制截图 
-   #-------------------------------------------------------------------------- 
-   def draw_snapshoot(x, y) 
-     header = DataManager.load_header(@file_index) 
-     return unless header 
-     bitmap = header[:snapshoot] 
-     contents.blt(x, y, bitmap, bitmap.rect) 
-     bitmap.dispose 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制阴影 
-   #-------------------------------------------------------------------------- 
-   def draw_shadow(x, y) 
-     header = DataManager.load_header(@file_index) 
-     return unless header 
-     contents.fill_rect(x, y, PS0::Window_SaveFile_Plus::Thumbnail_Width, 
-                              PS0::Window_SaveFile_Plus::Thumbnail_Height, Color.new(0, 0, 0)) 
-     contents.blur 
-   end 
- end 
- #============================================================================== 
- # ■ Scene_File 
- #------------------------------------------------------------------------------ 
- #  セーブ画面とロード画面の共通処理を行うクラスです。 
- #============================================================================== 
- class Scene_File < Scene_MenuBase 
-   #-------------------------------------------------------------------------- 
-   # ● 開始処理 
-   #-------------------------------------------------------------------------- 
-   def start 
-     super 
-     create_help_window 
-     create_savefile_viewport 
-     create_command_window 
-     create_savefile_window 
-     create_manager_window 
-     create_replace_window 
-     create_delete_window 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 終了処理 
-   #-------------------------------------------------------------------------- 
-   def terminate 
-     super 
-     @savefile_viewport.dispose 
-     @savefile_window.dispose 
-     @command_window.dispose 
-     @window_manager.dispose 
-     @window_replace.dispose 
-     @window_delete.dispose 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 
-   #-------------------------------------------------------------------------- 
-   def update 
-     super 
-     update_savefile_selection 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 创建替换窗口 
-   #-------------------------------------------------------------------------- 
-   def create_replace_window 
-     @window_replace = Window_Yes_Or_No.new("替换", "取消") 
-     @window_replace.set_handler(:yes,    method(:do_replace)) 
-     @window_replace.set_handler(:cancel, method(:do_cancel)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 创建删除窗口 
-   #-------------------------------------------------------------------------- 
-   def create_delete_window 
-     @window_delete  = Window_Yes_Or_No.new("删除", "取消") 
-     @window_delete.set_handler(:yes,    method(:do_delete)) 
-     @window_delete.set_handler(:cancel, method(:do_return_manager)) 
-     @window_delete.x += 40 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 创建管理窗口 
-   #-------------------------------------------------------------------------- 
-   def create_manager_window 
-     @window_manager = Window_SaveManagerCommand.new("复制", "移动", "删除", "取消") 
-     @window_manager.set_handler(:copy  , method(:on_copy?)) 
-     @window_manager.set_handler(:move  , method(:on_move?)) 
-     @window_manager.set_handler(:delete, method(:on_delete?)) 
-     @window_manager.set_handler(:cancel, method(:do_cancel)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● ヘルプウィンドウの作成 
-   #-------------------------------------------------------------------------- 
-   def create_help_window 
-     @help_window = Window_Help.new(1) 
-     @help_window.set_text(help_window_text) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● ヘルプウィンドウのテキストを取得 
-   #-------------------------------------------------------------------------- 
-   def help_window_text 
-     return "" 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイルビューポートの作成 
-   #-------------------------------------------------------------------------- 
-   def create_savefile_viewport 
-     @savefile_viewport = Viewport.new 
-     @savefile_viewport.rect.y = @help_window.height 
-     @savefile_viewport.rect.height -= @help_window.height 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイルウィンドウの作成 
-   #-------------------------------------------------------------------------- 
-   def create_savefile_window 
-     @savefile_window = Window_SaveFile.new(@index) 
-     @savefile_window.viewport = @savefile_viewport 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 生成存档列表窗口 
-   #-------------------------------------------------------------------------- 
-   def create_command_window 
-     @command_window = Window_FileCommand.new 
-     @command_window.index = first_savefile_index 
-     @index = @command_window.index 
-     @command_window.viewport = @savefile_viewport 
-     @command_window.set_handler(:file,      method(:on_savefile_ok)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル選択の更新 
-   #-------------------------------------------------------------------------- 
-   def update_savefile_selection 
-     if @source_index != nil 
-       if Input.trigger?(:C) 
-         if @index == @source_index 
-           Sound.play_buzzer 
-         elsif FileTest.exist?(DataManager.make_filename(@index)) 
-           Graphics.freeze 
-           @command_window.deactivate 
-           @window_replace.y = 72 + @index * 24 
-           @window_replace.activate 
-           @window_replace.visible = true 
-           @window_replace.refresh 
-           Sound.play_ok 
-           Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-         else 
-           return on_copy_ok 
-         end 
-       elsif Input.trigger?(:B) 
-         return do_return_manager 
-       end 
-     else 
-       if Input.trigger?(:C) 
-         if self.is_a?(Scene_Save) and FileTest.exist?(DataManager.make_filename(@index)) 
-           Graphics.freeze 
-           @command_window.deactivate 
-           @window_replace.y = 72 + @index * 24 
-           @window_replace.activate 
-           @window_replace.visible = true 
-           @window_replace.refresh 
-           Sound.play_ok 
-           Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-         else 
-           return on_savefile_ok 
-         end 
-       elsif Input.trigger?(:B) 
-         return on_savefile_cancel 
-       elsif Input.trigger?(:F5) 
-         unless @window_manager.active == true or 
-                @window_delete.active == true or 
-                @window_replace.active == true 
-           return on_manager? 
-         end 
-       end 
-     end 
-     @need_refresh = true if @index != @command_window.index 
-     if @need_refresh 
-       Graphics.freeze 
-       @index = @command_window.index 
-       @savefile_window.dispose 
-       create_savefile_window 
-       @need_refresh = false 
-       Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[決定] 
-   #-------------------------------------------------------------------------- 
-   def on_savefile_ok 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[キャンセル] 
-   #-------------------------------------------------------------------------- 
-   def on_savefile_cancel 
-     Sound.play_cancel 
-     return_scene 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[決定] 
-   #-------------------------------------------------------------------------- 
-   def on_copy_ok 
-     Graphics.freeze 
-     source_name = DataManager.make_filename(@source_index) 
-     new_name    = DataManager.make_filename(@index) 
-     case @source_type 
-     when "copy" 
-       # 复制存档文件(API) 
-       Win32API.new('kernel32',"CopyFileA",'ppl','').call(source_name,new_name,0)  
-     when "move" 
-       # 重命名存档 
-       File.rename(source_name, new_name)  
-     end 
-     # 返回 
-     @help_window.set_text(help_window_text) 
-     @source_index = nil 
-     do_return_savelist 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[复制] 
-   #-------------------------------------------------------------------------- 
-   def on_copy? 
-     Graphics.freeze 
-     @help_window.set_text(PS0::Window_SaveFile_Plus::HELP_COPY) 
-     @source_index = @index 
-     @source_type = "copy" 
-     do_return_savelist 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[移动] 
-   #-------------------------------------------------------------------------- 
-   def on_move? 
-     Graphics.freeze 
-     @help_window.set_text(PS0::Window_SaveFile_Plus::HELP_MOVE) 
-     @source_index = @index 
-     @source_type = "move" 
-     do_return_savelist 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[管理] 
-   #-------------------------------------------------------------------------- 
-   def on_manager? 
-     if FileTest.exist?(DataManager.make_filename(@index)) 
-       Graphics.freeze 
-       @command_window.deactivate 
-       @window_manager.y = 72 + @index * 24 
-       @window_manager.activate 
-       @window_manager.visible = true 
-       @window_manager.refresh 
-       Sound.play_ok 
-       Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-     else 
-       Sound.play_buzzer 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● セーブファイル[删除] 
-   #-------------------------------------------------------------------------- 
-   def on_delete? 
-     Graphics.freeze 
-     @window_manager.deactivate 
-     @command_window.deactivate 
-     @window_delete.y = 72 + 72 + @index * 24 
-     @window_delete.activate 
-     @window_delete.visible = true 
-     @window_delete.refresh 
-     Sound.play_ok 
-     Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 删除 
-   #-------------------------------------------------------------------------- 
-   def do_delete 
-     Graphics.freeze 
-     File.delete(DataManager.make_filename(@index)) 
-     @window_delete.index  = 0 
-     @window_manager.index = 0 
-     @window_delete.visible  = false 
-     @window_manager.visible = false 
-     @window_delete.deactivate 
-     @window_manager.deactivate 
-     @command_window.activate 
-     @need_refresh = true 
-     Sound.play_save 
-     if DataManager.save_file_exists? 
-       Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-     else 
-       return_scene 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 替换 
-   #-------------------------------------------------------------------------- 
-   def do_replace 
-     Graphics.freeze 
-     if @source_index != nil 
-       return on_copy_ok 
-     else 
-       return on_savefile_ok 
-     end 
-     @window_replace.visible = false 
-     @window_replace.deactivate 
-     @need_refresh = true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 取消 
-   #-------------------------------------------------------------------------- 
-   def do_cancel 
-     Graphics.freeze 
-     Sound.play_cancel 
-     @window_delete.index  = 0 
-     @window_replace.index = 0 
-     @window_manager.index = 0 
-     @window_delete.visible  = false 
-     @window_replace.visible = false 
-     @window_manager.visible = false 
-     @window_delete.deactivate 
-     @window_replace.deactivate 
-     @window_manager.deactivate 
-     @command_window.activate 
-     Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 返回管理菜单 
-   #-------------------------------------------------------------------------- 
-   def do_return_manager 
-     Graphics.freeze 
-     @help_window.set_text(help_window_text) 
-     @command_window.index = @source_index unless @source_index == nil 
-     @source_index = nil 
-     @source_type = nil 
-     @command_window.deactivate 
-     @window_delete.index  = 0 
-     @window_replace.index = 0 
-     @window_delete.visible  = false 
-     @window_replace.visible = false 
-     @window_delete.deactivate 
-     @window_replace.deactivate 
-     @window_manager.y = 72 + @index * 24 
-     @window_manager.activate 
-     @window_manager.visible = true 
-     @window_manager.refresh 
-     Sound.play_cancel 
-     Graphics.transition(PS0::Window_SaveFile_Plus::TRANS_DURATION) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 返回文件列表(复制、移动 用) 
-   #-------------------------------------------------------------------------- 
-   def do_return_savelist 
-     @window_manager.visible = false 
-     @window_manager.deactivate 
-     @command_window.activate 
-     @need_refresh = true 
-     Sound.play_ok 
-   end 
- end 
- #============================================================================== 
- # [PS0] End of Script 
- #==============================================================================