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

Project1

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

[已经过期] 战斗提前动画问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2008-11-8
帖子
145
跳转到指定楼层
1
发表于 2011-9-30 19:37:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我用了“提前动画”后打到别人将近没血的时候再攻击就没有了动画?而且公共事件也不执行了?
有人帮我修改一下吗?脚本如下:
  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.     if judge
  93.       # 胜利或者失败的情况下 : 过程结束
  94.       return
  95.     end
  96.     # 强制行动的战斗者不存在的情况下
  97.     if $game_temp.forcing_battler == nil
  98.       # 设置战斗事件
  99.       setup_battle_event
  100.       # 执行战斗事件中的情况下
  101.       if $game_system.battle_interpreter.running?
  102.         return
  103.       end
  104.     end
  105.     # 强制行动的战斗者存在的情况下
  106.     if $game_temp.forcing_battler != nil
  107.       # 在头部添加后移动
  108.       @action_battlers.delete($game_temp.forcing_battler)
  109.       @action_battlers.unshift($game_temp.forcing_battler)
  110.     end
  111.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  112.     if @action_battlers.size == 0
  113.       # 开始同伴命令回合
  114.       start_phase2
  115.       return
  116.     end
  117.     # 初始化动画 ID 和公共事件 ID
  118.     @animation1_id = 0
  119.     @animation2_id = 0
  120.     @common_event_id = 0
  121.     # 未行动的战斗者移动到序列的头部
  122.     @active_battler = @action_battlers.shift
  123.     # 如果已经在战斗之外的情况下
  124.     if @active_battler.index == nil
  125.       return
  126.     end
  127.     # 自然解除状态
  128.     @active_battler.remove_states_auto
  129.     # 刷新状态窗口
  130.     @status_window.refresh
  131.     # 移至步骤 2
  132.     #print "phase4_step = 2"
  133.     @phase4_step = 2
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 刷新画面 (主回合步骤 2 : 开始行动)
  137.   #--------------------------------------------------------------------------
  138.   def update_phase4_step2
  139.    
  140.     # 如果不是强制行动
  141.     unless @active_battler.current_action.forcing
  142.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  143.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  144.         # 设置行动为攻击
  145.         @active_battler.current_action.kind = 0
  146.         @active_battler.current_action.basic = 0
  147.       end
  148.       # 限制为 [不能行动] 的情况下
  149.       if @active_battler.restriction == 4
  150.         # 清除行动强制对像的战斗者
  151.         $game_temp.forcing_battler = nil
  152.         # 移至步骤 1
  153.         @phase4_step = 1
  154.         return
  155.       end
  156.     end
  157.     # 清除对像战斗者
  158.     @target_battlers = []
  159.     # 行动种类分支
  160.     case @active_battler.current_action.kind
  161.     when 0  # 基本
  162.       #if @active_battler.current_action.basic != 1
  163.         make_basic_action_result
  164.       #end
  165.     when 1  # 特技
  166.       make_skill_action_result
  167.     when 2  # 物品
  168.       
  169.       make_item_action_result
  170.     when 10  # 杂项菜单
  171.       ##jkka
  172.     when 11
  173.       make_throw_action_result
  174.     end
  175.     # 移至步骤 3
  176.     if @phase4_step == 2
  177.       @phase4_step = 3
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 生成基本行动结果
  182.   #--------------------------------------------------------------------------
  183.   def make_basic_action_result
  184.     $choice = 1
  185.     # 攻击的情况下
  186.     if @active_battler.current_action.basic == 0
  187.       # 设置攻击 ID
  188.       @animation1_id = @active_battler.animation1_id
  189.       @animation2_id = @active_battler.animation2_id
  190.       # 行动方的战斗者是敌人的情况下
  191.       if @active_battler.is_a?(Game_Enemy)
  192.         if @active_battler.restriction == 3
  193.           target = $game_troop.random_target_enemy  
  194.         elsif @active_battler.restriction == 2
  195.           target = $game_party.random_target_actor
  196.         else
  197.           index = @active_battler.current_action.target_index
  198.           target = $game_party.smooth_target_actor(index)
  199.         end
  200.       end
  201.       # 行动方的战斗者是角色的情况下
  202.       if @active_battler.is_a?(Game_Actor)
  203.         if @active_battler.restriction == 3
  204.           target = $game_party.random_target_actor
  205.         elsif @active_battler.restriction == 2
  206.           target = $game_troop.random_target_enemy
  207.         else
  208.           index = @active_battler.current_action.target_index
  209.           target = $game_troop.smooth_target_enemy(index)
  210.         end
  211.       end
  212.       # 设置对像方的战斗者序列
  213.       @target_battlers = [target]
  214.       # 应用通常攻击效果
  215.       for target in @target_battlers
  216.         target.attack_effect(@active_battler)
  217.       end
  218.       return
  219.     end
  220.     # 防御的情况下
  221.     if @active_battler.current_action.basic == 1
  222.       # ——回复。可以改为SP。
  223.         @active_battler.damage = -@active_battler.maxhp * 0.2
  224.         @active_battler.damage = -@active_battler.maxsp * 0.1
  225.         @active_battler.damage = @active_battler.damage.to_i
  226.         @active_battler.hp -= @active_battler.damage
  227.       # 回復值的表示
  228.         @target_battlers.push(@active_battler)
  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.     # 行动方的战斗者是敌人的情况下
  256.     if @active_battler.is_a?(Game_Enemy)
  257.       # 效果范围分支
  258.       case scope
  259.       when 1  # 敌单体
  260.         index = @active_battler.current_action.target_index
  261.         @target_battlers.push($game_party.smooth_target_actor(index))
  262.       when 2  # 敌全体
  263.         for actor in $game_party.actors
  264.           if actor.exist?
  265.             @target_battlers.push(actor)
  266.           end
  267.         end
  268.       when 3  # 我方单体
  269.         index = @active_battler.current_action.target_index
  270.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  271.       when 4  # 我方全体
  272.         for enemy in $game_troop.enemies
  273.           if enemy.exist?
  274.             @target_battlers.push(enemy)
  275.           end
  276.         end
  277.       when 5  # 我方单体 (HP 0)
  278.         index = @active_battler.current_action.target_index
  279.         enemy = $game_troop.enemies[index]
  280.         if enemy != nil and enemy.hp0?
  281.           @target_battlers.push(enemy)
  282.         end
  283.       when 6  # 我方全体 (HP 0)
  284.         for enemy in $game_troop.enemies
  285.           if enemy != nil and enemy.hp0?
  286.             @target_battlers.push(enemy)
  287.           end
  288.         end
  289.       when 7  # 使用者
  290.         @target_battlers.push(@active_battler)
  291.       end
  292.     end
  293.     # 行动方的战斗者是角色的情况下
  294.     if @active_battler.is_a?(Game_Actor)
  295.       # 效果范围分支
  296.       case scope
  297.       when 1  # 敌单体
  298.         index = @active_battler.current_action.target_index
  299.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  300.       when 2  # 敌全体
  301.         for enemy in $game_troop.enemies
  302.           if enemy.exist?
  303.             @target_battlers.push(enemy)
  304.           end
  305.         end
  306.       when 3  # 我方单体
  307.         index = @active_battler.current_action.target_index
  308.         @target_battlers.push($game_party.smooth_target_actor(index))
  309.       when 4  # 我方全体
  310.         for actor in $game_party.actors
  311.           if actor.exist?
  312.             @target_battlers.push(actor)
  313.           end
  314.         end
  315.       when 5  # 我方单体 (HP 0)
  316.         index = @active_battler.current_action.target_index
  317.         actor = $game_party.actors[index]
  318.         if actor != nil and actor.hp0?
  319.           @target_battlers.push(actor)
  320.         end
  321.       when 6  # 我方全体 (HP 0)
  322.         for actor in $game_party.actors
  323.           if actor != nil and actor.hp0?
  324.             @target_battlers.push(actor)
  325.           end
  326.         end
  327.       when 7  # 使用者
  328.         @target_battlers.push(@active_battler)
  329.       end
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 生成特技行动结果
  334.   #--------------------------------------------------------------------------
  335.   def make_skill_action_result
  336.     $choice = 2
  337.     # 获取特技
  338.     @skill = $data_skills[@active_battler.current_action.skill_id]
  339.     # 如果不是强制行动
  340.     unless @active_battler.current_action.forcing
  341.       # 因为 SP 耗尽而无法使用的情况下
  342.       unless @active_battler.skill_can_use?(@skill.id)
  343.         # 清除强制行动对像的战斗者
  344.         $game_temp.forcing_battler = nil
  345.         # 移至步骤 1
  346.         @phase4_step = 1
  347.         return
  348.       end
  349.     end
  350.     # 消耗 SP
  351.     @active_battler.sp -= @skill.sp_cost
  352.     # 刷新状态窗口
  353.     @status_window.refresh
  354.    
  355.     # 设置动画 ID
  356.     @animation1_id = @skill.animation1_id
  357.     @animation2_id = @skill.animation2_id
  358.     # 设置公共事件 ID
  359.     @common_event_id = @skill.common_event_id
  360.     # 设置对像侧战斗者
  361.     set_target_battlers(@skill.scope)
  362.    
  363.     ########### 公共事件 ID 有效的情况下###########(提前动画)
  364.     if @common_event_id > 0 and @common_event_id != 72
  365.       # 设置事件
  366.      
  367.       common_event = $data_common_events[@common_event_id]
  368.       $game_system.battle_interpreter.setup(common_event.list, 0)
  369.     end
  370.      
  371.     # 应用特技效果
  372.     for target in @target_battlers
  373.       target.skill_effect(@active_battler, @skill)
  374.     end
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ● 生成物品行动结果
  378.   #--------------------------------------------------------------------------
  379.   def make_item_action_result
  380.     $choice = 3
  381.    
  382.     if @throw_s == 1
  383.    
  384.     # 获取物品
  385.     data = @active_battler.current_action.item_id[0] ? $data_items : $data_weapons
  386.     @item = data[@active_battler.current_action.item_id[1]]
  387.     # 因为物品耗尽而无法使用的情况下
  388.     if @active_battler.current_action.item_id[0]
  389.       unless $game_party.item_can_use?(@item.id)
  390.         # 移至步骤 1
  391.         @phase4_step = 1
  392.         return
  393.       end
  394.       # 消耗品的情况下
  395.       if @item.consumable
  396.         # 使用的物品减 1
  397.         $game_party.lose_item(@item.id, 1)
  398.       end
  399.       # 设置公共事件 ID
  400.       @common_event_id = @item.common_event_id
  401.       
  402.       # 设置动画 ID
  403. @animation1_id = @item.animation1_id
  404.       @animation2_id = @item.animation2_id
  405.       # 确定对像
  406.       index = @active_battler.current_action.target_index
  407.       target = $game_party.smooth_target_actor(index)
  408.       # 设置对像侧战斗者
  409.       set_target_battlers(@item.scope)
  410.     else
  411.       
  412.       # 设置动画 ID
  413.             @animation1_id = @item.animation1_id
  414.       @animation2_id = @item.animation2_id
  415.       
  416.       # 确定对像
  417.       index = @active_battler.current_action.target_index
  418.       target = $game_party.smooth_target_actor(index)
  419.       # 设置对像侧战斗者
  420.       set_target_battlers(1)
  421.     end
  422.     if @common_event_id > 0 and @common_event_id != 72
  423.       # 设置事件
  424.       @animation1_id = 0
  425.       common_event = $data_common_events[@common_event_id]
  426.       $game_system.battle_interpreter.setup(common_event.list, 0)

  427.   end
  428.     # 应用物品效果
  429.     for target in @target_battlers
  430.       target.item_effect(@item)
  431.     end
  432.   #end
  433.    
  434. else
  435.    
  436.    
  437.     # 获取物品
  438.     @item = $data_items[@active_battler.current_action.item_id]
  439.     # 因为物品耗尽而无法使用的情况下
  440.     unless $game_party.item_can_use?(@item.id)
  441.       # 移至步骤 1
  442.       @phase4_step = 1
  443.       return
  444.     end
  445.     # 消耗品的情况下
  446.     #print "make"
  447.     if @item.consumable
  448.       # 使用的物品减 1
  449.       $game_party.lose_item(@item.id, 1)
  450.     end
  451.    
  452.     # 设置动画 ID
  453.     @animation1_id = @item.animation1_id  
  454.     @animation2_id = @item.animation2_id
  455.     # 设置公共事件 ID
  456.     @common_event_id = @item.common_event_id
  457.     # 确定对像
  458.     index = @active_battler.current_action.target_index
  459.     target = $game_party.smooth_target_actor(index)
  460.     # 设置对像侧战斗者
  461.     set_target_battlers(@item.scope)
  462.     ########### 公共事件 ID 有效的情况下###########(提前动画)
  463.     if @common_event_id > 0 and @common_event_id != 72
  464.       # 设置事件
  465.       @animation1_id = 0
  466.       common_event = $data_common_events[@common_event_id]
  467.       $game_system.battle_interpreter.setup(common_event.list, 0)

  468.   end
  469.     # 应用物品效果
  470.     for target in @target_battlers
  471.       target.item_effect(@item)
  472.     end
  473.   end
  474. end
  475.    

复制代码


keshom于2011-10-2 12:18补充以下内容:
会不会是scene battle 2的问题呢?有没有人回应我?
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-23 13:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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