Project1

标题: 汗汗~ 无聊 抢别人的功劳来发下~ 自动存档啦~ [打印本页]

作者: 尤莉斯    时间: 2007-2-1 23:28
标题: 汗汗~ 无聊 抢别人的功劳来发下~ 自动存档啦~
{/gg}{/gg}{/gg} 游戏自动存档~  当然不过遇到rp的比如断电那些情况就`````

N久米发过脚本~  无聊无聊抢别人的脚本改改发个好了~  邪恶啊 - -bbbbbbb

好了~ 不扯鸟 脚本如下~ :


  1. module Kernel

  2.   alias origin_exit exit unless method_defined? :exit
  3.   
  4.   def exit(*args)
  5.     case $scene
  6.     when Scene_Map
  7.       AutoSave.common_save unless $game_system.map_interpreter.running?
  8.     when Scene_Battle
  9.       AutoSave.common_save unless $game_system.battle_interpreter.running?
  10.     else
  11.       if $scene.type != NilClass and $scene.type != Scene_Title
  12.         AutoSave.common_save
  13.       end
  14.     end
  15.     origin_exit(*args)
  16.   end

  17. end


  18. module AutoSave

  19.   if @scene_proc.nil?
  20.     @last_scene = nil.class
  21.     @scene_proc = proc do |value|
  22.       if value.nil? or value.is_a?(Scene_Title)
  23.         if @last_scene != NilClass and @last_scene != Scene_Title
  24.           AutoSave.common_save
  25.         end
  26.       end
  27.       @last_scene = value.type
  28.     end
  29.     trace_var(:$scene,@scene_proc)
  30.   end
  31.   
  32.   module_function
  33.   
  34.   def common_save
  35.     filename = "Save#{$game_temp.last_file_index + 1}.rxdata"
  36.     file = File.open(filename, "wb")
  37.     write_save_data(file)
  38.     file.close
  39.   end
  40.   
  41.   def write_save_data(file)
  42.     characters = []
  43.     for i in 0...$game_party.actors.size
  44.       actor = $game_party.actors[i]
  45.       characters.push([actor.character_name, actor.character_hue])
  46.     end
  47.     Marshal.dump(characters, file)
  48.     Marshal.dump(Graphics.frame_count, file)
  49.     $game_system.save_count += 1
  50.     $game_system.magic_number = $data_system.magic_number
  51.     Marshal.dump($game_system, file)
  52.     Marshal.dump($game_switches, file)
  53.     Marshal.dump($game_variables, file)
  54.     Marshal.dump($game_self_switches, file)
  55.     Marshal.dump($game_screen, file)
  56.     Marshal.dump($game_actors, file)
  57.     Marshal.dump($game_party, file)
  58.     Marshal.dump($game_troop, file)
  59.     Marshal.dump($game_map, file)
  60.     Marshal.dump($game_player, file)
  61.   end
  62.   
  63. end

复制代码


              [本贴由 雷欧纳德 于 2007-5-30 15:43:49 进行了编辑]
作者: 尤莉斯    时间: 2007-2-1 23:28
标题: 汗汗~ 无聊 抢别人的功劳来发下~ 自动存档啦~
{/gg}{/gg}{/gg} 游戏自动存档~  当然不过遇到rp的比如断电那些情况就`````

N久米发过脚本~  无聊无聊抢别人的脚本改改发个好了~  邪恶啊 - -bbbbbbb

好了~ 不扯鸟 脚本如下~ :


  1. module Kernel

  2.   alias origin_exit exit unless method_defined? :exit
  3.   
  4.   def exit(*args)
  5.     case $scene
  6.     when Scene_Map
  7.       AutoSave.common_save unless $game_system.map_interpreter.running?
  8.     when Scene_Battle
  9.       AutoSave.common_save unless $game_system.battle_interpreter.running?
  10.     else
  11.       if $scene.type != NilClass and $scene.type != Scene_Title
  12.         AutoSave.common_save
  13.       end
  14.     end
  15.     origin_exit(*args)
  16.   end

  17. end


  18. module AutoSave

  19.   if @scene_proc.nil?
  20.     @last_scene = nil.class
  21.     @scene_proc = proc do |value|
  22.       if value.nil? or value.is_a?(Scene_Title)
  23.         if @last_scene != NilClass and @last_scene != Scene_Title
  24.           AutoSave.common_save
  25.         end
  26.       end
  27.       @last_scene = value.type
  28.     end
  29.     trace_var(:$scene,@scene_proc)
  30.   end
  31.   
  32.   module_function
  33.   
  34.   def common_save
  35.     filename = "Save#{$game_temp.last_file_index + 1}.rxdata"
  36.     file = File.open(filename, "wb")
  37.     write_save_data(file)
  38.     file.close
  39.   end
  40.   
  41.   def write_save_data(file)
  42.     characters = []
  43.     for i in 0...$game_party.actors.size
  44.       actor = $game_party.actors[i]
  45.       characters.push([actor.character_name, actor.character_hue])
  46.     end
  47.     Marshal.dump(characters, file)
  48.     Marshal.dump(Graphics.frame_count, file)
  49.     $game_system.save_count += 1
  50.     $game_system.magic_number = $data_system.magic_number
  51.     Marshal.dump($game_system, file)
  52.     Marshal.dump($game_switches, file)
  53.     Marshal.dump($game_variables, file)
  54.     Marshal.dump($game_self_switches, file)
  55.     Marshal.dump($game_screen, file)
  56.     Marshal.dump($game_actors, file)
  57.     Marshal.dump($game_party, file)
  58.     Marshal.dump($game_troop, file)
  59.     Marshal.dump($game_map, file)
  60.     Marshal.dump($game_player, file)
  61.   end
  62.   
  63. end

复制代码


              [本贴由 雷欧纳德 于 2007-5-30 15:43:49 进行了编辑]
作者: 美兽    时间: 2007-2-1 23:59
这个是什么意思
unless method_defined? :exit

作者: 莫浪语    时间: 2007-2-2 08:31
{/jy}关闭后存档?
作者: え影の騲葉    时间: 2007-2-2 20:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小传子    时间: 2007-2-2 22:31
一看就知道有小夏的成分{/hx}
作者: え影の騲葉    时间: 2007-2-4 05:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: 尤莉斯    时间: 2007-2-5 06:44
以下引用美兽于2007-2-1 15:59:10的发言:

这个是什么意思

unless method_defined? :exit

判断 exit是否定义~ {/gg}

以下引用莫浪语于2007-2-2 0:31:44的发言:

关闭后存档?

是的 退出游戏时会自动存档~

以上两个灌水的PIA飞
作者: 美兽    时间: 2007-2-5 17:05
我倒明白那个意思,但不明白的是结构

exit本身不是已经有了吗?为什么要判断是否存在???
这句话不是当模块没定义了exit的实例方法
unless method_defined? :exit
则重命名
alias origin_exit exit
那么没定义exit,又是根据什么重命名呢??


作者: 杨飞云    时间: 2007-2-5 17:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: 尤莉斯    时间: 2007-2-5 18:47
以下引用美兽于2007-2-5 9:05:00的发言:

我倒明白那个意思,但不明白的是结构

exit本身不是已经有了吗?为什么要判断是否存在???
这句话不是当模块没定义了exit的实例方法
unless method_defined? :exit
则重命名
alias origin_exit exit
那么没定义exit,又是根据什么重命名呢??


看这个:
class << Graphics
  p method_defined? :update
end

module Graphics
  def self.update
  end
  p method_defined? :update
end

上面的结果为 true 下面的结果为 false,因为上面那个是类定义,里面定义了 update,
而下面那个 是模块定义,{/gg}{/gg}{/gg}大概只能这样解释了  


作者: 尤莉斯    时间: 2007-2-5 18:49
以下引用杨飞云于2007-2-5 9:46:38的发言:

这段代码写得过于拖沓,而且还有些问题。判断从Scene_Title转到Scene_Load的地方没对。

简化后:

   本帖相关代码如下:
module Kernel
  alias origin_exit exit;
  def exit(*args)
    unless ($game_player.nil?)
      AutoSave.common_save ();
    end
    origin_exit (*args);
  end
end
module AutoSave
  module_function ();
  def common_save ()
    filename = "Save#{$game_temp.last_file_index + 1}.rxdata";
    file = File.open (filename, "wb");
    write_save_data (file);
    file.close ();
  end

  def write_save_data (file)
    characters = [];
    for i in 0 ... $game_party.actors.size
      actor = $game_party.actors ;
      characters.push ([actor.character_name, actor.character_hue]);
    end
    Marshal.dump (characters, file);
    Marshal.dump (Graphics.frame_count, file);
    $game_system.save_count += 1;
    $game_system.magic_number = $data_system.magic_number;
    Marshal.dump ($game_system, file);
    Marshal.dump ($game_switches, file);
    Marshal.dump ($game_variables, file);
    Marshal.dump ($game_self_switches, file);
    Marshal.dump ($game_screen, file);
    Marshal.dump ($game_actors, file);
    Marshal.dump ($game_party, file);
    Marshal.dump ($game_troop, file);
    Marshal.dump ($game_map, file);
    Marshal.dump ($game_player, file);
  end
end



[本贴由作者于 2007-2-5 9:53:23 最后编辑]



{/gg}{/gg}{/gg} 拜托 问一句  这个脚本里看懂了吗,删除了那些到底有啥作用?{/gg}

随便给你一个错误的操作吧:你把你的这个脚本放进去,然后按F12,再点那个叉叉,。。。报错,,,其他的地方不需解释了。。。。
作者: 杨飞云    时间: 2007-2-5 18:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 尤莉斯    时间: 2007-2-5 18:59
{/gg} 漏掉 Scene_Load

不过

if @scene_proc.nil?
   @last_scene = nil.class
   @scene_proc = proc do |value|
     if value.nil? or value.is_a?(Scene_Title)
       if @last_scene != NilClass and @last_scene != Scene_Title
         AutoSave.common_save
       end
     end
     @last_scene = value.type
   end
   trace_var(:$scene,@scene_proc)
end

你知道这部分做啥的  删了没影响????
作者: 杨飞云    时间: 2007-2-5 19:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 尤莉斯    时间: 2007-2-5 20:05
呃 是的 rm的退出一共就三种情况
1、exit
2、$scene = nil
3、断电之类的 -_______-bbb
作者: 杨飞云    时间: 2007-2-5 21:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: r901042004    时间: 2007-6-28 22:34
这个脚本有问题,对话时关掉游戏,就会动弹不得,请想出解决办法。
作者: gpra8764    时间: 2007-6-29 08:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: 轮回者    时间: 2007-6-30 02:55
记得Ruby里有个at_exit
RMXP里还有么?




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