设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1189|回复: 3
打印 上一主题 下一主题

让公共事件比技能动画提前

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2007-6-3
帖子
801
跳转到指定楼层
1
发表于 2009-2-14 23:10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 4)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 开始主回合
  9.   #--------------------------------------------------------------------------
  10.   def start_phase4
  11.     # 转移到回合 4
  12.     @phase = 4
  13.     # 回合数计数
  14.     $game_temp.battle_turn += 1
  15.     # 搜索全页的战斗事件
  16.     for index in 0...$data_troops[@troop_id].pages.size
  17.       # 获取事件页
  18.       page = $data_troops[@troop_id].pages[index]
  19.       # 本页的范围是 [回合] 的情况下
  20.       if page.span == 1
  21.         # 设置已经执行标志
  22.         $game_temp.battle_event_flags[index] = false
  23.       end
  24.     end
  25.     # 设置角色为非选择状态
  26.     @actor_index = -1
  27.     @active_battler = nil
  28.     # 有效化同伴指令窗口
  29.     @party_command_window.active = false
  30.     @party_command_window.visible = false
  31.     # 无效化角色指令窗口
  32.    
  33.     @actor_command_window.active = false
  34.     @actor_command_window.visible = false
  35.     # 设置主回合标志
  36.     $game_temp.battle_main_phase = true
  37.     # 生成敌人行动
  38.     for enemy in $game_troop.enemies
  39.       enemy.make_action
  40.     end
  41.     # 生成行动顺序
  42.     make_action_orders
  43.     # 移动到步骤 1
  44.     @phase4_step = 1
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 生成行动循序
  48.   #--------------------------------------------------------------------------
  49.   def make_action_orders
  50.     # 初始化序列 @action_battlers
  51.     @action_battlers = []
  52.     # 添加敌人到 @action_battlers 序列
  53.     for enemy in $game_troop.enemies
  54.       @action_battlers.push(enemy)
  55.     end
  56.     # 添加角色到 @action_battlers 序列
  57.     for actor in $game_party.actors
  58.       @action_battlers.push(actor)
  59.     end
  60.     # 确定全体的行动速度
  61.     for battler in @action_battlers
  62.       battler.make_action_speed
  63.     end
  64.     # 按照行动速度从大到小排列
  65.     @action_battlers.sort! {|a,b|
  66.       b.current_action.speed - a.current_action.speed }
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 刷新画面 (主回合)
  70.   #--------------------------------------------------------------------------
  71.   def update_phase4
  72.     case @phase4_step
  73.     when 1
  74.       update_phase4_step1
  75.     when 2
  76.       update_phase4_step2
  77.     when 3
  78.       update_phase4_step3
  79.     when 4
  80.       update_phase4_step4
  81.     when 5
  82.       update_phase4_step5
  83.     when 6
  84.       update_phase4_step6
  85.     end
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  89.   #--------------------------------------------------------------------------
  90.   def update_phase4_step1
  91.     # 隐藏帮助窗口
  92.     @help_window.visible = false
  93.     @help_window.enemy = nil
  94.     # 判定胜败
  95.     if judge
  96.       # 胜利或者失败的情况下 : 过程结束
  97.       return
  98.     end
  99.     # 强制行动的战斗者不存在的情况下
  100.     if $game_temp.forcing_battler == nil
  101.       # 设置战斗事件
  102.       setup_battle_event
  103.       # 执行战斗事件中的情况下
  104.       if $game_system.battle_interpreter.running?
  105.         return
  106.       end
  107.     end
  108.     # 强制行动的战斗者存在的情况下
  109.     if $game_temp.forcing_battler != nil
  110.       # 在头部添加后移动
  111.       @action_battlers.delete($game_temp.forcing_battler)
  112.       @action_battlers.unshift($game_temp.forcing_battler)
  113.     end
  114.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  115.     if @action_battlers.size == 0
  116.       # 开始同伴命令回合
  117.       start_phase2
  118.       return
  119.     end
  120.     # 初始化动画 ID 和公共事件 ID
  121.     @animation1_id = 0
  122.     @animation2_id = 0
  123.     @common_event_id = 0
  124.     # 未行动的战斗者移动到序列的头部
  125.     @active_battler = @action_battlers.shift
  126.     # 如果已经在战斗之外的情况下
  127.     if @active_battler.index == nil
  128.       return
  129.     end
  130.     # 自然解除状态
  131.     @active_battler.remove_states_auto
  132.     # 刷新状态窗口
  133.     @status_window.refresh
  134.     # 移至步骤 2
  135.     #print "phase4_step = 2"
  136.     @phase4_step = 2
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 刷新画面 (主回合步骤 2 : 开始行动)
  140.   #--------------------------------------------------------------------------
  141.   def update_phase4_step2
  142.    
  143.     # 如果不是强制行动
  144.     unless @active_battler.current_action.forcing
  145.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  146.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  147.         # 设置行动为攻击
  148.         @active_battler.current_action.kind = 0
  149.         @active_battler.current_action.basic = 0
  150.       end
  151.       # 限制为 [不能行动] 的情况下
  152.       if @active_battler.restriction == 4
  153.         # 清除行动强制对像的战斗者
  154.         $game_temp.forcing_battler = nil
  155.         # 移至步骤 1
  156.         @phase4_step = 1
  157.         return
  158.       end
  159.     end
  160.     # 清除对像战斗者
  161.     @target_battlers = []
  162.     # 行动种类分支
  163.     case @active_battler.current_action.kind
  164.     when 0  # 基本
  165.       #if @active_battler.current_action.basic != 1
  166.         make_basic_action_result
  167.       #end
  168.     when 1  # 特技
  169.       make_skill_action_result
  170.     when 2  # 物品
  171.       
  172.       make_item_action_result
  173.     when 10  # 杂项菜单
  174.       ##jkka
  175.     when 11
  176.       make_throw_action_result
  177.     end
  178.     # 移至步骤 3
  179.     if @phase4_step == 2
  180.       @phase4_step = 3
  181.     end
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 生成投掷行动结果
  185.   #--------------------------------------------------------------------------
  186.   def make_throw_action_result
  187.    
  188.     $choice = 4
  189.     if @active_battler.is_a?(Game_Actor)
  190.      $actname = @active_battler.battler_name
  191.      
  192.      
  193.    else
  194.      $actname = @active_battler.battler_name
  195.    end     
  196.     # 获取物品
  197.     data = @active_battler.current_action.item_id[0] ? $data_items : $data_weapons
  198.     @item = data[@active_battler.current_action.item_id[1]]
  199.     # 因为物品耗尽而无法使用的情况下
  200.     if @active_battler.current_action.item_id[0]
  201.       unless $game_party.item_can_use?(@item.id)
  202.         # 移至步骤 1
  203.         @phase4_step = 1
  204.         return
  205.       end
  206.       # 消耗品的情况下
  207.       if @item.consumable
  208.         # 使用的物品减 1
  209.         $game_party.lose_item(@item.id, 1)
  210.       end
  211.       # 设置公共事件 ID
  212.       @common_event_id = @item.common_event_id
  213.       # 在帮助窗口显示物品名
  214.       @help_window.set_text(@item.name, 1)
  215.       # 设置动画 ID
  216.       if active_battler.index == 0
  217.          @animation1_id = 136
  218.       else
  219.          @animation1_id = 245
  220.          if $game_switches[90] == true
  221.             @animation1_id = 545
  222.          end
  223.       end   
  224.       
  225.       
  226.          
  227.         @animation2_id = @item.animation2_id
  228.         
  229.       # 确定对像
  230.       index = @active_battler.current_action.target_index
  231.       target = $game_party.smooth_target_actor(index)
  232.       # 设置对像侧战斗者
  233.       set_target_battlers(@item.scope)
  234.     else
  235.       # 在帮助窗口显示物品名
  236.       @help_window.set_text(@item.name, 1)
  237.       # 确定对像
  238.       index = @active_battler.current_action.target_index
  239.       target = $game_party.smooth_target_actor(index)
  240.        # 设置动画 ID
  241.       if active_battler.index == 0
  242.          @animation1_id = 136
  243.       else
  244.          @animation1_id = 245
  245.          if $game_switches[90] == true
  246.             @animation1_id = 545
  247.          end
  248.       end   
  249.       @animation2_id = 135
  250.       
  251.       # 设置对像侧战斗者
  252.       set_target_battlers(1)
  253.     end
  254.     # 应用物品效果
  255.     for target in @target_battlers
  256.       target.item_effect(@item)
  257.     end
  258.   end
  259.   

  260.   #--------------------------------------------------------------------------
  261.   # ● 生成基本行动结果
  262.   #--------------------------------------------------------------------------
  263.   def make_basic_action_result
  264.     $choice = 1
  265.     # 攻击的情况下
  266.     if @active_battler.current_action.basic == 0
  267.       # 设置攻击 ID
  268.       @animation1_id = @active_battler.animation1_id
  269.       @animation2_id = @active_battler.animation2_id
  270.       # 行动方的战斗者是敌人的情况下
  271.       if @active_battler.is_a?(Game_Enemy)
  272.         if @active_battler.restriction == 3
  273.           target = $game_troop.random_target_enemy  
  274.         elsif @active_battler.restriction == 2
  275.           target = $game_party.random_target_actor
  276.         else
  277.           index = @active_battler.current_action.target_index
  278.           target = $game_party.smooth_target_actor(index)
  279.         end
  280.       end
  281.       # 行动方的战斗者是角色的情况下
  282.       if @active_battler.is_a?(Game_Actor)
  283.         if @active_battler.restriction == 3
  284.           target = $game_party.random_target_actor
  285.         elsif @active_battler.restriction == 2
  286.           target = $game_troop.random_target_enemy
  287.         else
  288.           index = @active_battler.current_action.target_index
  289.           target = $game_troop.smooth_target_enemy(index)
  290.         end
  291.       end
  292.       # 设置对像方的战斗者序列
  293.       @target_battlers = [target]
  294.       # 应用通常攻击效果
  295.       for target in @target_battlers
  296.         target.attack_effect(@active_battler)
  297.       end
  298.       return
  299.     end
  300.     # 防御的情况下
  301.     if @active_battler.current_action.basic == 1
  302.       # 帮助窗口显示"防御"
  303.         @help_window.set_text($data_system.words.guard, 1)
  304.       # ——回复。可以改为SP。
  305.         @active_battler.damage = -@active_battler.maxhp * 0.2
  306.         @active_battler.damage = -@active_battler.maxsp * 0.1
  307.         @active_battler.damage = @active_battler.damage.to_i
  308.         @active_battler.hp -= @active_battler.damage
  309.       # 回復值的表示
  310.         @target_battlers.push(@active_battler)
  311.        return
  312.     end

  313.     # 逃跑的情况下
  314.     if @active_battler.is_a?(Game_Enemy) and
  315.        @active_battler.current_action.basic == 2
  316.       #  帮助窗口显示"逃跑"
  317.       @help_window.set_text("逃跑", 1)
  318.       # 逃跑
  319.       @active_battler.escape
  320.       return
  321.     end
  322.     # 什么也不做的情况下
  323.     if @active_battler.current_action.basic == 3
  324.       # 清除强制行动对像的战斗者
  325.       $game_temp.forcing_battler = nil
  326.       # 移至步骤 1
  327.       @phase4_step = 1
  328.       return
  329.     end
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 设置物品或特技对像方的战斗者
  333.   #     scope : 特技或者是物品的范围
  334.   #--------------------------------------------------------------------------
  335.   def set_target_battlers(scope)
  336.    
  337.     # 行动方的战斗者是敌人的情况下
  338.     if @active_battler.is_a?(Game_Enemy)
  339.       # 效果范围分支
  340.       case scope
  341.       when 1  # 敌单体
  342.         index = @active_battler.current_action.target_index
  343.         @target_battlers.push($game_party.smooth_target_actor(index))
  344.       when 2  # 敌全体
  345.         for actor in $game_party.actors
  346.           if actor.exist?
  347.             @target_battlers.push(actor)
  348.           end
  349.         end
  350.       when 3  # 我方单体
  351.         index = @active_battler.current_action.target_index
  352.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  353.       when 4  # 我方全体
  354.         for enemy in $game_troop.enemies
  355.           if enemy.exist?
  356.             @target_battlers.push(enemy)
  357.           end
  358.         end
  359.       when 5  # 我方单体 (HP 0)
  360.         index = @active_battler.current_action.target_index
  361.         enemy = $game_troop.enemies[index]
  362.         if enemy != nil and enemy.hp0?
  363.           @target_battlers.push(enemy)
  364.         end
  365.       when 6  # 我方全体 (HP 0)
  366.         for enemy in $game_troop.enemies
  367.           if enemy != nil and enemy.hp0?
  368.             @target_battlers.push(enemy)
  369.           end
  370.         end
  371.       when 7  # 使用者
  372.         @target_battlers.push(@active_battler)
  373.       end
  374.     end
  375.     # 行动方的战斗者是角色的情况下
  376.     if @active_battler.is_a?(Game_Actor)
  377.       # 效果范围分支
  378.       case scope
  379.       when 1  # 敌单体
  380.         index = @active_battler.current_action.target_index
  381.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  382.       when 2  # 敌全体
  383.         for enemy in $game_troop.enemies
  384.           if enemy.exist?
  385.             @target_battlers.push(enemy)
  386.           end
  387.         end
  388.       when 3  # 我方单体
  389.         index = @active_battler.current_action.target_index
  390.         @target_battlers.push($game_party.smooth_target_actor(index))
  391.       when 4  # 我方全体
  392.         for actor in $game_party.actors
  393.           if actor.exist?
  394.             @target_battlers.push(actor)
  395.           end
  396.         end
  397.       when 5  # 我方单体 (HP 0)
  398.         index = @active_battler.current_action.target_index
  399.         actor = $game_party.actors[index]
  400.         if actor != nil and actor.hp0?
  401.           @target_battlers.push(actor)
  402.         end
  403.       when 6  # 我方全体 (HP 0)
  404.         for actor in $game_party.actors
  405.           if actor != nil and actor.hp0?
  406.             @target_battlers.push(actor)
  407.           end
  408.         end
  409.       when 7  # 使用者
  410.         @target_battlers.push(@active_battler)
  411.       end
  412.     end
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 生成特技行动结果
  416.   #--------------------------------------------------------------------------
  417.   def make_skill_action_result
  418.     $choice = 2
  419.     # 获取特技
  420.     @skill = $data_skills[@active_battler.current_action.skill_id]
  421.     # 如果不是强制行动
  422.     unless @active_battler.current_action.forcing
  423.       # 因为 SP 耗尽而无法使用的情况下
  424.       unless @active_battler.skill_can_use?(@skill.id)
  425.         # 清除强制行动对像的战斗者
  426.         $game_temp.forcing_battler = nil
  427.         # 移至步骤 1
  428.         @phase4_step = 1
  429.         return
  430.       end
  431.     end
  432.     # 消耗 SP
  433.     @active_battler.sp -= @skill.sp_cost
  434.     # 刷新状态窗口
  435.     @status_window.refresh
  436.    
  437.     # 设置动画 ID
  438.     @animation1_id = @skill.animation1_id
  439.     if $game_switches[90] == true
  440.         if @animation1_id == 242 or  @animation1_id == 244 or  @animation1_id == 245
  441.            @animation1_id = @animation1_id + 300
  442.        end
  443.    
  444.         if @animation1_id == 251 or  @animation1_id == 261 or  @animation1_id == 271
  445.            @animation1_id = @animation1_id + 300
  446.         end
  447.          
  448.         if @animation1_id == 273 or  @animation1_id == 275 or  @animation1_id == 281
  449.            @animation1_id = @animation1_id + 300
  450.       end
  451.         if @animation1_id == 283 or  @animation1_id == 285 or  @animation1_id == 291
  452.            @animation1_id = @animation1_id + 300
  453.          end
  454.         if @animation1_id == 293
  455.            @animation1_id = @animation1_id + 300
  456.       end      
  457.     end
  458.     @animation2_id = @skill.animation2_id
  459.     # 设置公共事件 ID
  460.     @common_event_id = @skill.common_event_id
  461.     # 设置对像侧战斗者
  462.     set_target_battlers(@skill.scope)
  463.    
  464.     ########### 公共事件 ID 有效的情况下###########(提前动画)
  465.     if @common_event_id > 0 and @common_event_id != 72
  466.       # 设置事件
  467.      
  468.       common_event = $data_common_events[@common_event_id]
  469.       $game_system.battle_interpreter.setup(common_event.list, 0)
  470.     end
  471.      
  472.     # 应用特技效果
  473.     for target in @target_battlers
  474.       target.skill_effect(@active_battler, @skill)
  475.     end
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 生成物品行动结果
  479.   #--------------------------------------------------------------------------
  480.   def make_item_action_result
  481.     $choice = 3
  482.    
  483.     if @throw_s == 1
  484.    
  485.     # 获取物品
  486.     data = @active_battler.current_action.item_id[0] ? $data_items : $data_weapons
  487.     @item = data[@active_battler.current_action.item_id[1]]
  488.     # 因为物品耗尽而无法使用的情况下
  489.     if @active_battler.current_action.item_id[0]
  490.       unless $game_party.item_can_use?(@item.id)
  491.         # 移至步骤 1
  492.         @phase4_step = 1
  493.         return
  494.       end
  495.       # 消耗品的情况下
  496.       if @item.consumable
  497.         # 使用的物品减 1
  498.         $game_party.lose_item(@item.id, 1)
  499.       end
  500.       # 设置公共事件 ID
  501.       @common_event_id = @item.common_event_id
  502.       
  503.       # 设置动画 ID
  504.       if active_battler.index == 0
  505.          @animation1_id = 135
  506.       else
  507.          @animation1_id = 245
  508.       if $game_switches[90] == true
  509.             @animation1_id = 545
  510.          end
  511.       end   
  512.       @animation2_id = @item.animation2_id
  513.       # 确定对像
  514.       index = @active_battler.current_action.target_index
  515.       target = $game_party.smooth_target_actor(index)
  516.       # 设置对像侧战斗者
  517.       set_target_battlers(@item.scope)
  518.     else
  519.       
  520.       # 设置动画 ID
  521.       if active_battler.index == 0
  522.          @animation1_id = 135
  523.       else
  524.          @animation1_id = 245
  525.       if $game_switches[90] == true
  526.             @animation1_id = 545
  527.          end
  528.       end   
  529.       @animation2_id = @item.animation2_id
  530.       
  531.       # 确定对像
  532.       index = @active_battler.current_action.target_index
  533.       target = $game_party.smooth_target_actor(index)
  534.       # 设置对像侧战斗者
  535.       set_target_battlers(1)
  536.     end
  537.     if @common_event_id > 0 and @common_event_id != 72
  538.       # 设置事件
  539.       @animation1_id = 0
  540.       common_event = $data_common_events[@common_event_id]
  541.       $game_system.battle_interpreter.setup(common_event.list, 0)

  542.   end
  543.     # 应用物品效果
  544.     for target in @target_battlers
  545.       target.item_effect(@item)
  546.     end
  547.   #end
  548.    
  549. else
  550.    
  551.    
  552.     # 获取物品
  553.     @item = $data_items[@active_battler.current_action.item_id]
  554.     # 因为物品耗尽而无法使用的情况下
  555.     unless $game_party.item_can_use?(@item.id)
  556.       # 移至步骤 1
  557.       @phase4_step = 1
  558.       return
  559.     end
  560.     # 消耗品的情况下
  561.     #print "make"
  562.     if @item.consumable
  563.       # 使用的物品减 1
  564.       $game_party.lose_item(@item.id, 1)
  565.     end
  566.    
  567.     # 设置动画 ID
  568.     if active_battler.index == 0
  569.          @animation1_id = 136
  570.       else
  571.          @animation1_id = 245
  572.          if $game_switches[90] == true
  573.             @animation1_id = 545
  574.          end
  575.       end   
  576.     @animation2_id = @item.animation2_id
  577.     # 设置公共事件 ID
  578.     @common_event_id = @item.common_event_id
  579.     # 确定对像
  580.     index = @active_battler.current_action.target_index
  581.     target = $game_party.smooth_target_actor(index)
  582.     # 设置对像侧战斗者
  583.     set_target_battlers(@item.scope)
  584.     ########### 公共事件 ID 有效的情况下###########(提前动画)
  585.     if @common_event_id > 0 and @common_event_id != 72
  586.       # 设置事件
  587.       @animation1_id = 0
  588.       common_event = $data_common_events[@common_event_id]
  589.       $game_system.battle_interpreter.setup(common_event.list, 0)

  590.   end
  591.     # 应用物品效果
  592.     for target in @target_battlers
  593.       target.item_effect(@item)
  594.     end
  595.   end
  596. end
  597.    



  598. ##--------------------------------------------------------------------------
  599. # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  600. #--------------------------------------------------------------------------
  601. def update_phase4_step3
  602.   
  603.    # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  604.    if @animation1_id == 0
  605.       @active_battler.white_flash = false
  606.    else
  607.      @active_battler.animation_id = @animation1_id
  608.      @active_battler.animation_hit = true
  609.    end
  610.    # 效果范围是敌方的情况下
  611.    if $choice != 2
  612.      # 对像方动画
  613.      for target in @target_battlers
  614.        target.animation_id = @animation2_id
  615.        target.animation_hit = (target.damage != "Miss")
  616.      end
  617.    end
  618.    if $choice == 2
  619.      if @skill.scope <= 2
  620.      for target in @target_battlers
  621.        target.animation_id = @animation2_id
  622.        target.animation_hit = (target.damage != "Miss")
  623.      end     
  624.    end
  625. end
  626.    # 移至步骤 4
  627.    @phase4_step = 4
  628. end
  629. #--------------------------------------------------------------------------
  630. # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  631. #--------------------------------------------------------------------------
  632. def update_phase4_step4
  633.    # 效果范围是我方的情况下
  634. if $choice == 2
  635.     if @skill.scope >= 3
  636.      # 对像方动画
  637.      for target in @target_battlers
  638.        target.animation_id = @animation2_id
  639.        target.animation_hit = (target.damage != "Miss")
  640.      end
  641.    end
  642.   end
  643.    # 限制动画长度、最低 8 帧
  644.    @wait_count = 8
  645.    # 移至步骤 5
  646.    @phase4_step = 5
  647. end


  648.   #--------------------------------------------------------------------------
  649.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  650.   #--------------------------------------------------------------------------
  651.   def update_phase4_step5
  652.     # 隐藏帮助窗口
  653.     @help_window.visible = false
  654.     @help_window.enemy = nil
  655.     # 刷新状态窗口
  656.     @status_window.refresh
  657.     # 显示伤害
  658.     for target in @target_battlers
  659.       if target.damage != nil
  660.         target.damage_pop = true
  661.       end
  662.     end
  663.     # 移至步骤 6
  664.     @phase4_step = 6
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  668.   #--------------------------------------------------------------------------
  669.    def update_phase4_step6
  670.     # 清除强制行动对像的战斗者
  671.     $game_temp.forcing_battler = nil
  672.     # 对于一些后执行战斗事件
  673.     if  @common_event_id == 72
  674.       # 设置事件
  675.       common_event = $data_common_events[@common_event_id]
  676.       $game_system.battle_interpreter.setup(common_event.list, 0)
  677.     end
  678.     # 连续伤害的退后
  679.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  680.        @active_battler.slip_damage_effect
  681.        #@active_battler.damage_pop = true
  682.     end
  683.     # 如果不是结束战斗回合的情况下
  684.     if @phase != 5
  685.       # 刷新状态窗口
  686.       @status_window.refresh
  687.     end
  688.     # 移至步骤 1
  689.     @phase4_step = 1
  690.   end
  691. end
复制代码

帮我修改一下,这是Scene_Battle 4的
我提前是提前了,但是有时候打时不显示伤害直接显示得到经验物品等了...(敌人还在)
版务信息:本贴由楼主自主结贴~
无签名,不解释

Lv5.捕梦者

梦石
0
星屑
39163
在线时间
5737 小时
注册时间
2006-11-10
帖子
6638
2
发表于 2009-2-15 00:30:54 | 只看该作者
-。-默认脚本中,这部分是最乱的脚本之一,改动的话经常有意想不到的状况发生~~
所以嘛,我们就不要乱动它,做点小手脚,让它必须强制经过update_phase4_step6就不会出现敌人还在战斗就结束的情况了。
方法也很简单,使用个小开关,经过步骤6后为false,执行公共事件后就为true。然后给胜利再加个条件,当开关为true的时候不结束,这样就可以啦-。-

以下是成品脚本,替换原来的SCENE BATTLE1和4就可以了。

  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

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

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 开始主回合
  9.   #--------------------------------------------------------------------------
  10.   def start_phase4
  11.     # 转移到回合 4
  12.     @phase = 4
  13.     # 回合数计数
  14.     $game_temp.battle_turn += 1
  15.     # 搜索全页的战斗事件
  16.     for index in 0...$data_troops[@troop_id].pages.size
  17.       # 获取事件页
  18.       page = $data_troops[@troop_id].pages[index]
  19.       # 本页的范围是 [回合] 的情况下
  20.       if page.span == 1
  21.         # 设置已经执行标志
  22.         $game_temp.battle_event_flags[index] = false
  23.       end
  24.     end
  25.     # 设置角色为非选择状态
  26.     @actor_index = -1
  27.     @active_battler = nil
  28.     # 有效化同伴指令窗口
  29.     @party_command_window.active = false
  30.     @party_command_window.visible = false
  31.     # 无效化角色指令窗口
  32.     @actor_command_window.active = false
  33.     @actor_command_window.visible = false
  34.     # 设置主回合标志
  35.     $game_temp.battle_main_phase = true
  36.     # 生成敌人行动
  37.     for enemy in $game_troop.enemies
  38.       enemy.make_action
  39.     end
  40.     # 生成行动顺序
  41.     make_action_orders
  42.     # 移动到步骤 1
  43.     @phase4_step = 1
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 生成行动循序
  47.   #--------------------------------------------------------------------------
  48.   def make_action_orders
  49.     # 初始化序列 @action_battlers
  50.     @action_battlers = []
  51.     # 添加敌人到 @action_battlers 序列
  52.     for enemy in $game_troop.enemies
  53.       @action_battlers.push(enemy)
  54.     end
  55.     # 添加角色到 @action_battlers 序列
  56.     for actor in $game_party.actors
  57.       @action_battlers.push(actor)
  58.     end
  59.     # 确定全体的行动速度
  60.     for battler in @action_battlers
  61.       battler.make_action_speed
  62.     end
  63.     # 按照行动速度从大到小排列
  64.     @action_battlers.sort! {|a,b|
  65.       b.current_action.speed - a.current_action.speed }
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 刷新画面 (主回合)
  69.   #--------------------------------------------------------------------------
  70.   def update_phase4
  71.     case @phase4_step
  72.     when 1
  73.       update_phase4_step1
  74.     when 2
  75.       update_phase4_step2
  76.     when 3
  77.       update_phase4_step3
  78.     when 4
  79.       update_phase4_step4
  80.     when 5
  81.       update_phase4_step5
  82.     when 6
  83.       update_phase4_step6
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  88.   #--------------------------------------------------------------------------
  89.   def update_phase4_step1
  90.     # 隐藏帮助窗口
  91.     @help_window.visible = false
  92.     # 判定胜败
  93.     if judge
  94.       # 胜利或者失败的情况下 : 过程结束
  95.       return
  96.     end
  97.     # 强制行动的战斗者不存在的情况下
  98.     if $game_temp.forcing_battler == nil
  99.       # 设置战斗事件
  100.       setup_battle_event
  101.       # 执行战斗事件中的情况下
  102.       if $game_system.battle_interpreter.running?
  103.         return
  104.       end
  105.     end
  106.     # 强制行动的战斗者存在的情况下
  107.     if $game_temp.forcing_battler != nil
  108.       # 在头部添加后移动
  109.       @action_battlers.delete($game_temp.forcing_battler)
  110.       @action_battlers.unshift($game_temp.forcing_battler)
  111.     end
  112.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  113.     if @action_battlers.size == 0
  114.       # 开始同伴命令回合
  115.       start_phase2
  116.       return
  117.     end
  118.     # 初始化动画 ID 和公共事件 ID
  119.     @animation1_id = 0
  120.     @animation2_id = 0
  121.     @common_event_id = 0
  122.     # 未行动的战斗者移动到序列的头部
  123.     @active_battler = @action_battlers.shift
  124.     # 如果已经在战斗之外的情况下
  125.     if @active_battler.index == nil
  126.       return
  127.     end
  128.     # 连续伤害
  129.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  130.       @active_battler.slip_damage_effect
  131.       @active_battler.damage_pop = true
  132.     end
  133.     # 自然解除状态
  134.     @active_battler.remove_states_auto
  135.     # 刷新状态窗口
  136.     @status_window.refresh
  137.     # 移至步骤 2
  138.     @phase4_step = 2
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 刷新画面 (主回合步骤 2 : 开始行动)
  142.   #--------------------------------------------------------------------------
  143.   def update_phase4_step2
  144.     # 如果不是强制行动
  145.     unless @active_battler.current_action.forcing
  146.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  147.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  148.         # 设置行动为攻击
  149.         @active_battler.current_action.kind = 0
  150.         @active_battler.current_action.basic = 0
  151.       end
  152.       # 限制为 [不能行动] 的情况下
  153.       if @active_battler.restriction == 4
  154.         # 清除行动强制对像的战斗者
  155.         $game_temp.forcing_battler = nil
  156.         # 移至步骤 1
  157.         @phase4_step = 1
  158.         return
  159.       end
  160.     end
  161.     # 清除对像战斗者
  162.     @target_battlers = []
  163.     # 行动种类分支
  164.     case @active_battler.current_action.kind
  165.     when 0  # 基本
  166.       make_basic_action_result
  167.     when 1  # 特技
  168.       make_skill_action_result
  169.     when 2  # 物品
  170.       make_item_action_result
  171.     end
  172.     # 移至步骤 3
  173.     if @phase4_step == 2
  174.       @phase4_step = 3
  175.     end
  176. #########菜刀王到此一游###################
  177.     # 公共事件 ID 有效的情况下
  178.     if @common_event_id > 0
  179.       # 设置事件
  180.       common_event = $data_common_events[@common_event_id]
  181.       $game_system.battle_interpreter.setup(common_event.list, 0)
  182.       @abcdef = true
  183.     end
  184. #########菜刀王到此一游##################
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 生成基本行动结果
  188.   #--------------------------------------------------------------------------
  189.   def make_basic_action_result
  190.     # 攻击的情况下
  191.     if @active_battler.current_action.basic == 0
  192.       # 设置攻击 ID
  193.       @animation1_id = @active_battler.animation1_id
  194.       @animation2_id = @active_battler.animation2_id
  195.       # 行动方的战斗者是敌人的情况下
  196.       if @active_battler.is_a?(Game_Enemy)
  197.         if @active_battler.restriction == 3
  198.           target = $game_troop.random_target_enemy
  199.         elsif @active_battler.restriction == 2
  200.           target = $game_party.random_target_actor
  201.         else
  202.           index = @active_battler.current_action.target_index
  203.           target = $game_party.smooth_target_actor(index)
  204.         end
  205.       end
  206.       # 行动方的战斗者是角色的情况下
  207.       if @active_battler.is_a?(Game_Actor)
  208.         if @active_battler.restriction == 3
  209.           target = $game_party.random_target_actor
  210.         elsif @active_battler.restriction == 2
  211.           target = $game_troop.random_target_enemy
  212.         else
  213.           index = @active_battler.current_action.target_index
  214.           target = $game_troop.smooth_target_enemy(index)
  215.         end
  216.       end
  217.       # 设置对像方的战斗者序列
  218.       @target_battlers = [target]
  219.       # 应用通常攻击效果
  220.       for target in @target_battlers
  221.         target.attack_effect(@active_battler)
  222.       end
  223.       return
  224.     end
  225.     # 防御的情况下
  226.     if @active_battler.current_action.basic == 1
  227.       # 帮助窗口显示"防御"
  228.       @help_window.set_text($data_system.words.guard, 1)
  229.       return
  230.     end
  231.     # 逃跑的情况下
  232.     if @active_battler.is_a?(Game_Enemy) and
  233.        @active_battler.current_action.basic == 2
  234.       #  帮助窗口显示"逃跑"
  235.       @help_window.set_text("逃跑", 1)
  236.       # 逃跑
  237.       @active_battler.escape
  238.       return
  239.     end
  240.     # 什么也不做的情况下
  241.     if @active_battler.current_action.basic == 3
  242.       # 清除强制行动对像的战斗者
  243.       $game_temp.forcing_battler = nil
  244.       # 移至步骤 1
  245.       @phase4_step = 1
  246.       return
  247.     end
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● 设置物品或特技对像方的战斗者
  251.   #     scope : 特技或者是物品的范围
  252.   #--------------------------------------------------------------------------
  253.   def set_target_battlers(scope)
  254.     # 行动方的战斗者是敌人的情况下
  255.     if @active_battler.is_a?(Game_Enemy)
  256.       # 效果范围分支
  257.       case scope
  258.       when 1  # 敌单体
  259.         index = @active_battler.current_action.target_index
  260.         @target_battlers.push($game_party.smooth_target_actor(index))
  261.       when 2  # 敌全体
  262.         for actor in $game_party.actors
  263.           if actor.exist?
  264.             @target_battlers.push(actor)
  265.           end
  266.         end
  267.       when 3  # 我方单体
  268.         index = @active_battler.current_action.target_index
  269.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  270.       when 4  # 我方全体
  271.         for enemy in $game_troop.enemies
  272.           if enemy.exist?
  273.             @target_battlers.push(enemy)
  274.           end
  275.         end
  276.       when 5  # 我方单体 (HP 0)
  277.         index = @active_battler.current_action.target_index
  278.         enemy = $game_troop.enemies[index]
  279.         if enemy != nil and enemy.hp0?
  280.           @target_battlers.push(enemy)
  281.         end
  282.       when 6  # 我方全体 (HP 0)
  283.         for enemy in $game_troop.enemies
  284.           if enemy != nil and enemy.hp0?
  285.             @target_battlers.push(enemy)
  286.           end
  287.         end
  288.       when 7  # 使用者
  289.         @target_battlers.push(@active_battler)
  290.       end
  291.     end
  292.     # 行动方的战斗者是角色的情况下
  293.     if @active_battler.is_a?(Game_Actor)
  294.       # 效果范围分支
  295.       case scope
  296.       when 1  # 敌单体
  297.         index = @active_battler.current_action.target_index
  298.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  299.       when 2  # 敌全体
  300.         for enemy in $game_troop.enemies
  301.           if enemy.exist?
  302.             @target_battlers.push(enemy)
  303.           end
  304.         end
  305.       when 3  # 我方单体
  306.         index = @active_battler.current_action.target_index
  307.         @target_battlers.push($game_party.smooth_target_actor(index))
  308.       when 4  # 我方全体
  309.         for actor in $game_party.actors
  310.           if actor.exist?
  311.             @target_battlers.push(actor)
  312.           end
  313.         end
  314.       when 5  # 我方单体 (HP 0)
  315.         index = @active_battler.current_action.target_index
  316.         actor = $game_party.actors[index]
  317.         if actor != nil and actor.hp0?
  318.           @target_battlers.push(actor)
  319.         end
  320.       when 6  # 我方全体 (HP 0)
  321.         for actor in $game_party.actors
  322.           if actor != nil and actor.hp0?
  323.             @target_battlers.push(actor)
  324.           end
  325.         end
  326.       when 7  # 使用者
  327.         @target_battlers.push(@active_battler)
  328.       end
  329.     end
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 生成特技行动结果
  333.   #--------------------------------------------------------------------------
  334.   def make_skill_action_result
  335.     # 获取特技
  336.     @skill = $data_skills[@active_battler.current_action.skill_id]
  337.     # 如果不是强制行动
  338.     unless @active_battler.current_action.forcing
  339.       # 因为 SP 耗尽而无法使用的情况下
  340.       unless @active_battler.skill_can_use?(@skill.id)
  341.         # 清除强制行动对像的战斗者
  342.         $game_temp.forcing_battler = nil
  343.         # 移至步骤 1
  344.         @phase4_step = 1
  345.         return
  346.       end
  347.     end
  348.     # 消耗 SP
  349.     @active_battler.sp -= @skill.sp_cost
  350.     # 刷新状态窗口
  351.     @status_window.refresh
  352.     # 在帮助窗口显示特技名
  353.     @help_window.set_text(@skill.name, 1)
  354.     # 设置动画 ID
  355.     @animation1_id = @skill.animation1_id
  356.     @animation2_id = @skill.animation2_id
  357.     # 设置公共事件 ID
  358.     @common_event_id = @skill.common_event_id
  359.     # 设置对像侧战斗者
  360.     set_target_battlers(@skill.scope)
  361.     # 应用特技效果
  362.     for target in @target_battlers
  363.       target.skill_effect(@active_battler, @skill)
  364.     end
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● 生成物品行动结果
  368.   #--------------------------------------------------------------------------
  369.   def make_item_action_result
  370.     # 获取物品
  371.     @item = $data_items[@active_battler.current_action.item_id]
  372.     # 因为物品耗尽而无法使用的情况下
  373.     unless $game_party.item_can_use?(@item.id)
  374.       # 移至步骤 1
  375.       @phase4_step = 1
  376.       return
  377.     end
  378.     # 消耗品的情况下
  379.     if @item.consumable
  380.       # 使用的物品减 1
  381.       $game_party.lose_item(@item.id, 1)
  382.     end
  383.     # 在帮助窗口显示物品名
  384.     @help_window.set_text(@item.name, 1)
  385.     # 设置动画 ID
  386.     @animation1_id = @item.animation1_id
  387.     @animation2_id = @item.animation2_id
  388.     # 设置公共事件 ID
  389.     @common_event_id = @item.common_event_id
  390.     # 确定对像
  391.     index = @active_battler.current_action.target_index
  392.     target = $game_party.smooth_target_actor(index)
  393.     # 设置对像侧战斗者
  394.     set_target_battlers(@item.scope)
  395.     # 应用物品效果
  396.     for target in @target_battlers
  397.       target.item_effect(@item)
  398.     end
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  402.   #--------------------------------------------------------------------------
  403.   def update_phase4_step3
  404.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  405.     if @animation1_id == 0
  406.       @active_battler.white_flash = true
  407.     else
  408.       @active_battler.animation_id = @animation1_id
  409.       @active_battler.animation_hit = true
  410.     end
  411.     # 移至步骤 4
  412.     @phase4_step = 4
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  416.   #--------------------------------------------------------------------------
  417.   def update_phase4_step4
  418.     # 对像方动画
  419.     for target in @target_battlers
  420.       target.animation_id = @animation2_id
  421.       target.animation_hit = (target.damage != "Miss")
  422.     end
  423.     # 限制动画长度、最低 8 帧
  424.     @wait_count = 8
  425.     # 移至步骤 5
  426.     @phase4_step = 5
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  430.   #--------------------------------------------------------------------------
  431.   def update_phase4_step5
  432.     # 隐藏帮助窗口
  433.     @help_window.visible = false
  434.     # 刷新状态窗口
  435.     @status_window.refresh
  436.     # 显示伤害
  437.     for target in @target_battlers
  438.       if target.damage != nil
  439.         target.damage_pop = true
  440.       end
  441.     end
  442.     # 移至步骤 6
  443.     @phase4_step = 6
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  447.   #--------------------------------------------------------------------------
  448.   def update_phase4_step6
  449.     # 清除强制行动对像的战斗者
  450.     $game_temp.forcing_battler = nil
  451.     @abcdef = false  #########菜刀王到此一游
  452.     # 移至步骤 1
  453.     @phase4_step = 1
  454.   end
  455. end
复制代码

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2007-6-3
帖子
801
3
 楼主| 发表于 2009-2-15 02:08:03 | 只看该作者
谢了{/dy}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2007-6-3
帖子
801
4
 楼主| 发表于 2009-2-15 02:11:00 | 只看该作者
{/gg}自我屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-17 14:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表