Project1

标题: 如何在对话中存档? [打印本页]

作者: SOU    时间: 2011-7-30 20:17
标题: 如何在对话中存档?
本帖最后由 SOU 于 2011-8-1 12:17 编辑

我在Window_Message中input_pause方法里增加了一个条件分歧
  if  Input.trigger?(Input::Y)
     $scene = Scene_Menu2.new
     end
Menu2一个小菜单,里面只有储存、读取和退出

于是,我做到了在对话中打开菜单……
但是,在对话时存档的话,Scene_File会在这一行报错
Marshal.dump($game_message,        file)

以下是错误内容
TypeError
no marshal_dump is defined for class proc

我并不太懂脚本,所有的内容都是照葫芦画瓢弄出来的,到这里只明白有一个变量不能被写入存档
所以向大家求助,究竟应该怎么修改,才能在对话中进行AVG式的存档读档?

m(_ _)m拜托了老师!.rar (242.55 KB, 下载次数: 128)
嗯,拜托大家了
————————————————————————————————————————
非常白菜君又资助了我,欠下了不少人情呢。请大家记住这个好人dsu_plus_rewardpost_czw
作者: 夕阳武士    时间: 2011-7-30 20:34
SOU酱,我只是过来提醒你,用Scene_Menu2这种名字不是很好的选择。以前我用Window_Gold2这种名字MS出错过......
作者: SOU    时间: 2011-7-30 20:36
夕阳武士 发表于 2011-7-30 20:34
SOU酱,我只是过来提醒你,用Scene_Menu2这种名字不是很好的选择。以前我用Window_Gold2这种名字MS出错过.. ...

0 0 哎?是这样的吗?我是不太明白的……具体出错的原因是什么呢?
作者: fux2    时间: 2011-7-30 22:47
本帖最后由 fux2 于 2011-7-30 23:03 编辑
SOU 发表于 2011-7-30 20:36
0 0 哎?是这样的吗?我是不太明白的……具体出错的原因是什么呢?


既然是SOU酱那一定要帮忙了=v=
m(_ _)m拜托了老师!.rar (247.16 KB, 下载次数: 115)

[line]5[/line]
Proc, Thread, IO (File, Socket ...), Continuation, Method 类都是无法被dump的,所以直接存档时无解的.
($game_message里的main_proc属性就是一个proc类)
唯一简单的方法是记录该对话之前的$game_message状态
作者: fux4    时间: 2011-7-30 23:11
本帖最后由 fux4 于 2011-7-30 23:15 编辑

今日吾辈要睡了,而且一时也想不出定义Proc#dump的方法,先留码,给后人参考
  1. class Proc
  2.   attr_accessor :source
  3.   class << self
  4.     def _load(aString)
  5.       foo=eval(aString)
  6.       foo.source=aString
  7.       foo
  8.     end
  9.   end
  10.   def _dump(aDepth)
  11.     source or raise "抛出"
  12.   end
  13. end

  14. module Kernel
  15.   alias :old_proc :proc
  16.   def Kernel.proc(string=nil,&b)
  17.     if string and b then raise "bad argument, dude" end
  18.       if string then
  19.         Proc._load("proc{#{string}}")
  20.       else
  21.         old_proc(&b)
  22.       end
  23.     end
  24.   def proc(string=nil,&b)
  25.     Kernel.proc(string,&b)
  26.   end
  27. end
复制代码
另外预留一条别人的解决方法供参考
http://rpg.blue/thread-93745-1-1.html
作者: SOU    时间: 2011-7-31 16:53
本帖最后由 SOU 于 2011-7-31 17:24 编辑
fux2 发表于 2011-7-30 22:47
既然是SOU酱那一定要帮忙了=v=

←_←抱歉,这段话我不太能理解了
所以,怎么说呢,拜托你了
Proc, Thread, IO (File, Socket ...), Continuation, Method 类都是无法被dump的,所以直接存档时无解的.
($game_message里的main_proc属性就是一个proc类)
唯一简单的方法是记录该对话之前的$game_message状态

↑不能理解的是这里啊
作者: fux2    时间: 2011-7-31 17:38
本帖最后由 fux2 于 2011-7-31 17:40 编辑
SOU 发表于 2011-7-31 16:53
←_←抱歉,这段话我不太能理解了
所以,怎么说呢,拜托你了


就是说存档的时候是用dump的方法把各种变量都放到存档文件里的。
然而不是任何变量(类)都可以的,上面举例的类都不行.
于是保存$game_message的时候,因为$game_message.main_proc是一个Proc类,导致dump出错,故存档失败,正在与其他人探究解决方法.
67姐姐提出了用自己写的类代替proc的方法来解决,但是怎么取挡又成了问题.
作者: IamI    时间: 2011-7-31 17:56
[即时存档的XP版本点我]
以前因为曾经往里面动手脚所以研究过很久,大概就是弄了一堆一堆的dump和_dump= =b
说实在的改过来恐怕报价不低 = =||
作者: fux2    时间: 2011-7-31 20:55
IamI 发表于 2011-7-31 17:56
[即时存档的XP版本点我]
以前因为曾经往里面动手脚所以研究过很久,大概就是弄了一堆一堆的dump和_dump= =b ...

捂脸逃走{:nm_2:}
作者: 小鱼子    时间: 2011-8-2 11:50
半成品发布…………
半成品……………….rar (245.06 KB, 下载次数: 58)
作者: SOU    时间: 2011-9-1 21:02
自顶up
←_←
作者: 各种压力的猫君    时间: 2011-9-1 22:54
OTL 我在做ADV(文字冒险类)……也需要这个功能……
结果各种尝试失败 = = |||
没办法改成关键事件前提示存档了 ╮(╯_╰)╭
作者: 陈友进    时间: 2011-9-2 08:33
脚本很难弄
直接在事件插入一个选项,然后在·插入打开储存
作者: fux2    时间: 2011-9-2 16:27
本帖最后由 fux2 于 2011-9-2 16:52 编辑

以下插入到Main上方= =,之前想出来忘了发
  1. class Window_Message < Window_Selectable
  2.   def terminate_message
  3.     self.active = false
  4.     self.pause = false
  5.     self.index = -1
  6.     @gold_window.close
  7.     @number_input_window.active = false
  8.     @number_input_window.visible = false
  9.     eval("$game_map.interpreter.instance_eval{#{$game_message.main_proc}}") if $game_message.main_proc != nil
  10.     $game_message.clear
  11.   end
  12. end
  13. class Game_Interpreter
  14.   def set_message_waiting
  15.     @message_waiting = true
  16.     $game_message.main_proc = '@message_waiting = false'
  17.   end
  18. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1