Project1

标题: 求把这个脚本修复 [打印本页]

作者: 布罗利    时间: 2014-7-28 19:05
标题: 求把这个脚本修复
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  处理菜单画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_菜单系统
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     menu_index : 命令光标的初期位置
  11.   #--------------------------------------------------------------------------
  12.   def initialize(menu_index = 0)
  13.     @menu_index = menu_index
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 主处理
  17.   #--------------------------------------------------------------------------
  18.   def main
  19.     # 生成活动块
  20.     @spriteset = Spriteset_Map.new
  21.     # 生成命令窗口
  22.     s1 = "对话"
  23.     s2 = "乘降"
  24.     s3 = "强度"
  25.     s4 = "工具"
  26.     s5 = "装备"
  27.     s6 = "炮弹"
  28.     s7 = "调查"
  29.     s8 = "模式"
  30.     @command_window = Window_Command.new(200, [s1, s2, s3, s4, s5, s6, s7, s8],2)
  31.     @command_window.index = @menu_index
  32.     # 同伴人数为 0 的情况下
  33.     if $game_party.actors.size == 0
  34.       # 物品、特技、装备、状态无效化
  35.       @command_window.disable_item(0)
  36.       @command_window.disable_item(1)
  37.       @command_window.disable_item(2)
  38.       @command_window.disable_item(3)
  39.     end
  40.     # 生成金钱窗口
  41.     @gold_window = Window_Gold.new
  42.     @gold_window.x = 480
  43.     # 生成状态窗口
  44.     @status_window = Window_MenuStatus.new
  45.     @status_window.x = 200
  46.     @status_window.y = 320
  47.     # 生成地图名窗口
  48.     @mapname_window = Window_Mapname.new
  49.     @mapname_window.x = 0
  50.     # 执行过渡
  51.     Graphics.transition
  52.     # 主循环
  53.     loop do
  54.       # 刷新游戏画面
  55.       Graphics.update
  56.       # 刷新输入信息
  57.       Input.update
  58.       # 刷新画面
  59.       update
  60.       # 如果切换画面就中断循环
  61.        if $scene != self
  62.         break
  63.       end
  64.     end
  65.     # 准备过渡
  66.     Graphics.freeze
  67.     # 准备过渡
  68.     Graphics.freeze
  69.     # 释放窗口
  70.     @command_window.dispose
  71.     @gold_window.dispose
  72.     @status_window.dispose
  73.     @mapname_window.dispose
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 刷新画面
  77.   #--------------------------------------------------------------------------
  78.   def update
  79.     # 刷新窗口
  80.     @command_window.update
  81.     @status_window.update
  82.     # 命令窗口被激活的情况下: 调用 update_command
  83.     if @command_window.active
  84.       update_command
  85.       return
  86.     end
  87.     # 状态窗口被激活的情况下: 调用 update_status
  88.     if @status_window.active
  89.       update_status
  90.       return
  91.     end
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 刷新画面 (命令窗口被激活的情况下)
  95.   #--------------------------------------------------------------------------
  96.   def update_command
  97.     # 按下 B 键的情况下
  98.     if Input.trigger?(Input::B)
  99.       # 演奏取消 SE
  100.       $game_system.se_play($data_system.cancel_se)
  101.       # 切换的地图画面
  102.       $scene = Scene_Map.new
  103.       return
  104.     end
  105.     # 按下 C 键的情况下
  106.     if Input.trigger?(Input::C)
  107.       # 同伴人数为 0、存档、游戏结束以外的场合
  108.       if $game_party.actors.size == 0 and @command_window.index < 4
  109.         # 演奏冻结 SE
  110.         $game_system.se_play($data_system.buzzer_se)
  111.         return
  112.       end
  113.       # 命令窗口的光标位置分支
  114.       case @command_window.index
  115.       when 5  # 特技
  116.         # 演奏确定 SE
  117.         $game_system.se_play($data_system.decision_se)
  118.         $game_temp.common_event_id = 4
  119.         $scene = Scene_Map.new
  120.       when 3  # 物品
  121.         # 演奏确定 SE
  122.         $game_system.se_play($data_system.decision_se)
  123.         # 切换到物品画面
  124.         $scene = Scene_Item.new
  125.       when 4  # 装备
  126.         # 演奏确定 SE
  127.         $game_system.se_play($data_system.decision_se)
  128.         # 激活状态窗口
  129.         @command_window.active = false
  130.         @status_window.active = true
  131.         @status_window.index = 0
  132.       when 2  # 状态
  133.         # 演奏确定 SE
  134.         $game_system.se_play($data_system.decision_se)
  135.         # 激活状态窗口
  136.         @command_window.active = false
  137.         @status_window.active = true
  138.         @status_window.index = 0
  139.       when 6  # 调查
  140.         $game_system.se_play($data_system.decision_se)
  141.         check_event_trigger_here([0])
  142.         check_event_trigger_there([0,1,2])
  143.         $scene = Scene_Map.new
  144.       when 7  # 游戏结束
  145.         # 演奏确定 SE
  146.         $game_system.se_play($data_system.decision_se)
  147.         # 切换到游戏结束画面
  148.         $scene = Scene_End.new
  149.       when 0  # 对话
  150.         $game_temp.message_window_showing = false
  151.         $game_system.se_play($data_system.decision_se)
  152.         $game_temp.common_event_id = 2
  153.         $scene = Scene_Map.new
  154.       when 1  # 乘降
  155.         $game_system.se_play($data_system.decision_se)
  156.         $game_temp.common_event_id = 1
  157.         $scene = Scene_Map.new
  158.       end
  159.       return
  160.     end
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 刷新画面 (状态窗口被激活的情况下)
  164.   #--------------------------------------------------------------------------
  165.   def update_status
  166.     # 按下 B 键的情况下
  167.     if Input.trigger?(Input::B)
  168.       # 演奏取消 SE
  169.       $game_system.se_play($data_system.cancel_se)
  170.       # 激活命令窗口
  171.       @command_window.active = true
  172.       @status_window.active = false
  173.       @status_window.index = -1
  174.       return
  175.     end
  176.     # 按下 C 键的情况下
  177.     if Input.trigger?(Input::C)
  178.       # 命令窗口的光标位置分支
  179.       case @command_window.index
  180.       when 5  # 特技
  181.         # 本角色的行动限制在 2 以上的情况下
  182.         if $game_party.actors[@status_window.index].restriction >= 2
  183.           # 演奏冻结 SE
  184.           $game_system.se_play($data_system.buzzer_se)
  185.           return
  186.         end
  187.         # 演奏确定 SE
  188.         $game_system.se_play($data_system.decision_se)
  189.         # 切换到特技画面
  190.         $scene = Scene_Skill.new(@status_window.index)
  191.       when 4  # 装备
  192.         # 演奏确定 SE
  193.         $game_system.se_play($data_system.decision_se)
  194.         # 切换的装备画面
  195.         $scene = Scene_Equip.new(@status_window.index)
  196.       when 2  # 状态
  197.         # 演奏确定 SE
  198.         $game_system.se_play($data_system.decision_se)
  199.         # 切换到状态画面
  200.         $scene = Scene_Status.new(@status_window.index)
  201.       end
  202.       return
  203.     end
  204.   end
  205. end
  206. #--------------------------------------------------------------------------
  207.   # ● 同位置的事件启动判定
  208.   #--------------------------------------------------------------------------
  209.   def check_event_trigger_here(triggers)
  210.     result = false
  211.     # 事件执行中的情况下
  212.     if $game_system.map_interpreter.running?
  213.       return result
  214.     end
  215.     # 全部事件的循环
  216.     for event in $game_map.events.values
  217.       # 事件坐标与目标一致的情况下
  218.       if event.x == @x and event.y == @y and triggers.include?(event.trigger)
  219.         # 跳跃中以外的情况下、启动判定是同位置的事件
  220.         if not event.jumping? and event.over_trigger?
  221.           event.start
  222.           result = true
  223.         end
  224.       end
  225.     end
  226.     return result
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● 正面事件的启动判定
  230.   #--------------------------------------------------------------------------
  231.   def check_event_trigger_there(triggers)
  232.     result = false
  233.     # 事件执行中的情况下
  234.     if $game_system.map_interpreter.running?
  235.       return result
  236.     end
  237.     # 计算正面坐标
  238.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  239.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  240.     # 全部事件的循环
  241.     for event in $game_map.events.values
  242.       # 事件坐标与目标一致的情况下
  243.       if event.x == new_x and event.y == new_y and
  244.          triggers.include?(event.trigger)
  245.         # 跳跃中以外的情况下、启动判定是正面的事件
  246.         if not event.jumping? and not event.over_trigger?
  247.           event.start
  248.           result = true
  249.         end
  250.       end
  251.     end
  252.     # 找不到符合条件的事件的情况下
  253.     if result == false
  254.       # 正面的元件是计数器的情况下
  255.       if $game_map.counter?(new_x, new_y)
  256.         # 计算 1 元件里侧的坐标
  257.         new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  258.         new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  259.         # 全事件的循环
  260.         for event in $game_map.events.values
  261.           # 事件坐标与目标一致的情况下
  262.           if event.x == new_x and event.y == new_y and
  263.              triggers.include?(event.trigger)
  264.             # 跳跃中以外的情况下、启动判定是正面的事件
  265.             if not event.jumping? and not event.over_trigger?
  266.               event.start
  267.               result = true
  268.             end
  269.           end
  270.         end
  271.       end
  272.     end
  273.     return result
  274.   end

就是调查这个功能和对话这个功能,我把C是对话功能取消了,求把对话和调查区分开,对话只对NPC有效,调查只对隐藏物品或宝箱有效
作者: 白鬼    时间: 2014-7-28 19:33
这个脚本你从哪里挖来的啊?
正常你在事件边上按确定键不就激活了事件了吗?
调查和对话激活的东西目测不一样啊
你可以利用这个

作者: 白鬼    时间: 2014-7-28 19:58
139行      when 6  # 调查
149行      when 0  # 对话
作者: 芯☆淡茹水    时间: 2014-7-28 20:11
这个问题还没解决么?NPC和宝箱都是事件做成,要区分也有点难度。
最好把范例工程贴上,照实际来修改。
作者: 布罗利    时间: 2014-7-28 20:20
[qq]1711044261[/qq]
作者: 布罗利    时间: 2014-7-28 20:40
芯☆淡茹水 发表于 2014-7-28 20:11
这个问题还没解决么?NPC和宝箱都是事件做成,要区分也有点难度。
最好把范例工程贴上,照实际来修改。 ...

下载地址
作者: 芯☆淡茹水    时间: 2014-7-29 12:04
本帖最后由 芯☆淡茹水 于 2014-7-29 17:19 编辑

好吧,对话和调查弄好了,效果还不错。

http://pan.baidu.com/s/1dDclljr




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