查看: 5174|回复: 7

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

[复制链接]
梦石
0
星屑
206
在线时间
61 小时
注册时间
2019-2-15
回帖
20
发表于 2019-12-29 18:47:46 | 显示全部楼层 |阅读模式
悬赏230星屑已解决
本帖最后由 playboy_ng 于 2019-12-29 18:51 编辑

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

最佳答案

查看完整内容

一个简单的实现 [pre lang="ruby"]module CLD99 DISPOSE_ORIGINAL_MENU = true # 是否放弃原版菜单 SIGN_GAL_MENU = :X # 保留原版菜单时,简化菜单的进入按键 end class Game_Interpreter #-------------------------------------------------------------------------- # ● 设置选项 #-------------------------------------------------------------------------- alias setup_choices_for_i ...
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

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

一个简单的实现

[pre lang="ruby"]module CLD99

  DISPOSE_ORIGINAL_MENU = true # 是否放弃原版菜单
   
  SIGN_GAL_MENU = :X           # 保留原版菜单时,简化菜单的进入按键
  
end

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 设置选项
  #--------------------------------------------------------------------------
  alias setup_choices_for_interpreter_store setup_choices
  def setup_choices(params)
    setup_choices_for_interpreter_store(params)
    $game_message.choice_interpreter = self
  end
  
  def command_back(number = 1)
    @index -= number
  end
end

class Game_Message
  attr_accessor :choice_interpreter
end

class Window_Message
  #--------------------------------------------------------------------------
  # ● 处理输入等待
  #--------------------------------------------------------------------------
  def input_pause
    self.pause = true
    wait(10)
    pause_update until Input.trigger?(:B) || Input.trigger?(:C)
    Input.update
    self.pause = false
  end
  #--------------------------------------------------------------------------
  # ● 处理选项的输入
  #--------------------------------------------------------------------------
  def input_choice
    @choice_window.start
    pause_update(choicing = true) while @choice_window.active
  end
  #--------------------------------------------------------------------------
  # ● 处理数值的输入
  #--------------------------------------------------------------------------
  def input_number
    @number_window.start
    pause_update(choicing = true) while @number_window.active
  end
  #--------------------------------------------------------------------------
  # ● 处理物品的选择
  #--------------------------------------------------------------------------
  def input_item
    @item_window.start
    pause_update(choicing = true) while @item_window.active
  end
  
  def pause_update(choicing = false)
    Fiber.yield
    call_gal_menu(choicing) if Input.trigger?(:X)
  end
  
  def call_gal_menu(choicing = false)
    Sound.play_ok
    if choicing
      SceneManager.class_eval do
        @stack.push(@scene)
        @scene = Scene_GALMenu.new(choicing = true)
      end
    else
      SceneManager.call(Scene_GALMenu)
    end
  end
end

class Scene_Map
  #--------------------------------------------------------------------------
  # ● 监听取消键的按下。如果菜单可用且地图上没有事件在运行,则打开菜单界面。
  #--------------------------------------------------------------------------
  alias update_call_menu_for_call_gal_menu update_call_menu
  def update_call_menu
    update_call_menu_for_call_gal_menu
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling = Input.trigger?(CLD99::SIGN_GAL_MENU)
      call_gal_menu if @menu_calling && !$game_player.moving?
    end
  end
  
  def call_gal_menu
    Sound.play_ok
    SceneManager.call(Scene_GALMenu)
  end
end

Scene_GALMenu = Scene_Menu.dup

class Scene_GALMenu
  
  Window_GALMenuCommand = Window_MenuCommand.dup
  
  class Window_GALMenuCommand
    @@last_command_symbol = nil
   
    def make_command_list
      add_command(Vocab::save, :save, !$game_system.save_disabled)
      add_command('读档', :load)
      add_command(Vocab::game_end, :game_end)
    end
  end
  
  def initialize(choicing = false)
    @choicing = choicing
  end
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_command_window
  end
  #--------------------------------------------------------------------------
  # ● 生成指令窗口
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_GALMenuCommand.new
    @command_window.set_handler(:save,      method(:command_save))
    @command_window.set_handler(:load,      method(:command_load))
    @command_window.set_handler(:game_end,  method(:command_game_end))
    @command_window.set_handler(:cancel,    method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # ● 指令“存档”
  #--------------------------------------------------------------------------
  def command_save
    if @choicing
      $game_message.choices.clear
      $game_message.choice_proc = nil
      $game_message.choice_interpreter.command_back(3)
      $game_message.choice_interpreter.execute_command
    end
    SceneManager.call(Scene_Save)
  end
  #--------------------------------------------------------------------------
  # ● 指令“读档”
  #--------------------------------------------------------------------------
  def command_load
    SceneManager.call(Scene_Load)
  end
end

if CLD99::DISPOSE_ORIGINAL_MENU
  Scene_Menu = Scene_GALMenu
  
  class Scene_Map
    def call_menu; end
  end
end[/pre]


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

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

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

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

使用道具 举报

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

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

使用道具 举报

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

module CLD99

非常感谢大佬
回复

使用道具 举报

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

module CLD99

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

点评

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部