Project1

标题: 又来麻烦大家帮我改下脚本 [打印本页]

作者: 越前リョーマ    时间: 2007-8-25 06:43
标题: 又来麻烦大家帮我改下脚本
  1. #==============================================================================
  2. # ■ 存取档合并脚本
  3. #------------------------------------------------------------------------------
  4. # BY:美兽
  5. #插入main之前,地图呼出方式$scene = Scene_Loadsave.new,主菜单里默认的也是该界面
  6. #不与默认的存取档功能冲突,方便个别地方只需存或者取的功能,虽然很简单,实际做起
  7. #来,考虑的地方还是比较多。 
  8. #==============================================================================
  9. #==============================================================================
  10. # ■ Scene_Load
  11. #------------------------------------------------------------------------------
  12. #  处理读档画面的类。
  13. #==============================================================================

  14. class Scene_Load < Scene_File
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 再生成临时对像
  20.     $game_temp = Game_Temp.new
  21.     # 选择存档时间最新的文件
  22.     $game_temp.last_file_index = 0
  23.     latest_time = Time.at(0)
  24.     for i in 0..3
  25.       filename = make_filename(i)
  26.       if FileTest.exist?(filename)
  27.         file = File.open(filename, "r")
  28.         if file.mtime > latest_time
  29.           latest_time = file.mtime
  30.           $game_temp.last_file_index = i
  31.         end
  32.         file.close
  33.       end
  34.     end
  35.     super("要载入哪个文件?")
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 确定时的处理
  39.   #--------------------------------------------------------------------------
  40.   def on_decision(filename)
  41.     # 文件不存在的情况下
  42.     unless FileTest.exist?(filename)
  43.       # 演奏冻结 SE
  44.       $game_system.se_play($data_system.buzzer_se)
  45.       return
  46.     end
  47.     $menu_call = false
  48.     # 演奏读档 SE
  49.     $game_system.se_play($data_system.load_se)
  50.     # 写入存档数据
  51.     file = File.open(filename, "rb")
  52.     read_save_data(file)
  53.     file.close
  54.     # 还原 BGM、BGS
  55.     $game_system.bgm_play($game_system.playing_bgm)
  56.     $game_system.bgs_play($game_system.playing_bgs)
  57.     # 刷新地图 (执行并行事件)
  58.     $game_map.update
  59.     # 切换到地图画面
  60.     $scene = Scene_Map.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 取消时的处理
  64.   #--------------------------------------------------------------------------
  65.   def on_cancel
  66.     # 演奏取消 SE
  67.     $game_system.se_play($data_system.cancel_se)
  68.     # 切换到标题画面
  69.     $scene = Scene_Title.new
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 读取存档数据
  73.   #     file : 读取用文件对像 (已经打开)
  74.   #--------------------------------------------------------------------------
  75.   def read_save_data(file)
  76.     # 读取描绘存档文件用的角色数据
  77.     characters = Marshal.load(file)
  78.     # 读取测量游戏时间用画面计数
  79.     Graphics.frame_count = Marshal.load(file)
  80.     # 读取各种游戏对像
  81.     $game_system        = Marshal.load(file)
  82.     $game_switches      = Marshal.load(file)
  83.     $game_variables     = Marshal.load(file)
  84.     $game_self_switches = Marshal.load(file)
  85.     $game_screen        = Marshal.load(file)
  86.     $game_actors        = Marshal.load(file)
  87.     $game_party         = Marshal.load(file)
  88.     $game_troop         = Marshal.load(file)
  89.     $game_map           = Marshal.load(file)
  90.     $game_player        = Marshal.load(file)
  91.     # 魔法编号与保存时有差异的情况下
  92.     # (加入编辑器的编辑过的数据)
  93.     if $game_system.magic_number != $data_system.magic_number
  94.       # 重新装载地图
  95.       $game_map.setup($game_map.map_id)
  96.       $game_player.center($game_player.x, $game_player.y)
  97.     end
  98.     # 刷新同伴成员
  99.     $game_party.refresh
  100.   end
  101. end
  102. #==============================================================================
  103. # ■ Window_LoadHelp
  104. #------------------------------------------------------------------------------
  105. #  存取档画面帮助信息的显示窗口。
  106. #==============================================================================

  107. class Window_LoadHelp < Window_Base
  108. #--------------------------------------------------------------------------
  109. #  初始化对象
  110. #--------------------------------------------------------------------------
  111. def initialize
  112.   super(0, 0, 320, 64)
  113.   self.contents = Bitmap.new(width - 32, height - 32)
  114.   self.contents.font.name = "黑体"
  115.   self.contents.font.size = 18
  116. end
  117. #--------------------------------------------------------------------------
  118. #  刷新文本
  119. #--------------------------------------------------------------------------
  120. def set_text(text, align = 1)
  121.   if text != @text or align != @align
  122.     self.contents.clear
  123.     self.contents.font.color = normal_color
  124.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  125.     @text = text
  126.     @align = align
  127.     @actor = nil
  128.   end
  129.   self.visible = true
  130. end
  131. end
  132. #==============================================================================
  133. #  Window_LoadCommand
  134. #------------------------------------------------------------------------------
  135. #  存取档画面选择按钮窗口
  136. #==============================================================================

  137. class Window_LoadCommand < Window_Selectable
  138. #--------------------------------------------------------------------------
  139. #  初始化对象
  140. #--------------------------------------------------------------------------
  141. def initialize
  142.   super(320, 0, 320, 64)
  143.   self.contents = Bitmap.new(width - 32, height - 32)
  144.   self.contents.font.name = "黑体"
  145.   self.contents.font.size = 18
  146.   @item_max = 2
  147.   @column_max = 2
  148.   @commands = ["读取", "存储"]
  149.   refresh
  150.   self.index = 0
  151. end
  152. #--------------------------------------------------------------------------
  153. #  刷新
  154. #--------------------------------------------------------------------------
  155. def refresh
  156.   self.contents.clear
  157.   for i in 0...@item_max
  158.     draw_item(i)
  159.   end
  160. end
  161. #--------------------------------------------------------------------------
  162. #  描画按钮文字
  163. #--------------------------------------------------------------------------
  164. def draw_item(index)
  165.   x = 4 + index * 160
  166.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 项目无效化
  170. #     index : 项目编号
  171. #--------------------------------------------------------------------------
  172.   def disable_item(index)
  173.     draw_item(index, disabled_color)
  174.   end

  175. end

  176. #==============================================================================
  177. # ■ Scene_Menu
  178. #------------------------------------------------------------------------------
  179. #  处理菜单画面的类。
  180. #==============================================================================

  181. class Scene_Menu
  182.   #--------------------------------------------------------------------------
  183.   # ● 初始化对像
  184.   #     menu_index : 命令光标的初期位置
  185.   #--------------------------------------------------------------------------
  186.   def initialize(menu_index = 0)
  187.     @menu_index = menu_index
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 主处理
  191.   #--------------------------------------------------------------------------
  192.   def main
  193.     # 生成命令窗口
  194.     s1 = $data_system.words.item
  195.     s2 = $data_system.words.skill
  196.     s3 = $data_system.words.equip
  197.     s4 = "状态"
  198.     s5 = "记录"
  199.     s6 = "结束游戏"
  200.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  201.     @command_window.index = @menu_index
  202.     # 同伴人数为 0 的情况下
  203.     if $game_party.actors.size == 0
  204.       # 物品、特技、装备、状态无效化
  205.       @command_window.disable_item(0)
  206.       @command_window.disable_item(1)
  207.       @command_window.disable_item(2)
  208.       @command_window.disable_item(3)
  209.     end
  210.     # 生成游戏时间窗口
  211.     @playtime_window = Window_PlayTime.new
  212.     @playtime_window.x = 0
  213.     @playtime_window.y = 224
  214.     # 生成步数窗口
  215.     @steps_window = Window_Steps.new
  216.     @steps_window.x = 0
  217.     @steps_window.y = 320
  218.     # 生成金钱窗口
  219.     @gold_window = Window_Gold.new
  220.     @gold_window.x = 0
  221.     @gold_window.y = 416
  222.     # 生成状态窗口
  223.     @status_window = Window_MenuStatus.new
  224.     @status_window.x = 160
  225.     @status_window.y = 0
  226.     # 执行过渡
  227.     Graphics.transition
  228.     # 主循环
  229.     loop do
  230.       # 刷新游戏画面
  231.       Graphics.update
  232.       # 刷新输入信息
  233.       Input.update
  234.       # 刷新画面
  235.       update
  236.       # 如果切换画面就中断循环
  237.       if $scene != self
  238.         break
  239.       end
  240.     end
  241.     # 准备过渡
  242.     Graphics.freeze
  243.     # 释放窗口
  244.     @command_window.dispose
  245.     @playtime_window.dispose
  246.     @steps_window.dispose
  247.     @gold_window.dispose
  248.     @status_window.dispose
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 刷新画面
  252.   #--------------------------------------------------------------------------
  253.   def update
  254.     # 刷新窗口
  255.     @command_window.update
  256.     @playtime_window.update
  257.     @steps_window.update
  258.     @gold_window.update
  259.     @status_window.update
  260.     # 命令窗口被激活的情况下: 调用 update_command
  261.     if @command_window.active
  262.       update_command
  263.       return
  264.     end
  265.     # 状态窗口被激活的情况下: 调用 update_status
  266.     if @status_window.active
  267.       update_status
  268.       return
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 刷新画面 (命令窗口被激活的情况下)
  273.   #--------------------------------------------------------------------------
  274.   def update_command
  275.     # 按下 B 键的情况下
  276.     if Input.trigger?(Input::B)
  277.       # 演奏取消 SE
  278.       $game_system.se_play($data_system.cancel_se)
  279.       # 切换的地图画面
  280.       $scene = Scene_Map.new
  281.       return
  282.     end
  283.     # 按下 C 键的情况下
  284.     if Input.trigger?(Input::C)
  285.       # 同伴人数为 0、存档、游戏结束以外的场合
  286.       if $game_party.actors.size == 0 and @command_window.index < 4
  287.         # 演奏冻结 SE
  288.         $game_system.se_play($data_system.buzzer_se)
  289.         return
  290.       end
  291.       # 命令窗口的光标位置分支
  292.       case @command_window.index
  293.       when 0  # 物品
  294.         # 演奏确定 SE
  295.         $game_system.se_play($data_system.decision_se)
  296.         # 切换到物品画面
  297.         $scene = Scene_Item.new
  298.       when 1  # 特技
  299.         # 演奏确定 SE
  300.         $game_system.se_play($data_system.decision_se)
  301.         # 激活状态窗口
  302.         @command_window.active = false
  303.         @status_window.active = true
  304.         @status_window.index = 0
  305.       when 2  # 装备
  306.         # 演奏确定 SE
  307.         $game_system.se_play($data_system.decision_se)
  308.         # 激活状态窗口
  309.         @command_window.active = false
  310.         @status_window.active = true
  311.         @status_window.index = 0
  312.       when 3  # 状态
  313.         # 演奏确定 SE
  314.         $game_system.se_play($data_system.decision_se)
  315.         # 激活状态窗口
  316.         @command_window.active = false
  317.         @status_window.active = true
  318.         @status_window.index = 0
  319.       when 4  # 存档
  320.         # 演奏确定 SE
  321.         $game_system.se_play($data_system.decision_se)
  322.         # 切换到存取档画面
  323.         $menu_call = true
  324.         $scene = Scene_Loadsave.new
  325.       when 5  # 游戏结束
  326.         # 演奏确定 SE
  327.         $game_system.se_play($data_system.decision_se)
  328.         # 切换到游戏结束画面
  329.         $scene = Scene_End.new
  330.       end
  331.       return
  332.     end
  333.   end
  334.   end
  335. #==============================================================================
  336. #  Scene_Loadsave
  337. #------------------------------------------------------------------------------
  338. # 处理存取档画面的类。
  339. #==============================================================================

  340. class Scene_Loadsave
  341. #--------------------------------------------------------------------------
  342. # ● 初始化对像
  343. #     $last_savefile_index : 记录光标位置
  344. #--------------------------------------------------------------------------
  345. def initialize
  346.   $last_savefile_index = 0 if $last_savefile_index == nil
  347. end
  348. #--------------------------------------------------------------------------
  349. #  主处理
  350. #--------------------------------------------------------------------------
  351. def main
  352.   @savestate = 0
  353.   # 生成窗口
  354.   @help_window = Window_LoadHelp.new
  355.   @help_window.set_text("请选择.")
  356.   @option_window = Window_LoadCommand.new
  357.   @savefile_windows = []
  358.   for i in 0..3
  359.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  360.   end
  361.   @option_window.index = $last_savefile_index
  362.   @file_index = 0
  363.   # 执行过渡
  364.   Graphics.transition
  365.   # 主循环
  366.   loop do
  367.     # 刷新游戏画面
  368.     Graphics.update
  369.     # 刷新输入信息
  370.     Input.update
  371.     # 刷新画面
  372.     update
  373.     # 如果画面被切换的话就中断循环
  374.     if $scene != self
  375.       break
  376.     end
  377.   end
  378.   # 准备过渡
  379.   Graphics.freeze
  380.   # 释放窗口
  381.   @help_window.dispose
  382.   @option_window.dispose
  383.   for i in @savefile_windows
  384.     i.dispose
  385.   end
  386. end

  387. #--------------------------------------------------------------------------
  388. #  ● 刷新画面
  389. #--------------------------------------------------------------------------
  390. def update
  391.   # 刷新窗口
  392.   @help_window.update
  393.   @option_window.update
  394.   for i in @savefile_windows
  395.     i.update
  396.   end
  397.   
  398.   case @savestate
  399.   when 0
  400.       if Input.trigger?(Input::B)
  401.       $game_system.se_play($data_system.cancel_se)
  402.       # 淡入淡出 BGM
  403.       Audio.bgm_fade(800)
  404.       # 返回地图
  405.       if $menu_call == false
  406.       # 切换到地图画面
  407.       $scene = Scene_Map.new
  408.         return
  409.       end
  410.       # 切换到菜单画面
  411.       $menu_call = false
  412.       $scene = Scene_Menu.new(4)
  413.    end
  414.     if Input.trigger?(Input::C)
  415.       case @option_window.index
  416.       when 0
  417.         @savefile_windows[@file_index].selected = true
  418.         @option_window.active = false
  419.         @help_window.set_text("请选择一个文件进行读取.")
  420.         @savestate  = 1
  421.         return
  422.       when 1
  423.         @savefile_windows[@file_index].selected = true
  424.         @option_window.active = false
  425.         @help_window.set_text("请选择一个文件进行存储.")
  426.         @savestate = 2
  427.         return
  428.         return
  429.       end
  430.     end
  431.   when 1,2
  432.     if Input.trigger?(Input::C)
  433.       if @savestate == 1
  434.         $menu_call = false
  435.         load_file(make_filename(@file_index))
  436.         return
  437.       else
  438.         # 禁止存档的情况下
  439.         if $game_system.save_disabled
  440.           @help_window.set_text("抱歉,这里禁止存储.")
  441.           # 演奏冻结 SE
  442.           $game_system.se_play($data_system.buzzer_se)
  443.           return
  444.         end
  445.        $game_system.se_play($data_system.decision_se)
  446.        $last_savefile_index = @option_window.index
  447.        save_file(make_filename(@file_index))
  448.         return
  449.       end
  450.     end
  451.     # 取消
  452.     if Input.trigger?(Input::B)
  453.       $game_system.se_play($data_system.cancel_se)
  454.       @savefile_windows[@file_index].selected = false
  455.       @help_window.set_text("请选择.")
  456.       @savestate = 0
  457.       @option_window.active = true
  458.       return
  459.     end
  460.     # 向下选择
  461.     if Input.repeat?(Input::DOWN)
  462.       $game_system.se_play($data_system.cursor_se)
  463.       @savefile_windows[@file_index].selected = false
  464.       @file_index = (@file_index + 1) % 4
  465.       @savefile_windows[@file_index].selected = true
  466.       return
  467.     end
  468.     # 向上选择
  469.     if Input.repeat?(Input::UP)
  470.       $game_system.se_play($data_system.cursor_se)
  471.       @savefile_windows[@file_index].selected = false
  472.       @file_index = (@file_index + 3) % 4
  473.       @savefile_windows[@file_index].selected = true
  474.       return
  475.     end
  476.    
  477.     if Input.trigger?(Input::B)
  478.       $game_system.se_play($data_system.cancel_se)
  479.       @savestate = 2
  480.       @savefile_windows[@file_index].selected = true
  481.       return
  482.     end
  483.   end
  484. end
  485. #--------------------------------------------------------------------------
  486. # 建立记录文件索引
  487. #--------------------------------------------------------------------------
  488. def make_filename(file_index)
  489.   return "Save#{file_index + 1}.rxdata"
  490. end
  491. #--------------------------------------------------------------------------
  492. #  读取记录文件
  493. #     filename  : 被读取文件
  494. #--------------------------------------------------------------------------
  495. def load_file(filename)
  496.   # 文件不存在的情况下
  497.   unless FileTest.exist?(filename)
  498.     # 演奏冻结 SE
  499.     $game_system.se_play($data_system.buzzer_se)
  500.     return
  501.   end
  502.   # 演奏读档 SE
  503.   $game_system.se_play($data_system.load_se)
  504.   # 以二进制方式打开文件
  505.   # 写入存档数据
  506.   file = File.open(filename, "rb")
  507.   read_save_data(file)
  508.   file.close
  509.   # 演奏 BGM 与 BGS
  510.   $game_system.bgm_play($game_system.playing_bgm)
  511.   $game_system.bgs_play($game_system.playing_bgs)
  512.   # 刷新地图 (执行并行事件)
  513.   $game_map.update
  514.   # 切换到地图画面
  515.   $menu_call == false
  516.   $scene = Scene_Map.new
  517. end
  518. #--------------------------------------------------------------------------
  519. # ● 读取存档数据
  520. #     file : 读取用文件对像 (已经打开)
  521. #--------------------------------------------------------------------------
  522. def read_save_data(file)
  523.   # 读取描绘存档文件用的角色数据
  524.   characters = Marshal.load(file)
  525.   # 读取测量游戏时间用画面计数
  526.   Graphics.frame_count = Marshal.load(file)
  527.   # 读取各种游戏对像
  528.   $game_system        = Marshal.load(file)
  529.   $game_switches      = Marshal.load(file)
  530.   $game_variables     = Marshal.load(file)
  531.   $game_self_switches = Marshal.load(file)
  532.   $game_screen        = Marshal.load(file)
  533.   $game_actors        = Marshal.load(file)
  534.   $game_party         = Marshal.load(file)
  535.   $game_troop         = Marshal.load(file)
  536.   $game_map           = Marshal.load(file)
  537.   $game_player        = Marshal.load(file)
  538.     # 魔法编号与保存时有差异的情况下
  539.     # (加入编辑器的编辑过的数据)
  540.   if $game_system.magic_number != $data_system.magic_number
  541.     # 重新装载地图
  542.     $game_map.setup($game_map.map_id)
  543.     $game_player.center($game_player.x, $game_player.y)
  544.   end
  545.   # 刷新同伴成员
  546.   $game_party.refresh
  547. end
  548.   #--------------------------------------------------------------------------
  549.   # ● 写入存档文件
  550.   #--------------------------------------------------------------------------
  551.   def save_file(filename)
  552.     # 演奏存档 SE
  553.     $game_system.se_play($data_system.save_se)
  554.     # 写入存档数据
  555.     file = File.open(filename, "wb")
  556.     write_save_data(file)
  557.     file.close
  558.     # 切换到菜单画面
  559.     $scene = Scene_Loadsave.new
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 写入存档数据
  563.   #     file : 写入用文件对像 (已经打开)
  564.   #--------------------------------------------------------------------------
  565.   def write_save_data(file)
  566.     # 生成描绘存档文件用的角色图形
  567.     characters = []
  568.     for i in 0...$game_party.actors.size
  569.       actor = $game_party.actors[i]
  570.       characters.push([actor.character_name, actor.character_hue])
  571.     end
  572.     # 写入描绘存档文件用的角色数据
  573.     Marshal.dump(characters, file)
  574.     # 写入测量游戏时间用画面计数
  575.     Marshal.dump(Graphics.frame_count, file)
  576.     # 增加 1 次存档次数
  577.     $game_system.save_count += 1
  578.     # 保存魔法编号
  579.     # (将编辑器保存的值以随机值替换)
  580.     $game_system.magic_number = $data_system.magic_number
  581.     # 写入各种游戏对像
  582.     Marshal.dump($game_system, file)
  583.     Marshal.dump($game_switches, file)
  584.     Marshal.dump($game_variables, file)
  585.     Marshal.dump($game_self_switches, file)
  586.     Marshal.dump($game_screen, file)
  587.     Marshal.dump($game_actors, file)
  588.     Marshal.dump($game_party, file)
  589.     Marshal.dump($game_troop, file)
  590.     Marshal.dump($game_map, file)
  591.     Marshal.dump($game_player, file)
  592.   end
  593. end
复制代码


改成只能用调用的办法才能使用……

不要替换原来的,
不然我那个菜单会变掉的……
作者: 越前リョーマ    时间: 2007-8-25 06:43
标题: 又来麻烦大家帮我改下脚本
  1. #==============================================================================
  2. # ■ 存取档合并脚本
  3. #------------------------------------------------------------------------------
  4. # BY:美兽
  5. #插入main之前,地图呼出方式$scene = Scene_Loadsave.new,主菜单里默认的也是该界面
  6. #不与默认的存取档功能冲突,方便个别地方只需存或者取的功能,虽然很简单,实际做起
  7. #来,考虑的地方还是比较多。 
  8. #==============================================================================
  9. #==============================================================================
  10. # ■ Scene_Load
  11. #------------------------------------------------------------------------------
  12. #  处理读档画面的类。
  13. #==============================================================================

  14. class Scene_Load < Scene_File
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 再生成临时对像
  20.     $game_temp = Game_Temp.new
  21.     # 选择存档时间最新的文件
  22.     $game_temp.last_file_index = 0
  23.     latest_time = Time.at(0)
  24.     for i in 0..3
  25.       filename = make_filename(i)
  26.       if FileTest.exist?(filename)
  27.         file = File.open(filename, "r")
  28.         if file.mtime > latest_time
  29.           latest_time = file.mtime
  30.           $game_temp.last_file_index = i
  31.         end
  32.         file.close
  33.       end
  34.     end
  35.     super("要载入哪个文件?")
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 确定时的处理
  39.   #--------------------------------------------------------------------------
  40.   def on_decision(filename)
  41.     # 文件不存在的情况下
  42.     unless FileTest.exist?(filename)
  43.       # 演奏冻结 SE
  44.       $game_system.se_play($data_system.buzzer_se)
  45.       return
  46.     end
  47.     $menu_call = false
  48.     # 演奏读档 SE
  49.     $game_system.se_play($data_system.load_se)
  50.     # 写入存档数据
  51.     file = File.open(filename, "rb")
  52.     read_save_data(file)
  53.     file.close
  54.     # 还原 BGM、BGS
  55.     $game_system.bgm_play($game_system.playing_bgm)
  56.     $game_system.bgs_play($game_system.playing_bgs)
  57.     # 刷新地图 (执行并行事件)
  58.     $game_map.update
  59.     # 切换到地图画面
  60.     $scene = Scene_Map.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 取消时的处理
  64.   #--------------------------------------------------------------------------
  65.   def on_cancel
  66.     # 演奏取消 SE
  67.     $game_system.se_play($data_system.cancel_se)
  68.     # 切换到标题画面
  69.     $scene = Scene_Title.new
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 读取存档数据
  73.   #     file : 读取用文件对像 (已经打开)
  74.   #--------------------------------------------------------------------------
  75.   def read_save_data(file)
  76.     # 读取描绘存档文件用的角色数据
  77.     characters = Marshal.load(file)
  78.     # 读取测量游戏时间用画面计数
  79.     Graphics.frame_count = Marshal.load(file)
  80.     # 读取各种游戏对像
  81.     $game_system        = Marshal.load(file)
  82.     $game_switches      = Marshal.load(file)
  83.     $game_variables     = Marshal.load(file)
  84.     $game_self_switches = Marshal.load(file)
  85.     $game_screen        = Marshal.load(file)
  86.     $game_actors        = Marshal.load(file)
  87.     $game_party         = Marshal.load(file)
  88.     $game_troop         = Marshal.load(file)
  89.     $game_map           = Marshal.load(file)
  90.     $game_player        = Marshal.load(file)
  91.     # 魔法编号与保存时有差异的情况下
  92.     # (加入编辑器的编辑过的数据)
  93.     if $game_system.magic_number != $data_system.magic_number
  94.       # 重新装载地图
  95.       $game_map.setup($game_map.map_id)
  96.       $game_player.center($game_player.x, $game_player.y)
  97.     end
  98.     # 刷新同伴成员
  99.     $game_party.refresh
  100.   end
  101. end
  102. #==============================================================================
  103. # ■ Window_LoadHelp
  104. #------------------------------------------------------------------------------
  105. #  存取档画面帮助信息的显示窗口。
  106. #==============================================================================

  107. class Window_LoadHelp < Window_Base
  108. #--------------------------------------------------------------------------
  109. #  初始化对象
  110. #--------------------------------------------------------------------------
  111. def initialize
  112.   super(0, 0, 320, 64)
  113.   self.contents = Bitmap.new(width - 32, height - 32)
  114.   self.contents.font.name = "黑体"
  115.   self.contents.font.size = 18
  116. end
  117. #--------------------------------------------------------------------------
  118. #  刷新文本
  119. #--------------------------------------------------------------------------
  120. def set_text(text, align = 1)
  121.   if text != @text or align != @align
  122.     self.contents.clear
  123.     self.contents.font.color = normal_color
  124.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  125.     @text = text
  126.     @align = align
  127.     @actor = nil
  128.   end
  129.   self.visible = true
  130. end
  131. end
  132. #==============================================================================
  133. #  Window_LoadCommand
  134. #------------------------------------------------------------------------------
  135. #  存取档画面选择按钮窗口
  136. #==============================================================================

  137. class Window_LoadCommand < Window_Selectable
  138. #--------------------------------------------------------------------------
  139. #  初始化对象
  140. #--------------------------------------------------------------------------
  141. def initialize
  142.   super(320, 0, 320, 64)
  143.   self.contents = Bitmap.new(width - 32, height - 32)
  144.   self.contents.font.name = "黑体"
  145.   self.contents.font.size = 18
  146.   @item_max = 2
  147.   @column_max = 2
  148.   @commands = ["读取", "存储"]
  149.   refresh
  150.   self.index = 0
  151. end
  152. #--------------------------------------------------------------------------
  153. #  刷新
  154. #--------------------------------------------------------------------------
  155. def refresh
  156.   self.contents.clear
  157.   for i in 0...@item_max
  158.     draw_item(i)
  159.   end
  160. end
  161. #--------------------------------------------------------------------------
  162. #  描画按钮文字
  163. #--------------------------------------------------------------------------
  164. def draw_item(index)
  165.   x = 4 + index * 160
  166.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 项目无效化
  170. #     index : 项目编号
  171. #--------------------------------------------------------------------------
  172.   def disable_item(index)
  173.     draw_item(index, disabled_color)
  174.   end

  175. end

  176. #==============================================================================
  177. # ■ Scene_Menu
  178. #------------------------------------------------------------------------------
  179. #  处理菜单画面的类。
  180. #==============================================================================

  181. class Scene_Menu
  182.   #--------------------------------------------------------------------------
  183.   # ● 初始化对像
  184.   #     menu_index : 命令光标的初期位置
  185.   #--------------------------------------------------------------------------
  186.   def initialize(menu_index = 0)
  187.     @menu_index = menu_index
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 主处理
  191.   #--------------------------------------------------------------------------
  192.   def main
  193.     # 生成命令窗口
  194.     s1 = $data_system.words.item
  195.     s2 = $data_system.words.skill
  196.     s3 = $data_system.words.equip
  197.     s4 = "状态"
  198.     s5 = "记录"
  199.     s6 = "结束游戏"
  200.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  201.     @command_window.index = @menu_index
  202.     # 同伴人数为 0 的情况下
  203.     if $game_party.actors.size == 0
  204.       # 物品、特技、装备、状态无效化
  205.       @command_window.disable_item(0)
  206.       @command_window.disable_item(1)
  207.       @command_window.disable_item(2)
  208.       @command_window.disable_item(3)
  209.     end
  210.     # 生成游戏时间窗口
  211.     @playtime_window = Window_PlayTime.new
  212.     @playtime_window.x = 0
  213.     @playtime_window.y = 224
  214.     # 生成步数窗口
  215.     @steps_window = Window_Steps.new
  216.     @steps_window.x = 0
  217.     @steps_window.y = 320
  218.     # 生成金钱窗口
  219.     @gold_window = Window_Gold.new
  220.     @gold_window.x = 0
  221.     @gold_window.y = 416
  222.     # 生成状态窗口
  223.     @status_window = Window_MenuStatus.new
  224.     @status_window.x = 160
  225.     @status_window.y = 0
  226.     # 执行过渡
  227.     Graphics.transition
  228.     # 主循环
  229.     loop do
  230.       # 刷新游戏画面
  231.       Graphics.update
  232.       # 刷新输入信息
  233.       Input.update
  234.       # 刷新画面
  235.       update
  236.       # 如果切换画面就中断循环
  237.       if $scene != self
  238.         break
  239.       end
  240.     end
  241.     # 准备过渡
  242.     Graphics.freeze
  243.     # 释放窗口
  244.     @command_window.dispose
  245.     @playtime_window.dispose
  246.     @steps_window.dispose
  247.     @gold_window.dispose
  248.     @status_window.dispose
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 刷新画面
  252.   #--------------------------------------------------------------------------
  253.   def update
  254.     # 刷新窗口
  255.     @command_window.update
  256.     @playtime_window.update
  257.     @steps_window.update
  258.     @gold_window.update
  259.     @status_window.update
  260.     # 命令窗口被激活的情况下: 调用 update_command
  261.     if @command_window.active
  262.       update_command
  263.       return
  264.     end
  265.     # 状态窗口被激活的情况下: 调用 update_status
  266.     if @status_window.active
  267.       update_status
  268.       return
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 刷新画面 (命令窗口被激活的情况下)
  273.   #--------------------------------------------------------------------------
  274.   def update_command
  275.     # 按下 B 键的情况下
  276.     if Input.trigger?(Input::B)
  277.       # 演奏取消 SE
  278.       $game_system.se_play($data_system.cancel_se)
  279.       # 切换的地图画面
  280.       $scene = Scene_Map.new
  281.       return
  282.     end
  283.     # 按下 C 键的情况下
  284.     if Input.trigger?(Input::C)
  285.       # 同伴人数为 0、存档、游戏结束以外的场合
  286.       if $game_party.actors.size == 0 and @command_window.index < 4
  287.         # 演奏冻结 SE
  288.         $game_system.se_play($data_system.buzzer_se)
  289.         return
  290.       end
  291.       # 命令窗口的光标位置分支
  292.       case @command_window.index
  293.       when 0  # 物品
  294.         # 演奏确定 SE
  295.         $game_system.se_play($data_system.decision_se)
  296.         # 切换到物品画面
  297.         $scene = Scene_Item.new
  298.       when 1  # 特技
  299.         # 演奏确定 SE
  300.         $game_system.se_play($data_system.decision_se)
  301.         # 激活状态窗口
  302.         @command_window.active = false
  303.         @status_window.active = true
  304.         @status_window.index = 0
  305.       when 2  # 装备
  306.         # 演奏确定 SE
  307.         $game_system.se_play($data_system.decision_se)
  308.         # 激活状态窗口
  309.         @command_window.active = false
  310.         @status_window.active = true
  311.         @status_window.index = 0
  312.       when 3  # 状态
  313.         # 演奏确定 SE
  314.         $game_system.se_play($data_system.decision_se)
  315.         # 激活状态窗口
  316.         @command_window.active = false
  317.         @status_window.active = true
  318.         @status_window.index = 0
  319.       when 4  # 存档
  320.         # 演奏确定 SE
  321.         $game_system.se_play($data_system.decision_se)
  322.         # 切换到存取档画面
  323.         $menu_call = true
  324.         $scene = Scene_Loadsave.new
  325.       when 5  # 游戏结束
  326.         # 演奏确定 SE
  327.         $game_system.se_play($data_system.decision_se)
  328.         # 切换到游戏结束画面
  329.         $scene = Scene_End.new
  330.       end
  331.       return
  332.     end
  333.   end
  334.   end
  335. #==============================================================================
  336. #  Scene_Loadsave
  337. #------------------------------------------------------------------------------
  338. # 处理存取档画面的类。
  339. #==============================================================================

  340. class Scene_Loadsave
  341. #--------------------------------------------------------------------------
  342. # ● 初始化对像
  343. #     $last_savefile_index : 记录光标位置
  344. #--------------------------------------------------------------------------
  345. def initialize
  346.   $last_savefile_index = 0 if $last_savefile_index == nil
  347. end
  348. #--------------------------------------------------------------------------
  349. #  主处理
  350. #--------------------------------------------------------------------------
  351. def main
  352.   @savestate = 0
  353.   # 生成窗口
  354.   @help_window = Window_LoadHelp.new
  355.   @help_window.set_text("请选择.")
  356.   @option_window = Window_LoadCommand.new
  357.   @savefile_windows = []
  358.   for i in 0..3
  359.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  360.   end
  361.   @option_window.index = $last_savefile_index
  362.   @file_index = 0
  363.   # 执行过渡
  364.   Graphics.transition
  365.   # 主循环
  366.   loop do
  367.     # 刷新游戏画面
  368.     Graphics.update
  369.     # 刷新输入信息
  370.     Input.update
  371.     # 刷新画面
  372.     update
  373.     # 如果画面被切换的话就中断循环
  374.     if $scene != self
  375.       break
  376.     end
  377.   end
  378.   # 准备过渡
  379.   Graphics.freeze
  380.   # 释放窗口
  381.   @help_window.dispose
  382.   @option_window.dispose
  383.   for i in @savefile_windows
  384.     i.dispose
  385.   end
  386. end

  387. #--------------------------------------------------------------------------
  388. #  ● 刷新画面
  389. #--------------------------------------------------------------------------
  390. def update
  391.   # 刷新窗口
  392.   @help_window.update
  393.   @option_window.update
  394.   for i in @savefile_windows
  395.     i.update
  396.   end
  397.   
  398.   case @savestate
  399.   when 0
  400.       if Input.trigger?(Input::B)
  401.       $game_system.se_play($data_system.cancel_se)
  402.       # 淡入淡出 BGM
  403.       Audio.bgm_fade(800)
  404.       # 返回地图
  405.       if $menu_call == false
  406.       # 切换到地图画面
  407.       $scene = Scene_Map.new
  408.         return
  409.       end
  410.       # 切换到菜单画面
  411.       $menu_call = false
  412.       $scene = Scene_Menu.new(4)
  413.    end
  414.     if Input.trigger?(Input::C)
  415.       case @option_window.index
  416.       when 0
  417.         @savefile_windows[@file_index].selected = true
  418.         @option_window.active = false
  419.         @help_window.set_text("请选择一个文件进行读取.")
  420.         @savestate  = 1
  421.         return
  422.       when 1
  423.         @savefile_windows[@file_index].selected = true
  424.         @option_window.active = false
  425.         @help_window.set_text("请选择一个文件进行存储.")
  426.         @savestate = 2
  427.         return
  428.         return
  429.       end
  430.     end
  431.   when 1,2
  432.     if Input.trigger?(Input::C)
  433.       if @savestate == 1
  434.         $menu_call = false
  435.         load_file(make_filename(@file_index))
  436.         return
  437.       else
  438.         # 禁止存档的情况下
  439.         if $game_system.save_disabled
  440.           @help_window.set_text("抱歉,这里禁止存储.")
  441.           # 演奏冻结 SE
  442.           $game_system.se_play($data_system.buzzer_se)
  443.           return
  444.         end
  445.        $game_system.se_play($data_system.decision_se)
  446.        $last_savefile_index = @option_window.index
  447.        save_file(make_filename(@file_index))
  448.         return
  449.       end
  450.     end
  451.     # 取消
  452.     if Input.trigger?(Input::B)
  453.       $game_system.se_play($data_system.cancel_se)
  454.       @savefile_windows[@file_index].selected = false
  455.       @help_window.set_text("请选择.")
  456.       @savestate = 0
  457.       @option_window.active = true
  458.       return
  459.     end
  460.     # 向下选择
  461.     if Input.repeat?(Input::DOWN)
  462.       $game_system.se_play($data_system.cursor_se)
  463.       @savefile_windows[@file_index].selected = false
  464.       @file_index = (@file_index + 1) % 4
  465.       @savefile_windows[@file_index].selected = true
  466.       return
  467.     end
  468.     # 向上选择
  469.     if Input.repeat?(Input::UP)
  470.       $game_system.se_play($data_system.cursor_se)
  471.       @savefile_windows[@file_index].selected = false
  472.       @file_index = (@file_index + 3) % 4
  473.       @savefile_windows[@file_index].selected = true
  474.       return
  475.     end
  476.    
  477.     if Input.trigger?(Input::B)
  478.       $game_system.se_play($data_system.cancel_se)
  479.       @savestate = 2
  480.       @savefile_windows[@file_index].selected = true
  481.       return
  482.     end
  483.   end
  484. end
  485. #--------------------------------------------------------------------------
  486. # 建立记录文件索引
  487. #--------------------------------------------------------------------------
  488. def make_filename(file_index)
  489.   return "Save#{file_index + 1}.rxdata"
  490. end
  491. #--------------------------------------------------------------------------
  492. #  读取记录文件
  493. #     filename  : 被读取文件
  494. #--------------------------------------------------------------------------
  495. def load_file(filename)
  496.   # 文件不存在的情况下
  497.   unless FileTest.exist?(filename)
  498.     # 演奏冻结 SE
  499.     $game_system.se_play($data_system.buzzer_se)
  500.     return
  501.   end
  502.   # 演奏读档 SE
  503.   $game_system.se_play($data_system.load_se)
  504.   # 以二进制方式打开文件
  505.   # 写入存档数据
  506.   file = File.open(filename, "rb")
  507.   read_save_data(file)
  508.   file.close
  509.   # 演奏 BGM 与 BGS
  510.   $game_system.bgm_play($game_system.playing_bgm)
  511.   $game_system.bgs_play($game_system.playing_bgs)
  512.   # 刷新地图 (执行并行事件)
  513.   $game_map.update
  514.   # 切换到地图画面
  515.   $menu_call == false
  516.   $scene = Scene_Map.new
  517. end
  518. #--------------------------------------------------------------------------
  519. # ● 读取存档数据
  520. #     file : 读取用文件对像 (已经打开)
  521. #--------------------------------------------------------------------------
  522. def read_save_data(file)
  523.   # 读取描绘存档文件用的角色数据
  524.   characters = Marshal.load(file)
  525.   # 读取测量游戏时间用画面计数
  526.   Graphics.frame_count = Marshal.load(file)
  527.   # 读取各种游戏对像
  528.   $game_system        = Marshal.load(file)
  529.   $game_switches      = Marshal.load(file)
  530.   $game_variables     = Marshal.load(file)
  531.   $game_self_switches = Marshal.load(file)
  532.   $game_screen        = Marshal.load(file)
  533.   $game_actors        = Marshal.load(file)
  534.   $game_party         = Marshal.load(file)
  535.   $game_troop         = Marshal.load(file)
  536.   $game_map           = Marshal.load(file)
  537.   $game_player        = Marshal.load(file)
  538.     # 魔法编号与保存时有差异的情况下
  539.     # (加入编辑器的编辑过的数据)
  540.   if $game_system.magic_number != $data_system.magic_number
  541.     # 重新装载地图
  542.     $game_map.setup($game_map.map_id)
  543.     $game_player.center($game_player.x, $game_player.y)
  544.   end
  545.   # 刷新同伴成员
  546.   $game_party.refresh
  547. end
  548.   #--------------------------------------------------------------------------
  549.   # ● 写入存档文件
  550.   #--------------------------------------------------------------------------
  551.   def save_file(filename)
  552.     # 演奏存档 SE
  553.     $game_system.se_play($data_system.save_se)
  554.     # 写入存档数据
  555.     file = File.open(filename, "wb")
  556.     write_save_data(file)
  557.     file.close
  558.     # 切换到菜单画面
  559.     $scene = Scene_Loadsave.new
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 写入存档数据
  563.   #     file : 写入用文件对像 (已经打开)
  564.   #--------------------------------------------------------------------------
  565.   def write_save_data(file)
  566.     # 生成描绘存档文件用的角色图形
  567.     characters = []
  568.     for i in 0...$game_party.actors.size
  569.       actor = $game_party.actors[i]
  570.       characters.push([actor.character_name, actor.character_hue])
  571.     end
  572.     # 写入描绘存档文件用的角色数据
  573.     Marshal.dump(characters, file)
  574.     # 写入测量游戏时间用画面计数
  575.     Marshal.dump(Graphics.frame_count, file)
  576.     # 增加 1 次存档次数
  577.     $game_system.save_count += 1
  578.     # 保存魔法编号
  579.     # (将编辑器保存的值以随机值替换)
  580.     $game_system.magic_number = $data_system.magic_number
  581.     # 写入各种游戏对像
  582.     Marshal.dump($game_system, file)
  583.     Marshal.dump($game_switches, file)
  584.     Marshal.dump($game_variables, file)
  585.     Marshal.dump($game_self_switches, file)
  586.     Marshal.dump($game_screen, file)
  587.     Marshal.dump($game_actors, file)
  588.     Marshal.dump($game_party, file)
  589.     Marshal.dump($game_troop, file)
  590.     Marshal.dump($game_map, file)
  591.     Marshal.dump($game_player, file)
  592.   end
  593. end
复制代码


改成只能用调用的办法才能使用……

不要替换原来的,
不然我那个菜单会变掉的……
作者: enghao_lim    时间: 2007-8-25 06:58
你是说RM自带的脚本要保留吗?

还有你说的调用是事件还是菜单里?
作者: rubygomax    时间: 2007-8-25 07:09
LZ的意思是指...比如按F7就能调用该脚本么?
作者: K’    时间: 2007-8-25 17:15
单纯求人帮助还是建议去应援区.
作者: 越前リョーマ    时间: 2007-8-25 18:50
就是说……

只能用调用方法来使用该脚本%……{/gg}
作者: 精灵使者    时间: 2007-8-25 18:56
原来是纯调用的方式,防止自定义菜单冲突吧。
建议应援区。
作者: fallout337    时间: 2007-8-25 19:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2007-8-25 21:33
没明白LS写些什么……
作者: fallout337    时间: 2007-8-25 21:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2007-8-25 22:59
以下引用fallout337于2007-8-25 13:37:30的发言:

我只是提供一种方法,就是按F4直接调用这个脚本
至于楼主是想要怎么样的调用该脚本,或许这个方法可以让楼主有所启示...

我是脚本盲……

启示不出什么东西……
作者: fallout337    时间: 2007-8-26 00:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangff    时间: 2007-8-26 01:21
以下引用fallout337于2007-8-25 11:58:16的发言:

虽然不是很清楚,但如果是按键调用的话先放入全键盘脚本
然后在Scene_Map里
# 按下 B 键的情况下
   if Input.trigger?(Input::B)
     # 不是在事件执行中或菜单禁止中
     unless $game_system.map_interpreter.running? or
            $game_system.menu_disabled
       # 设置菜单调用标志以及 SE 演奏
       $game_temp.menu_calling = true
       $game_temp.menu_beep = true
     end
   end
这段下面加
# 按下 F4 键的情况下
   if Kboard.trigger?($R_Key_F4)
      #不是在事件执行中或菜单禁止中
     unless $game_system.map_interpreter.running?
      
       $scene = Scene_Loadsave.new
     end
   end

这样按F4即能调用该脚本...至于其他调用方法应该都大同小异吧...

不行!~~~~!
作者: yangff    时间: 2007-8-26 01:23
按照fallout337的改法不行!!


  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  5.   GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  6.   GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  7.   #--------------------------------------------------------------------------
  8.   module_function
  9.   #--------------------------------------------------------------------------
  10.   def keyb(rkey)
  11.      if GetKeyState.call(rkey) != 0
  12.        return 1
  13.      end
  14.      return 0
  15.   end
  16.    #--------------------------------------------------------------------------
  17.   def keyboard(rkey)
  18.     GetKeyState.call(rkey) & 0x01 == 1  #
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   def key(rkey, key = 0)
  22.     GetKeyboardState.call(rkey) & 0x01 == key #
  23.   end
  24. end

  25. #==============================================================================
  26. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  27. #==============================================================================




  28. #全键盘结束
  29. #开始定义存取档合并脚本






  30. #==============================================================================
  31. # ■ 存取档合并脚本
  32. #------------------------------------------------------------------------------
  33. # BY:美兽
  34. #插入main之前,地图呼出方式$scene = Scene_Loadsave.new,主菜单里默认的也是该界面
  35. #不与默认的存取档功能冲突,方便个别地方只需存或者取的功能,虽然很简单,实际做起
  36. #来,考虑的地方还是比较多。 
  37. #==============================================================================
  38. #==============================================================================
  39. # ■ Scene_Load
  40. #------------------------------------------------------------------------------
  41. #  处理读档画面的类。
  42. #==============================================================================

  43. class Scene_Load < Scene_File
  44.   #--------------------------------------------------------------------------
  45.   # ● 初始化对像
  46.   #--------------------------------------------------------------------------
  47.   def initialize
  48.     # 再生成临时对像
  49.     $game_temp = Game_Temp.new
  50.     # 选择存档时间最新的文件
  51.     $game_temp.last_file_index = 0
  52.     latest_time = Time.at(0)
  53.     for i in 0..3
  54.       filename = make_filename(i)
  55.       if FileTest.exist?(filename)
  56.         file = File.open(filename, "r")
  57.         if file.mtime > latest_time
  58.           latest_time = file.mtime
  59.           $game_temp.last_file_index = i
  60.         end
  61.         file.close
  62.       end
  63.     end
  64.     super("要载入哪个文件?")
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 确定时的处理
  68.   #--------------------------------------------------------------------------
  69.   def on_decision(filename)
  70.     # 文件不存在的情况下
  71.     unless FileTest.exist?(filename)
  72.       # 演奏冻结 SE
  73.       $game_system.se_play($data_system.buzzer_se)
  74.       return
  75.     end
  76.     $menu_call = false
  77.     # 演奏读档 SE
  78.     $game_system.se_play($data_system.load_se)
  79.     # 写入存档数据
  80.     file = File.open(filename, "rb")
  81.     read_save_data(file)
  82.     file.close
  83.     # 还原 BGM、BGS
  84.     $game_system.bgm_play($game_system.playing_bgm)
  85.     $game_system.bgs_play($game_system.playing_bgs)
  86.     # 刷新地图 (执行并行事件)
  87.     $game_map.update
  88.     # 切换到地图画面
  89.     $scene = Scene_Map.new
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 取消时的处理
  93.   #--------------------------------------------------------------------------
  94.   def on_cancel
  95.     # 演奏取消 SE
  96.     $game_system.se_play($data_system.cancel_se)
  97.     # 切换到标题画面
  98.     $scene = Scene_Title.new
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 读取存档数据
  102.   #     file : 读取用文件对像 (已经打开)
  103.   #--------------------------------------------------------------------------
  104.   def read_save_data(file)
  105.     # 读取描绘存档文件用的角色数据
  106.     characters = Marshal.load(file)
  107.     # 读取测量游戏时间用画面计数
  108.     Graphics.frame_count = Marshal.load(file)
  109.     # 读取各种游戏对像
  110.     $game_system        = Marshal.load(file)
  111.     $game_switches      = Marshal.load(file)
  112.     $game_variables     = Marshal.load(file)
  113.     $game_self_switches = Marshal.load(file)
  114.     $game_screen        = Marshal.load(file)
  115.     $game_actors        = Marshal.load(file)
  116.     $game_party         = Marshal.load(file)
  117.     $game_troop         = Marshal.load(file)
  118.     $game_map           = Marshal.load(file)
  119.     $game_player        = Marshal.load(file)
  120.     # 魔法编号与保存时有差异的情况下
  121.     # (加入编辑器的编辑过的数据)
  122.     if $game_system.magic_number != $data_system.magic_number
  123.       # 重新装载地图
  124.       $game_map.setup($game_map.map_id)
  125.       $game_player.center($game_player.x, $game_player.y)
  126.     end
  127.     # 刷新同伴成员
  128.     $game_party.refresh
  129.   end
  130. end
  131. #==============================================================================
  132. # ■ Window_LoadHelp
  133. #------------------------------------------------------------------------------
  134. #  存取档画面帮助信息的显示窗口。
  135. #==============================================================================

  136. class Window_LoadHelp < Window_Base
  137. #--------------------------------------------------------------------------
  138. #  初始化对象
  139. #--------------------------------------------------------------------------
  140. def initialize
  141.   super(0, 0, 320, 64)
  142.   self.contents = Bitmap.new(width - 32, height - 32)
  143.   self.contents.font.name = "黑体"
  144.   self.contents.font.size = 18
  145. end
  146. #--------------------------------------------------------------------------
  147. #  刷新文本
  148. #--------------------------------------------------------------------------
  149. def set_text(text, align = 1)
  150.   if text != @text or align != @align
  151.     self.contents.clear
  152.     self.contents.font.color = normal_color
  153.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  154.     @text = text
  155.     @align = align
  156.     @actor = nil
  157.   end
  158.   self.visible = true
  159. end
  160. end
  161. #==============================================================================
  162. #  Window_LoadCommand
  163. #------------------------------------------------------------------------------
  164. #  存取档画面选择按钮窗口
  165. #==============================================================================

  166. class Window_LoadCommand < Window_Selectable
  167. #--------------------------------------------------------------------------
  168. #  初始化对象
  169. #--------------------------------------------------------------------------
  170. def initialize
  171.   super(320, 0, 320, 64)
  172.   self.contents = Bitmap.new(width - 32, height - 32)
  173.   self.contents.font.name = "黑体"
  174.   self.contents.font.size = 18
  175.   @item_max = 2
  176.   @column_max = 2
  177.   @commands = ["读取", "存储"]
  178.   refresh
  179.   self.index = 0
  180. end
  181. #--------------------------------------------------------------------------
  182. #  刷新
  183. #--------------------------------------------------------------------------
  184. def refresh
  185.   self.contents.clear
  186.   for i in 0...@item_max
  187.     draw_item(i)
  188.   end
  189. end
  190. #--------------------------------------------------------------------------
  191. #  描画按钮文字
  192. #--------------------------------------------------------------------------
  193. def draw_item(index)
  194.   x = 4 + index * 160
  195.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  196. end
  197. #--------------------------------------------------------------------------
  198. # ● 项目无效化
  199. #     index : 项目编号
  200. #--------------------------------------------------------------------------
  201.   def disable_item(index)
  202.     draw_item(index, disabled_color)
  203.   end

  204. end

  205. #==============================================================================
  206. # ■ Scene_Menu
  207. #------------------------------------------------------------------------------
  208. #  处理菜单画面的类。
  209. #==============================================================================

  210. class Scene_Menu
  211.   #--------------------------------------------------------------------------
  212.   # ● 初始化对像
  213.   #     menu_index : 命令光标的初期位置
  214.   #--------------------------------------------------------------------------
  215.   def initialize(menu_index = 0)
  216.     @menu_index = menu_index
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 主处理
  220.   #--------------------------------------------------------------------------
  221.   def main
  222.     # 生成命令窗口
  223.     s1 = $data_system.words.item
  224.     s2 = $data_system.words.skill
  225.     s3 = $data_system.words.equip
  226.     s4 = "状态"
  227.     s5 = "记录"
  228.     s6 = "结束游戏"
  229.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  230.     @command_window.index = @menu_index
  231.     # 同伴人数为 0 的情况下
  232.     if $game_party.actors.size == 0
  233.       # 物品、特技、装备、状态无效化
  234.       @command_window.disable_item(0)
  235.       @command_window.disable_item(1)
  236.       @command_window.disable_item(2)
  237.       @command_window.disable_item(3)
  238.     end
  239.     # 生成游戏时间窗口
  240.     @playtime_window = Window_PlayTime.new
  241.     @playtime_window.x = 0
  242.     @playtime_window.y = 224
  243.     # 生成步数窗口
  244.     @steps_window = Window_Steps.new
  245.     @steps_window.x = 0
  246.     @steps_window.y = 320
  247.     # 生成金钱窗口
  248.     @gold_window = Window_Gold.new
  249.     @gold_window.x = 0
  250.     @gold_window.y = 416
  251.     # 生成状态窗口
  252.     @status_window = Window_MenuStatus.new
  253.     @status_window.x = 160
  254.     @status_window.y = 0
  255.     # 执行过渡
  256.     Graphics.transition
  257.     # 主循环
  258.     loop do
  259.       # 刷新游戏画面
  260.       Graphics.update
  261.       # 刷新输入信息
  262.       Input.update
  263.       # 刷新画面
  264.       update
  265.       # 如果切换画面就中断循环
  266.       if $scene != self
  267.         break
  268.       end
  269.     end
  270.     # 准备过渡
  271.     Graphics.freeze
  272.     # 释放窗口
  273.     @command_window.dispose
  274.     @playtime_window.dispose
  275.     @steps_window.dispose
  276.     @gold_window.dispose
  277.     @status_window.dispose
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 刷新画面
  281.   #--------------------------------------------------------------------------
  282.   def update
  283.     # 刷新窗口
  284.     @command_window.update
  285.     @playtime_window.update
  286.     @steps_window.update
  287.     @gold_window.update
  288.     @status_window.update
  289.     # 命令窗口被激活的情况下: 调用 update_command
  290.     if @command_window.active
  291.       update_command
  292.       return
  293.     end
  294.     # 状态窗口被激活的情况下: 调用 update_status
  295.     if @status_window.active
  296.       update_status
  297.       return
  298.     end
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 刷新画面 (命令窗口被激活的情况下)
  302.   #--------------------------------------------------------------------------
  303.   def update_command
  304.     # 按下 B 键的情况下
  305.     if Input.trigger?(Input::B)
  306.       # 演奏取消 SE
  307.       $game_system.se_play($data_system.cancel_se)
  308.       # 切换的地图画面
  309.       $scene = Scene_Map.new
  310.       return
  311.     end
  312.     # 按下 C 键的情况下
  313.     if Input.trigger?(Input::C)
  314.       # 同伴人数为 0、存档、游戏结束以外的场合
  315.       if $game_party.actors.size == 0 and @command_window.index < 4
  316.         # 演奏冻结 SE
  317.         $game_system.se_play($data_system.buzzer_se)
  318.         return
  319.       end
  320.       # 命令窗口的光标位置分支
  321.       case @command_window.index
  322.       when 0  # 物品
  323.         # 演奏确定 SE
  324.         $game_system.se_play($data_system.decision_se)
  325.         # 切换到物品画面
  326.         $scene = Scene_Item.new
  327.       when 1  # 特技
  328.         # 演奏确定 SE
  329.         $game_system.se_play($data_system.decision_se)
  330.         # 激活状态窗口
  331.         @command_window.active = false
  332.         @status_window.active = true
  333.         @status_window.index = 0
  334.       when 2  # 装备
  335.         # 演奏确定 SE
  336.         $game_system.se_play($data_system.decision_se)
  337.         # 激活状态窗口
  338.         @command_window.active = false
  339.         @status_window.active = true
  340.         @status_window.index = 0
  341.       when 3  # 状态
  342.         # 演奏确定 SE
  343.         $game_system.se_play($data_system.decision_se)
  344.         # 激活状态窗口
  345.         @command_window.active = false
  346.         @status_window.active = true
  347.         @status_window.index = 0
  348.       when 4  # 存档
  349.         # 演奏确定 SE
  350.         $game_system.se_play($data_system.decision_se)
  351.         # 切换到存取档画面
  352.         $menu_call = true
  353.         $scene = Scene_Loadsave.new
  354.       when 5  # 游戏结束
  355.         # 演奏确定 SE
  356.         $game_system.se_play($data_system.decision_se)
  357.         # 切换到游戏结束画面
  358.         $scene = Scene_End.new
  359.       end
  360.       return
  361.     end
  362.   end
  363.   end
  364. #==============================================================================
  365. #  Scene_Loadsave
  366. #------------------------------------------------------------------------------
  367. # 处理存取档画面的类。
  368. #==============================================================================

  369. class Scene_Loadsave
  370. #--------------------------------------------------------------------------
  371. # ● 初始化对像
  372. #     $last_savefile_index : 记录光标位置
  373. #--------------------------------------------------------------------------
  374. def initialize
  375.   $last_savefile_index = 0 if $last_savefile_index == nil
  376. end
  377. #--------------------------------------------------------------------------
  378. #  主处理
  379. #--------------------------------------------------------------------------
  380. def main
  381.   @savestate = 0
  382.   # 生成窗口
  383.   @help_window = Window_LoadHelp.new
  384.   @help_window.set_text("请选择.")
  385.   @option_window = Window_LoadCommand.new
  386.   @savefile_windows = []
  387.   for i in 0..3
  388.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  389.   end
  390.   @option_window.index = $last_savefile_index
  391.   @file_index = 0
  392.   # 执行过渡
  393.   Graphics.transition
  394.   # 主循环
  395.   loop do
  396.     # 刷新游戏画面
  397.     Graphics.update
  398.     # 刷新输入信息
  399.     Input.update
  400.     # 刷新画面
  401.     update
  402.     # 如果画面被切换的话就中断循环
  403.     if $scene != self
  404.       break
  405.     end
  406.   end
  407.   # 准备过渡
  408.   Graphics.freeze
  409.   # 释放窗口
  410.   @help_window.dispose
  411.   @option_window.dispose
  412.   for i in @savefile_windows
  413.     i.dispose
  414.   end
  415. end

  416. #--------------------------------------------------------------------------
  417. #  ● 刷新画面
  418. #--------------------------------------------------------------------------
  419. def update
  420.   # 刷新窗口
  421.   @help_window.update
  422.   @option_window.update
  423.   for i in @savefile_windows
  424.     i.update
  425.   end
  426.   
  427.   case @savestate
  428.   when 0
  429.       if Input.trigger?(Input::B)
  430.       $game_system.se_play($data_system.cancel_se)
  431.       # 淡入淡出 BGM
  432.       Audio.bgm_fade(800)
  433.       # 返回地图
  434.       if $menu_call == false
  435.       # 切换到地图画面
  436.       $scene = Scene_Map.new
  437.         return
  438.       end
  439.       # 切换到菜单画面
  440.       $menu_call = false
  441.       $scene = Scene_Menu.new(4)
  442.    end
  443.     if Input.trigger?(Input::C)
  444.       case @option_window.index
  445.       when 0
  446.         @savefile_windows[@file_index].selected = true
  447.         @option_window.active = false
  448.         @help_window.set_text("请选择一个文件进行读取.")
  449.         @savestate  = 1
  450.         return
  451.       when 1
  452.         @savefile_windows[@file_index].selected = true
  453.         @option_window.active = false
  454.         @help_window.set_text("请选择一个文件进行存储.")
  455.         @savestate = 2
  456.         return
  457.         return
  458.       end
  459.     end
  460.   when 1,2
  461.     if Input.trigger?(Input::C)
  462.       if @savestate == 1
  463.         $menu_call = false
  464.         load_file(make_filename(@file_index))
  465.         return
  466.       else
  467.         # 禁止存档的情况下
  468.         if $game_system.save_disabled
  469.           @help_window.set_text("抱歉,这里禁止存储.")
  470.           # 演奏冻结 SE
  471.           $game_system.se_play($data_system.buzzer_se)
  472.           return
  473.         end
  474.        $game_system.se_play($data_system.decision_se)
  475.        $last_savefile_index = @option_window.index
  476.        save_file(make_filename(@file_index))
  477.         return
  478.       end
  479.     end
  480.     # 取消
  481.     if Input.trigger?(Input::B)
  482.       $game_system.se_play($data_system.cancel_se)
  483.       @savefile_windows[@file_index].selected = false
  484.       @help_window.set_text("请选择.")
  485.       @savestate = 0
  486.       @option_window.active = true
  487.       return
  488.     end
  489.     # 向下选择
  490.     if Input.repeat?(Input::DOWN)
  491.       $game_system.se_play($data_system.cursor_se)
  492.       @savefile_windows[@file_index].selected = false
  493.       @file_index = (@file_index + 1) % 4
  494.       @savefile_windows[@file_index].selected = true
  495.       return
  496.     end
  497.     # 向上选择
  498.     if Input.repeat?(Input::UP)
  499.       $game_system.se_play($data_system.cursor_se)
  500.       @savefile_windows[@file_index].selected = false
  501.       @file_index = (@file_index + 3) % 4
  502.       @savefile_windows[@file_index].selected = true
  503.       return
  504.     end
  505.    
  506.     if Input.trigger?(Input::B)
  507.       $game_system.se_play($data_system.cancel_se)
  508.       @savestate = 2
  509.       @savefile_windows[@file_index].selected = true
  510.       return
  511.     end
  512.   end
  513. end
  514. #--------------------------------------------------------------------------
  515. # 建立记录文件索引
  516. #--------------------------------------------------------------------------
  517. def make_filename(file_index)
  518.   return "Save#{file_index + 1}.rxdata"
  519. end
  520. #--------------------------------------------------------------------------
  521. #  读取记录文件
  522. #     filename  : 被读取文件
  523. #--------------------------------------------------------------------------
  524. def load_file(filename)
  525.   # 文件不存在的情况下
  526.   unless FileTest.exist?(filename)
  527.     # 演奏冻结 SE
  528.     $game_system.se_play($data_system.buzzer_se)
  529.     return
  530.   end
  531.   # 演奏读档 SE
  532.   $game_system.se_play($data_system.load_se)
  533.   # 以二进制方式打开文件
  534.   # 写入存档数据
  535.   file = File.open(filename, "rb")
  536.   read_save_data(file)
  537.   file.close
  538.   # 演奏 BGM 与 BGS
  539.   $game_system.bgm_play($game_system.playing_bgm)
  540.   $game_system.bgs_play($game_system.playing_bgs)
  541.   # 刷新地图 (执行并行事件)
  542.   $game_map.update
  543.   # 切换到地图画面
  544.   $menu_call == false
  545.   $scene = Scene_Map.new
  546. end
  547. #--------------------------------------------------------------------------
  548. # ● 读取存档数据
  549. #     file : 读取用文件对像 (已经打开)
  550. #--------------------------------------------------------------------------
  551. def read_save_data(file)
  552.   # 读取描绘存档文件用的角色数据
  553.   characters = Marshal.load(file)
  554.   # 读取测量游戏时间用画面计数
  555.   Graphics.frame_count = Marshal.load(file)
  556.   # 读取各种游戏对像
  557.   $game_system        = Marshal.load(file)
  558.   $game_switches      = Marshal.load(file)
  559.   $game_variables     = Marshal.load(file)
  560.   $game_self_switches = Marshal.load(file)
  561.   $game_screen        = Marshal.load(file)
  562.   $game_actors        = Marshal.load(file)
  563.   $game_party         = Marshal.load(file)
  564.   $game_troop         = Marshal.load(file)
  565.   $game_map           = Marshal.load(file)
  566.   $game_player        = Marshal.load(file)
  567.     # 魔法编号与保存时有差异的情况下
  568.     # (加入编辑器的编辑过的数据)
  569.   if $game_system.magic_number != $data_system.magic_number
  570.     # 重新装载地图
  571.     $game_map.setup($game_map.map_id)
  572.     $game_player.center($game_player.x, $game_player.y)
  573.   end
  574.   # 刷新同伴成员
  575.   $game_party.refresh
  576. end
  577.   #--------------------------------------------------------------------------
  578.   # ● 写入存档文件
  579.   #--------------------------------------------------------------------------
  580.   def save_file(filename)
  581.     # 演奏存档 SE
  582.     $game_system.se_play($data_system.save_se)
  583.     # 写入存档数据
  584.     file = File.open(filename, "wb")
  585.     write_save_data(file)
  586.     file.close
  587.     # 切换到菜单画面
  588.     $scene = Scene_Loadsave.new
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 写入存档数据
  592.   #     file : 写入用文件对像 (已经打开)
  593.   #--------------------------------------------------------------------------
  594.   def write_save_data(file)
  595.     # 生成描绘存档文件用的角色图形
  596.     characters = []
  597.     for i in 0...$game_party.actors.size
  598.       actor = $game_party.actors[i]
  599.       characters.push([actor.character_name, actor.character_hue])
  600.     end
  601.     # 写入描绘存档文件用的角色数据
  602.     Marshal.dump(characters, file)
  603.     # 写入测量游戏时间用画面计数
  604.     Marshal.dump(Graphics.frame_count, file)
  605.     # 增加 1 次存档次数
  606.     $game_system.save_count += 1
  607.     # 保存魔法编号
  608.     # (将编辑器保存的值以随机值替换)
  609.     $game_system.magic_number = $data_system.magic_number
  610.     # 写入各种游戏对像
  611.     Marshal.dump($game_system, file)
  612.     Marshal.dump($game_switches, file)
  613.     Marshal.dump($game_variables, file)
  614.     Marshal.dump($game_self_switches, file)
  615.     Marshal.dump($game_screen, file)
  616.     Marshal.dump($game_actors, file)
  617.     Marshal.dump($game_party, file)
  618.     Marshal.dump($game_troop, file)
  619.     Marshal.dump($game_map, file)
  620.     Marshal.dump($game_player, file)
  621.   end
  622. end
  623. # 定义存取档合并脚本完毕!
  624. #开始重新定义Scene_Map
  625. #==============================================================================
  626. # ■ Scene_Map
  627. #------------------------------------------------------------------------------
  628. #  处理地图画面的类。
  629. #==============================================================================
  630. class Scene_Map
  631.   #--------------------------------------------------------------------------
  632.   # ● 主处理
  633.   #--------------------------------------------------------------------------
  634.   def main
  635.     # 生成活动块
  636.     @spriteset = Spriteset_Map.new
  637.     # 生成信息窗口
  638.     @message_window = Window_Message.new
  639.     # 执行过渡
  640.     Graphics.transition
  641.     # 主循环
  642.     loop do
  643.       # 刷新游戏画面
  644.       Graphics.update
  645.       # 刷新输入信息
  646.       Input.update
  647.       # 刷新画面
  648.       update
  649.       # 如果画面切换的话就中断循环
  650.       if $scene != self
  651.         break
  652.       end
  653.     end
  654.     # 准备过渡
  655.     Graphics.freeze
  656.     # 释放活动块
  657.     @spriteset.dispose
  658.     # 释放信息窗口
  659.     @message_window.dispose
  660.     # 标题画面切换中的情况下
  661.     if $scene.is_a?(Scene_Title)
  662.       # 淡入淡出画面
  663.       Graphics.transition
  664.       Graphics.freeze
  665.     end
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● 刷新画面
  669.   #--------------------------------------------------------------------------
  670.   def update
  671.     # 循环
  672.     loop do
  673.       # 按照地图、实例、主角的顺序刷新
  674.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  675.       #  的机会的重要因素)
  676.       $game_map.update
  677.       $game_system.map_interpreter.update
  678.       $game_player.update
  679.       # 系统 (计时器)、画面刷新
  680.       $game_system.update
  681.       $game_screen.update
  682.       # 如果主角在场所移动中就中断循环
  683.       unless $game_temp.player_transferring
  684.         break
  685.       end
  686.       # 执行场所移动
  687.       transfer_player
  688.       # 处理过渡中的情况下、中断循环
  689.       if $game_temp.transition_processing
  690.         break
  691.       end
  692.     end
  693.     # 刷新活动块
  694.     @spriteset.update
  695.     # 刷新信息窗口
  696.     @message_window.update
  697.     # 游戏结束的情况下
  698.     if $game_temp.gameover
  699.       # 切换的游戏结束画面
  700.       $scene = Scene_Gameover.new
  701.       return
  702.     end
  703.     # 返回标题画面的情况下
  704.     if $game_temp.to_title
  705.       # 切换到标题画面
  706.       $scene = Scene_Title.new
  707.       return
  708.     end
  709.     # 处理过渡中的情况下
  710.     if $game_temp.transition_processing
  711.       # 清除过渡处理中标志
  712.       $game_temp.transition_processing = false
  713.       # 执行过渡
  714.       if $game_temp.transition_name == ""
  715.         Graphics.transition(20)
  716.       else
  717.         Graphics.transition(40, "Graphics/Transitions/" +
  718.           $game_temp.transition_name)
  719.       end
  720.     end
  721.     # 显示信息窗口中的情况下
  722.     if $game_temp.message_window_showing
  723.       return
  724.     end
  725.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  726.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  727.       # 不是在事件执行中或者禁止遇敌中
  728.       unless $game_system.map_interpreter.running? or
  729.              $game_system.encounter_disabled
  730.         # 确定队伍
  731.         n = rand($game_map.encounter_list.size)
  732.         troop_id = $game_map.encounter_list[n]
  733.         # 队伍有效的话
  734.         if $data_troops[troop_id] != nil
  735.           # 设置调用战斗标志
  736.           $game_temp.battle_calling = true
  737.           $game_temp.battle_troop_id = troop_id
  738.           $game_temp.battle_can_escape = true
  739.           $game_temp.battle_can_lose = false
  740.           $game_temp.battle_proc = nil
  741.         end
  742.       end
  743.     end
  744.     # 按下 B 键的情况下
  745.     if Kboard.keyboard($R_Key_F3)
  746.       # 不是在事件执行中或菜单禁止中
  747.       unless $game_system.map_interpreter.running? or
  748.              $game_system.menu_disabled
  749.         # 设置菜单调用标志以及 SE 演奏
  750.         $game_temp.menu_calling = true
  751.         $game_temp.menu_beep = true
  752.       end     
  753.       if Kboard.keyboard($R_Key_F4)
  754.       #不是在事件执行中或菜单禁止中
  755.       # unless $game_system.map_interpreter.running?
  756.       # 演奏确定 SE
  757.         $game_system.se_play($data_system.decision_se)
  758.         # 切换到存取档画面
  759.         $menu_call = true
  760.         $scene = Scene_Loadsave.new
  761.      end
  762.    end
  763.     # 调试模式为 ON 并且按下 F9 键的情况下
  764.     if $DEBUG and Input.press?(Input::F9)
  765.       # 设置调用调试标志
  766.       $game_temp.debug_calling = true
  767.     end
  768.     # 不在主角移动中的情况下
  769.     unless $game_player.moving?
  770.       # 执行各种画面的调用
  771.       if $game_temp.battle_calling
  772.         call_battle
  773.       elsif $game_temp.shop_calling
  774.         call_shop
  775.       elsif $game_temp.name_calling
  776.         call_name
  777.       elsif $game_temp.menu_calling
  778.         call_menu
  779.       elsif $game_temp.save_calling
  780.         call_save
  781.       elsif $game_temp.debug_calling
  782.         call_debug
  783.       end
  784.     end
  785.   end
  786.   #--------------------------------------------------------------------------
  787.   # ● 调用战斗
  788.   #--------------------------------------------------------------------------
  789.   def call_battle
  790.     # 清除战斗调用标志
  791.     $game_temp.battle_calling = false
  792.     # 清除菜单调用标志
  793.     $game_temp.menu_calling = false
  794.     $game_temp.menu_beep = false
  795.     # 生成遇敌计数
  796.     $game_player.make_encounter_count
  797.     # 记忆地图 BGM 、停止 BGM
  798.     $game_temp.map_bgm = $game_system.playing_bgm
  799.     $game_system.bgm_stop
  800.     # 演奏战斗开始 SE
  801.     $game_system.se_play($data_system.battle_start_se)
  802.     # 演奏战斗 BGM
  803.     $game_system.bgm_play($game_system.battle_bgm)
  804.     # 矫正主角姿势
  805.     $game_player.straighten
  806.     # 切换到战斗画面
  807.     $scene = Scene_Battle.new
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ● 调用商店
  811.   #--------------------------------------------------------------------------
  812.   def call_shop
  813.     # 清除商店调用标志
  814.     $game_temp.shop_calling = false
  815.     # 矫正主角姿势
  816.     $game_player.straighten
  817.     # 切换到商店画面
  818.     $scene = Scene_Shop.new
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● 调用名称输入
  822.   #--------------------------------------------------------------------------
  823.   def call_name
  824.     # 清除商店调用名称输入标志
  825.     $game_temp.name_calling = false
  826.     # 矫正主角姿势
  827.     $game_player.straighten
  828.     # 切换到名称输入画面
  829.     $scene = Scene_Name.new
  830.   end
  831.   #--------------------------------------------------------------------------
  832.   # ● 调用菜单
  833.   #--------------------------------------------------------------------------
  834.   def call_menu
  835.     # 清除商店调用菜单标志
  836.     $game_temp.menu_calling = false
  837.     # 已经设置了菜单 SE 演奏标志的情况下
  838.     if $game_temp.menu_beep
  839.       # 演奏确定 SE
  840.       $game_system.se_play($data_system.decision_se)
  841.       # 清除菜单演奏 SE 标志
  842.       $game_temp.menu_beep = false
  843.     end
  844.     # 矫正主角姿势
  845.     $game_player.straighten
  846.     # 切换到菜单画面
  847.     $scene = Scene_Menu.new
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● 调用存档
  851.   #--------------------------------------------------------------------------
  852.   def call_save
  853.     # 矫正主角姿势
  854.     $game_player.straighten
  855.     # 切换到存档画面
  856.     $scene = Scene_Save.new
  857.     $scene = Scene_Loadsave.new
  858.   end
  859.   #--------------------------------------------------------------------------
  860.   # ● 调用调试
  861.   #--------------------------------------------------------------------------
  862.   def call_debug
  863.     # 清除商店调用调试标志
  864.     $game_temp.debug_calling = false
  865.     # 演奏确定 SE
  866.     $game_system.se_play($data_system.decision_se)
  867.     # 矫正主角姿势
  868.     $game_player.straighten
  869.     # 切换到调试画面
  870.     $scene = Scene_Debug.new
  871.   end
  872.   #--------------------------------------------------------------------------
  873.   # ● 主角的场所移动
  874.   #--------------------------------------------------------------------------
  875.   def transfer_player
  876.     # 清除主角场所移动调试标志
  877.     $game_temp.player_transferring = false
  878.     # 移动目标与现在的地图有差异的情况下
  879.     if $game_map.map_id != $game_temp.player_new_map_id
  880.       # 设置新地图
  881.       $game_map.setup($game_temp.player_new_map_id)
  882.     end
  883.     # 设置主角位置
  884.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  885.     # 设置主角朝向
  886.     case $game_temp.player_new_direction
  887.     when 2  # 下
  888.       $game_player.turn_down
  889.     when 4  # 左
  890.       $game_player.turn_left
  891.     when 6  # 右
  892.       $game_player.turn_right
  893.     when 8  # 上
  894.       $game_player.turn_up
  895.     end
  896.     # 矫正主角姿势
  897.     $game_player.straighten
  898.     # 刷新地图 (执行并行事件)
  899.     $game_map.update
  900.     # 在生成活动块
  901.     @spriteset.dispose
  902.     @spriteset = Spriteset_Map.new
  903.     # 处理过渡中的情况下
  904.     if $game_temp.transition_processing
  905.       # 清除过渡处理中标志
  906.       $game_temp.transition_processing = false
  907.       # 执行过渡
  908.       Graphics.transition(20)
  909.     end
  910.     # 执行地图设置的 BGM、BGS 的自动切换
  911.     $game_map.autoplay
  912.     # 设置画面
  913.     Graphics.frame_reset
  914.     # 刷新输入信息
  915.     Input.update
  916.   end
  917. end
复制代码

作者: fallout337    时间: 2007-8-26 02:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangff    时间: 2007-8-26 07:16
把if Kboard.keyboard($R_Key_F4)改成if Input.trigger?(Input::A)也不行
但把if Input.trigger?(Input::B) (处理esc摁下的)改为if Kboard.keyboard($R_Key_F2)又可以
{/gg}{/gg}
作者: 精灵使者    时间: 2007-8-26 14:08
如果想在MAP里面触发的话其实也可以的。
你就在$scene_map里面添加些东西就可以了。
大约在Scene_map第130行左右添加一些东西……
例如
例如你想用F5触发公共事件1号,那么
if Input.trigger?(Input::F5)
   #不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
            
            
     # 矫正主角姿势
      $game_player.straighten
   
     #执行公共事件 1号
      $game_system.se_play($data_system.decision_se)
      $game_temp.common_event_id = 1 ##这里写好公共事件ID   
      end
    end
然后在1号公共事件里面写上必要的事件即可。全键盘脚本和你上边的东西都可以写到这个地方。恩恩。
作者: 越前リョーマ    时间: 2007-8-26 17:17
还是没看懂……{/gg}
作者: enghao_lim    时间: 2007-8-26 20:45
LZ如果这样还没看懂的话,建议先去学习一些脚本基础。

依照精灵使者的方法就变成:
当你在地图上时,按下F5建就会调用公共事件1。
只要在公共事件1里添加你要执行的事件便可以了。




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