本帖最后由 j433463 于 2012-12-24 02:09 编辑  
 
看看是否起始同伴队伍中没有角色? 
 
脚本中的 main_commands_enabled 是用判断 Game_Party 中队伍人数是否为空值来决定为是, 
如果你有存档,但是测试的时候画面中玩家角色一个都没有,得到的结果就是否了,选项就暗的不能选。 
 
这种方式对读档判断并不能真的作是否有存档的判断,如果是想要改正的话,应该改成 
 
 
add_command("读档", :Load, load_enabled) 
 
 add_command("读档", :Load, load_enabled)  
 
  
 
并且加上一段: 
 
def load_enabled     for i in 0..3       @file_name = sprintf("Save%02d.rvdata2", i+1)       if FileTest.exist?(@file_name)         return true       end     end     return false   end 
 
 def load_enabled  
    for i in 0..3  
      @file_name = sprintf("Save%02d.rvdata2", i+1)  
      if FileTest.exist?(@file_name)  
        return true  
      end  
    end  
    return false  
  end  
 
  
 
这一段就是判断是否有生成了某个存档,如果有,读档选项就会变亮可选了。 
 
至于调整选项位置,那个只有直接去改 Window_MenuCommand 了, 
选项没有使用 x,y 座标,而是按照顺序生成,插入 Main 脚本中没有办法调。 
 
以修改默认脚本加上读档选项的方法我也说一下好了。 
 
首先,在 Window_MenuCommand 默认脚本中,找到: 
 
#--------------------------------------------------------------------------   # ● 生成指令清单   #--------------------------------------------------------------------------   def make_command_list     add_main_commands     add_formation_command     add_original_commands     add_save_command     add_game_end_command   end 
 
 #--------------------------------------------------------------------------  
  # ● 生成指令清单  
  #--------------------------------------------------------------------------  
  def make_command_list  
    add_main_commands  
    add_formation_command  
    add_original_commands  
    add_save_command  
    add_game_end_command  
  end  
 
  
 
这是菜单选项的生成指令,分别是基本主项目,物品,技能,装备,状态四项,属于 add_main_commands 
后面的几个依序是 整队(排队伍),外加选项,存档,结束游戏。 
 
外加选项就是给另外新增选项用的,但它增加的选项会在存档前面,因为本来顺序就在前面, 
如果是要在存档前加上读档选项,不必管下面这一行,如果读档选项要放在存档后,就在 add_save_command 加下面这一行: 
 
 
 
这样出来的读档选项就在存档后面,依此类推,要放在整队前面,就把一行加在 add_main_commands 下面。 
 
然后,因为我是放在存档选项后面,所以,再找: 
 
#--------------------------------------------------------------------------   # ● 加入存档指令   #--------------------------------------------------------------------------   def add_save_command     add_command(Vocab::save, :save, save_enabled)   end 
 
 #--------------------------------------------------------------------------  
  # ● 加入存档指令  
  #--------------------------------------------------------------------------  
  def add_save_command  
    add_command(Vocab::save, :save, save_enabled)  
  end  
 
  
 
在它的底下再加一段: 
 
#--------------------------------------------------------------------------   # ● 加入读档指令   #--------------------------------------------------------------------------   def add_load_commands       add_command("读档", :load, load_enabled)   end 
 
 #--------------------------------------------------------------------------  
  # ● 加入读档指令  
  #--------------------------------------------------------------------------  
  def add_load_commands  
      add_command("读档", :load, load_enabled)  
  end  
 
  
 
这一段是跟前面生成读档指定加上的那一行 add_load_commands 相对应的,看到 def 后面名称完全一样, 
也就是定义 add_load_commands 指令的实际内容,判断档案是否存在,决定显示的读档选项可不可选。 
 
还没完,再找: 
 
#--------------------------------------------------------------------------   # ● 取得存档的有效状态   #--------------------------------------------------------------------------   def save_enabled     !$game_system.save_disabled   end 
 
 #--------------------------------------------------------------------------  
  # ● 取得存档的有效状态  
  #--------------------------------------------------------------------------  
  def save_enabled  
    !$game_system.save_disabled  
  end  
 
  
 
下面加上一段: 
 
#--------------------------------------------------------------------------   # ● 取得读档的有效状态   #--------------------------------------------------------------------------   def load_enabled     for i in 0..3       @file_name = sprintf("Save%02d.rvdata2", i+1)       return true if FileTest.exist?(@file_name)     end     return false   end 
 
 #--------------------------------------------------------------------------  
  # ● 取得读档的有效状态  
  #--------------------------------------------------------------------------  
  def load_enabled  
    for i in 0..3  
      @file_name = sprintf("Save%02d.rvdata2", i+1)  
      return true if FileTest.exist?(@file_name)  
    end  
    return false  
  end  
 
  
 
这一段,就是上一段中 load_enabled 的定义内容,用来判断有没有存档的自定义函数。 
 
要注意的是如果用了扩展存档数的脚本,可以存档数目大于四个,要改 0..3 中的 3, 
譬如可以存五十个存档,3 就要改成 49,因为是从 0 起算,所以是 49. 
 
好,到这儿,菜单上选项已经做好了,但是,运行后点选不会起作用,因为没有定义点选后的动作, 
那个是 Scene_Menu 默认脚本在做的事,所以要开始改 Scene_Menu 了。 
 
先找: 
 
#--------------------------------------------------------------------------   # ● 生成指令视窗   #--------------------------------------------------------------------------   def create_command_window     @command_window = Window_MenuCommand.new     @command_window.set_handler(:item,      method(:command_item))     @command_window.set_handler(:skill,     method(:command_personal))     @command_window.set_handler(:equip,     method(:command_personal))     @command_window.set_handler(:status,    method(:command_personal))     @command_window.set_handler(:formation, method(:command_formation))     @command_window.set_handler(:save,      method(:command_save))     @command_window.set_handler(:game_end,  method(:command_game_end))     @command_window.set_handler(:cancel,    method(:return_scene))   end 
 
 #--------------------------------------------------------------------------  
  # ● 生成指令视窗  
  #--------------------------------------------------------------------------  
  def create_command_window  
    @command_window = Window_MenuCommand.new  
    @command_window.set_handler(:item,      method(:command_item))  
    @command_window.set_handler(:skill,     method(:command_personal))  
    @command_window.set_handler(:equip,     method(:command_personal))  
    @command_window.set_handler(:status,    method(:command_personal))  
    @command_window.set_handler(:formation, method(:command_formation))  
    @command_window.set_handler(:save,      method(:command_save))  
    @command_window.set_handler(:game_end,  method(:command_game_end))  
    @command_window.set_handler(:cancel,    method(:return_scene))  
  end  
 
  
 
这儿,看到其中有个 :save 吧?那一行就是存档的,其实从上到下,顺序就是 
物品,技能,装备,状态,整队,存档,游戏结束,最后的 cencel 是按 Esc 跳出菜单回到地图画面的。 
 
在 :save 那一行下面,加上一行: 
 
@command_window.set_handler(:load,     method(:command_load)) 
 
 @command_window.set_handler(:load,     method(:command_load))  
 
  
 
也就是读档的项目,这一行后面,指定了读档要用到的函数模块名称 :command_load 
所以,还得去给加个这个模块内容,所以,再找: 
 
#--------------------------------------------------------------------------   # ● 指令“存档”   #--------------------------------------------------------------------------   def command_save     SceneManager.call(Scene_Save)   end 
 
 #--------------------------------------------------------------------------  
  # ● 指令“存档”  
  #--------------------------------------------------------------------------  
  def command_save  
    SceneManager.call(Scene_Save)  
  end  
 
  
 
在这下面加一段: 
 
#--------------------------------------------------------------------------   # ● 指令“读档”   #--------------------------------------------------------------------------    def command_load        SceneManager.call(Scene_Load)    end 
 
 #--------------------------------------------------------------------------  
  # ● 指令“读档”  
  #--------------------------------------------------------------------------  
   def command_load  
       SceneManager.call(Scene_Load)  
   end  
 
  
 
这一段模块的用途就是呼叫读档菜单出来。 
 
好啦,到这儿,读档菜单出来了,修改就到此完成了。 
 
其实, def 自定义的函数模块不一定要在存档后面,位置可以自选的,这儿是为以后修改阅读方便, 
所以都按照指定的顺序,放在存档后面,以后要找也方便点。 
 
修改默认脚本是对新手不建议的方式,除非必要最好别去改默认脚本,不是因为改了出错会怎样救不回来, 
如果脚本只改这一次,出错了可以删掉它,新建一个工程,复制新工程中的同一脚本过来就没事, 
但如果脚本改了不只一次,有其它的用途,你后面错了一次,没办法修正补救了,怎么办? 
那时候新建工程复制的方式不能用,除非你有在改错前预留一份备份,要不然整个工程就因此完蛋了。 
 
所以,我建议,要改默认脚本,最好先备份脚本,这样防止改错后无法补救, 
也可以复制整个工程当备份,这样改错了还有备份的可以补救。 
 
 
 
 
 
 |