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

Project1

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

[已经过期] CP战斗中途加入同伴出错

[复制链接]

Lv3.寻梦者

灌水局大小姐

梦石
0
星屑
4140
在线时间
1690 小时
注册时间
2012-3-10
帖子
2469
跳转到指定楼层
1
发表于 2012-3-10 13:57:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
战斗中加入队友提示 第164行出错!
“if (@cp_battler[battler].disposed? or @cp_battler[battler].opacity == 0) and battler.dead?”

这是怎么回事?求助
  1. #=============================================================================
  2. #★Zhong RMVX 半即时战斗系统默认1.01版★
  3. #-----------------------------------------------------------------------------
  4. #★Scene_CP核心部分参考自 : 神思  《战斗真位移》战斗系统
  5. #★作者: Zhong_zw
  6. #★联系方式: 66rpg.com论坛短信 或 [email protected]
  7. #★游戏中如若引用本脚本,请保留以上信息,并作相关说明.
  8. #☆如若转载本脚本请联系本人☆
  9. #=============================================================================
  10. #=============================================================================
  11. #★附赠功能:
  12. #角色cp素材与原版相同,亦可省略,默认自动应用角色相应行走图
  13. #=============================================================================
  14. #★1.01版更新内容
  15. #1、血条不刷新问题
  16. #2、敌人队伍事件不判断问题
  17. #★1.02版更新内容
  18. #1、连续伤害出错问题
  19. #2、cp条超出问题
  20. #=============================================================================
  21. #================================================
  22. #★战斗者类
  23. #================================================
  24. class Game_Battler
  25.    attr_accessor :cp
  26.    attr_accessor :cp_total
  27.    attr_accessor :cp_turn #角色能不行动时,计算角色实际cp爆满次数,用以代替回合,计算状态解除时机
  28.       
  29.    attr_accessor :slip_damage
  30.    attr_accessor :auto_damage
  31.   
  32.    
  33.    alias oldinitialize  initialize
  34.    def initialize
  35.      @cp = 0
  36.      @cp_total = false
  37.      @cp_turn = 0
  38.      @act_status = 0
  39.      @slip_damage = 0
  40.      @auto_damage = 0
  41.    
  42.      oldinitialize
  43.    end
  44.   def maxcp
  45.     return 100
  46.   end  
  47. #--------------------------------------------------------------------------
  48.   # ● 应用连续伤害效果
  49.   #--------------------------------------------------------------------------
  50.   def slip_damage_effect
  51.     if slip_damage? and @hp > 0
  52.       @hp_damage = apply_variance(maxhp / 10, 10)
  53.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  54.       @slip_damage = @hp_damage
  55.       self.hp -= @hp_damage
  56.     end
  57.   end

  58. end #class  
  59. #============================================================================
  60. #===============================================
  61. #★角色队伍类
  62. #===============================================
  63. class Game_Party < Game_Unit
  64. attr_accessor :actor_battler
  65. alias oldinitialize initialize
  66. def initialize
  67.   oldinitialize
  68.   @actor_battler = []
  69. end
  70. end #class  
  71. #================================================
  72. #★敌人队伍类
  73. #================================================
  74. class Game_Troop < Game_Unit
  75.   attr_accessor :enemy_battler
  76. alias  oldinitialize initialize
  77. def initialize
  78.    oldinitialize
  79.    @enemy_battler = []
  80. end  

  81. end#class
  82. #================================================
  83. #★cp条处理类
  84. #================================================

  85. class Scene_CP
  86.     attr_accessor :stop
  87.     attr_accessor :in_battler
  88.     attr_accessor :cp_battler
  89.     BATTLE_SPEED = 0.8
  90.     def initialize
  91.       @stop = false
  92.       @all_agi = 0
  93.       @v =  Viewport.new(0, 0, 544, 90)
  94.       @count = 0
  95.       @cpline = Sprite.new(@v)
  96.       @cpline.bitmap = Bitmap.new(544,416)
  97.       bitmap = Bitmap.new("Graphics/system/cp条")
  98.       @cpline.bitmap.blt(105,8,bitmap,bitmap.rect)
  99.       @cp_battler = {}
  100.       for battler in $game_party.members + $game_troop.members
  101.         @all_agi += battler.agi
  102.         @cp_battler[battler] = Sprite_cpbattler.new
  103.         if battler.is_a?(Game_Actor)
  104.           name = battler.id.to_s + "_cp"
  105.           if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  106.               bitmap = Bitmap.new("Graphics/system/#{name}")
  107.               rect = bitmap.rect
  108.               @cp_battler[battler].bitmap = bitmap
  109.           else
  110.               
  111.                
  112.                bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
  113.                 sign = battler.character_name[/^[\!\$]./]
  114.                 if sign != nil and sign.include?(')
  115.                   cw = bitmap.width / 3
  116.                   ch = bitmap.height / 4
  117.                   
  118.                 else
  119.                   cw = bitmap.width / 12
  120.                   ch = bitmap.height / 8
  121.                   
  122.                 end
  123.                  n = battler.character_index
  124.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
  125.                
  126.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  127.           end
  128.          
  129.          
  130.           @cp_battler[battler].bitmap.blt(0, 0,bitmap,rect)
  131.          
  132.         else
  133.           name = battler.original_name + "_敌人cp"
  134.           if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  135.              @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  136.           else
  137.              @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
  138.           end
  139.              @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
  140.         end  
  141.         @cp_battler[battler].z = 101
  142.         @cp_battler[battler].visible = false
  143.         
  144.       end
  145.     end   
  146.    
  147.     #===========================================
  148.    
  149.    
  150.    
  151.    
  152.     #===========================================
  153.    
  154.    
  155.     def update
  156.      
  157.       return if @stop
  158.       
  159.       
  160.       for battler in $game_party.members + $game_troop.members
  161.         if (@cp_battler[battler].disposed? or @cp_battler[battler].opacity == 0) and battler.dead?
  162.           @cp_battler.delete(@cp_battler[battler])
  163.           next
  164.         end  
  165.         if battler.dead?
  166.          if  @cp_battler.include?(battler)
  167.              @cp_battler[battler].collapse = true
  168.             
  169.           end   
  170.           battler.cp = 0
  171.           next
  172.         end  
  173.        battler.cp = [[battler.cp + BATTLE_SPEED*10*battler.agi / @all_agi,0].max,battler.maxcp].min if battler.movable?
  174.        battler.cp_turn = [[battler.cp_turn+BATTLE_SPEED*10*battler.agi / @all_agi, 0].max,battler.maxcp].min
  175.        if battler.cp == battler.maxcp
  176.            if battler.is_a?(Game_Actor)
  177.               name = battler.id.to_s + "_a_cp"
  178.               if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  179.                bitmap = Bitmap.new("Graphics/system/#{name}")
  180.                rect = bitmap.rect
  181.                @cp_battler[battler].bitmap = bitmap
  182.               else
  183.                
  184.                 bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
  185.                 sign = battler.character_name[/^[\!\$]./]
  186.                 if sign != nil and sign.include?(')
  187.                   cw = bitmap.width / 3
  188.                   ch = bitmap.height / 4
  189.                 else
  190.                   cw = bitmap.width / 12
  191.                   ch = bitmap.height / 8
  192.                 end
  193.                  n = battler.character_index
  194.                  
  195.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  196.                
  197.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  198.                  
  199.               end
  200.               
  201.               @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
  202.            
  203.           else
  204.             name = battler.original_name + "_a_cp"
  205.             if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  206.             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  207.             else
  208.             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/a_敌人cp")
  209.             end
  210.             @cp_battler[battler].bitmap.blt(80,60,  @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
  211.           end  
  212.             @cp_battler[battler].z = 101
  213.             battler.cp_total = true
  214.       elsif battler.cp_total == true
  215.           if battler.is_a?(Game_Actor)
  216.              name = battler.id.to_s + "_cp"
  217.              if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  218.               bitmap = Bitmap.new("Graphics/system/#{name}")
  219.               rect = bitmap.rect
  220.               @cp_battler[battler].bitmap = bitmap
  221.              else
  222.               
  223.                 bitmap =  Bitmap.new("Graphics/Characters/#{battler.character_name}")
  224.                 sign = battler.character_name[/^[\!\$]./]
  225.                 if sign != nil and sign.include?(')
  226.                   cw = bitmap.width / 3
  227.                   ch = bitmap.height / 4
  228.                 else
  229.                   cw = bitmap.width / 12
  230.                   ch = bitmap.height / 8
  231.                 end
  232.                  n = battler.character_index
  233.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
  234.                  
  235.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  236.                  
  237.                  
  238.               end
  239.             
  240.              @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
  241.             
  242.           else
  243.                 name = battler.original_name + "_敌人cp"
  244.              if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  245.                  @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  246.                
  247.              else
  248.                  @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
  249.                
  250.              end
  251.                
  252.                @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap, @cp_battler[battler].bitmap.rect)
  253.             end
  254.             battler.cp_total = false
  255.             @cp_battler[battler].z = 105
  256.             
  257.       end
  258.          
  259.       @cp_battler[battler].visible = true if @cp_battler[battler].visible == false
  260.       @cp_battler[battler].opacity = 255
  261.       @cp_battler[battler].y = 30
  262.       @cp_battler[battler].x = 95+300*battler.cp/battler.maxcp
  263.       if battler.cp_turn == battler.maxcp
  264.         #=================================
  265.         last_st = battler.states
  266.         #=================================
  267.         battler.remove_states_auto unless battler.movable?
  268.         battler.slip_damage_effect
  269.         battler.do_auto_recovery if battler.is_a?(Game_Actor)
  270.         #====================================
  271.         if battler.states != last_st
  272.           $scene.display_state_changes(battler)
  273.         
  274.         end
  275.         #====================================
  276.         
  277.         battler.cp_turn = 0
  278.       end  
  279.       if battler.cp == battler.maxcp
  280.          if battler.is_a?(Game_Actor)
  281.            $game_party.actor_battler.push(battler)
  282.          else
  283.            battler.make_action
  284.            $game_troop.enemy_battler.push(battler)
  285.            battler.make_action
  286.           end   
  287.       else
  288.         next
  289.       end  
  290.       
  291.       
  292.       
  293.    end     
  294. end

  295.   def dispose
  296.     for j in 0..25
  297.     @cpline.opacity -= 10
  298.     for i in @cp_battler.values
  299.       unless i.disposed?
  300.       i.opacity -= 10
  301.       end
  302.     end  
  303.      Graphics.update
  304.     end  
  305.     @v.dispose
  306.     @cpline.dispose
  307.     for i in @cp_battler.values
  308.       i.dispose
  309.     end
  310.   end  
  311. end
  312.   
  313.   
  314.   
  315.   
  316.   
  317.   
  318.   
  319.   
  320.   class Sprite_cpbattler < Sprite
  321.     attr_accessor :collapse
  322.    
  323.     def initialize (viewport = nil)
  324.       super (viewport)
  325.      
  326.       @effect_duration = 0        
  327.       @collapse = false
  328.     end
  329.     def update
  330.        super
  331.   
  332.      if self.collapse == true and self.opacity != 0
  333.    
  334.       @effect_type = 5
  335.       @effect_duration = 48
  336.       self.color.set(255, 128, 128, 128)
  337.       for i in 0..48
  338.       self.opacity = 256 - (48 - @effect_duration) * 6
  339.       if self.opacity == 0
  340.    
  341.       break
  342.       end  
  343.       Graphics.update
  344.       @effect_duration -= 1
  345.       end
  346.      
  347.       self.collapse = false
  348.       self.color.set(255,255,255,5)
  349.      end
  350.      
  351.     end
  352.    
  353. def dispose
  354.      if self.bitmap != nil
  355.       self.bitmap.dispose
  356.      end
  357.    
  358.     super
  359.   end
  360.       
  361. end  

  362. #==========================================================================
  363. #
  364. #==========================================================================
  365. class Scene_Battle < Scene_Base
  366. #--------------------------------------------------------------------------
  367.   # ● 开始处理
  368.   #--------------------------------------------------------------------------
  369.   def start
  370.     super
  371.     $game_temp.in_battle = true
  372.     @spriteset = Spriteset_Battle.new
  373.     @message_window = Window_BattleMessage.new
  374.     @action_battlers = []
  375.     @cp_battle = Scene_CP.new
  376.     @cp_battle.stop = false
  377.     create_info_viewport
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 更新画面
  381.   #--------------------------------------------------------------------------
  382.   def update
  383.     super
  384.     update_basic(true)
  385.     update_info_viewport                  # 更新显示信息的视区
  386.     if $game_message.visible
  387.       @info_viewport.visible = false
  388.       @message_window.visible = true
  389.     end
  390.     unless $game_message.visible          # 在显示消息以外的情况
  391.       return if judge_win_loss            # 判断胜败
  392.       update_scene_change
  393.       if @target_enemy_window != nil
  394.         update_target_enemy_selection     # 选择敌方对象
  395.       elsif @target_actor_window != nil
  396.         update_target_actor_selection     # 选择对象角色
  397.       elsif @skill_window != nil
  398.         update_skill_selection            # 选择特技
  399.       elsif @item_window != nil
  400.         update_item_selection             # 选择物品
  401.       elsif @party_command_window.active
  402.         update_party_command_selection    # 选择同伴指令
  403.       elsif @actor_command_window.active
  404.         update_actor_command_selection    # 选择角色指令
  405.       #=================================
  406.       elsif @cp_battle.stop ==  false
  407.         active_battler_update
  408.       #=================================  
  409.         
  410.       else
  411.         process_battle_event              # 战斗处理
  412.         process_action                    # 战斗行动
  413.         process_battle_event              # 处理战斗事件
  414.       end
  415.     end
  416.   end

  417.   #=============================================
  418.   #★角色回合的处理函数
  419.   #=============================================
  420.   
  421.   
  422.   def next_actor
  423.    
  424.    
  425.     @info_viewport.visible = true
  426.    
  427.     @message_window.visible = true
  428.     @status_window.update
  429.   
  430.     loop do
  431.    
  432.       if @actor_index == @actor_battler.size - 1
  433.         
  434.         start_main
  435.         return
  436.         
  437.       end   
  438.       
  439.       @actor_index += 1
  440.       
  441.       index = 0
  442.       for battler in $game_party.members
  443.         if battler == @actor_battler[@actor_index]
  444.           break
  445.         else
  446.           index += 1
  447.         end
  448.       end  
  449.       @status_window.index = index
  450.      
  451.       
  452.       @active_battler = @actor_battler[@actor_index]
  453.      
  454.      
  455.      
  456.      
  457.       if @active_battler.auto_battle
  458.         @active_battler.make_action
  459.         next
  460.       end
  461.       break if @active_battler.inputable?
  462.     end
  463.   
  464.     start_party_command
  465.   end
  466.   
  467.   #====================================================
  468.   #★开始角色战斗与逃跑选择
  469.   #====================================================
  470.   def start_party_command
  471.       @status_window.refresh
  472.       @party_command_window.active = true
  473.       @party_command_window.index = 0
  474.       @actor_command_window.active = false
  475.       @message_window.visible = false
  476.       
  477.   
  478.   end
  479.   #=====================================================
  480.   #--------------------------------------------------------------------------
  481.   # ● 更新同伴战斗指令
  482.   #--------------------------------------------------------------------------
  483.   def update_party_command_selection
  484.     if Input.trigger?(Input::C)
  485.       case @party_command_window.index
  486.       when 0  # 战斗
  487.         Sound.play_decision
  488.       
  489.         start_actor_command_selection
  490.       when 1  # 逃跑
  491.         if $game_troop.can_escape == false
  492.           Sound.play_buzzer
  493.           return
  494.         end
  495.         Sound.play_decision
  496.         process_escape
  497.       end
  498.     end
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● 开始选择角色指令
  502.   #--------------------------------------------------------------------------
  503.   def start_actor_command_selection
  504.     @party_command_window.active = false
  505.     @actor_command_window.setup(@active_battler)
  506.     @actor_command_window.active = true
  507.     @actor_command_window.index = 0
  508.    

  509.   end
  510.   #==============================================
  511.   #★指令窗口刷新
  512.   #==============================================
  513.    def update_actor_command_selection
  514.    
  515.     if Input.trigger?(Input::B)
  516.       Sound.play_cancel
  517.       start_party_command
  518.     elsif Input.trigger?(Input::C)
  519.       case @actor_command_window.index
  520.       when 0  # 攻击
  521.         Sound.play_decision
  522.         @active_battler.action.set_attack
  523.         start_target_enemy_selection
  524.       when 1  # 特技
  525.         Sound.play_decision
  526.         start_skill_selection
  527.       when 2  # 防御
  528.         Sound.play_decision
  529.         @active_battler.action.set_guard
  530.         
  531.         @active_battler.cp = 0
  532.         next_actor
  533.       when 3  # 物品
  534.         Sound.play_decision
  535.         start_item_selection
  536.       
  537.       when 4 #逃跑
  538.         if $game_troop.can_escape == false
  539.           Sound.play_buzzer
  540.           return
  541.         end
  542.         Sound.play_decision
  543.         process_escape
  544.     end
  545.     end
  546.   end
  547.   #========================================================
  548.   #--------------------------------------------------------------------------
  549.   # ● 更新选择对象敌方角色
  550.   #--------------------------------------------------------------------------
  551.   def update_target_enemy_selection
  552.     @target_enemy_window.update
  553.     if Input.trigger?(Input::B)
  554.       Sound.play_cancel
  555.       end_target_enemy_selection
  556.     elsif Input.trigger?(Input::C)
  557.       Sound.play_decision
  558.       @active_battler.action.target_index = @target_enemy_window.enemy.index
  559.       end_target_enemy_selection
  560.       end_skill_selection
  561.       end_item_selection
  562.      
  563.       #============================
  564.        @active_battler.cp = 0
  565.       #============================
  566.        next_actor
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 更新对象角色选择
  571.   #--------------------------------------------------------------------------
  572.   def update_target_actor_selection
  573.     @target_actor_window.update
  574.     if Input.trigger?(Input::B)
  575.       Sound.play_cancel
  576.       end_target_actor_selection
  577.     elsif Input.trigger?(Input::C)
  578.       Sound.play_decision
  579.       @active_battler.action.target_index = @target_actor_window.index
  580.       end_target_actor_selection
  581.       end_skill_selection
  582.       end_item_selection
  583.      
  584.       #=========================
  585.       @active_battler.cp = 0
  586.       #=========================
  587.        next_actor
  588.     end
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 确定特技
  592.   #--------------------------------------------------------------------------
  593.   def determine_skill
  594.     @active_battler.action.set_skill(@skill.id)
  595.     @skill_window.active = false
  596.     if @skill.need_selection?
  597.       if @skill.for_opponent?
  598.         start_target_enemy_selection
  599.       else
  600.         start_target_actor_selection
  601.       end
  602.     else
  603.       end_skill_selection
  604.       
  605.       #=========================
  606.       @active_battler.cp = 0
  607.       #=========================
  608.       @party_command_window.active = false
  609.       next_actor
  610.     end
  611.   end
  612.   #=========================================
  613.   #★物品使用决定  处理
  614.   #=========================================
  615.   
  616.   
  617.   def determine_item
  618.     @active_battler.action.set_item(@item.id)
  619.     @item_window.active = false
  620.     if @item.need_selection?
  621.       if @item.for_opponent?
  622.         start_target_enemy_selection
  623.       else
  624.         start_target_actor_selection
  625.       end
  626.     else
  627.       end_item_selection
  628.       
  629.        @active_battler.cp = 0
  630.       next_actor
  631.     end
  632.   end
  633.   #--------------------------------------------------------------------------
  634.   # ● 开始处理战斗
  635.   #--------------------------------------------------------------------------
  636.   def process_battle_start
  637.     @message_window.clear
  638.     wait(10)
  639.     for name in $game_troop.enemy_names
  640.       text = sprintf(Vocab::Emerge, name)
  641.       $game_message.texts.push(text)
  642.     end
  643.     if $game_troop.preemptive
  644.       text = sprintf(Vocab::Preemptive, $game_party.name)
  645.       $game_message.texts.push(text)
  646.        for battler in $game_party.members
  647.          battler.cp = battler.maxcp
  648.        end  
  649.        $game_troop.preemptive = false
  650.     elsif $game_troop.surprise
  651.       text = sprintf(Vocab::Surprise, $game_party.name)
  652.       $game_message.texts.push(text)
  653.       for battler in $game_troop.members
  654.         battler.cp = battler.maxcp
  655.       end
  656.       $game_troop.surprise = false
  657.     end
  658.     wait_for_message
  659.     @message_window.clear
  660.     @message_window.visible = false
  661.     make_escape_ratio
  662.     process_battle_event
  663.    
  664.     #=====================
  665.    
  666.     @status_window.index = @actor_index = -1
  667.     @cp_battle.stop = false
  668.     #=====================
  669.   end
  670.   #--------------------------------------------------------------------------
  671.   # ● 处理逃跑
  672.   #--------------------------------------------------------------------------
  673.   def process_escape
  674.     @info_viewport.visible = false
  675.     @party_command_window.active = false
  676.     @message_window.visible = true
  677.     text = sprintf(Vocab::EscapeStart, $game_party.name)
  678.     $game_message.texts.push(text)
  679.     if $game_troop.preemptive
  680.       success = true
  681.     else
  682.       success = (rand(100) < @escape_ratio)
  683.     end
  684.     Sound.play_escape
  685.     if success
  686.       #=============================
  687.       @cp_battle.dispose
  688.       #=============================
  689.       for battler in $game_party.members
  690.         battler.cp = 0
  691.       end  
  692.       wait_for_message
  693.       battle_end(1)
  694.     else
  695.       @escape_ratio += 10
  696.       @active_battler.cp = 0
  697.       $game_message.texts.push('\.' + Vocab::EscapeFailure)
  698.       wait_for_message
  699.       @active_battler.action.clear
  700.       @message_window.visible = false
  701.       next_actor
  702.     end
  703.   end
  704.    #--------------------------------------------------------------------------
  705.   # ● 处理胜利
  706.   #--------------------------------------------------------------------------
  707.   def process_victory
  708.     @info_viewport.visible = false
  709.     @message_window.visible = true
  710.     RPG::BGM.stop
  711.     $game_system.battle_end_me.play
  712.      for battler in $game_troop.members
  713.       if battler.dead?
  714.          if  @cp_battle.cp_battler.include?(battler)
  715.               @cp_battle.cp_battler[battler].collapse = true
  716.               
  717.               next
  718.           end  
  719.        end     
  720.     end
  721.      @cp_battle.cp_battler.each{|key,value|
  722.       if value.disposed?
  723.         @cp_battler.delete(key)
  724.         next
  725.       end
  726.       value.update}
  727.     #=============================
  728.     @cp_battle.dispose
  729.     #=============================
  730.    for battler in $game_party.members
  731.      battler.cp = 0
  732.     end
  733.    
  734.    
  735.     unless $BTEST
  736.       $game_temp.map_bgm.play
  737.       $game_temp.map_bgs.play
  738.     end
  739.     display_exp_and_gold
  740.     display_drop_items
  741.     display_level_up
  742.     battle_end(0)
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ● 失败处理
  746.   #--------------------------------------------------------------------------
  747.   def process_defeat
  748.     @info_viewport.visible = false
  749.     @message_window.visible = true
  750.     @cp_battle.dispose
  751.     for battler in $game_party.members + $game_troop.members
  752.      battler.cp = 0
  753.     end
  754.     text = sprintf(Vocab::Defeat, $game_party.name)
  755.     $game_message.texts.push(text)
  756.     wait_for_message
  757.     battle_end(2)
  758.   end
  759.   #=============================================================================
  760.   #★CP战斗的主要刷新★
  761.   #=============================================================================
  762.   
  763.    def active_battler_update
  764.    
  765.     #===================================
  766.     @actor_battler = []
  767.     @enemy_battler = []
  768.     $game_party.actor_battler = []
  769.     $game_troop.enemy_battler = []
  770.     #===================================
  771.     @cp_battle.update
  772.     @actor_battler = $game_party.actor_battler
  773.     @enemy_battler = $game_troop.enemy_battler
  774.    
  775.     if @actor_battler.size != 0
  776.       @cp_battle.stop = true
  777.       next_actor
  778.       Audio.se_play("Audio/SE/Jump2",100,100)
  779.     elsif @enemy_battler.size != 0  
  780.    
  781.     #================
  782.     @cp_battle.stop = true
  783.     start_main
  784.     #================
  785.    
  786.    
  787.      
  788.    end
  789.   
  790. end
  791. #--------------------------------------------------------------------------
  792.   # ● 开始执行战斗处理
  793.   #--------------------------------------------------------------------------
  794.   def start_main
  795.    
  796.     @info_viewport.visible = false
  797.     @info_viewport.ox = 0
  798.     @message_window.visible = true
  799.   
  800.     @actor_command_window.active = false
  801.     @status_window.index = @actor_index = -1
  802.     @active_battler = nil
  803.     @message_window.clear
  804.     $game_troop.make_actions
  805.     make_action_orders
  806.     wait(20)
  807.     #=============================
  808.   
  809.    while @action_battlers.size != 0 and judge_win_loss == false
  810.      
  811.      process_action
  812.      process_battle_event
  813.    end
  814.    @cp_battle.stop = false
  815.    #=============================
  816.    
  817.    
  818.   end
  819. #=====================================
  820. #★行动顺序生成
  821. #=====================================


  822. def make_action_orders
  823.     @action_battlers = []
  824.    
  825.     unless $game_troop.surprise
  826.       @action_battlers += @actor_battler if @actor_battler.size != 0
  827.     end
  828.    
  829.    
  830.     unless $game_troop.preemptive
  831.       @action_battlers += @enemy_battler if @enemy_battler.size != 0
  832.     end
  833.     for battler in @action_battlers
  834.       battler.action.make_speed
  835.     end
  836.     @action_battlers.sort! do |a,b|
  837.       b.action.speed - a.action.speed
  838.     end
  839.   end
  840.   #--------------------------------------------------------------------------
  841.   # ● 处理战斗行动
  842.   #--------------------------------------------------------------------------
  843.   def process_action
  844.     return if judge_win_loss
  845.     return if $game_temp.next_scene != nil
  846.     set_next_active_battler
  847.     return if @active_battler == nil
  848.     return if @active_battler.dead?
  849.     @message_window.clear
  850.     wait(5)
  851.     @active_battler.white_flash = true
  852.     unless @active_battler.action.forcing
  853.       @active_battler.action.prepare
  854.     end
  855.     if @active_battler.action.valid?
  856.       execute_action
  857.     end
  858.     unless @active_battler.action.forcing
  859.       @message_window.clear
  860.       remove_states_auto
  861.       display_current_state
  862.     end
  863.     @active_battler.white_flash = false
  864.     @message_window.clear
  865.   end
  866.   #--------------------------------------------------------------------------
  867.   # ● 执行战斗行动: 攻击
  868.   #--------------------------------------------------------------------------
  869.   def execute_action_attack
  870.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  871.     @message_window.add_instant_text(text)
  872.     targets = @active_battler.action.make_targets
  873.     display_attack_animation(targets)
  874.     wait(20)
  875.     for target in targets
  876.       target.attack_effect(@active_battler)
  877.       display_action_effects(target)
  878.     end
  879.     #=====================
  880.     @active_battler.cp = 0
  881.     #=====================
  882.    
  883.   end
  884.   #--------------------------------------------------------------------------
  885.   # ● 执行战斗行动 : 防御
  886.   #--------------------------------------------------------------------------
  887.   def execute_action_guard
  888.     text = sprintf(Vocab::DoGuard, @active_battler.name)
  889.     @message_window.add_instant_text(text)
  890.     wait(45)
  891.     #=====================
  892.     @active_battler.cp = 0
  893.     #=====================
  894.   end
  895.   #--------------------------------------------------------------------------
  896.   # ● 执行战斗行动 : 逃走
  897.   #--------------------------------------------------------------------------
  898.   def execute_action_escape
  899.     text = sprintf(Vocab::DoEscape, @active_battler.name)
  900.     @message_window.add_instant_text(text)
  901.     @active_battler.escape
  902.     Sound.play_escape
  903.     wait(45)
  904.     #=====================
  905.     @active_battler.cp = 0
  906.     #=====================
  907.    
  908.   end
  909.   #--------------------------------------------------------------------------
  910.   # ● 执行战斗行动 : 待机
  911.   #--------------------------------------------------------------------------
  912.   def execute_action_wait
  913.     text = sprintf(Vocab::DoWait, @active_battler.name)
  914.     @message_window.add_instant_text(text)
  915.     wait(45)
  916.     #=====================
  917.     @active_battler.cp = 0
  918.     #=====================
  919.   end
  920.   #--------------------------------------------------------------------------
  921.   # ● 执行战斗行动 : 特技
  922.   #--------------------------------------------------------------------------
  923.   def execute_action_skill
  924.     skill = @active_battler.action.skill
  925.     text = @active_battler.name + skill.message1
  926.     @message_window.add_instant_text(text)
  927.     unless skill.message2.empty?
  928.       wait(10)
  929.       @message_window.add_instant_text(skill.message2)
  930.     end
  931.     targets = @active_battler.action.make_targets
  932.     display_animation(targets, skill.animation_id)
  933.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  934.     $game_temp.common_event_id = skill.common_event_id
  935.     for target in targets
  936.       target.skill_effect(@active_battler, skill)
  937.       display_action_effects(target, skill)
  938.     end
  939.     #=====================
  940.     @active_battler.cp = 0
  941.     #=====================
  942.    
  943.   end
  944.    #--------------------------------------------------------------------------
  945.   # ● 执行战斗行动 : 物品
  946.   #--------------------------------------------------------------------------
  947.   def execute_action_item
  948.     item = @active_battler.action.item
  949.     text = sprintf(Vocab::UseItem, @active_battler.name, item.name)
  950.     @message_window.add_instant_text(text)
  951.     targets = @active_battler.action.make_targets
  952.     display_animation(targets, item.animation_id)
  953.     $game_party.consume_item(item)
  954.     $game_temp.common_event_id = item.common_event_id
  955.     for target in targets
  956.       target.item_effect(@active_battler, item)
  957.       display_action_effects(target, item)
  958.     end
  959.     #=====================
  960.     @active_battler.cp = 0
  961.     #=====================
  962.    
  963.    
  964.   end
  965.   #--------------------------------------------------------------------------
  966.   # ● 显示 HP 伤害
  967.   #     target : 对象者
  968.   #     obj    : 特技或者物品
  969.   #--------------------------------------------------------------------------
  970.   def display_hp_damage(target, obj = nil)
  971.     if target.hp_damage == 0                # 空伤害
  972.       return if obj != nil and obj.damage_to_mp
  973.       return if obj != nil and obj.base_damage == 0
  974.       fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  975.       text = sprintf(fmt, target.name)
  976.     elsif target.absorbed                   # 吸收
  977.       fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  978.       text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)
  979.       target.cp -= target.hp_damage/100
  980.       target.cp = [target.cp,0].max
  981.       @cp_battle.cp_battler[target].x = 95+300*target.cp/target.maxcp
  982.      if target.dead?
  983.          @cp_battle.cp_battler[target].collapse = true
  984.          target.cp = 0
  985.          @cp_battle.cp_battler[target].update
  986.       end
  987.       
  988.     elsif target.hp_damage > 0              # 伤害
  989.       if target.actor?
  990.         text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
  991.         Sound.play_actor_damage
  992.         $game_troop.screen.start_shake(5, 5, 10)
  993.       else
  994.         text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)
  995.         Sound.play_enemy_damage
  996.         target.blink = true
  997.       end
  998.       target.cp -= target.hp_damage/100
  999.       target.cp = [target.cp,0].max
  1000.       @cp_battle.cp_battler[target].x = 95+300*target.cp/target.maxcp
  1001.       if target.dead?
  1002.          @cp_battle.cp_battler[target].collapse = true
  1003.          target.cp = 0
  1004.          @cp_battle.cp_battler[target].update
  1005.       end
  1006.       
  1007.     else                                    # 回复
  1008.       fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  1009.       text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)
  1010.       Sound.play_recovery
  1011.     end
  1012.     @message_window.add_instant_text(text)
  1013.     wait(30)
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● 显示 MP 伤害
  1017.   #     target : 对象者
  1018.   #     obj    : 特技或者物品
  1019.   #--------------------------------------------------------------------------
  1020.   def display_mp_damage(target, obj = nil)
  1021.     return if target.dead?
  1022.     return if target.mp_damage == 0
  1023.     if target.absorbed                      # 吸收
  1024.       fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  1025.       text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage)
  1026.       target.cp -= target.mp_damage/100
  1027.       target.cp = [target.cp,0].max
  1028.       @cp_battle.cp_battler[target].x = 95+300*target.cp/target.maxcp
  1029.     elsif target.mp_damage > 0              # 伤害
  1030.       fmt = target.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
  1031.       text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage)
  1032.       target.cp -= target.mp_damage/100
  1033.       target.cp = [target.cp,0].max
  1034.       @cp_battle.cp_battler[target].x = 95+300*target.cp/target.maxcp
  1035.       
  1036.     else                                    # 回复
  1037.       fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  1038.       text = sprintf(fmt, target.name, Vocab::mp, -target.mp_damage)
  1039.       Sound.play_recovery
  1040.     end
  1041.     @message_window.add_instant_text(text)
  1042.     wait(30)
  1043.   end
  1044.   
  1045.   
  1046. end #class


  1047. #======================================================
  1048. #★角色处理类
  1049. #======================================================
  1050. class Game_Actor < Game_Battler
  1051.   #--------------------------------------------------------------------------
  1052.   # ● 执行自动回复 (回合结束时调用)
  1053.   #--------------------------------------------------------------------------
  1054.   def do_auto_recovery
  1055.     if auto_hp_recover and not dead?
  1056.       self.hp += maxhp / 20
  1057.       @auto_damage = maxhp / 20
  1058.     end
  1059.   end
  1060.   
  1061. end #class
复制代码

评分

参与人数 1星屑 +200 收起 理由
「旅」 + 200 返回积分~

查看全部评分

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

本版积分规则

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

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

GMT+8, 2024-12-23 14:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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