设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2066|回复: 4
打印 上一主题 下一主题

[已经解决] 无法进行存读档

[复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
2 小时
注册时间
2010-7-21
帖子
139
跳转到指定楼层
1
发表于 2010-8-24 09:35:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42448
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

2
发表于 2010-8-24 09:36:54 | 只看该作者
东西不发难道让我们这些答题的去找?
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
2 小时
注册时间
2010-7-21
帖子
139
3
 楼主| 发表于 2010-8-24 09:58:22 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
26 小时
注册时间
2009-11-27
帖子
156
4
发表于 2010-8-24 10:01:32 | 只看该作者
那就编辑原帖啊

点评

.............  发表于 2010-8-24 10:07
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
79
在线时间
211 小时
注册时间
2010-8-21
帖子
442
5
发表于 2010-8-26 18:15:38 | 只看该作者
回复 Allguard 的帖子

首先我考虑的是不是和LZ同一个存档脚本,这个我把本来50个删除剩了10+个,因为怕玩家不懂上下翻页
废话不多说,首先看前面的注释,好吧,这个地球人都知道
再者我下面说的方法只针对,事件标题。
在我的脚本第408行,是本来是切换到标题的,我把他改成$scene = Scene_Map.new
如果LZ和我的是一样就差不多在那个位置找这句就行
  1. ###使用说明
  2. #使用前请复制sceneshot.dll到游戏文件下,并新建文件夹Save
  3. #将此文本插入main前面
  4. #游戏前显示头像的文件名为:人物角色名_f,请自行建立几张做测试,不然找不到图片会报错
  5. #自动存档按钮F5 存入档位0(也就是自动存档那栏)
  6. #使用前,请在菜单脚本:scene_menu里面,
  7. #     when 4 # 存档
  8. #     # 禁止存档的情况下
  9. #     if $game_system.save_disabled
  10. #       # 演奏冻结 SE
  11. #       $game_system.se_play($data_system.buzzer_se)
  12. #       return
  13. #     end
  14. #     # 演奏确定 SE
  15. #     $game_system.se_play($data_system.decision_se)
  16. #     # 切换到存档画面
  17. #     $scene = Scene_Save.new <--这行
  18. #替换为:   $scene = Scene_Loadsave.new
  19. #另,在原scene_title里,48行左右
  20. #    for i in 0..3
  21. #          for i in 0..3
  22. #     if FileTest.exist?("Save#{i+1}.rxdata")
  23. ###################改成if FileTest.exist?("Save/Save#{i+1}.rxdata")
  24. #        @continue_enabled = true
  25. #      end
  26. #    end
  27. #否则继续游戏时会检测不到存档

  28. class Window_File < Window_Base
  29.   attr_accessor :index
  30.   def initialize(index = 0)
  31.     @backsp = Sprite.new
  32.    # @backsp.bitmap = Bitmap.new("Graphics/Pictures/菜单底图.jpg")
  33.     @backsp.z = 100
  34.     super(160,64,480,416)
  35.     #这行可以不用
  36.     self.contents = Bitmap.new(width - 32, height - 32)
  37.     @index = index
  38.     #这里我要说明一句,之所以用sprite是为了放缩图片
  39.     @sprite = Sprite.new
  40.     @sprite.visible = false
  41.     @sprite.z = 100
  42.     @sp_ch = []
  43.     @sp_ch[0] = Sprite.new
  44.     refresh
  45.   end
  46.   def refresh
  47.     self.contents.clear
  48.     for i in @sp_ch
  49.       i.visible = false
  50.     end
  51.     @sprite.visible = false
  52.     if FileTest.exist?(DIR+"Save#{@index}.rxdata")
  53.       @sprite.visible = true
  54.       if FileTest.exist?(DIR+"Save#{@index}.jpg")
  55.         @sprite.bitmap = Bitmap.new(DIR+"Save#{@index}.jpg")
  56.       else
  57.         self.contents.draw_text(32,64,400,32,"截图似乎有点问题……您搞什么了您?")
  58.       end
  59.       @sprite.x = 290
  60.       @sprite.y = 69
  61.       @sprite.z = 998
  62.       @sprite.zoom_x = 0.538
  63.       @sprite.zoom_y = 0.454
  64.       file = File.open(DIR+"Save#{@index}.rxdata", "r")
  65.       @time_stamp = file.mtime
  66.       @characters = Marshal.load(file)
  67.       @frame_count = Marshal.load(file)
  68.       @game_system = Marshal.load(file)
  69.       @game_switches = Marshal.load(file)
  70.       @game_variables = Marshal.load(file)
  71.       @total_sec = @frame_count / Graphics.frame_rate
  72.       file.close
  73.       for i in [email protected]
  74.         @sp_ch[i] = Sprite.new
  75.         @sp_ch[i].visible = true
  76.         testname = @characters[i][2].name+"_f"
  77.         @sp_ch[i].bitmap = Bitmap.new("Graphics/battlers/#{testname}")
  78.         @sp_ch[i].zoom_x = 1
  79.         @sp_ch[i].zoom_y = 0.86
  80.         @sp_ch[i].x = 167        
  81.         @sp_ch[i].y = 69 + i*109
  82.         @sp_ch[i].z = 101
  83.       end
  84.       # 描绘游戏时间
  85.       hour = @total_sec / 60 / 60
  86.       min = @total_sec / 60 % 60
  87.       sec = @total_sec % 60
  88.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  89.       self.contents.font.color = normal_color
  90.       self.contents.draw_text(4, 326, 420, 32, time_string, 2)
  91.       # 描绘时间标记
  92.       self.contents.font.color = normal_color
  93.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  94.       self.contents.draw_text(4, 356, 420, 32, time_string, 2)
  95.     else
  96.       self.contents.draw_text(32,32,420,32,"这个存档是空的")
  97.     end

  98.   end
  99.   def dispose
  100.     super
  101.     @sprite.dispose
  102.     @backsp.dispose
  103.     for i in @sp_ch
  104.       i.dispose
  105.     end
  106.   end
  107. end


  108. class Window_File2 < Window_Base
  109.   attr_accessor :index
  110.   def initialize(index = 0)
  111.     @backsp = Sprite.new
  112.    # @backsp.bitmap = Bitmap.new("Graphics/Pictures/菜单底图.jpg")
  113.     @backsp.z = 100
  114.     super(160,0,480,480)
  115.     #这行可以不用
  116.     self.contents = Bitmap.new(width - 32, height - 32)
  117.     @index = index
  118.     #这里我要说明一句,之所以用sprite是为了放缩图片
  119.     @sprite = Sprite.new
  120.     @sprite.visible = false
  121.     @sprite.z = 100
  122.     @sp_ch = []
  123.     @sp_ch[0] = Sprite.new
  124.     refresh
  125.   end
  126.   def refresh
  127.     self.contents.clear
  128.     for i in @sp_ch
  129.       i.visible = false
  130.     end
  131.     @sprite.visible = false
  132.     if FileTest.exist?(DIR+"Save#{@index}.rxdata")
  133.       @sprite.visible = true
  134.       if FileTest.exist?(DIR+"Save#{@index}.jpg")
  135.         @sprite.bitmap = Bitmap.new(DIR+"Save#{@index}.jpg")
  136.       else
  137.         self.contents.draw_text(32,64,400,32,"截图似乎有点问题……您搞什么了您?

  138. ")
  139.       end
  140.       @sprite.x = 290
  141.       @sprite.y = 5
  142.       @sprite.z = 998
  143.       @sprite.zoom_x = 0.538
  144.       @sprite.zoom_y = 0.5
  145.       file = File.open(DIR+"Save#{@index}.rxdata", "r")
  146.       @time_stamp = file.mtime
  147.       @characters = Marshal.load(file)
  148.       @frame_count = Marshal.load(file)
  149.       @game_system = Marshal.load(file)
  150.       @game_switches = Marshal.load(file)
  151.       @game_variables = Marshal.load(file)
  152.       @total_sec = @frame_count / Graphics.frame_rate
  153.       file.close
  154.       for i in [email protected]
  155.         @sp_ch[i] = Sprite.new
  156.         @sp_ch[i].visible = true
  157.         testname = @characters[i][2].name+"_f"
  158.         @sp_ch[i].bitmap = Bitmap.new("Graphics/battlers/#{testname}")
  159.         @sp_ch[i].x = 167        
  160.         @sp_ch[i].y = 5 + i*120
  161.         @sp_ch[i].z = 101
  162.       end
  163.       # 描绘游戏时间
  164.       hour = @total_sec / 60 / 60
  165.       min = @total_sec / 60 % 60
  166.       sec = @total_sec % 60
  167.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  168.       self.contents.font.color = normal_color
  169.       self.contents.draw_text(4, 390, 420, 32, time_string, 2)
  170.       # 描绘时间标记
  171.       self.contents.font.color = normal_color
  172.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  173.       self.contents.draw_text(4, 420, 420, 32, time_string, 2)
  174.     else
  175.       self.contents.draw_text(32,32,420,32,"这个存档是空的")
  176.     end

  177.   end
  178.   def dispose
  179.     super
  180.     @sprite.dispose
  181.     @backsp.dispose
  182.     for i in @sp_ch
  183.       i.dispose
  184.     end
  185.   end
  186. end



  187. $打开自动存档用的开关编号 = 1
  188. $自动存档位置 = 0
  189. $按下F5之后的自动存档的音效 = "Audio/SE/007-System07"
  190. $按下F5之后禁止存档时候的音效 = "Audio/Se/003-System03"
  191. DIR = "Save/"
  192. $打开自动存档开关之后调用的公共事件 = 0 #——默认未定义
  193. $按下F5之后可以存档调用的公共事件 = 0 #——默认未定义
  194. $按下F5之后禁止存档调用的公共事件 = 0 #——默认未定义
  195. class Scene_Map
  196. alias auto_update update
  197. def update
  198. auto_update
  199. #——按下F5的时候自动存档,可以修改为F5,F6,F7,F8,也可以修改成默认按键但是不推荐。
  200. #——注意在不可存档的时候是无效的
  201. if Input.trigger?(Input::F5)
  202.    unless $game_system.map_interpreter.running?
  203.    if $game_system.save_disabled
  204.      Audio.se_play($按下F5之后禁止存档时候的音效)
  205.      $game_temp.common_event_id = $按下F5之后禁止存档调用的公共事件
  206.    else
  207.      Audio.se_play($按下F5之后的自动存档的音效)
  208.      $game_temp.common_event_id = $按下F5之后可以存档调用的公共事件
  209.      auto_save
  210.    end
  211.    end
  212. end
  213. #——当BOSS战之前打开一下定义的开关,即可自动存档
  214. if $game_switches[$打开自动存档用的开关编号] == true
  215.    $game_switches[$打开自动存档用的开关编号] = false
  216.    $game_temp.common_event_id = $打开自动存档开关之后调用的公共事件
  217.    auto_save
  218. end
  219. end
  220. def auto_save
  221. #——这里定义了储存的文件,如果不希望用Save4可以自己修改编号
  222. # 写入存档数据
  223. Screen::shot
  224.      file = File.open( DIR+"Save#{$自动存档位置}.rxdata", "wb")
  225.      auto_save_data(file)
  226.      if FileTest.exist?( DIR+"shot.jpg")
  227.        File.rename( DIR+"shot.jpg", DIR+"Save#{$自动存档位置}.jpg")
  228.      end
  229.      file.close
  230. end
  231. def auto_save_data(file)
  232. #——以下定义内容和Scene_Save的write_save_data(file)完全一样
  233. #——如果你修改过该存档方法,不要忘记用你修改的覆盖这部分内容。
  234. # 生成描绘存档文件用的角色图形
  235. characters = []
  236. for i in 0...$game_party.actors.size
  237.    actor = $game_party.actors[i]
  238.    characters.push([actor.character_name, actor.character_hue, actor])
  239. end
  240. # 写入描绘存档文件用的角色数据
  241. Marshal.dump(characters, file)
  242. # 写入测量游戏时间用画面计数
  243. Marshal.dump(Graphics.frame_count, file)
  244. # 增加 1 次存档次数
  245. $game_system.save_count += 1
  246. # 保存魔法编号
  247. # (将编辑器保存的值以随机值替换)
  248. $game_system.magic_number = $data_system.magic_number
  249. # 写入各种游戏对像
  250. Marshal.dump($game_system, file)
  251. Marshal.dump($game_switches, file)
  252. Marshal.dump($game_variables, file)
  253. Marshal.dump($game_self_switches, file)
  254. Marshal.dump($game_screen, file)
  255. Marshal.dump($game_actors, file)
  256. Marshal.dump($game_party, file)
  257. Marshal.dump($game_troop, file)
  258. Marshal.dump($game_map, file)
  259. Marshal.dump($game_player, file)
  260. end
  261. end







  262. DIR = "Save/"  # 储存文件夹名,请制作游戏时自行建立此文件夹


  263. module Screen  
  264.   @screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
  265.   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l

  266. p), 'l'
  267.   @findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
  268.   module_function
  269.   def shot(file = "shot", typ = 1)
  270.     # to add the right extension...
  271.     if typ == 0
  272.       typname = ".bmp"
  273.     elsif typ == 1
  274.       typname = ".jpg"
  275.     elsif typ == 2
  276.       typname = ".png"
  277.     end   
  278.     file_index = 0   
  279.     dir = "Save/"   
  280.     # make the filename....
  281.     file_name = dir + file.to_s + typname.to_s   
  282.     # make the screenshot.... Attention dont change anything from here on....
  283.     @screen.call(0,0,640,480,file_name,handel,typ)
  284.   end
  285.   # find the game window...
  286.   def handel
  287.     game_name = "\0" * 256
  288.     @readini.call('Game','Title','',game_name,255,".\\Game.ini")
  289.     game_name.delete!("\0")
  290.     return @findwindow.call('RGSS Player',game_name)
  291.   end
  292. end


  293. class Scene_Menu
  294.   alias shotsave_main main
  295.   def main
  296.     if @menu_index == 0
  297.       Screen::shot
  298.     end   
  299.     shotsave_main
  300.   end
  301. end

  302. class Interpreter
  303.   #--------------------------------------------------------------------------
  304.   # ● 调用存档画面
  305.   #--------------------------------------------------------------------------
  306.   def command_352
  307.     # 设置战斗中断标志
  308.     $game_temp.battle_abort = true
  309.     # 设置调用存档标志
  310.     $game_temp.save_calling = true
  311.     # 推进索引
  312.     @index += 1
  313.     # 结束
  314.     Screen::shot
  315.     return false
  316.   end
  317. end

  318. #==============================================================================
  319. # ■ Scene_Load
  320. #------------------------------------------------------------------------------
  321. #  处理读档画面的类。
  322. #==============================================================================

  323. class Scene_Load
  324.   #--------------------------------------------------------------------------
  325.   # ● 初始化对像
  326.   #--------------------------------------------------------------------------
  327.   def initialize
  328.     # 再生成临时对像
  329.     $game_temp = Game_Temp.new
  330.     # 选择存档时间最新的文件
  331.     $game_temp.last_file_index = 0
  332.     latest_time = Time.at(0)
  333.     for i in 0..51
  334.       filename = DIR+"Save#{i}.rxdata"
  335.       if FileTest.exist?(filename)
  336.         file = File.open(filename, "r")
  337.         if file.mtime > latest_time
  338.           latest_time = file.mtime
  339.           $game_temp.last_file_index = i
  340.         end
  341.         file.close
  342.       end
  343.     end
  344.   end  
  345.   def main
  346.     @command_window = Window_Command.new(160,["自动存档","进度一","进度二",
  347.     "进度三","进度四","进度五","进度六","进度七","进度八","进度九","进度十",
  348.     "进度十一","进度十二","进度十三"])
  349.     @command_window.y = 0
  350.     @command_window.height = 480
  351.     @command_window.index = $game_temp.last_file_index
  352.     @content_window = Window_File2.new($game_temp.last_file_index)
  353.     # 执行过渡
  354.     Graphics.transition
  355.     # 主循环
  356.     loop do
  357.       # 刷新游戏画面
  358.       Graphics.update
  359.       # 刷新输入信息
  360.       Input.update
  361.       # 刷新画面
  362.       update
  363.       # 如果画面被切换的话就中断循环
  364.       if $scene != self
  365.         break
  366.       end
  367.     end
  368.     # 准备过渡
  369.     Graphics.freeze
  370.     @command_window.dispose
  371.     @content_window.dispose
  372.   end
  373.   def update
  374.     @command_window.update
  375.     if @command_window.index != @content_window.index
  376.       @content_window.index = @command_window.index
  377.       @content_window.refresh
  378.     end   
  379.     #——————下面这一部分是原装脚本——————#
  380.     if Input.trigger?(Input::B)  
  381.     # 演奏取消 SE
  382.     $game_system.se_play($data_system.cancel_se)
  383.     # 切换到标题画面
  384.     $scene = Scene_Map.new
  385.     end   
  386.     #———————————————————————#   
  387.     if Input.trigger?(Input::C)
  388.       # 文件不存在的情况下
  389.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  390.         # 演奏冻结 SE
  391.         $game_system.se_play($data_system.buzzer_se)
  392.         return
  393.       end
  394.       # 演奏读档 SE
  395.       $game_system.se_play($data_system.load_se)
  396.       # 写入存档数据
  397.       file = File.open(DIR+"Save#{@command_window.index}.rxdata",

  398. "rb")
  399.       read_save_data(file)
  400.       file.close
  401.       # 还原 BGM、BGS
  402.       $game_system.bgm_play($game_system.playing_bgm)
  403.       $game_system.bgs_play($game_system.playing_bgs)
  404.       # 刷新地图 (执行并行事件)
  405.       $game_map.update
  406.       # 切换到地图画面
  407.       $scene = Scene_Map.new
  408.     end
  409.     #———————————————————————#
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 写入存档数据
  413.   #     file : 写入用文件对像 (已经打开)
  414.   #--------------------------------------------------------------------------
  415.   def read_save_data(file)
  416.     # 读取描绘存档文件用的角色数据
  417.     characters = Marshal.load(file)
  418.     # 读取测量游戏时间用画面计数
  419.     Graphics.frame_count = Marshal.load(file)
  420.     # 读取各种游戏对像
  421.     $game_system        = Marshal.load(file)
  422.     $game_switches      = Marshal.load(file)
  423.     $game_variables     = Marshal.load(file)
  424.     $game_self_switches = Marshal.load(file)
  425.     $game_screen        = Marshal.load(file)
  426.     $game_actors        = Marshal.load(file)
  427.     $game_party         = Marshal.load(file)
  428.     $game_troop         = Marshal.load(file)
  429.     $game_map           = Marshal.load(file)
  430.     $game_player        = Marshal.load(file)
  431.     # 魔法编号与保存时有差异的情况下
  432.     # (加入编辑器的编辑过的数据)
  433.     if $game_system.magic_number != $data_system.magic_number
  434.       # 重新装载地图
  435.       $game_map.setup($game_map.map_id)
  436.       $game_player.center($game_player.x, $game_player.y)
  437.     end
  438.     # 刷新同伴成员
  439.     $game_party.refresh
  440.   end
  441. end

  442. #==============================================================================
  443. #  Window_LoadCommand
  444. #------------------------------------------------------------------------------
  445. #  存取档画面选择按钮窗口
  446. #==============================================================================

  447. class Window_LoadCommand < Window_Selectable
  448. #--------------------------------------------------------------------------
  449. #  初始化对象
  450. #--------------------------------------------------------------------------
  451. def initialize
  452.   super(320, 0, 320, 64)
  453.   self.contents = Bitmap.new(width - 32, height - 32)
  454.   @item_max = 2
  455.   @column_max = 2
  456.   @commands = ["   读取", "   存储"]
  457.   refresh
  458.   self.index = 0
  459. end
  460. #--------------------------------------------------------------------------
  461. #  刷新
  462. #--------------------------------------------------------------------------
  463. def refresh
  464.   self.contents.clear
  465.   for i in 0...@item_max
  466.     draw_item(i)
  467.   end
  468. end
  469. #--------------------------------------------------------------------------
  470. #  描画按钮文字
  471. #--------------------------------------------------------------------------
  472. def draw_item(index)
  473.   x = 4 + index * 160
  474.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  475. end
  476. #--------------------------------------------------------------------------
  477. # ● 项目无效化
  478. #     index : 项目编号
  479. #--------------------------------------------------------------------------
  480.   def disable_item(index)
  481.     draw_item(index, disabled_color)
  482.   end

  483. end

  484. #==============================================================================
  485. #  Scene_Loadsave
  486. #------------------------------------------------------------------------------
  487. # 处理存取档画面的类。
  488. #==============================================================================

  489. class Scene_Loadsave
  490. #--------------------------------------------------------------------------
  491. # ● 初始化对像
  492. #     $last_savefile_index : 记录光标位置
  493. #--------------------------------------------------------------------------
  494.   def initialize
  495.     $last_savefile_index = 0 if $last_savefile_index == nil
  496.     # 再生成临时对像
  497.     $game_temp = Game_Temp.new
  498.     # 选择存档时间最新的文件
  499.     $game_temp.last_file_index = 0
  500.     latest_time = Time.at(0)
  501.     for i in 0..51
  502.       filename =  DIR+"Save#{i}.rxdata"
  503.       if FileTest.exist?(filename)
  504.         file = File.open(filename, "r")
  505.         if file.mtime > latest_time
  506.           latest_time = file.mtime
  507.           $game_temp.last_file_index = i
  508.         end
  509.         file.close
  510.       end
  511.     end
  512.   end
  513. #--------------------------------------------------------------------------
  514. #  主处理
  515. #--------------------------------------------------------------------------
  516.   def main         

  517.     @savestate = 0
  518.     # 生成窗口
  519.     @help_window = Window_LoadHelp.new
  520.     @help_window.set_text("请选择.")
  521.     @option_window = Window_LoadCommand.new
  522.     @option_window.index = $last_savefile_index
  523.     ########################################################
  524.     @command_window = Window_Command.new(160,["自动存档","进度一","进度二",
  525.       "进度三","进度四","进度五","进度六","进度七","进度八","进度九","进度十"])
  526.       @command_window.y = 64
  527.       @command_window.height = 416
  528.       @command_window.index = $game_temp.last_file_index
  529.       @content_window = Window_File.new($game_temp.last_file_index)
  530.       @command_window.active = false
  531.         ###############覆盖存档
  532.         @confirm_window = Window_Base.new(120, 188, 400, 64)
  533.         @confirm_window.contents = Bitmap.new(368, 32)
  534.         string = "确定要覆盖这个进度吗?"
  535.         @confirm_window.contents.font.name = "迷你简丫丫"
  536.         @confirm_window.contents.font.size = 24
  537.         @confirm_window.contents.draw_text(4, 0, 368, 32, string)
  538.         @yes_no_window = Window_Command.new(100, ["覆盖", "取消"])
  539.         @confirm_window.z = 1500
  540.         @yes_no_window.index = 1
  541.         @yes_no_window.x = 270
  542.         @yes_no_window.y = 252
  543.         @yes_no_window.z = 1500
  544.         @confirm_window.visible = false
  545.         @yes_no_window.visible = false
  546.         @yes_no_window.active = false

  547.     # 执行过渡
  548.     Graphics.transition
  549.     # 主循环
  550.     loop do
  551.       # 刷新游戏画面
  552.       Graphics.update
  553.       # 刷新输入信息
  554.       Input.update
  555.       # 刷新画面
  556.       update
  557.       # 如果画面被切换的话就中断循环
  558.       if $scene != self
  559.         break
  560.       end
  561.     end
  562.     # 准备过渡
  563.     Graphics.freeze
  564.     # 释放窗口
  565.     @command_window.dispose
  566.     @content_window.dispose
  567.     @confirm_window.dispose
  568.     @yes_no_window.dispose
  569.     @help_window.dispose
  570.     @option_window.dispose
  571.   end

  572. #--------------------------------------------------------------------------
  573. #  ● 刷新画面
  574. #--------------------------------------------------------------------------
  575.   def update
  576.     # 刷新窗口
  577.     @help_window.update
  578.     @option_window.update
  579. #   @content_window.update
  580.     @command_window.update
  581.     if @yes_no_window.active
  582.         confirm_update
  583.         return
  584.     end
  585.     @content_window.index = @command_window.index
  586.     @content_window.refresh
  587.     case @savestate
  588.     when 0
  589.         if Input.trigger?(Input::B)
  590.         $game_system.se_play($data_system.cancel_se)
  591.         # 返回地图
  592.         if $menu_call == false
  593.         # 切换到地图画面
  594.         $scene = Scene_Map.new
  595.           return
  596.         end
  597.         # 切换到菜单画面
  598.         $menu_call = false
  599.         $scene = Scene_Menu.new(7)
  600.      end
  601.       if Input.trigger?(Input::C)
  602.         case @option_window.index
  603.         when 0
  604.           @command_window.active = true
  605.           @option_window.active = false
  606.           $game_system.se_play($data_system.decision_se)
  607.           @help_window.set_text("请选择一个文件进行读取.")
  608.           @savestate  = 1
  609.           return
  610.         when 1
  611.           @command_window.active = true
  612.           @option_window.active = false
  613.           $game_system.se_play($data_system.decision_se)
  614.           @help_window.set_text("请选择一个文件进行存储.")
  615.           @savestate = 2
  616.          
  617.           return
  618.         return
  619.         end
  620.       end
  621.     when 1,2
  622.       if Input.trigger?(Input::C)
  623.         if @savestate == 1
  624.           $menu_call = false
  625.           load_file
  626.           return
  627.         else
  628.           # 禁止存档的情况下
  629.           if $game_system.save_disabled
  630.             @help_window.set_text("抱歉,这里禁止存储.")
  631.             # 演奏冻结 SE
  632.             $game_system.se_play($data_system.buzzer_se)
  633.             return
  634.           end
  635.          $game_system.se_play($data_system.decision_se)
  636.          $last_savefile_index = @option_window.index
  637.   
  638.          save_file
  639.           return
  640.         end
  641.       end
  642.       # 取消
  643.       if Input.trigger?(Input::B)
  644.         $game_system.se_play($data_system.cancel_se)
  645.         @command_window.active = false
  646.         @help_window.set_text("请选择.")
  647.         @savestate = 0
  648.         @option_window.active = true
  649.         return
  650.       end
  651.       
  652.       if Input.trigger?(Input::B)
  653.         $game_system.se_play($data_system.cancel_se)
  654.         @savestate = 2
  655.         @command_window.active = true

  656.         return
  657.       end
  658.     end
  659.   end
  660. #--------------------------------------------------------------------------
  661. # 建立记录文件索引
  662. #--------------------------------------------------------------------------

  663. #--------------------------------------------------------------------------
  664. #  读取记录文件
  665. #     filename  : 被读取文件
  666. #--------------------------------------------------------------------------
  667. def load_file
  668.       # 文件不存在的情况下
  669.       unless FileTest.exist?( DIR+"Save#{@command_window.index}.rxdata")
  670.         # 演奏冻结 SE
  671.         $game_system.se_play($data_system.buzzer_se)
  672.         return
  673.       end
  674.       # 演奏读档 SE
  675.       $game_system.se_play($data_system.load_se)
  676.       # 写入存档数据
  677.       file = File.open( DIR+"Save#{@command_window.index}.rxdata", "rb")
  678.       read_save_data(file)
  679.       file.close
  680.       # 还原 BGM、BGS
  681.       $game_system.bgm_play($game_system.playing_bgm)
  682.       $game_system.bgs_play($game_system.playing_bgs)
  683.       # 刷新地图 (执行并行事件)
  684.       $game_map.update
  685.       # 切换到地图画面
  686.       $scene = Scene_Map.new
  687. end
  688. #--------------------------------------------------------------------------
  689. # ● 读取存档数据
  690. #     file : 读取用文件对像 (已经打开)
  691. #--------------------------------------------------------------------------
  692.   def read_save_data(file)
  693.     # 读取描绘存档文件用的角色数据
  694.     characters = Marshal.load(file)
  695.     # 读取测量游戏时间用画面计数
  696.     Graphics.frame_count = Marshal.load(file)
  697.     # 读取各种游戏对像
  698.     $game_system        = Marshal.load(file)
  699.     $game_switches      = Marshal.load(file)
  700.     $game_variables     = Marshal.load(file)
  701.     $game_self_switches = Marshal.load(file)
  702.     $game_screen        = Marshal.load(file)
  703.     $game_actors        = Marshal.load(file)
  704.     $game_party         = Marshal.load(file)
  705.     $game_troop         = Marshal.load(file)
  706.     $game_map           = Marshal.load(file)
  707.     $game_player        = Marshal.load(file)
  708.     # 魔法编号与保存时有差异的情况下
  709.     # (加入编辑器的编辑过的数据)
  710.     if $game_system.magic_number != $data_system.magic_number
  711.       # 重新装载地图
  712.       $game_map.setup($game_map.map_id)
  713.       $game_player.center($game_player.x, $game_player.y)
  714.     end
  715.     # 刷新同伴成员
  716.     $game_party.refresh
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 写入存档文件
  720.   #--------------------------------------------------------------------------
  721.   def save_file
  722.     if Input.trigger?(Input::C)
  723.       unless FileTest.exist?( DIR+"Save#{@command_window.index}.rxdata")
  724.         # 演奏冻结 SE
  725.         # 演奏存档 SE
  726.           $game_system.se_play($data_system.save_se)
  727.           # 写入存档数据
  728.           file = File.open( DIR+"Save#{@command_window.index}.rxdata", "wb")
  729.           write_save_data(file)
  730.           if FileTest.exist?( DIR+"shot.jpg")
  731.             File.rename( DIR+"shot.jpg",  DIR+"Save#{@command_window.index}.jpg")
  732.           end
  733.           file.close
  734.           $game_temp.last_file_index = @command_window.index
  735.           # 如果被事件调用
  736.           if $game_temp.save_calling
  737.             # 清除存档调用标志
  738.             $game_temp.save_calling = false
  739.             @confirm_window.dispose
  740.             # 切换到地图画面
  741.             $scene = Scene_Map.new   
  742.             return
  743.           end
  744.         # 切换到菜单画面
  745.           $scene = Scene_Map.new  
  746.       end
  747.       @yes_no_window.active = true
  748.       @command_window.active = false            
  749.     end
  750.     #———————————————————————#     
  751.   end
  752.   #-------------------------------------------------------------------
  753.   def confirm_update
  754.     @command_index = @command_window.index
  755.     @confirm_window.visible = true
  756.     @confirm_window.z = 1500
  757.     @yes_no_window.visible = true
  758.     @yes_no_window.active = true
  759.     @yes_no_window.z = 1500
  760.     @yes_no_window.update
  761.     if Input.trigger?(Input::C)
  762.       if @yes_no_window.index == 0
  763.           #######################################################
  764.           # 演奏存档 SE
  765.           $game_system.se_play($data_system.save_se)
  766.           # 写入存档数据
  767.           file = File.open( DIR+"Save#{@command_window.index}.rxdata", "wb")
  768.           write_save_data(file)
  769.           if FileTest.exist?( DIR+"shot.jpg")
  770.             File.rename( DIR+"shot.jpg",  DIR+"Save#{@command_window.index}.jpg")
  771.           end
  772.           file.close
  773.           $game_temp.last_file_index = @command_window.index
  774.           # 如果被事件调用
  775.           if $game_temp.save_calling
  776.             # 清除存档调用标志
  777.             $game_temp.save_calling = false
  778.             @confirm_window.dispose
  779.             @content_window.dispose
  780.             # 切换到地图画面
  781.             $scene = Scene_Map.new
  782.    
  783.             return
  784.           end
  785.         # 切换到菜单画面
  786.           $scene = Scene_Map.new        
  787.         else
  788.         @yes_no_window.visible = false
  789.         @confirm_window.visible = false
  790.         $game_system.se_play($data_system.cancel_se)
  791.         @yes_no_window.active = false
  792.         @command_window.active = true
  793.         end
  794.     end
  795.     if Input.trigger?(Input::B)
  796.       @yes_no_window.visible = false
  797.       @confirm_window.visible = false
  798.       $game_system.se_play($data_system.cancel_se)
  799.       @yes_no_window.active = false
  800.       @command_window.active = true
  801.     end
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ● 写入存档数据
  805.   #     file : 写入用文件对像 (已经打开)
  806.   #--------------------------------------------------------------------------
  807.   def write_save_data(file)
  808.     # 生成描绘存档文件用的角色图形
  809.     characters = []
  810.     for i in 0...$game_party.actors.size
  811.       actor = $game_party.actors[i]
  812.       characters.push([actor.character_name, actor.character_hue, actor])
  813.     end
  814.     # 写入描绘存档文件用的角色数据
  815.     Marshal.dump(characters, file)
  816.     # 写入测量游戏时间用画面计数
  817.     Marshal.dump(Graphics.frame_count, file)
  818.     # 增加 1 次存档次数
  819.     $game_system.save_count += 1
  820.     # 保存魔法编号
  821.     # (将编辑器保存的值以随机值替换)
  822.     $game_system.magic_number = $data_system.magic_number
  823.     # 写入各种游戏对像
  824.     Marshal.dump($game_system, file)
  825.     Marshal.dump($game_switches, file)
  826.     Marshal.dump($game_variables, file)
  827.     Marshal.dump($game_self_switches, file)
  828.     Marshal.dump($game_screen, file)
  829.     Marshal.dump($game_actors, file)
  830.     Marshal.dump($game_party, file)
  831.     Marshal.dump($game_troop, file)
  832.     Marshal.dump($game_map, file)
  833.     Marshal.dump($game_player, file)
  834.   end
  835. end

  836. #==============================================================================
  837. # ■ Window_LoadHelp
  838. #------------------------------------------------------------------------------
  839. #  存取档画面帮助信息的显示窗口。
  840. #==============================================================================

  841. class Window_LoadHelp < Window_Base
  842. #--------------------------------------------------------------------------
  843. #  初始化对象
  844. #--------------------------------------------------------------------------
  845. def initialize
  846.   super(0, 0, 320, 64)
  847.   self.contents = Bitmap.new(width - 32, height - 32)
  848. end
  849. #--------------------------------------------------------------------------
  850. #  刷新文本
  851. #--------------------------------------------------------------------------
  852. def set_text(text, align = 1)
  853.   if text != @text or align != @align
  854.     self.contents.clear
  855.     self.contents.font.color = normal_color
  856.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  857.     @text = text
  858.     @align = align
  859.     @actor = nil
  860.   end
  861.   self.visible = true
  862. end
  863. end
复制代码

点评

应该不用,我找这个脚本的时候它没附加的  发表于 2010-8-29 15:32
似乎需要一个Dll包??  发表于 2010-8-29 14:18

评分

参与人数 1星屑 +240 收起 理由
「旅」 + 240 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 22:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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