Project1

标题: 请问这个脚本怎样加入别的脚本中 [打印本页]

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

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

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

  181. class Scene_Loadsave
  182. #--------------------------------------------------------------------------
  183. # ● 初始化对像
  184. #     $last_savefile_index : 记录光标位置
  185. #--------------------------------------------------------------------------
  186. def initialize
  187.   $last_savefile_index = 0 if $last_savefile_index == nil
  188. end
  189. #--------------------------------------------------------------------------
  190. #  主处理
  191. #--------------------------------------------------------------------------
  192. def main
  193.   @savestate = 0
  194.   # 生成窗口
  195.   @help_window = Window_LoadHelp.new
  196.   @help_window.set_text("请选择.")
  197.   @option_window = Window_LoadCommand.new
  198.   @savefile_windows = []
  199.   for i in 0..3
  200.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  201.   end
  202.   @option_window.index = $last_savefile_index
  203.   @file_index = 0
  204.   # 执行过渡
  205.   Graphics.transition
  206.   # 主循环
  207.   loop do
  208.     # 刷新游戏画面
  209.     Graphics.update
  210.     # 刷新输入信息
  211.     Input.update
  212.     # 刷新画面
  213.     update
  214.     # 如果画面被切换的话就中断循环
  215.     if $scene != self
  216.       break
  217.     end
  218.   end
  219.   # 准备过渡
  220.   Graphics.freeze
  221.   # 释放窗口
  222.   @help_window.dispose
  223.   @option_window.dispose
  224.   for i in @savefile_windows
  225.     i.dispose
  226.   end
  227. end

  228. #--------------------------------------------------------------------------
  229. #  ● 刷新画面
  230. #--------------------------------------------------------------------------
  231. def update
  232.   # 刷新窗口
  233.   @help_window.update
  234.   @option_window.update
  235.   for i in @savefile_windows
  236.     i.update
  237.   end
  238.   
  239.   case @savestate
  240.   when 0
  241.       if Input.trigger?(Input::B)
  242.       $game_system.se_play($data_system.cancel_se)
  243.       # 淡入淡出 BGM
  244.       Audio.bgm_fade(800)
  245.       # 返回地图
  246.       if $menu_call == false
  247.       # 切换到地图画面
  248.       $scene = Scene_Map.new
  249.         return
  250.       end
  251.       # 切换到菜单画面
  252.       $menu_call = false
  253.       $scene = Scene_Menu.new(4)
  254.    end
  255.     if Input.trigger?(Input::C)
  256.       case @option_window.index
  257.       when 0
  258.         @savefile_windows[@file_index].selected = true
  259.         @option_window.active = false
  260.         @help_window.set_text("请选择一个文件进行读取.")
  261.         @savestate  = 1
  262.         return
  263.       when 1
  264.         @savefile_windows[@file_index].selected = true
  265.         @option_window.active = false
  266.         @help_window.set_text("请选择一个文件进行存储.")
  267.         @savestate = 2
  268.         return
  269.         return
  270.       end
  271.     end
  272.   when 1,2
  273.     if Input.trigger?(Input::C)
  274.       if @savestate == 1
  275.         $menu_call = false
  276.         load_file(make_filename(@file_index))
  277.         return
  278.       else
  279.         # 禁止存档的情况下
  280.         if $game_system.save_disabled
  281.           @help_window.set_text("抱歉,这里禁止存储.")
  282.           # 演奏冻结 SE
  283.           $game_system.se_play($data_system.buzzer_se)
  284.           return
  285.         end
  286.        $game_system.se_play($data_system.decision_se)
  287.        $last_savefile_index = @option_window.index
  288.        save_file(make_filename(@file_index))
  289.         return
  290.       end
  291.     end
  292.     # 取消
  293.     if Input.trigger?(Input::B)
  294.       $game_system.se_play($data_system.cancel_se)
  295.       @savefile_windows[@file_index].selected = false
  296.       @help_window.set_text("请选择.")
  297.       @savestate = 0
  298.       @option_window.active = true
  299.       return
  300.     end
  301.     # 向下选择
  302.     if Input.repeat?(Input::DOWN)
  303.       $game_system.se_play($data_system.cursor_se)
  304.       @savefile_windows[@file_index].selected = false
  305.       @file_index = (@file_index + 1) % 4
  306.       @savefile_windows[@file_index].selected = true
  307.       return
  308.     end
  309.     # 向上选择
  310.     if Input.repeat?(Input::UP)
  311.       $game_system.se_play($data_system.cursor_se)
  312.       @savefile_windows[@file_index].selected = false
  313.       @file_index = (@file_index + 3) % 4
  314.       @savefile_windows[@file_index].selected = true
  315.       return
  316.     end
  317.    
  318.     if Input.trigger?(Input::B)
  319.       $game_system.se_play($data_system.cancel_se)
  320.       @savestate = 2
  321.       @savefile_windows[@file_index].selected = true
  322.       return
  323.     end
  324.   end
  325. end
  326. #--------------------------------------------------------------------------
  327. # 建立记录文件索引
  328. #--------------------------------------------------------------------------
  329. def make_filename(file_index)
  330.   return "Save#{file_index + 1}.rxdata"
  331. end
  332. #--------------------------------------------------------------------------
  333. #  读取记录文件
  334. #     filename  : 被读取文件
  335. #--------------------------------------------------------------------------
  336. def load_file(filename)
  337.   # 文件不存在的情况下
  338.   unless FileTest.exist?(filename)
  339.     # 演奏冻结 SE
  340.     $game_system.se_play($data_system.buzzer_se)
  341.     return
  342.   end
  343.   # 演奏读档 SE
  344.   $game_system.se_play($data_system.load_se)
  345.   # 以二进制方式打开文件
  346.   # 写入存档数据
  347.   file = File.open(filename, "rb")
  348.   read_save_data(file)
  349.   file.close
  350.   # 演奏 BGM 与 BGS
  351.   $game_system.bgm_play($game_system.playing_bgm)
  352.   $game_system.bgs_play($game_system.playing_bgs)
  353.   # 刷新地图 (执行并行事件)
  354.   $game_map.update
  355.   # 切换到地图画面
  356.   $menu_call == false
  357.   $scene = Scene_Map.new
  358. end
  359. #--------------------------------------------------------------------------
  360. # ● 读取存档数据
  361. #     file : 读取用文件对像 (已经打开)
  362. #--------------------------------------------------------------------------
  363. def read_save_data(file)
  364.   # 读取描绘存档文件用的角色数据
  365.   characters = Marshal.load(file)
  366.   # 读取测量游戏时间用画面计数
  367.   Graphics.frame_count = Marshal.load(file)
  368.   # 读取各种游戏对像
  369.   $game_system        = Marshal.load(file)
  370.   $game_switches      = Marshal.load(file)
  371.   $game_variables     = Marshal.load(file)
  372.   $game_self_switches = Marshal.load(file)
  373.   $game_screen        = Marshal.load(file)
  374.   $game_actors        = Marshal.load(file)
  375.   $game_party         = Marshal.load(file)
  376.   $game_troop         = Marshal.load(file)
  377.   $game_map           = Marshal.load(file)
  378.   $game_player        = Marshal.load(file)
  379.     # 魔法编号与保存时有差异的情况下
  380.     # (加入编辑器的编辑过的数据)
  381.   if $game_system.magic_number != $data_system.magic_number
  382.     # 重新装载地图
  383.     $game_map.setup($game_map.map_id)
  384.     $game_player.center($game_player.x, $game_player.y)
  385.   end
  386.   # 刷新同伴成员
  387.   $game_party.refresh
  388. end
  389.   #--------------------------------------------------------------------------
  390.   # ● 写入存档文件
  391.   #--------------------------------------------------------------------------
  392.   def save_file(filename)
  393.     # 演奏存档 SE
  394.     $game_system.se_play($data_system.save_se)
  395.     # 写入存档数据
  396.     file = File.open(filename, "wb")
  397.     write_save_data(file)
  398.     file.close
  399.     # 切换到菜单画面
  400.     $scene = Scene_Loadsave.new
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 写入存档数据
  404.   #     file : 写入用文件对像 (已经打开)
  405.   #--------------------------------------------------------------------------
  406.   def write_save_data(file)
  407.     # 生成描绘存档文件用的角色图形
  408.     characters = []
  409.     for i in 0...$game_party.actors.size
  410.       actor = $game_party.actors[i]
  411.       characters.push([actor.character_name, actor.character_hue])
  412.     end
  413.     # 写入描绘存档文件用的角色数据
  414.     Marshal.dump(characters, file)
  415.     # 写入测量游戏时间用画面计数
  416.     Marshal.dump(Graphics.frame_count, file)
  417.     # 增加 1 次存档次数
  418.     $game_system.save_count += 1
  419.     # 保存魔法编号
  420.     # (将编辑器保存的值以随机值替换)
  421.     $game_system.magic_number = $data_system.magic_number
  422.     # 写入各种游戏对像
  423.     Marshal.dump($game_system, file)
  424.     Marshal.dump($game_switches, file)
  425.     Marshal.dump($game_variables, file)
  426.     Marshal.dump($game_self_switches, file)
  427.     Marshal.dump($game_screen, file)
  428.     Marshal.dump($game_actors, file)
  429.     Marshal.dump($game_party, file)
  430.     Marshal.dump($game_troop, file)
  431.     Marshal.dump($game_map, file)
  432.     Marshal.dump($game_player, file)
  433.   end
  434. end
复制代码

作者: 忧雪の伤    时间: 2011-2-7 12:13
没看懂您需要达到的要求。
作者: 坚强的羁绊    时间: 2011-2-7 18:59
回复 水野·迪尔 的帖子

任务和队列是我加上去的,而且我想知道的是怎么把这个加到结束菜单里去
作者: 忧雪の伤    时间: 2011-2-7 19:02
回复 坚强的羁绊 的帖子

增加结束菜单的项目数。
接着加入选择该项的处理。
作者: 坚强的羁绊    时间: 2011-2-7 19:07
回复 忧雪の伤 的帖子

怎么加啊
  1. #==============================================================================
  2. # ■ Scene_End
  3. #------------------------------------------------------------------------------
  4. #  处理游戏结束画面的类。
  5. #==============================================================================

  6. class Scene_End
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成命令窗口
  12.     s1 = "记录"
  13.     s2 = "返回标题"
  14.     s3 = "结束"
  15.     s4 = "取消"
  16.     @command_window = Window_Command.new(192, [s1, s2, s3, s4])
  17.     @command_window.x = 320 - @command_window.width / 2
  18.     @command_window.y = 240 - @command_window.height / 2
  19.     # 执行过渡
  20.     Graphics.transition
  21.     # 主循环
  22.     loop do
  23.       # 刷新游戏画面
  24.       Graphics.update
  25.       # 刷新输入情报
  26.       Input.update
  27.       # 刷新画面
  28.       update
  29.       # 如果画面切换的话就中断循环
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     # 准备过渡
  35.     Graphics.freeze
  36.     # 释放窗口
  37.     @command_window.dispose
  38.     # 如果在标题画面切换中的情况下
  39.     if $scene.is_a?(Scene_Title)
  40.       # 淡入淡出画面
  41.       Graphics.transition
  42.       Graphics.freeze
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 刷新画面
  47.   #--------------------------------------------------------------------------
  48.   def update
  49.     # 刷新命令窗口
  50.     @command_window.update
  51.     # 按下 B 键的情况下
  52.     if Input.trigger?(Input::B)
  53.       # 演奏取消 SE
  54.       $game_system.se_play($data_system.cancel_se)
  55.       # 切换到菜单画面
  56.       $scene = Scene_Menu.new(5)
  57.       return
  58.     end
  59.     # 按下 C 键的场合下
  60.     if Input.trigger?(Input::C)
  61.       # 命令窗口光标位置分支
  62.       case @command_window.index
  63.       when 0  # 记录
  64.         
  65.       when 1  # 返回标题画面
  66.         command_to_title
  67.       when 2  # 退出
  68.         command_shutdown
  69.       when 3  # 取消
  70.         command_cancel
  71.       end
  72.       return
  73.     end
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 选择命令 [返回标题画面] 时的处理
  77.   #--------------------------------------------------------------------------
  78.   def command_to_title
  79.     # 演奏确定 SE
  80.     $game_system.se_play($data_system.decision_se)
  81.     # 淡入淡出 BGM、BGS、ME
  82.     Audio.bgm_fade(800)
  83.     Audio.bgs_fade(800)
  84.     Audio.me_fade(800)
  85.     # 切换到标题画面
  86.     $scene = Scene_Title.new
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 选择命令 [退出] 时的处理
  90.   #--------------------------------------------------------------------------
  91.   def command_shutdown
  92.     # 演奏确定 SE
  93.     $game_system.se_play($data_system.decision_se)
  94.     # 淡入淡出 BGM、BGS、ME
  95.     Audio.bgm_fade(800)
  96.     Audio.bgs_fade(800)
  97.     Audio.me_fade(800)
  98.     # 退出
  99.     $scene = nil
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 选择命令 [取消] 时的处理
  103.   #--------------------------------------------------------------------------
  104.   def command_cancel
  105.     # 演奏确定 SE
  106.     $game_system.se_play($data_system.decision_se)
  107.     # 切换到菜单画面
  108.     $scene = Scene_Menu.new(5)
  109.   #--------------------------------------------------------------------------
  110.   # ● 选择命令 [记录] 时的处理
  111.   #--------------------------------------------------------------------------
  112.   def
  113.     # 演奏确定 SE
  114.     $game_system.se_play($data_system.decision_se)
  115.     # 切换到记录画面
  116.     $scene = Scene_Loadsave.new
  117.   end
  118. end
  119. end
复制代码
65行上不会弄的说
作者: 忧雪の伤    时间: 2011-2-7 19:11
加多一个处理“def XXXXX”。并在那里输入“XXXXX”
作者: 坚强的羁绊    时间: 2011-2-7 19:13
还是有些不懂
作者: 忧雪の伤    时间: 2011-2-7 19:20
你的写的差不多了啊。
113行def随便加个名称,接着65输入那个名称即可。
作者: 坚强的羁绊    时间: 2011-2-7 19:24
加上后总显示65行错误
作者: 陆娘    时间: 2011-2-7 19:38
  1. #==============================================================================
  2. # ■ Scene_End
  3. #------------------------------------------------------------------------------
  4. #  处理游戏结束画面的类。
  5. #==============================================================================

  6. class Scene_End
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成命令窗口
  12.     s1 = "记录"
  13.     s2 = "返回标题"
  14.     s3 = "结束"
  15.     s4 = "取消"
  16.     @command_window = Window_Command.new(192, [s1, s2, s3, s4])
  17.     @command_window.x = 320 - @command_window.width / 2
  18.     @command_window.y = 240 - @command_window.height / 2
  19.     # 执行过渡
  20.     Graphics.transition
  21.     # 主循环
  22.     loop do
  23.       # 刷新游戏画面
  24.       Graphics.update
  25.       # 刷新输入情报
  26.       Input.update
  27.       # 刷新画面
  28.       update
  29.       # 如果画面切换的话就中断循环
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     # 准备过渡
  35.     Graphics.freeze
  36.     # 释放窗口
  37.     @command_window.dispose
  38.     # 如果在标题画面切换中的情况下
  39.     if $scene.is_a?(Scene_Title)
  40.       # 淡入淡出画面
  41.       Graphics.transition
  42.       Graphics.freeze
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 刷新画面
  47.   #--------------------------------------------------------------------------
  48.   def update
  49.     # 刷新命令窗口
  50.     @command_window.update
  51.     # 按下 B 键的情况下
  52.     if Input.trigger?(Input::B)
  53.       # 演奏取消 SE
  54.       $game_system.se_play($data_system.cancel_se)
  55.       # 切换到菜单画面
  56.       $scene = Scene_Menu.new(5)
  57.       return
  58.     end
  59.     # 按下 C 键的场合下
  60.     if Input.trigger?(Input::C)
  61.       # 命令窗口光标位置分支
  62.       case @command_window.index
  63.       when 0  # 记录
  64.         command_xxxxx
  65.       when 1  # 返回标题画面
  66.         command_to_title
  67.       when 2  # 退出
  68.         command_shutdown
  69.       when 3  # 取消
  70.         command_cancel
  71.       end
  72.     end
  73.     end
  74.   #--------------------------------------------------------------------------
  75.   # ● 选择命令 [返回标题画面] 时的处理
  76.   #--------------------------------------------------------------------------
  77.   def command_to_title
  78.     # 演奏确定 SE
  79.     $game_system.se_play($data_system.decision_se)
  80.     # 淡入淡出 BGM、BGS、ME
  81.     Audio.bgm_fade(800)
  82.     Audio.bgs_fade(800)
  83.     Audio.me_fade(800)
  84.     # 切换到标题画面
  85.     $scene = Scene_Title.new
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 选择命令 [退出] 时的处理
  89.   #--------------------------------------------------------------------------
  90.   def command_shutdown
  91.     # 演奏确定 SE
  92.     $game_system.se_play($data_system.decision_se)
  93.     # 淡入淡出 BGM、BGS、ME
  94.     Audio.bgm_fade(800)
  95.     Audio.bgs_fade(800)
  96.     Audio.me_fade(800)
  97.     # 退出
  98.     $scene = nil
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 选择命令 [取消] 时的处理
  102.   #--------------------------------------------------------------------------
  103.   def command_cancel
  104.     # 演奏确定 SE
  105.     $game_system.se_play($data_system.decision_se)
  106.     # 切换到菜单画面
  107.     $scene = Scene_Menu.new(5)
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 选择命令 [记录] 时的处理
  111.   #--------------------------------------------------------------------------
  112.   def command_xxxxx
  113.     # 演奏确定 SE
  114.     $game_system.se_play($data_system.decision_se)
  115.     # 切换到记录画面
  116.     $scene = Scene_Loadsave.new
  117.   end
  118.   end
复制代码

作者: 坚强的羁绊    时间: 2011-2-7 20:01
  1. #==============================================================================
  2. # 分类物品的命令窗口
  3. #==============================================================================
  4. class Window_ItemCommand < Window_Selectable
  5. #———— 初始化 ————
  6.   def initialize
  7.     super(453, 190, 142, 192)
  8.     self.contents = Bitmap.new(width - 32, height - 32)
  9.     @item_max = 5
  10.     @commands = ["药物类", "武器类", "防具类", "装饰类", "特殊类"]
  11.     refresh
  12.     self.index = 0
  13.   end   
  14. #———— 刷新 ————
  15.   def refresh  
  16.     self.contents.clear
  17.     for i in 0...@item_max
  18.     draw_item(i, normal_color)
  19.     end
  20.   end
  21. #—— 描绘项目 ——| index:编号,color:颜色——————
  22.   def draw_item(index, color)
  23.     self.contents.font.color = color
  24.     y = index * 32
  25.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  26.   end
  27. #—— 帮助部分更新 ————
  28.   def update_help
  29.     @help_window.set_text(@commands[self.index])
  30.   end   
  31. end
  32. #==============================================================================
  33. # 物品清单窗口
  34. #==============================================================================
  35. class Window_ItemList < Window_Selectable
  36. #———— 初始化 ————
  37.   def initialize
  38.     super(30, 20, 378, 362)
  39. #   @column_max = 2
  40.     refresh
  41.     self.index = 0
  42.   end
  43. #—— 取得现在选择的物品 ——
  44.   def item
  45.     return @data[self.index]
  46.   end
  47. #—— 刷新 ———
  48.   def refresh
  49.     if self.contents != nil
  50.       self.contents.dispose
  51.       self.contents = nil
  52.     end
  53.     @data = []
  54.   end
  55. #—— 设置不同类别的物品 ———
  56.   def set_item(command)
  57.     refresh
  58.     #—— 根据现在的选项决定物品 ——
  59.     case command  
  60.     when 0            #药品类
  61.       for i in 1...$data_items.size
  62.         if ($data_items[i].type == "药物" and $game_party.item_number(i) > 0)
  63.           @data.push($data_items[i])
  64.         end
  65.       end
  66.     when 1            #武器类
  67.       for i in 1...$data_weapons.size
  68.         if $game_party.weapon_number(i) > 0
  69.           @data.push($data_weapons[i])
  70.         end
  71.       end
  72.     when 2            #防具类
  73.       for i in 1...$data_armors.size
  74.         if $data_armors[i].kind == 0 and $game_party.armor_number(i) > 0
  75.           @data.push($data_armors[i])
  76.         end
  77.       end
  78.       for i in 1...$data_armors.size
  79.         if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  80.           @data.push($data_armors[i])
  81.         end
  82.       end
  83.        for i in 1...$data_armors.size
  84.         if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  85.           @data.push($data_armors[i])
  86.         end
  87.       end
  88.     when 3            #装饰类
  89.       for i in 1...$data_armors.size
  90.         if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  91.           @data.push($data_armors[i])
  92.         end
  93.       end
  94.     when 4            #特殊类
  95.       for i in 1...$data_items.size
  96.         if ($data_items[i].type == "特殊" and $game_party.item_number(i) > 0)
  97.           @data.push($data_items[i])
  98.         end
  99.       end
  100.     end
  101.     @item_max = @data.size  
  102.     if @item_max > 0
  103.       self.contents = Bitmap.new(width - 32, row_max * 32)
  104.       self.contents.clear
  105.       for i in 0...@item_max
  106.         draw_item(i)
  107.       end
  108.     end
  109.   end
  110. #——— 单类物品的个数 ————
  111.   def item_number
  112.     return @item_max
  113.   end
  114. #——— 项目内容的描画 ————
  115.   def draw_item(index)
  116.     item = @data[index]  
  117.     #—— 取得具体物品数量 ——
  118.     case item   
  119.     when RPG::Item
  120.       number = $game_party.item_number(item.id)
  121.     when RPG::Weapon
  122.       number = $game_party.weapon_number(item.id)
  123.     when RPG::Armor
  124.       number = $game_party.armor_number(item.id)
  125.     end
  126.     #—— 给出物品的颜色 ——
  127.     if item.is_a?(RPG::Item)
  128.       if $game_party.item_can_use?(item.id)
  129.         self.contents.font.color = normal_color
  130.       else
  131.         self.contents.font.color = disabled_color
  132.       end
  133.     else
  134.       self.contents.font.color = normal_color
  135.     end
  136.    
  137.     #—— 描绘物体图标、物体名、数量 ——
  138. #   x = 4 + index % 2 * 173
  139. #   y = index / 2 * 32
  140.     x = 4
  141.     y = index*32
  142.     bitmap = RPG::Cache.icon(item.icon_name)
  143.     opacity = self.contents.font.color == normal_color ? 255 : 128
  144.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  145.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  146.     self.contents.draw_text(x + 300, y, 16, 32, "×", 1)
  147.     self.contents.draw_text(x + 314, y, 24, 32, number.to_s, 2)
  148.   end
  149. #——— 更新帮助窗口 ————
  150.   def update_help
  151.     @help_window.set_text(make_description(self.item))
  152.   end
  153. end
  154. #############################################################################
  155. #############################################################################
  156. #==============================================================================
  157. # ■ Scene_Item
  158. #------------------------------------------------------------------------------
  159. #  处理物品画面的类。
  160. #==============================================================================
  161. #############################################################################
  162. #############################################################################
  163. class Scene_Item
  164. #——— 主处理 ————
  165.   def main
  166.     cmd = Window_Command_New.new($game_party.actors.size)
  167.     cmd.index = 1
  168.     cmd.active = false
  169.    
  170.     # 右边命令窗口
  171.     @itemcommand_window = Window_ItemCommand.new
  172.     @itemcommand_window.opacity = HS::OPACITY
  173.     @itemcommand_window.y = 672

  174.     @item_command_index = @itemcommand_window.index
  175.     # 物品窗口
  176.     @itemlist_window = Window_ItemList.new
  177.     @itemlist_window.opacity = HS::OPACITY
  178.     @itemlist_window.active = false
  179.     @itemlist_window.set_item(@item_command_index)
  180.     @itemlist_window.x = -378
  181.     # 帮助窗口
  182.     @item_help_window = Window_Help_New.new
  183.     @item_help_window.x = -580
  184.     @item_help_window.y = 396
  185.     @item_help_window.opacity = HS::OPACITY

  186.     # 关联帮助窗口
  187.     @itemcommand_window.help_window = @item_help_window
  188.     @itemlist_window.help_window = @item_help_window
  189.     # 目标窗口
  190.     @item_target_window = Window_Target.new
  191.     @item_target_window.y = 480
  192.     @item_target_window.opacity = HS::OPACITY
  193.     @item_target_window.visible = false
  194.     @item_target_window.active = false
  195.     # 目标装备窗口
  196.     @item_target_window_equip = Window_Target_Equip.new
  197.     @item_target_window_equip.y = 480
  198.     @item_target_window_equip.opacity = HS::OPACITY
  199.     @item_target_window_equip.visible = false
  200.     @item_target_window_equip.active = false
  201.     #—— 主循环 ——
  202.     Graphics.transition
  203.     # 窗口的滑动
  204.     for i in 1..8
  205.       @item_help_window.x += 76
  206.       @itemcommand_window.y -= 60
  207.       @itemlist_window.x += 51
  208.       if i == 8
  209.         @item_help_window.x = 30
  210.         @itemcommand_window.y = 190
  211.         @itemlist_window.x = 30
  212.       end
  213.       Graphics.update
  214.     end

  215.     loop do
  216.       Graphics.update
  217.       Input.update

  218.       # 更新item
  219.       update_item_scene
  220.       if $scene != self
  221.         break
  222.       end
  223.     end
  224.     #—— 释放窗口 ——
  225.    
  226.     # 窗口的滑动
  227.     for i in 1..9
  228.       @item_help_window.x -= 76
  229.       @itemcommand_window.y += 60
  230.       @itemlist_window.x -= 51
  231.       Graphics.update
  232.     end
  233.    
  234.     Graphics.freeze
  235.     cmd.dispose
  236.     @itemcommand_window.dispose
  237.     @itemlist_window.dispose
  238.     @item_help_window.dispose
  239.     @item_target_window.dispose
  240.     @item_target_window_equip.dispose
  241.   end

  242.   #—— update的定义 ——
  243.   def update_item_scene
  244.     @itemcommand_window.update
  245.     @itemlist_window.update
  246.     @item_help_window.update
  247.     @item_target_window.update
  248.     @item_target_window_equip.update
  249.    
  250.     if @item_command_index != @itemcommand_window.index
  251.       @item_command_index = @itemcommand_window.index
  252.       @itemlist_window.set_item(@item_command_index)
  253.     end
  254.    
  255.     #—— 当某窗体在active的时候,更新之 ——
  256.     if @itemcommand_window.active
  257.       item_update_itemcommand
  258.       return
  259.     end
  260.     if @itemlist_window.active
  261.       item_update_itemlist
  262.       return
  263.     end
  264.     if @item_target_window.active
  265.       item_update_target
  266.       return
  267.     end
  268.     if @item_target_window_equip.active
  269.       item_update_target_equip
  270.       return
  271.     end
  272.   end  # update的

  273. #————具体更新定义————
  274.   def item_update_itemcommand
  275.   
  276.     if Input.trigger?(Input::B)
  277.       # 演奏取消 SE
  278.       $game_system.se_play($data_system.cancel_se)
  279.       # 切换到菜单画面
  280.       $scene = Scene_Menu.new(1)
  281.       return
  282.     end
  283.    
  284.     if Input.trigger?(Input::C)
  285.       if @itemlist_window.item_number == 0
  286.         $game_system.se_play($data_system.buzzer_se)
  287.         return
  288.       end
  289.       $game_system.se_play($data_system.decision_se)
  290.       @itemcommand_window.active = false
  291.       @itemlist_window.active = true
  292.       @itemlist_window.index = 0
  293.       return
  294.     end
  295.   end

  296. #————具体更新定义————
  297.   def item_update_itemlist
  298.     if Input.trigger?(Input::B)
  299.       $game_system.se_play($data_system.cancel_se)
  300.       @itemcommand_window.active = true
  301.       @itemlist_window.active = false
  302.       @itemlist_window.index = 0
  303.       @itemcommand_window.index = @item_command_index
  304.       return
  305.     end
  306.    
  307.     if Input.trigger?(Input::C)
  308.       @item = @itemlist_window.item
  309.       if @item.is_a?(RPG::Item)
  310.         unless $game_party.item_can_use?(@item.id)
  311.           $game_system.se_play($data_system.buzzer_se)
  312.           return
  313.         end   
  314.         $game_system.se_play($data_system.decision_se)
  315.         if @item.scope >= 3
  316.           @itemlist_window.active = false
  317.           # 先打开目标窗口的显示,才开始滑动
  318.           @item_target_window.visible = true
  319.           @item_target_window.active = true
  320.           for i in 1..8
  321.             @item_target_window.y -= 39
  322.             if i==8
  323.               @item_target_window.y = 164
  324.             end
  325.             Graphics.update
  326.           end
  327.           if @item.scope == 4 || @item.scope == 6
  328.             @item_target_window.index = -1
  329.           else
  330.             @item_target_window.index = 0
  331.           end
  332.         else
  333.           if @item.common_event_id > 0
  334.             $game_temp.common_event_id = @item.common_event_id
  335.             $game_system.se_play(@item.menu_se)
  336.             if @item.consumable  
  337.               $game_party.lose_item(@item.id, 1)
  338.               @itemlist_window.draw_item(@itemlist_window.index)  
  339.             end
  340.             $scene = Scene_Map.new
  341.             return
  342.           end
  343.         end
  344.         return
  345.       else
  346.         $game_system.se_play($data_system.decision_se)
  347.         @itemlist_window.active = false
  348.         @item_target_window_equip.set_item(@item)
  349.         @item_target_window_equip.visible = true
  350.         @item_target_window_equip.active = true
  351.         for i in 1..8
  352.           @item_target_window_equip.y -= 39
  353.           if i==8
  354.             @item_target_window_equip.y = 164
  355.           end
  356.           Graphics.update
  357.         end
  358.         @item_target_window_equip.index = 0
  359.         return
  360.       end
  361.         
  362.         
  363.         
  364.         
  365.         
  366.     end
  367.   end

  368.   def item_update_target_equip
  369.     if Input.trigger?(Input::B)
  370.       $game_system.se_play($data_system.cancel_se)
  371.       @itemlist_window.active = true
  372.       # 目标窗口滑动,滑动结束后才关闭显示
  373.       for i in 1..9
  374.         @item_target_window_equip.y += 39
  375.         Graphics.update
  376.       end
  377.       @item_target_window_equip.visible = false
  378.       @item_target_window_equip.active = false
  379.       @itemlist_window.set_item(@item_command_index)
  380.       return
  381.     end
  382.     if Input.trigger?(Input::C)
  383.       target_actor = $game_party.actors[@item_target_window_equip.index]
  384.       if target_actor.equippable?(@item) and $game_party.item_can_equip?(target_actor,@item)
  385.         # 演奏装备 SE
  386.         $game_system.se_play($data_system.equip_se)
  387.         if @item.is_a?(RPG::Weapon)
  388.           equip_position = 0
  389.         elsif @item.kind == 0
  390.           equip_position = 1
  391.         elsif @item.kind == 1
  392.           equip_position = 2
  393.         elsif @item.kind == 2
  394.           equip_position = 3
  395.         elsif @item.kind == 3
  396.           equip_position = 4
  397.         end
  398.         
  399.         # 固定装备的情况下
  400.         if target_actor.equip_fix?(equip_position)
  401.           # 演奏冻结 SE
  402.           $game_system.se_play($data_system.buzzer_se)
  403.           return
  404.         end
  405.         
  406.         target_actor.equip(equip_position,@item.id)
  407.         
  408.         @itemlist_window.active = true
  409.         # 目标窗口滑动,滑动结束后才关闭显示
  410.         for i in 1..9
  411.           @item_target_window_equip.y += 39
  412.           Graphics.update
  413.         end
  414.         @item_target_window_equip.visible = false
  415.         @item_target_window_equip.active = false

  416.         @itemlist_window.draw_item(@itemlist_window.index)
  417.         @itemlist_window.set_item(@item_command_index)

  418.       else
  419.         # 演奏冻结 SE
  420.         $game_system.se_play($data_system.buzzer_se)  
  421.       end
  422.       

  423.       
  424.     end
  425.   
  426.   end
  427.   
  428. #———— 更新target窗口————
  429.   def item_update_target
  430.     if Input.trigger?(Input::B)
  431.       $game_system.se_play($data_system.cancel_se)
  432.       unless $game_party.item_can_use?(@item.id)
  433.         @itemlist_window.refresh
  434.       end
  435.       @itemlist_window.active = true
  436.       # 目标窗口滑动,滑动结束后才关闭显示
  437.       for i in 1..9
  438.         @item_target_window.y += 39
  439.         Graphics.update
  440.       end
  441.       @item_target_window.visible = false
  442.       @item_target_window.active = false
  443.       @itemlist_window.set_item(@item_command_index)
  444.       return
  445.     end
  446.     if Input.trigger?(Input::C)
  447.       if $game_party.item_number(@item.id) == 0
  448.         $game_system.se_play($data_system.buzzer_se)
  449.         return
  450.       end
  451.       if @item_target_window.index == -1
  452.         used = false
  453.         for i in $game_party.actors
  454.           used |= i.item_effect(@item)
  455.         end
  456.       end
  457.       if @item_target_window.index >= 0
  458.         target = $game_party.actors[@item_target_window.index]
  459.         used = target.item_effect(@item)
  460.       end
  461.       
  462.       if used
  463.         $game_system.se_play(@item.menu_se)
  464.         if @item.consumable
  465.           $game_party.lose_item(@item.id, 1)
  466.           @itemlist_window.draw_item(@itemlist_window.index)
  467.           @itemlist_window.set_item(@item_command_index)
  468.         end
  469.         @item_target_window.refresh
  470.         if $game_party.all_dead?
  471.           $scene = Scene_Gameover.new
  472.           return
  473.         end
  474.         
  475.         if @item.common_event_id > 0
  476.           $game_temp.common_event_id = @item.common_event_id
  477.           $scene = Scene_Map.new
  478.           return
  479.         end  
  480.       end
  481.    
  482.       unless used
  483.         $game_system.se_play($data_system.buzzer_se)
  484.       end
  485.     return
  486.     end
  487.   end   
  488. end
复制代码
顺便问一下,这个脚本怎么显示钱数啊




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