Project1

标题: 关于 双战斗菜单 的问题 [打印本页]

作者: as295d    时间: 2008-7-20 22:27
标题: 关于 双战斗菜单 的问题
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. $宝宝ID = [1]

  7. class Scene_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 主处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     # 初始化战斗用的各种暂时数据
  13.     $game_temp.in_battle = true
  14.     $game_temp.battle_turn = 0
  15.     $game_temp.battle_event_flags.clear
  16.     $game_temp.battle_abort = false
  17.     $game_temp.battle_main_phase = false
  18.     $game_temp.battleback_name = $game_map.battleback_name
  19.     $game_temp.forcing_battler = nil
  20.     # 初始化战斗用事件解释器
  21.     $game_system.battle_interpreter.setup(nil, 0)
  22.     # 准备队伍
  23.     @troop_id = $game_temp.battle_troop_id
  24.     $game_troop.setup(@troop_id)
  25.     # 生成角色命令窗口
  26.     s1 = $data_system.words.attack
  27.     s2 = $data_system.words.skill
  28.     s3 = $data_system.words.guard
  29.     s4 = $data_system.words.item
  30.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  31.     @actor_command_window.y = 160
  32.     @actor_command_window.back_opacity = 160
  33.     @actor_command_window.active = false
  34.     @actor_command_window.visible = false
  35. ###############################################################################
  36.     @baby_command_window = Window_Command.new(160, ["攻击", "技能", "防御"])
  37.     @baby_command_window.y = 160 + 32
  38.     @baby_command_window.back_opacity = 160
  39.     @baby_command_window.active = false
  40.     @baby_command_window.visible = false
  41. ###############################################################################
  42.     # 生成其它窗口
  43.     @party_command_window = Window_PartyCommand.new
  44.     @help_window = Window_Help.new
  45.     @help_window.back_opacity = 160
  46.     @help_window.visible = false
  47.     @status_window = Window_BattleStatus.new
  48.     @message_window = Window_Message.new
  49.     # 生成活动块
  50.     @spriteset = Spriteset_Battle.new
  51.     # 初始化等待计数
  52.     @wait_count = 0
  53.     # 执行过渡
  54.     if $data_system.battle_transition == ""
  55.       Graphics.transition(20)
  56.     else
  57.       Graphics.transition(40, "Graphics/Transitions/" +
  58.         $data_system.battle_transition)
  59.     end
  60.     # 开始自由战斗回合
  61.     start_phase1
  62.     # 主循环
  63.     loop do
  64.       # 刷新游戏画面
  65.       Graphics.update
  66.       # 刷新输入信息
  67.       Input.update
  68.       # 刷新画面
  69.       update
  70.       # 如果画面切换的话就中断循环
  71.       if $scene != self
  72.         break
  73.       end
  74.     end
  75.     # 刷新地图
  76.     $game_map.refresh
  77.     # 准备过渡
  78.     Graphics.freeze
  79.     # 释放窗口
  80.     @actor_command_window.dispose
  81.     @party_command_window.dispose
  82.     @help_window.dispose
  83.     @status_window.dispose
  84.     @message_window.dispose
  85.     if @skill_window != nil
  86.       @skill_window.dispose
  87.     end
  88.     if @item_window != nil
  89.       @item_window.dispose
  90.     end
  91.     if @result_window != nil
  92.       @result_window.dispose
  93.     end
  94.     # 释放活动块
  95.     @spriteset.dispose
  96.     # 标题画面切换中的情况
  97.     if $scene.is_a?(Scene_Title)
  98.       # 淡入淡出画面
  99.       Graphics.transition
  100.       Graphics.freeze
  101.     end
  102.     # 战斗测试或者游戏结束以外的画面切换中的情况
  103.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  104.       $scene = nil
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 胜负判定
  109.   #--------------------------------------------------------------------------
  110.   def judge
  111.     # 全灭判定是真、并且同伴人数为 0 的情况下
  112.     if $game_party.all_dead? or $game_party.actors.size == 0
  113.       # 允许失败的情况下
  114.       if $game_temp.battle_can_lose
  115.         # 还原为战斗开始前的 BGM
  116.         $game_system.bgm_play($game_temp.map_bgm)
  117.         # 战斗结束
  118.         battle_end(2)
  119.         # 返回 true
  120.         return true
  121.       end
  122.       # 设置游戏结束标志
  123.       $game_temp.gameover = true
  124.       # 返回 true
  125.       return true
  126.     end
  127.     # 如果存在任意 1 个敌人就返回 false
  128.     for enemy in $game_troop.enemies
  129.       if enemy.exist?
  130.         return false
  131.       end
  132.     end
  133.     # 开始结束战斗回合 (胜利)
  134.     start_phase5
  135.     # 返回 true
  136.     return true
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 战斗结束
  140.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  141.   #--------------------------------------------------------------------------
  142.   def battle_end(result)
  143.     # 清除战斗中标志
  144.     $game_temp.in_battle = false
  145.     # 清除全体同伴的行动
  146.     $game_party.clear_actions
  147.     # 解除战斗用状态
  148.     for actor in $game_party.actors
  149.       actor.remove_states_battle
  150.     end
  151.     # 清除敌人
  152.     $game_troop.enemies.clear
  153.     # 调用战斗返回
  154.     if $game_temp.battle_proc != nil
  155.       $game_temp.battle_proc.call(result)
  156.       $game_temp.battle_proc = nil
  157.     end
  158.     # 切换到地图画面
  159.     $scene = Scene_Map.new
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 设置战斗事件
  163.   #--------------------------------------------------------------------------
  164.   def setup_battle_event
  165.     # 正在执行战斗事件的情况下
  166.     if $game_system.battle_interpreter.running?
  167.       return
  168.     end
  169.     # 搜索全部页的战斗事件
  170.     for index in 0...$data_troops[@troop_id].pages.size
  171.       # 获取事件页
  172.       page = $data_troops[@troop_id].pages[index]
  173.       # 事件条件可以参考 c
  174.       c = page.condition
  175.       # 没有指定任何条件的情况下转到下一页
  176.       unless c.turn_valid or c.enemy_valid or
  177.              c.actor_valid or c.switch_valid
  178.         next
  179.       end
  180.       # 执行完毕的情况下转到下一页
  181.       if $game_temp.battle_event_flags[index]
  182.         next
  183.       end
  184.       # 确认回合条件
  185.       if c.turn_valid
  186.         n = $game_temp.battle_turn
  187.         a = c.turn_a
  188.         b = c.turn_b
  189.         if (b == 0 and n != a) or
  190.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  191.           next
  192.         end
  193.       end
  194.       # 确认敌人条件
  195.       if c.enemy_valid
  196.         enemy = $game_troop.enemies[c.enemy_index]
  197.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  198.           next
  199.         end
  200.       end
  201.       # 确认角色条件
  202.       if c.actor_valid
  203.         actor = $game_actors[c.actor_id]
  204.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  205.           next
  206.         end
  207.       end
  208.       # 确认开关条件
  209.       if c.switch_valid
  210.         if $game_switches[c.switch_id] == false
  211.           next
  212.         end
  213.       end
  214.       # 设置事件
  215.       $game_system.battle_interpreter.setup(page.list, 0)
  216.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  217.       if page.span <= 1
  218.         # 设置执行结束标志
  219.         $game_temp.battle_event_flags[index] = true
  220.       end
  221.       return
  222.     end
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 刷新画面
  226.   #--------------------------------------------------------------------------
  227.   def update
  228.     # 执行战斗事件中的情况下
  229.     if $game_system.battle_interpreter.running?
  230.       # 刷新解释器
  231.       $game_system.battle_interpreter.update
  232.       # 强制行动的战斗者不存在的情况下
  233.       if $game_temp.forcing_battler == nil
  234.         # 执行战斗事件结束的情况下
  235.         unless $game_system.battle_interpreter.running?
  236.           # 继续战斗的情况下、再执行战斗事件的设置
  237.           unless judge
  238.             setup_battle_event
  239.           end
  240.         end
  241.         # 如果不是结束战斗回合的情况下
  242.         if @phase != 5
  243.           # 刷新状态窗口
  244.           @status_window.refresh
  245.         end
  246.       end
  247.     end
  248.     # 系统 (计时器)、刷新画面
  249.     $game_system.update
  250.     $game_screen.update
  251.     # 计时器为 0 的情况下
  252.     if $game_system.timer_working and $game_system.timer == 0
  253.       # 中断战斗
  254.       $game_temp.battle_abort = true
  255.     end
  256.     # 刷新窗口
  257.     @help_window.update
  258.     @party_command_window.update
  259.     @actor_command_window.update
  260. ################################################################################
  261.     @baby_command_window.update
  262. ################################################################################
  263.     @status_window.update
  264.     @message_window.update
  265.     # 刷新活动块
  266.     @spriteset.update
  267.     # 处理过渡中的情况下
  268.     if $game_temp.transition_processing
  269.       # 清除处理过渡中标志
  270.       $game_temp.transition_processing = false
  271.       # 执行过渡
  272.       if $game_temp.transition_name == ""
  273.         Graphics.transition(20)
  274.       else
  275.         Graphics.transition(40, "Graphics/Transitions/" +
  276.           $game_temp.transition_name)
  277.       end
  278.     end
  279.     # 显示信息窗口中的情况下
  280.     if $game_temp.message_window_showing
  281.       return
  282.     end
  283.     # 显示效果中的情况下
  284.     if @spriteset.effect?
  285.       return
  286.     end
  287.     # 游戏结束的情况下
  288.     if $game_temp.gameover
  289.       # 切换到游戏结束画面
  290.       $scene = Scene_Gameover.new
  291.       return
  292.     end
  293.     # 返回标题画面的情况下
  294.     if $game_temp.to_title
  295.       # 切换到标题画面
  296.       $scene = Scene_Title.new
  297.       return
  298.     end
  299.     # 中断战斗的情况下
  300.     if $game_temp.battle_abort
  301.       # 还原为战斗前的 BGM
  302.       $game_system.bgm_play($game_temp.map_bgm)
  303.       # 战斗结束
  304.       battle_end(1)
  305.       return
  306.     end
  307.     # 等待中的情况下
  308.     if @wait_count > 0
  309.       # 减少等待计数
  310.       @wait_count -= 1
  311.       return
  312.     end
  313.     # 强制行动的角色存在、
  314.     # 并且战斗事件正在执行的情况下
  315.     if $game_temp.forcing_battler == nil and
  316.        $game_system.battle_interpreter.running?
  317.       return
  318.     end
  319.     # 回合分支
  320.     case @phase
  321.     when 1  # 自由战斗回合
  322.       update_phase1
  323.     when 2  # 同伴命令回合
  324.       update_phase2
  325.     when 3  # 角色命令回合
  326.       update_phase3
  327.     when 4  # 主回合
  328.       update_phase4
  329.     when 5  # 战斗结束回合
  330.       update_phase5
  331.     end
  332.   end
  333. end
复制代码

这个脚本。开头是定义特殊角色用的战斗菜单
问题是再添加几个ID了后这脚本就没作用了
要怎么改?

不用解答了。。。
想了一下自己解决了

$宝宝ID = [1,2,3]




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