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

Project1

 找回密码
 注册会员
搜索
查看: 3704|回复: 7

[已经解决] 如何在galgame文字游戏里面对话时存档读档游戏

[复制链接]

Lv1.梦旅人

梦石
0
星屑
154
在线时间
52 小时
注册时间
2019-2-15
帖子
25
发表于 2019-12-29 18:47:46 | 显示全部楼层 |阅读模式
230星屑
本帖最后由 playboy_ng 于 2019-12-29 18:51 编辑

我用搜索看了看一些大佬写的脚本,一部分是需要自己制作窗口,但是我个人不会脚本。。。
一部分是可以起到存档读档的作用,但是读档回来,事件的对话会重新开始说话。
能不能保存当前事件对话进度的前提下在对话时随时随地存档读档,就和一般的galgame一样?
顺便,菜单里面只需要存档读档和退出游戏。

最佳答案

查看完整内容

一个简单的实现 module CLD99 DISPOSE_ORIGINAL_MENU = true # 是否放弃原版菜单 SIGN_GAL_MENU = :X # 保留原版菜单时,简化菜单的进入按键 end class Game_Interpreter #-------------------------------------------------------------------------- # ● 设置选项 #-------------------------------------------------------------------------- alias setup_choices_for_interpreter_store ...

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

发表于 2019-12-29 18:47:47 | 显示全部楼层
本帖最后由 KB.Driver 于 2019-12-30 22:15 编辑

一个简单的实现

RUBY 代码复制
  1. module CLD99
  2.  
  3.   DISPOSE_ORIGINAL_MENU = true # 是否放弃原版菜单
  4.  
  5.   SIGN_GAL_MENU = :X           # 保留原版菜单时,简化菜单的进入按键
  6.  
  7. end
  8.  
  9. class Game_Interpreter
  10.   #--------------------------------------------------------------------------
  11.   # ● 设置选项
  12.   #--------------------------------------------------------------------------
  13.   alias setup_choices_for_interpreter_store setup_choices
  14.   def setup_choices(params)
  15.     setup_choices_for_interpreter_store(params)
  16.     $game_message.choice_interpreter = self
  17.   end
  18.  
  19.   def command_back(number = 1)
  20.     @index -= number
  21.   end
  22. end
  23.  
  24. class Game_Message
  25.   attr_accessor :choice_interpreter
  26. end
  27.  
  28. class Window_Message
  29.   #--------------------------------------------------------------------------
  30.   # ● 处理输入等待
  31.   #--------------------------------------------------------------------------
  32.   def input_pause
  33.     self.pause = true
  34.     wait(10)
  35.     pause_update until Input.trigger?(:B) || Input.trigger?(:C)
  36.     Input.update
  37.     self.pause = false
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 处理选项的输入
  41.   #--------------------------------------------------------------------------
  42.   def input_choice
  43.     @choice_window.start
  44.     pause_update(choicing = true) while @choice_window.active
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 处理数值的输入
  48.   #--------------------------------------------------------------------------
  49.   def input_number
  50.     @number_window.start
  51.     pause_update(choicing = true) while @number_window.active
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 处理物品的选择
  55.   #--------------------------------------------------------------------------
  56.   def input_item
  57.     @item_window.start
  58.     pause_update(choicing = true) while @item_window.active
  59.   end
  60.  
  61.   def pause_update(choicing = false)
  62.     Fiber.yield
  63.     call_gal_menu(choicing) if Input.trigger?(:X)
  64.   end
  65.  
  66.   def call_gal_menu(choicing = false)
  67.     Sound.play_ok
  68.     if choicing
  69.       SceneManager.class_eval do
  70.         @stack.push(@scene)
  71.         @scene = Scene_GALMenu.new(choicing = true)
  72.       end
  73.     else
  74.       SceneManager.call(Scene_GALMenu)
  75.     end
  76.   end
  77. end
  78.  
  79. class Scene_Map
  80.   #--------------------------------------------------------------------------
  81.   # ● 监听取消键的按下。如果菜单可用且地图上没有事件在运行,则打开菜单界面。
  82.   #--------------------------------------------------------------------------
  83.   alias update_call_menu_for_call_gal_menu update_call_menu
  84.   def update_call_menu
  85.     update_call_menu_for_call_gal_menu
  86.     if $game_system.menu_disabled || $game_map.interpreter.running?
  87.       @menu_calling = false
  88.     else
  89.       @menu_calling = Input.trigger?(CLD99::SIGN_GAL_MENU)
  90.       call_gal_menu if @menu_calling && !$game_player.moving?
  91.     end
  92.   end
  93.  
  94.   def call_gal_menu
  95.     Sound.play_ok
  96.     SceneManager.call(Scene_GALMenu)
  97.   end
  98. end
  99.  
  100. Scene_GALMenu = Scene_Menu.dup
  101.  
  102. class Scene_GALMenu
  103.  
  104.   Window_GALMenuCommand = Window_MenuCommand.dup
  105.  
  106.   class Window_GALMenuCommand
  107.     @@last_command_symbol = nil
  108.  
  109.     def make_command_list
  110.       add_command(Vocab::save, :save, !$game_system.save_disabled)
  111.       add_command('读档', :load)
  112.       add_command(Vocab::game_end, :game_end)
  113.     end
  114.   end
  115.  
  116.   def initialize(choicing = false)
  117.     @choicing = choicing
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 开始处理
  121.   #--------------------------------------------------------------------------
  122.   def start
  123.     super
  124.     create_command_window
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 生成指令窗口
  128.   #--------------------------------------------------------------------------
  129.   def create_command_window
  130.     @command_window = Window_GALMenuCommand.new
  131.     @command_window.set_handler(:save,      method(:command_save))
  132.     @command_window.set_handler(:load,      method(:command_load))
  133.     @command_window.set_handler(:game_end,  method(:command_game_end))
  134.     @command_window.set_handler(:cancel,    method(:return_scene))
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 指令“存档”
  138.   #--------------------------------------------------------------------------
  139.   def command_save
  140.     if @choicing
  141.       $game_message.choices.clear
  142.       $game_message.choice_proc = nil
  143.       $game_message.choice_interpreter.command_back(3)
  144.       $game_message.choice_interpreter.execute_command
  145.     end
  146.     SceneManager.call(Scene_Save)
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 指令“读档”
  150.   #--------------------------------------------------------------------------
  151.   def command_load
  152.     SceneManager.call(Scene_Load)
  153.   end
  154. end
  155.  
  156. if CLD99::DISPOSE_ORIGINAL_MENU
  157.   Scene_Menu = Scene_GALMenu
  158.  
  159.   class Scene_Map
  160.     def call_menu; end
  161.   end
  162. end



11.gif
用头画头像,用脚写脚本
回复

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

发表于 2019-12-29 23:39:46 | 显示全部楼层
其实默认脚本只是少一个对话中存档,并不会重置对话位置。
你说的“事件的对话重新开始说话”是因为RM工程编辑器的机制
在工程中存档后,会生成一个随机数
这个随机数与你存档中的不一致,所以场景会判定要从当前事件页的第一条重新执行
这样做是为了让测试者能当即看到地图中的变化

游戏做好后,只要不动工程,就没有这种情况了
用头画头像,用脚写脚本
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
154
在线时间
52 小时
注册时间
2019-2-15
帖子
25
 楼主| 发表于 2019-12-30 18:04:52 | 显示全部楼层
KB.Driver 发表于 2019-12-29 23:39
其实默认脚本只是少一个对话中存档,并不会重置对话位置。
你说的“事件的对话重新开始说话”是因为RM工程 ...

那读档和退出可以怎么实现呢?
我想把存档和读档和退出游戏放一起,而不是按Q存档,然后按esc读档和退出。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
154
在线时间
52 小时
注册时间
2019-2-15
帖子
25
 楼主| 发表于 2019-12-31 22:01:19 | 显示全部楼层
KB.Driver 发表于 2019-12-29 18:47
一个简单的实现

module CLD99

非常感谢大佬
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
154
在线时间
52 小时
注册时间
2019-2-15
帖子
25
 楼主| 发表于 2019-12-31 22:02:20 | 显示全部楼层
KB.Driver 发表于 2019-12-29 18:47
一个简单的实现

module CLD99

太6了,大佬是怎么学习脚本的

点评

先学习VA版置顶的RGSS3教程,打好基础以后可以先写点简单的脚本,逐步深入  发表于 2020-1-1 00:19
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
407
在线时间
34 小时
注册时间
2017-12-4
帖子
20
发表于 2020-8-9 19:42:59 | 显示全部楼层
涨知识了
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 17:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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