查看: 6380|回复: 4

[已经解决] 如何在菜单中设置读档功能

[复制链接]
梦石
0
星屑
50
在线时间
59 小时
注册时间
2012-11-17
回帖
16
发表于 2012-12-9 18:51:53 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 八神和麻 于 2012-12-9 22:31 编辑

综上所述,就是按X调出菜单后,如何在功能中加入“读档”功能呢?

死亡颂唱者

梦石
0
星屑
1159
在线时间
1795 小时
注册时间
2011-10-21
回帖
2205

开拓者

发表于 2012-12-9 19:45:59 | 显示全部楼层
[pre lang="ruby" line="1"]#原作者:吾不知
#使用方法:插在Main以上即可

class Window_MenuCommand < Window_Command  
  alias load_add_main_commands add_main_commands
  def add_main_commands
      load_add_main_commands
      add_command("读档", :Load, main_commands_enabled)
  end
end   
class Scene_Menu < Scene_MenuBase
   alias load_create_command_window create_command_window
   def create_command_window
       load_create_command_window  
       @command_window.set_handler(:Load,     method(:Load))
   end
   def Load
       SceneManager.call(Scene_Load)
   end
end[/pre]
相当简单的,自己也可以尝试调一下

点评

感谢www  发表于 2012-12-9 22:30
这家伙很懒,什么也没有留下
回复

使用道具 举报

梦石
0
星屑
150
在线时间
1 小时
注册时间
2012-12-13
回帖
2
发表于 2012-12-14 17:17:23 | 显示全部楼层
acn00269 发表于 2012-12-9 19:45
#原作者:吾不知
#使用方法:插在Main以上即可

问一下,我小白,具体查到那个main前面? 我试验了半天了,不是游戏报错,要不就是菜单报错,要不就是一点关系都没有。谢谢了

点评

脚本编辑器里 最下面不是有一个Main么 插到他前面就行了 新建一个脚本栏 复制粘帖进去 还不会就去看教程吧  发表于 2012-12-14 17:37
回复

使用道具 举报

梦石
0
星屑
150
在线时间
1 小时
注册时间
2012-12-13
回帖
2
发表于 2012-12-14 17:45:37 | 显示全部楼层
acn00269 发表于 2012-12-9 19:45
#原作者:吾不知
#使用方法:插在Main以上即可

我插入了,出现读档的选项了,不过一直是黑的,无法选,但我是有存档的,问一下这是什么原因?(ps:顺便再跟问个,那条语句是控制读档选项位置的?)

点评

你问的这些我都不清楚。。我也是最近才开始学脚本的 不过你选项不可用的情况可能是存档失效吧  发表于 2012-12-14 17:53
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2012-12-15 01:00:21 | 显示全部楼层
本帖最后由 j433463 于 2012-12-24 02:09 编辑

看看是否起始同伴队伍中没有角色?

脚本中的 main_commands_enabled 是用判断 Game_Party 中队伍人数是否为空值来决定为是,
如果你有存档,但是测试的时候画面中玩家角色一个都没有,得到的结果就是否了,选项就暗的不能选。

这种方式对读档判断并不能真的作是否有存档的判断,如果是想要改正的话,应该改成


[pre lang="ruby" line="1"]      add_command("读档", :Load, load_enabled)
[/pre]

并且加上一段:

[pre lang="ruby" line="1"]
  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
[/pre]

这一段就是判断是否有生成了某个存档,如果有,读档选项就会变亮可选了。

至于调整选项位置,那个只有直接去改 Window_MenuCommand 了,
选项没有使用 x,y 座标,而是按照顺序生成,插入 Main 脚本中没有办法调。

以修改默认脚本加上读档选项的方法我也说一下好了。

首先,在 Window_MenuCommand 默认脚本中,找到:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 生成指令清单
  #--------------------------------------------------------------------------
  def make_command_list
    add_main_commands
    add_formation_command
    add_original_commands
    add_save_command
    add_game_end_command
  end
[/pre]

这是菜单选项的生成指令,分别是基本主项目,物品,技能,装备,状态四项,属于 add_main_commands
后面的几个依序是 整队(排队伍),外加选项,存档,结束游戏。

外加选项就是给另外新增选项用的,但它增加的选项会在存档前面,因为本来顺序就在前面,
如果是要在存档前加上读档选项,不必管下面这一行,如果读档选项要放在存档后,就在 add_save_command 加下面这一行:

[pre lang="ruby" line="1"]      add_load_commands[/pre]

这样出来的读档选项就在存档后面,依此类推,要放在整队前面,就把一行加在 add_main_commands 下面。

然后,因为我是放在存档选项后面,所以,再找:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 加入存档指令
  #--------------------------------------------------------------------------
  def add_save_command
    add_command(Vocab::save, :save, save_enabled)
  end
[/pre]

在它的底下再加一段:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 加入读档指令
  #--------------------------------------------------------------------------
  def add_load_commands
      add_command("读档", :load, load_enabled)
  end  

[/pre]

这一段是跟前面生成读档指定加上的那一行 add_load_commands 相对应的,看到 def 后面名称完全一样,
也就是定义 add_load_commands 指令的实际内容,判断档案是否存在,决定显示的读档选项可不可选。

还没完,再找:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 取得存档的有效状态
  #--------------------------------------------------------------------------
  def save_enabled
    !$game_system.save_disabled
  end[/pre]

下面加上一段:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 取得读档的有效状态
  #--------------------------------------------------------------------------
  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
[/pre]

这一段,就是上一段中 load_enabled 的定义内容,用来判断有没有存档的自定义函数。

要注意的是如果用了扩展存档数的脚本,可以存档数目大于四个,要改 0..3 中的 3,
譬如可以存五十个存档,3 就要改成 49,因为是从 0 起算,所以是 49.

好,到这儿,菜单上选项已经做好了,但是,运行后点选不会起作用,因为没有定义点选后的动作,
那个是 Scene_Menu 默认脚本在做的事,所以要开始改 Scene_Menu 了。

先找:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 生成指令视窗
  #--------------------------------------------------------------------------
  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
[/pre]

这儿,看到其中有个 :save 吧?那一行就是存档的,其实从上到下,顺序就是
物品,技能,装备,状态,整队,存档,游戏结束,最后的 cencel 是按 Esc 跳出菜单回到地图画面的。

在 :save 那一行下面,加上一行:

[pre lang="ruby" line="1"]@command_window.set_handler(:load,     method(:command_load))[/pre]

也就是读档的项目,这一行后面,指定了读档要用到的函数模块名称 :command_load
所以,还得去给加个这个模块内容,所以,再找:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 指令“存档”
  #--------------------------------------------------------------------------
  def command_save
    SceneManager.call(Scene_Save)
  end
[/pre]

在这下面加一段:

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 指令“读档”
  #--------------------------------------------------------------------------
   def command_load
       SceneManager.call(Scene_Load)
   end
[/pre]

这一段模块的用途就是呼叫读档菜单出来。

好啦,到这儿,读档菜单出来了,修改就到此完成了。

其实, def 自定义的函数模块不一定要在存档后面,位置可以自选的,这儿是为以后修改阅读方便,
所以都按照指定的顺序,放在存档后面,以后要找也方便点。

修改默认脚本是对新手不建议的方式,除非必要最好别去改默认脚本,不是因为改了出错会怎样救不回来,
如果脚本只改这一次,出错了可以删掉它,新建一个工程,复制新工程中的同一脚本过来就没事,
但如果脚本改了不只一次,有其它的用途,你后面错了一次,没办法修正补救了,怎么办?
那时候新建工程复制的方式不能用,除非你有在改错前预留一份备份,要不然整个工程就因此完蛋了。

所以,我建议,要改默认脚本,最好先备份脚本,这样防止改错后无法补救,
也可以复制整个工程当备份,这样改错了还有备份的可以补救。





修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复 2 0

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部