Project1

标题: 好奇葩的问题!!关于半即时战斗系统1.03b [打印本页]

作者: 飒沓拂柳絮    时间: 2012-12-22 23:21
标题: 好奇葩的问题!!关于半即时战斗系统1.03b
急求啊,这个系统很好,但是存在一个奇葩的问题就是:自己给自己回血或是回蓝不会跳出数字显示,而给别人回则是正常显示,是否是脚本中没有考虑自己给自己造成伤害的情况呢?(如果回复也是一种伤害的话)
脚本如下,求哪位大神抽空改一下吧,话说这脚本应该用的人挺多的了吧,求造福群众啊啊~~~万分感谢啊啊
  1. #=============================================================================
  2. #★Zhong RMVX 半即时战斗系统 1.03b版★
  3. #-----------------------------------------------------------------------------
  4. #★Scene_CP核心部分参考自 : 神思  《战斗真位移》战斗系统
  5. #★作者: Zhong_zw
  6. #★联系方式: 66rpg.com论坛短信 或 [email protected]
  7. #★游戏中如若引用本脚本,请保留以上信息,并作相关说明.
  8. #☆如若转载本脚本请联系本人☆
  9. #=============================================================================
  10. #=============================================================================
  11. #☆1.01版修正问题:
  12. #1、物品、特技窗口选择我方人物时,头像重叠
  13. #2、连续伤害及自动回复效果无效。
  14. #☆1.02版修正问题:
  15. #1、减少刷新次数,提高速度
  16. #2、修正被打击时有可能退到cp槽外
  17. #☆1.02a版修正问题:
  18. #1、复活问题.
  19. #2、头像刷新问题.
  20. #☆1.03版更新内容:
  21. #1、地图名称与战斗背景的对应关系可在哈希表中设置
  22. #2、如无相应战斗背景直接采用默认战斗背景
  23. #3、角色CP图缺失时,用角色相应行走图代替
  24. #☆1.03a版更新内容:
  25. #1、物品经验得失窗口有时图标显示错误的问题
  26. #★注:旧版本的只要把脚本中“class Window_egi<Window_Base”这个类完整的覆盖原来就行了。
  27. #☆1.03b版更新内容:
  28. #1、图标战斗指令窗口刷新的问题
  29. #2、修正战斗事件响应的部分功能
  30. #=============================================================================
  31. #☆使用方法说明☆
  32. #☆使用方法基本与我之前发的朴素横版战斗相同
  33. #☆动画设置:
  34. #1、武器、特技、物品的施展动画直接在其备注填入动画id即可。如果为空即不显示施展动画。
  35. #2、敌人普通攻击动画,在其备注里填写格式如下:
  36. #  a1=XX #施展动画id
  37. #  a2=XX #对方动画id
  38. #如果为空即使用默认普通动画(画面震动).
  39. #☆战斗图设置:
  40. #3、角色战斗图的的命名方式是角色id后面加上_z,如1_z.存放在Battlers文件夹。
  41. #4、默认待机图为两帧,只要在Battlers文件夹里放一个“战斗图名+待“的文件,就会自动循环播放
  42. #这两个战斗图,如1_b待,没有则没待机动作。
  43. #☆战斗背景设置:
  44. #5、在Graphics目录下新建Battlebacks文件夹。
  45. #6、战斗时先搜索文件夹内是否有与角色所在区域同名的战斗图,如果没有则搜索文件夹里是否
  46. #存在与地图同名的图片。
  47. #7、简而言之,你须储存与你地图同名的战斗背景在Battlebacks,如果想在同一幅地图实现不同地域
  48. #战斗背景不同,就在Battlebacks文件夹里储存与这个地域同名的战斗背景.至少保证战斗的地图
  49. #都有一幅该地图同名的战斗背景,不然战斗时会提示找不到地图.(可参考《拉尔夫战记》或朴素横版的范例)
  50. #☆CP条设置:
  51. #8、CP条:在system文件夹里储存一个命名为"cp条"的图片,默认长度为327,如果需要可在Scene_CP类里调整相
  52. #关参数.
  53. #9、角色cp图命名方式是"角色id+_cp",如:1_cp,角色活跃cp图命名方式是"角色id+_a_cp",如1_a_cp,
  54. #敌人cp图命名方式是"敌人名 + _敌人cp",如史莱姆_敌人cp,敌人活跃cp图是"敌人名+_a_cp".
  55. #亦可在system文件夹里储存名为"敌人cp"的图片,作为敌人的统一cp图,活跃图名为"a_敌人cp",默认如果找不到敌人相关cp图就直接
  56. #用这张图片.
  57. #☆选择光标设置
  58. #10、在system文件夹里储存名为"光标"的图片作为选择光标.
  59. #11、B_B_CONFIG = true 时地图与战斗背景的命名关系写在BATTLE_BACK 这个数组里,
  60. #B_B_CONFIG = false时,和战斗背景和以前的命名方式相同。
  61. #12、战斗背景文件缺失时,用回默认战斗背景。
  62. #★队伍战斗事件的设置说明★:
  63. #13、除“回合”和“回合结束”条件外,其他事件条件设置与默认系统相同。
  64. #14、关于角色回合的定义:角色回合是指每个角色各自独有一个回合属性,角色CP值每满一次就增加一个回合,角色间的回合相互独立。
  65. #15、关于角色回合条件设置,参照工程目录下的“说明图片”文件夹的图片1、2,3对各个框进行设置,实现两种回合条件的设置
  66. #    步骤如下:
  67. #     一、一般回合条件设置,即当角色回合等于或大于小于某个数值时就在回合开始前或后执行
  68. #         事件。
  69. #       1. 参看“说明图片”文件夹中的图1对各个框的定义。
  70. #       2. 在事件条件设置窗口中勾上“回合结束”,即打开回合条件设置开关。
  71. #       3. 勾上“回合数”,在“回合关系参数”框里输入“回合关系参数”。★注:旁边的那个框值为0
  72. #       回合关系参数取值:
  73. #            0 为当 "角色回合"等于"回合参数"值时,回合开始前执行。
  74. #            1 为当 "角色回合"大于"回合参数"值时,回合开始前执行。
  75. #            2 为当 "角色回合"小于"回合参数"值时,回合开始前执行。
  76. #            3 为当 "角色回合"等于"回合参数"值时,回合进行后执行。
  77. #            4 为当 "角色回合"大于"回合参数"值时,回合进行后执行。
  78. #            5 为当 "角色回合"小于"回合参数"值时,回合进行后执行。
  79. #        
  80. #       4.选择“回合对象”,勾上相应的"敌角色"或"角色",选择相应对象。
  81. #       5.在“回合参数”框上填入相关数值。

  82. #     二、循环回合条件设置,即当角色回合等于某个回合后执行事件,以后每隔N个回合在执行一次。
  83. #         1. 参看“说明图片”文件夹中的图2对各个框的定义。
  84. #         2.设置事件执行时机,即回合执行前或后。
  85. #           对“事件执行时机参数”进行设置,取值如下:
  86. #             0 为回合执行前。
  87. #             1 为回合执行后。
  88. #         3.设置"间隔参数",即当达到一定回合数后,每隔N个回合再执行事件的间隔。
  89. #         4.设置相应“回合对象”
  90. #         5.设置“回合参数”
  91. #         6.如图3设置,把“间隔”设为回合。
  92. #16、附赠角色显示动画函数:
  93. #     $game_troop.interpreter.add_aa(动画对象,动画id)
  94. #     "动画对象"取值:角色id或-1,-1时即全体动画
  95. #      在事件的"脚本"中调用就可以了!
  96. #
  97. #           
  98. #=============================================================================
  99. #=============================================================================
  100. #★战斗背景设置及其他功能开关
  101. #=============================================================================
  102. BATTLE_BACK = {"古松居外"=>"树林","古松居内"=>"树林","古松居后山"=>"树林","古松居后山后段"=>"树林","古松居后山出口"=>"树林"} #地图名称与战斗背景对应关系,命名方式:地图名或区域=>战斗背景名
  103. B_B_CONFIG = true #是否启用地图名称与战斗背景对应关系功能

  104. #================================================
  105. #★战斗者类
  106. #================================================
  107. class Game_Battler
  108.    attr_accessor :cp
  109.    attr_accessor :cp_total
  110.    #================================================
  111.    attr_accessor :Battler_turn #角色单独的回合数
  112.    attr_accessor :turn_start  #角色回合状态 0:回合结束或非角色回合 1:角色回合 3:角色回合准备
  113.    #================================================
  114.    attr_accessor :cp_turn #角色能不行动时,计算角色实际cp爆满次数,用以代替回合,计算状态解除时机
  115.    #=======================================
  116.   attr_accessor :animation2_id   
  117.   attr_accessor :act_status
  118.   attr_accessor :damage
  119.   attr_accessor :damage_pop
  120.   attr_accessor :slip_damage
  121.   attr_accessor :auto_damage
  122.   attr_accessor :state_name
  123.   #=========================================
  124.    
  125.    alias oldinitialize  initialize
  126.    def initialize
  127.      @cp = 0
  128.      @cp_total = false
  129.      @cp_turn = 0
  130.      @damage = nil
  131.      @damage_pop = false
  132.      @act_status = 0
  133.      @slip_damage = 0
  134.      @auto_damage = 0
  135.      @Battler_turn = 0
  136.      @turn_start = 0
  137.      @state_name = nil
  138.      oldinitialize
  139.    end
  140.   def maxcp
  141.     return 100
  142.   end  
  143.   #--------------------------------------------------------------------------
  144.   # ● 应用连续伤害效果
  145.   #--------------------------------------------------------------------------
  146.   def slip_damage_effect
  147.     if slip_damage? and @hp > 0
  148.       @hp_damage = apply_variance(maxhp / 10, 10)
  149.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  150.       @slip_damage = @hp_damage
  151.       self.hp -= @hp_damage
  152.     end
  153.   end

  154. end #class   
  155. #===============================================
  156. #★角色队伍类
  157. #===============================================
  158. class Game_Party < Game_Unit
  159. attr_accessor :actor_battler
  160. alias oldinitialize initialize
  161. def initialize
  162.   oldinitialize
  163.   @actor_battler = []
  164. end
  165. end #class  
  166. #================================================
  167. #★敌人队伍类
  168. #================================================
  169. class Game_Troop < Game_Unit
  170.   attr_accessor :enemy_battler
  171. alias  oldinitialize initialize
  172. def initialize
  173.    oldinitialize
  174.    @enemy_battler = []
  175. end  
  176.   #--------------------------------------------------------------------------
  177.   # ● 判断是否符合战斗事件 (页) 条件
  178.   #     page : 战斗事件页
  179.   #--------------------------------------------------------------------------
  180.   def conditions_met?(page)
  181.     c = page.condition
  182.     if not c.turn_ending and not c.turn_valid and not c.enemy_valid and
  183.        not c.actor_valid and not c.switch_valid
  184.       return false      # 未设置条件…不执行
  185.     end
  186.     if @event_flags
  187.       return false      # 已执行
  188.     end

  189.     if c.enemy_valid    # 敌方角色
  190.       enemy = $game_troop.members[c.enemy_index]
  191.       return false if enemy == nil
  192.       if c.turn_ending == false  #
  193.         return false if enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  194.       elsif c.turn_ending and not c.turn_valid  
  195.         return false if enemy.Battler_turn != c.enemy_hp  or enemy.cp != 100
  196.       elsif c.turn_ending and  c.turn_valid
  197.         a = c.turn_a
  198.         b = c.turn_b
  199.        if b>0
  200.         return false if (a==0 and ( c.enemy_hp < 1 or enemy.Battler_turn < c.enemy_hp or enemy.Battler_turn % b != c.enemy_hp % b or enemy.cp != 100 or enemy.turn_start != 1))
  201.         return false if (a==1 and ( c.enemy_hp < 1 or enemy.Battler_turn < c.enemy_hp or enemy.Battler_turn % b != c.enemy_hp % b or enemy.cp != 100 or enemy.turn_start != 0))
  202.        else
  203.          if a == 0 #回合开始时 等于
  204.           return false if ( enemy.Battler_turn != c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
  205.          
  206.           elsif a == 1 # #回合开始时 回合数大于
  207.            return false if (enemy.Battler_turn <= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
  208.           elsif a == 2 #回合开始时 回合数小于
  209.            return false if (enemy.Battler_turn >= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
  210.           elsif a == 3 #回合结束时 回合数等于
  211.            return false if (enemy.Battler_turn != c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
  212.           elsif a == 4 #回合结束时 回合数大于
  213.            return false if (enemy.Battler_turn <= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
  214.           elsif a == 5 # 回合结束时 回合数小于
  215.            return false if (enemy.Battler_turn >= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
  216.          end
  217.        end
  218.       end
  219.     end
  220.     if c.actor_valid    # 角色
  221.       actor = $game_actors[c.actor_id]
  222.       return false if actor == nil
  223.       if c.turn_ending == false  #
  224.         return false if actor.hp * 100.0 / actor.maxhp > c.actor_hp
  225.       elsif c.turn_ending and not c.turn_valid  
  226.         return false if actor.Battler_turn != c.actor_hp  or actor.cp != 100
  227.       elsif c.turn_ending and  c.turn_valid
  228.         a = c.turn_a
  229.         b = c.turn_b
  230.        if b > 0
  231.         return false if (a== 0  and ( c.actor_hp < 1 or actor.Battler_turn < c.actor_hp or actor.Battler_turn % b != c.actor_hp % b or actor.cp != 100 or actor.turn_start != 1))
  232.         return false if (a== 1  and ( c.actor_hp < 1 or actor.Battler_turn < c.actor_hp or actor.Battler_turn % b != c.actor_hp % b or actor.cp != 100 or actor.turn_start != 0))
  233.        else
  234.         if a == 0 # 等于
  235.           return false if (actor.Battler_turn != c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
  236.          
  237.         elsif a == 1 #回合开始时 回合数大于
  238.           return false if (actor.Battler_turn <= c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
  239.         elsif a == 2 #回合开始时 回合数小于
  240.           return false if (actor.Battler_turn >= c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
  241.         elsif a == 3 #回合结束时 回合数等于
  242.           return false if (actor.Battler_turn != c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
  243.         elsif a == 4 #回合结束时 回合数大于
  244.           return false if (actor.Battler_turn <= c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
  245.         elsif a == 5 #回合结束时 回合数小于
  246.            return false if (actor.Battler_turn >= c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
  247.         end  
  248.        end
  249.       end  
  250.         
  251.     end
  252.     if c.switch_valid   # 开关
  253.       return false if $game_switches[c.switch_id] == false
  254.     end
  255.     return true         # 符合条件
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 增加回合
  259.   #--------------------------------------------------------------------------
  260.   def increase_turn
  261.     for page in troop.pages
  262.       if page.span == 1
  263.         @event_flags= false
  264.       end
  265.     end
  266.     #@turn_count += 1
  267.   end

  268. end#class
  269. #================================================
  270. #★cp条处理类
  271. #================================================

  272. class Scene_CP
  273.     attr_accessor :stop
  274.     attr_accessor :in_battler
  275.     attr_accessor :cp_battler
  276.     BATTLE_SPEED = 0.2
  277.     def initialize
  278.       [url=home.php?mod=space&uid=76426]@stop[/url] = false
  279.       @all_agi = 0
  280.       @v =  Viewport.new(0, 0, 800, 90)
  281.       @count = 0
  282.       @cpline = Sprite.new(@v)
  283.       @cpline.bitmap = Bitmap.new(800,90)
  284.       bitmap = Bitmap.new("Graphics/system/cp条")
  285.       @cpline.bitmap.blt(390,8,bitmap,bitmap.rect)
  286.       @cp_battler = {}
  287.       @walk_count = 0
  288.       for battler in $game_party.members + $game_troop.members
  289.         @all_agi += battler.agi
  290.         @cp_battler[battler] = Sprite_cpbattler.new
  291.         if battler.is_a?(Game_Actor)
  292.           name = battler.id.to_s + "_cp"
  293.           if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  294.               bitmap = Bitmap.new("Graphics/system/#{name}")
  295.               rect = bitmap.rect
  296.               @cp_battler[battler].bitmap = bitmap
  297.           else
  298.               
  299.                
  300.                bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
  301.                 sign = battler.character_name[/^[\!\$]./]
  302.                 if sign != nil and sign.include?('$')
  303.                   cw = bitmap.width / 3
  304.                   ch = bitmap.height / 4
  305.                   
  306.                 else
  307.                   cw = bitmap.width / 12
  308.                   ch = bitmap.height / 8
  309.                   
  310.                 end
  311.                  n = battler.character_index
  312.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
  313.                
  314.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  315.           end
  316.          
  317.          
  318.           @cp_battler[battler].bitmap.blt(0, 0,bitmap,rect)
  319.         else
  320.           name = battler.original_name + "_敌人cp"
  321.           if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  322.              @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  323.           else
  324.              @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
  325.           end
  326.              @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
  327.         end  
  328.         @cp_battler[battler].z = 101
  329.         @cp_battler[battler].visible = false
  330.         
  331.       end
  332.     end   
  333.    
  334.     #===========================================
  335.    
  336.    
  337.    
  338.    
  339.     #===========================================
  340.    
  341.    
  342.     def update
  343.       
  344.       return if @stop
  345.       
  346.       
  347.       for battler in $game_party.members + $game_troop.members
  348.         if (@cp_battler[battler].disposed? or @cp_battler[battler].opacity == 0) and battler.dead?
  349.           @cp_battler.delete(@cp_battler[battler])
  350.           next
  351.         end  
  352.         if battler.dead?
  353.          if  @cp_battler.include?(battler)
  354.               @cp_battler[battler].collapse = true
  355.           end   
  356.           battler.cp = 0
  357.           next
  358.         end  
  359.        next if @cp_battler[battler].disposed?   
  360.        battler.cp = [[battler.cp + BATTLE_SPEED*10*battler.agi / @all_agi,0].max,battler.maxcp].min if battler.movable?
  361.        battler.cp_turn = [[battler.cp_turn+BATTLE_SPEED*10*battler.agi / @all_agi, 0].max,battler.maxcp].min
  362.        if battler.cp == battler.maxcp
  363.          #============================
  364.          #☆设置战斗者处于回合准备状态
  365.          #============================
  366.            battler.turn_start = 3
  367.          #============================  
  368.          if battler.is_a?(Game_Actor)
  369.               name = battler.id.to_s + "_a_cp"
  370.               if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  371.                bitmap = Bitmap.new("Graphics/system/#{name}")
  372.                rect = bitmap.rect
  373.                @cp_battler[battler].bitmap = bitmap
  374.               else
  375.                
  376.                 bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
  377.                 sign = battler.character_name[/^[\!\$]./]
  378.                 if sign != nil and sign.include?('$')
  379.                   cw = bitmap.width / 3
  380.                   ch = bitmap.height / 4
  381.                 else
  382.                   cw = bitmap.width / 12
  383.                   ch = bitmap.height / 8
  384.                 end
  385.                  n = battler.character_index
  386.                  
  387.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  388.                
  389.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  390.                  
  391.               end
  392.               
  393.               @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
  394.             
  395.           else
  396.             name = battler.original_name + "_a_cp"
  397.             if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  398.             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  399.             else
  400.             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/a_敌人cp")
  401.             end
  402.             @cp_battler[battler].bitmap.blt(80,60,  @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
  403.           end  
  404.             @cp_battler[battler].z = 101
  405.             battler.cp_total = true
  406.      
  407.       elsif battler.cp_total == true
  408.           if battler.is_a?(Game_Actor)
  409.              name = battler.id.to_s + "_cp"
  410.              if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  411.               bitmap = Bitmap.new("Graphics/system/#{name}")
  412.               rect = bitmap.rect
  413.               @cp_battler[battler].bitmap = bitmap
  414.              else
  415.               
  416.                 bitmap =  Bitmap.new("Graphics/Characters/#{battler.character_name}")
  417.                 sign = battler.character_name[/^[\!\$]./]
  418.                 if sign != nil and sign.include?('$')
  419.                   cw = bitmap.width / 3
  420.                   ch = bitmap.height / 4
  421.                 else
  422.                   cw = bitmap.width / 12
  423.                   ch = bitmap.height / 8
  424.                 end
  425.                  n = battler.character_index
  426.                  rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
  427.                  
  428.                  @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
  429.                  
  430.                  
  431.               end
  432.             
  433.               @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
  434.             
  435.             
  436.           elsif  
  437.              name = battler.original_name + "_敌人cp"
  438.              if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
  439.                  @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
  440.                
  441.              else
  442.                  @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
  443.                
  444.              end
  445.                
  446.                @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap, @cp_battler[battler].bitmap.rect)
  447.             end
  448.             battler.cp_total = false
  449.             @cp_battler[battler].z = 105
  450.             
  451.       end
  452.       
  453.       @cp_battler[battler].visible = true if @cp_battler[battler].visible == false
  454.       @cp_battler[battler].opacity = 255
  455.       @cp_battler[battler].y = 30
  456.       @cp_battler[battler].x = 90+300+300*battler.cp/battler.maxcp
  457.       if battler.cp_turn == battler.maxcp
  458. #=================================
  459.       last_st = battler.states
  460. #=================================
  461.         battler.remove_states_auto unless battler.movable?
  462.         battler.slip_damage_effect
  463.         battler.do_auto_recovery if battler.is_a?(Game_Actor)
  464. #====================================
  465.       if battler.states != last_st
  466.         $scene.display_state_changes(battler)
  467.       end
  468. #====================================
  469.         battler.damage_pop = true if battler.slip_damage != 0 or battler.auto_damage != 0
  470.         battler.cp_turn = 0
  471.       end
  472.       if battler.cp == battler.maxcp
  473.          if battler.is_a?(Game_Actor)
  474.            $game_party.actor_battler.push(battler)
  475.          else
  476.            battler.make_action
  477.            $game_troop.enemy_battler.push(battler)
  478.            battler.make_action
  479.           end   
  480.       else
  481.         next
  482.       end  
  483.       
  484.       
  485.       
  486.    end     
  487. end

  488.   def dispose
  489.     for j in 0..25
  490.     @cpline.opacity -= 10
  491.     for i in @cp_battler.values
  492.       unless i.disposed?
  493.       i.opacity -= 10
  494.       end
  495.     end  
  496.      Graphics.update
  497.     end  
  498.     @v.dispose
  499.     @cpline.dispose
  500.     for i in @cp_battler.values
  501.       i.dispose unless i.disposed?
  502.     end
  503.   end  
  504. end
  505.   
  506.   
  507.   
  508.   
  509.   
  510.   
  511.   
  512.   
  513.   class Sprite_cpbattler < Sprite
  514.     attr_accessor :collapse
  515.    
  516.     def initialize (viewport = nil)
  517.       super (viewport)
  518.      
  519.       @effect_duration = 0        
  520.       @collapse = false
  521.     end
  522.     def update
  523.        super
  524.   
  525.      if self.collapse == true and self.opacity != 0
  526.       @effect_type = 5
  527.       @effect_duration = 48
  528.       self.color.set(255, 128, 128, 128)
  529.       for i in 0..48
  530.       self.opacity = 256 - (48 - @effect_duration) * 6
  531.       if self.opacity == 0
  532.    
  533.       break
  534.       end  
  535.       Graphics.update
  536.       @effect_duration -= 1
  537.       end
  538.      
  539.       self.collapse = false
  540.       self.color.set(255,255,255,5)
  541.      end
  542.      
  543.     end
  544.    
  545.   def dispose
  546.      if self.bitmap != nil
  547.       self.bitmap.dispose
  548.      end
  549.    
  550.     super
  551.   end
  552.       
  553. end  

  554. #==========================================================================
  555. #
  556. #==========================================================================
  557. class Scene_Battle < Scene_Base
  558.   
  559.   #--------------------------------------------------------------------------
  560.   # ● 開始処理
  561.   #--------------------------------------------------------------------------
  562.   def start
  563.     super
  564.     #======================
  565.     @select_input = true
  566.     #======================
  567.     $game_temp.in_battle = true
  568.     #=============================================
  569.     unless  $BTEST
  570.       @battleback = nil
  571.       for area in  $data_areas.values
  572.         
  573.         if $game_player.in_area?(area)
  574.            
  575.             name = area.name
  576.             unless B_B_CONFIG
  577.              @battleback = Cache.battleback("#{name}")if FileTest.exist?("Graphics/Battlebacks/#{name}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{name}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{name}.bmp")
  578.                break
  579.             else
  580.               if BATTLE_BACK[name] != nil
  581.                 @battleback = Cache.battleback("#{BATTLE_BACK[name]}")if FileTest.exist?("Graphics/Battlebacks/#{BATTLE_BACK[name]}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{BATTLE_BACK[name]}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{BATTLE_BACK[name]}.bmp")
  582.               end
  583.               break  
  584.                
  585.                
  586.            end
  587.          end
  588.       end     
  589.         if @battleback == nil
  590.             name = $game_map.name
  591.             unless B_B_CONFIG
  592.               
  593.               @battleback = Cache.battleback("#{name}")if FileTest.exist?("Graphics/Battlebacks/#{name}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{name}.jpg") or FileTest.exist?("Graphics/Battlebacks/#{name}.bmp")
  594.             else
  595.               if BATTLE_BACK[name] != nil
  596.                  @battleback = Cache.battleback("#{BATTLE_BACK[name]}")
  597.               else
  598.                  @battleback = nil
  599.               end
  600.             end   
  601.         end      
  602.       $game_temp.background_bitmap  = @battleback if @battleback != nil
  603.     end
  604.    #==================================================
  605.     @spriteset = Spriteset_Battle.new
  606.     @message_window = Window_BattleMessage.new(80,440,640,160)
  607.     @message_window.visible = false
  608.     @action_battlers = []
  609.     @cp_battle = Scene_CP.new
  610.     @cp_battle.stop = false
  611.     create_info_viewport
  612.    
  613.    
  614.     @select_icon = Sprite.new
  615.     @select_icon.z = 148
  616.     @select_icon.bitmap = Bitmap.new("Graphics/system/光标")
  617.     @select_icon.opacity = 240
  618.     @select_icon.visible = false
  619.     @c_c = 0
  620.    
  621.    
  622.   end
  623.   
  624.   #==============================================================
  625.   #★ 定义光标刷新
  626.   #==============================================================
  627.    
  628.   def select_icon_update(s_sw = false)
  629.     if s_sw == false
  630.       @select_icon.visible = false
  631.     else
  632.       @select_icon.visible = true
  633.       @select_icon.x = $game_troop.members[@target_enemy_window.enemy.index].screen_x
  634.       @select_icon.y = $game_troop.members[@target_enemy_window.enemy.index].screen_y - 30
  635.       
  636.       if @c_c%2 == 0
  637.       @select_icon.opacity += 30
  638.       else
  639.       @select_icon.opacity -= 30  
  640.       end
  641.     end  
  642.    
  643.   end   
  644.   
  645.   
  646.   #=================================================
  647.   #★主刷新部分
  648.   #=================================================
  649.   
  650.   
  651.   def update
  652.     super
  653.    
  654.     @c_c += 1
  655.   
  656.     update_basic(true)
  657.     update_info_viewport               
  658.       return if judge_win_loss            
  659.       update_scene_change
  660.       if @target_enemy_window != nil
  661.         update_target_enemy_selection     
  662.       elsif @target_actor_window != nil
  663.         update_target_actor_selection     
  664.       elsif @skill_window != nil
  665.         update_skill_selection            
  666.       elsif @item_window != nil
  667.         update_item_selection            
  668.       
  669.       elsif @actor_command_window.active
  670.         update_actor_command_selection   
  671.       #=================================
  672.       elsif @cp_battle.stop ==  false
  673.         active_battler_update
  674.       #=================================  
  675.          
  676.       end
  677.       
  678.     #end
  679.   
  680.       
  681.   end
  682.   #--------------------------------------------------------------------------
  683.   # ● 战斗事件处理
  684.   #--------------------------------------------------------------------------
  685.   def process_battle_event
  686.     #============================
  687.     if $game_message.texts != nil
  688.      @message_window.visible = true
  689.     end
  690.     #=============================
  691.     loop do
  692.       return if judge_win_loss
  693.       return if $game_temp.next_scene != nil
  694.       $game_troop.interpreter.update
  695.       $game_troop.setup_battle_event
  696.      # wait_for_message
  697.       process_action if $game_troop.forcing_battler != nil
  698.       #======================================
  699.       unless $game_troop.interpreter.running?
  700.          if $game_message.texts != nil
  701.           @message_window.clear
  702.           @message_window.visible = false
  703.         end
  704.          return
  705.       end  
  706.       #=======================================
  707.       update_basic
  708.     end
  709.    
  710.   end
  711.   
  712.   

  713.   #================================================
  714.   #★战斗初始化
  715.   #===============================================
  716.   
  717.   def start_party_command_selection
  718.     if $game_temp.in_battle
  719.       @status_window.refresh
  720.       @status_window.index = @actor_index = -1
  721.       @active_battler = nil
  722.      
  723.      @actor_command_window.active = false
  724.       $game_party.clear_actions
  725.    
  726.     for i in 0..$game_party.members.size-1
  727.       if $game_party.members[i].act_status != -1
  728.         $game_party.members[i].act_status = -1
  729.       end  
  730.     end
  731.    
  732.       if $game_troop.surprise or not $game_party.inputable?
  733.         start_main
  734.       end
  735.     end
  736.   end
  737.   
  738.   #=============================================
  739.   #★角色回合的处理函数
  740.   #=============================================
  741.   
  742.   
  743.   def next_actor
  744.    
  745.     for i in 0..$game_party.members.size-1
  746.       if $game_party.members[i].act_status != -1
  747.         $game_party.members[i].act_status = -1
  748.       end  
  749.     end
  750.   
  751.     @info_viewport.visible = true
  752.     @status_window.refresh
  753.     @now_face = -1
  754.     @actor_command_window.index = 0
  755.     @actor_command_window.update
  756.     @status_window.update
  757.   
  758.     loop do
  759.    
  760.       if @actor_index == @actor_battler.size - 1
  761.       
  762.         start_main
  763.         return
  764.         
  765.       end   
  766.       @actor_index += 1
  767.       index = 0
  768.       for battler in $game_party.members
  769.         if battler == @actor_battler[@actor_index]
  770.           break
  771.         else
  772.           index += 1
  773.         end
  774.       end  
  775.       @status_window.index = index
  776.      
  777.        if @active_battler != nil and @active_battler != @actor_battler[@actor_index] and @active_battler.is_a?(Game_Actor)
  778.         @active_battler.act_status = -1
  779.       end
  780.       
  781.       @active_battler = @actor_battler[@actor_index]
  782.      
  783.      
  784.       @active_battler.act_status = 1
  785.       #=================================
  786.       #★角色回合事件处理
  787.       #================================
  788.       @active_battler.Battler_turn += 1
  789.       @active_battler.turn_start = 1
  790.       $game_troop.increase_turn
  791.       process_battle_event
  792.       if @active_battler.auto_battle
  793.         @active_battler.make_action
  794.         next
  795.       end
  796.       break if @active_battler.inputable?
  797.     end
  798.     start_actor_command_selection
  799.   end
  800.   
  801.   #===================================================
  802.   #★激活角色指令窗口
  803.   #===================================================
  804.   
  805.   def start_actor_command_selection
  806.     @actor_command_window.setup(@active_battler)
  807.     @actor_command_window.active = true
  808.     @actor_command_window.index = 0
  809.   end
  810.   
  811.   #==============================================
  812.   #★指令窗口刷新
  813.   #==============================================
  814.    def update_actor_command_selection
  815.    
  816.     if Input.trigger?(Input::C)
  817.       case @actor_command_window.index
  818.       when 0  # 攻击
  819.         Sound.play_decision
  820.         @active_battler.action.set_attack
  821.         start_target_enemy_selection
  822.       when 1  # 特技
  823.         Sound.play_decision
  824.         start_skill_selection
  825.       when 2  # 防御
  826.         Sound.play_decision
  827.         @active_battler.action.set_guard
  828.         next_actor
  829.         #@active_battler.cp = 0
  830.       when 3  # 物品
  831.         Sound.play_decision
  832.         start_item_selection
  833.       
  834.       when 4 #逃跑
  835.         if $game_troop.can_escape == false
  836.           Sound.play_buzzer
  837.           return
  838.         end
  839.         Sound.play_decision
  840.         process_escape
  841.     end
  842.     end
  843.   end
  844.   
  845.   #====================================
  846.   #★选择敌人
  847.   #====================================
  848.   def start_target_enemy_selection
  849.      if @skill_window != nil
  850.       @skill_window.visible = false
  851.       @skill_window.help_window.visible = false
  852.     end
  853.     if @item_window != nil
  854.       @item_window.visible = false
  855.       @item_window.help_window.visible = false
  856.     end  
  857.     @target_enemy_window = Window_TargetEnemy.new
  858.     @target_enemy_window.opacity = 0
  859.     @target_enemy_window.contents_opacity = 0
  860.     #@target_enemy_window.y = @info_viewport.rect.y
  861.     #@info_viewport.rect.x += @target_enemy_window.width
  862.     #@info_viewport.ox += @target_enemy_window.width
  863.     @actor_command_window.active = false
  864.   
  865.     select_icon_update(true)
  866.   end
  867.   #===========================================================
  868.   #★结束敌人选择
  869.   #===========================================================
  870.    def end_target_enemy_selection
  871.     #@info_viewport.rect.x -= @target_enemy_window.width
  872.     #@info_viewport.ox -= @target_enemy_window.width
  873.     @target_enemy_window.dispose
  874.     @target_enemy_window = nil
  875.    
  876.     select_icon_update
  877.    
  878.     if @actor_command_window.index == 0
  879.       @actor_command_window.active = true
  880.     end
  881.   end  
  882.   #=======================================================
  883.   #★敌人选择刷新
  884.   #=======================================================
  885.   def update_target_enemy_selection
  886.    @target_enemy_window.update
  887.    
  888.     select_icon_update(true)

  889.     if Input.trigger?(Input::B)
  890.       Sound.play_cancel
  891.       if @skill_window != nil
  892.         @skill_window.visible = true
  893.       end
  894.       if @item_window != nil
  895.         @item_window.visible = true
  896.       end  
  897.       end_target_enemy_selection
  898.     elsif Input.trigger?(Input::C)
  899.       Sound.play_decision
  900.       @active_battler.action.target_index = @target_enemy_window.enemy.index
  901.       end_target_enemy_selection
  902.       end_skill_selection
  903.       end_item_selection
  904.       next_actor
  905.      # @active_battler.cp = 0
  906.     end
  907.   end
  908.   
  909.   #======================================================
  910.   #★己方选择
  911.   #======================================================
  912.   def start_target_actor_selection
  913.     @target_actor_window = Window_BattleStatus.new
  914.     @target_actor_window.index = 0
  915.     @target_actor_window.active = true
  916.     @target_actor_window.y = @info_viewport.rect.y
  917.     @target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
  918.     @info_viewport.rect.x += @target_actor_window.width
  919.     @info_viewport.ox += @target_actor_window.width
  920.     @actor_command_window.active = false
  921.     #=====================
  922.     #☆减少刷新次数
  923.     #=====================
  924.     @last_index = -1
  925.   end
  926.   #==================================================
  927.   #★己方选择结束处理
  928.   #==================================================
  929.   def end_target_actor_selection
  930.     @info_viewport.rect.x -= @target_actor_window.width
  931.     @info_viewport.ox -= @target_actor_window.width
  932.     @target_actor_window.dispose
  933.     @target_actor_window = nil
  934.     #=====================
  935.     #☆减少刷新次数
  936.     #=====================
  937.     @last_index = -1
  938.   end
  939.   #===================================================
  940.   #★己方选择刷新
  941.   #===================================================
  942.   def update_target_actor_selection
  943.     if @last_index != @target_actor_window.index
  944.      @target_actor_window.refresh
  945.      @target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
  946.      @last_index = @target_actor_window.index
  947.     end
  948.     @target_actor_window.update
  949.     if Input.trigger?(Input::B)
  950.       Sound.play_cancel
  951.       end_target_actor_selection
  952.     elsif Input.trigger?(Input::C)
  953.       Sound.play_decision
  954.       @active_battler.action.target_index = @target_actor_window.index
  955.      
  956.       end_target_actor_selection
  957.       end_skill_selection
  958.       end_item_selection
  959.       next_actor
  960.      # @active_battler.cp = 0
  961.     end
  962.   end
  963.   #============================================
  964.   #★特技使用决定  处理
  965.   #===========================================
  966.   
  967.   
  968.   def determine_skill
  969.     @active_battler.action.set_skill(@skill.id)
  970.     @skill_window.active = false
  971.     if @skill.need_selection?
  972.       if @skill.for_opponent?
  973.         start_target_enemy_selection
  974.       else
  975.         start_target_actor_selection
  976.       end
  977.     else
  978.       end_skill_selection
  979.       next_actor
  980.      # @active_battler.cp = 0
  981.     end
  982.   end
  983.   #=========================================
  984.   #★物品使用决定  处理
  985.   #=========================================
  986.   
  987.   
  988.   def determine_item
  989.     @active_battler.action.set_item(@item.id)
  990.     @item_window.active = false
  991.     if @item.need_selection?
  992.       if @item.for_opponent?
  993.         start_target_enemy_selection
  994.       else
  995.         start_target_actor_selection
  996.       end
  997.     else
  998.       end_item_selection
  999.       next_actor
  1000.      #  @active_battler.cp = 0
  1001.     end
  1002.   end
  1003.   
  1004.   #===============================================
  1005.   #★各窗口视口生成
  1006.   #===============================================
  1007.    def create_info_viewport
  1008.     @info_viewport = Viewport.new(0, 600-128, 800, 128)
  1009.     @info_viewport.z = 100
  1010.     @status_window = Window_BattleStatus.new
  1011.     @actor_command_window = Window_ActorCommand.new
  1012.     @status_window.viewport = @info_viewport
  1013.     @actor_command_window.viewport = @info_viewport
  1014.     @status_window.x = 0
  1015.     @actor_command_window.x = 800-128
  1016.     @status_window.y = 128
  1017.     @actor_command_window.y = 128
  1018.     @info_viewport.visible = false
  1019.     #========================
  1020.     #☆减少头像刷新用
  1021.     #========================
  1022.     @now_face = -1
  1023.    
  1024.   end
  1025.   #================================================
  1026.   #★视口释放
  1027.   #================================================
  1028.   def dispose_info_viewport
  1029.     @status_window.dispose
  1030.     @actor_command_window.dispose
  1031.     @info_viewport.dispose
  1032.     #========================
  1033.     #☆减少头像刷新用
  1034.     #========================
  1035.     @now_face = -1
  1036.     if @window_egi != nil
  1037.      @window_egi.dispose
  1038.     end
  1039.   end
  1040.   #======================================================
  1041.   #★视口刷新
  1042.   #======================================================
  1043.   
  1044.   
  1045.   def update_info_viewport
  1046.    
  1047.     @actor_command_window.update
  1048.    
  1049.   
  1050.     if @active_battler != nil and @active_battler.is_a?(Game_Actor) and @active_battler.id != @now_face
  1051.       @status_window.draw_actorface(@active_battler)
  1052.       @now_face = @active_battler.id
  1053.     end  
  1054.    
  1055.    
  1056.     @status_window.update
  1057.    
  1058.    
  1059.    
  1060.     if @actor_command_window.active and   @actor_command_window.y > 0
  1061.      @actor_command_window.y -= 8
  1062.      @status_window.y -= 8
  1063.    
  1064.    
  1065.     end

  1066.   end
  1067.   
  1068.   #================================================
  1069.   #★战斗开始 处理
  1070.   #================================================
  1071.   
  1072.   def process_battle_start
  1073.    
  1074.    
  1075.     if $game_troop.preemptive
  1076.      
  1077.       for battler in $game_party.members
  1078.          battler.cp = battler.maxcp
  1079.        end  
  1080.        $game_troop.preemptive = false
  1081.     elsif $game_troop.surprise
  1082.       
  1083.       for battler in $game_troop.members
  1084.         battler.cp = battler.maxcp
  1085.       end
  1086.       $game_troop.surprise = false
  1087.     end
  1088.    
  1089.     make_escape_ratio
  1090.     process_battle_event
  1091.    
  1092.     #===========================================
  1093.     @status_window.refresh
  1094.     @status_window.index = @actor_index = -1
  1095.    
  1096.     #=====================
  1097.     @cp_battle.stop = false
  1098.     #=====================
  1099.   
  1100.   end
  1101.   #=========================================
  1102.   #★战斗结束cp条释放处理
  1103.   #=========================================
  1104.   def dispose_cp_battle
  1105.       #=============================
  1106.       @cp_battle.dispose
  1107.       #=============================
  1108.       for battler in $game_party.members + $game_troop.members
  1109.         battler.cp = 0
  1110.         #=========================
  1111.         battler.Battler_turn = 0
  1112.         battler.turn_start = 0
  1113.         #=========================
  1114.       end  
  1115.   
  1116.   end
  1117.   
  1118.   #==========================================
  1119.   #★逃走处理
  1120.   #==========================================
  1121.   def process_escape
  1122.     @message_window.visible = false
  1123.     @info_viewport.visible = false
  1124.    
  1125.     if $game_troop.preemptive
  1126.       success = true
  1127.     else
  1128.       success = (rand(100) < @escape_ratio)
  1129.     end
  1130.     Sound.play_escape
  1131.     if success
  1132.       #=============================
  1133.       @cp_battle.dispose
  1134.       #=============================
  1135.       for battler in $game_party.members
  1136.         battler.cp = 0
  1137.         #=========================
  1138.         battler.Battler_turn = 0
  1139.         battler.turn_start = 0
  1140.         #=========================
  1141.       end  
  1142.      
  1143.       battle_end(1)
  1144.     else
  1145.       @escape_ratio += 10
  1146.      
  1147.       #@active_battler.cp = 0
  1148.       @active_battler.action.clear
  1149.       next_actor   
  1150.     end
  1151.   end
  1152.   #========================================
  1153.   #★胜利处理
  1154.   #========================================
  1155.   def process_victory
  1156.     @message_window.visible = false
  1157.     @info_viewport.visible = false
  1158.   
  1159.     RPG::BGM.stop
  1160.     $game_system.battle_end_me.play
  1161.     wait(60)
  1162.     for battler in $game_troop.members
  1163.       if battler.dead?
  1164.          if  @cp_battle.cp_battler.include?(battler)
  1165.               @cp_battle.cp_battler[battler].collapse = true
  1166.               
  1167.               next
  1168.           end  
  1169.        end     
  1170.     end
  1171.      @cp_battle.cp_battler.each{|key,value|
  1172.       if value.disposed?
  1173.         @cp_battler.delete(key)
  1174.         next
  1175.       end
  1176.       value.update}
  1177.     #=============================
  1178.     @cp_battle.dispose
  1179.     #=============================
  1180.    for battler in $game_party.members
  1181.       #=========================
  1182.       battler.Battler_turn = 0
  1183.       battler.turn_start = 0
  1184.       #=========================
  1185.      battler.cp = 0
  1186.    end
  1187.     unless $BTEST
  1188.       $game_temp.map_bgm.play
  1189.       $game_temp.map_bgs.play
  1190.     end
  1191.     display_exp_and_gold
  1192.     display_drop_items
  1193.     display_level_up
  1194.     battle_end(0)
  1195.   end
  1196.    
  1197.   #=================================
  1198.   #★失败处理
  1199.   #=================================
  1200.   def process_defeat
  1201.     @message_window.visible = false
  1202.     @cp_battle.dispose
  1203.     for battler in $game_party.members + $game_troop.members
  1204.       #=========================
  1205.       battler.Battler_turn = 0
  1206.       battler.turn_start = 0
  1207.       #=========================
  1208.       battler.cp = 0
  1209.     end
  1210.     @info_viewport.visible = false
  1211.    
  1212.     battle_end(2)
  1213.    
  1214.   end
  1215.   #=====================================
  1216.   # ★ 执行画面转换
  1217.   #=====================================
  1218.   def update_scene_change
  1219.     case $game_temp.next_scene
  1220.     when "map"
  1221.       dispose_cp_battle
  1222.       call_map
  1223.     when "gameover"
  1224.       dispose_cp_battle
  1225.       call_gameover
  1226.     when "title"
  1227.       dispose_cp_battle
  1228.       call_title
  1229.     else
  1230.       $game_temp.next_scene = nil
  1231.     end
  1232.   end
  1233.   #=============================================================================
  1234.   #★CP战斗的主要刷新★
  1235.   #=============================================================================
  1236.   
  1237.    def active_battler_update
  1238.    
  1239.     #===================================
  1240.     @actor_battler = []
  1241.     @enemy_battler = []
  1242.     $game_party.actor_battler = []
  1243.     $game_troop.enemy_battler = []
  1244.     #===================================
  1245.     @cp_battle.update
  1246.     @actor_battler = $game_party.actor_battler
  1247.     @enemy_battler = $game_troop.enemy_battler
  1248.     #for battler in $game_party.members + $game_troop.members
  1249.       
  1250.     #end
  1251.     if @actor_battler.size != 0
  1252.       @cp_battle.stop = true
  1253. #~       @active_battler.Battler_turn += 1
  1254. #~       @active_battler.turn_start = 1
  1255. #~       $game_troop.increase_turn
  1256. #~       process_battle_event
  1257.       next_actor
  1258.       Audio.se_play("Audio/SE/Equip",100,100)
  1259.     elsif @enemy_battler.size != 0  
  1260.    
  1261.     #================
  1262.     @cp_battle.stop = true
  1263.     start_main
  1264.     #================
  1265.    
  1266.      
  1267.      
  1268.    end
  1269.   
  1270. end

  1271. #=============================================================
  1272. #=============================================================
  1273.   #====================================================
  1274.   #★战斗主处理
  1275.   #====================================================
  1276.    def start_main
  1277.    
  1278.     for i in 0..$game_party.members.size-1
  1279.       if $game_party.members[i].act_status != 0
  1280.         $game_party.members[i].act_status = 0
  1281.       end  
  1282.     end
  1283.    
  1284.    
  1285.    
  1286.     if @info_viewport.visible
  1287.     @info_viewport.visible = false
  1288.     @status_window.y = 128
  1289.     @actor_command_window.y = 128
  1290.     end
  1291.     @actor_command_window.index = 0
  1292.     @actor_command_window.update
  1293.     @actor_command_window.active = false
  1294.    
  1295.     @status_window.index = @actor_index = -1
  1296.     @active_battler = nil
  1297.   
  1298.     make_action_orders
  1299.     wait(20)
  1300.    #=============================
  1301.   
  1302.    while @action_battlers.size != 0 and judge_win_loss == false
  1303.         process_action
  1304.         #process_battle_event
  1305.    end
  1306.    @cp_battle.stop = false
  1307.    #=============================
  1308.    
  1309. end
  1310. #=====================================
  1311. #★行动顺序生成
  1312. #=====================================


  1313. def make_action_orders
  1314.     @action_battlers = []
  1315.    
  1316.     unless $game_troop.surprise
  1317.       @action_battlers += @actor_battler if @actor_battler.size != 0
  1318.     end
  1319.    
  1320.    
  1321.     unless $game_troop.preemptive
  1322.       @action_battlers += @enemy_battler if @enemy_battler.size != 0
  1323.     end
  1324.     for battler in @action_battlers
  1325.       
  1326.       battler.action.make_speed
  1327.     end
  1328.     @action_battlers.sort! do |a,b|
  1329.       b.action.speed - a.action.speed
  1330.     end
  1331.   end
  1332. #====================================
  1333. #★战斗行动处理
  1334. #====================================
  1335. def process_action
  1336.    
  1337.     return if judge_win_loss
  1338.     return if $game_temp.next_scene != nil
  1339.     set_next_active_battler
  1340.    
  1341.     return if @active_battler == nil
  1342.     return if @active_battler.dead?
  1343.    
  1344.     @active_battler.white_flash = true
  1345.    
  1346.     unless @active_battler.is_a?(Game_Actor)
  1347.       @active_battler.Battler_turn += 1
  1348.       @active_battler.turn_start = 1
  1349.       $game_troop.increase_turn
  1350.       process_battle_event
  1351.     end  
  1352.    
  1353.     unless @active_battler.action.forcing
  1354.       @active_battler.action.prepare
  1355.     end
  1356.     if @active_battler.action.valid?
  1357.       execute_action
  1358.     end
  1359.    
  1360.     unless @active_battler.action.forcing
  1361.      
  1362.       remove_states_auto
  1363.       display_current_state
  1364.     end
  1365.     @active_battler.white_flash = false
  1366.     @active_battler.turn_start = 0
  1367.     process_battle_event
  1368.     @active_battler.cp = 0
  1369.   end

  1370.   #=================================
  1371.   #★攻击行动 执行
  1372.   #=================================
  1373.   def execute_action_attack
  1374.    
  1375.     targets = @active_battler.action.make_targets
  1376.     display_attack_animation(targets)
  1377.     wait(0)
  1378.     for target in targets
  1379.       target.attack_effect(@active_battler)
  1380.       display_action_effects(target)
  1381.     end
  1382.     #=====================
  1383.     #@active_battler.cp = 0
  1384.     #=====================
  1385.    end
  1386.   #===============================
  1387.   #★防御行动   执行
  1388.   #===============================
  1389.    
  1390.    
  1391.    def execute_action_guard
  1392.    
  1393.     wait(45)
  1394.     #=====================
  1395.     #@active_battler.cp = 0
  1396.     #=====================
  1397.   end
  1398.    #===============================
  1399.    #★逃走  执行
  1400.    #===============================
  1401.   
  1402.   def execute_action_escape
  1403.    
  1404.     @active_battler.escape
  1405.     Sound.play_escape
  1406.     wait(45)
  1407.     #=====================
  1408.     #@active_battler.cp = 0
  1409.     #=====================
  1410.   end
  1411.   #====================================
  1412.   #★待机  执行
  1413.   #====================================
  1414.   def execute_action_wait
  1415.    
  1416.     wait(45)
  1417.     #=====================
  1418.     #@active_battler.cp = 0
  1419.     #=====================
  1420.   end
  1421.   
  1422.   #============================
  1423.   #★特技   执行
  1424.   #============================
  1425.   def execute_action_skill
  1426.     skill = @active_battler.action.skill
  1427.    
  1428.     targets = @active_battler.action.make_targets
  1429.    
  1430.    
  1431.     user = @active_battler.action.skill_user
  1432.     if skill.animation2_id != 0
  1433.       display_animation(user,skill.animation2_id)
  1434.     end  
  1435.     display_animation(targets, skill.animation_id)
  1436.    
  1437.     wait_for_animation
  1438.    
  1439.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  1440.     $game_temp.common_event_id = skill.common_event_id
  1441.     for target in targets
  1442.       target.skill_effect(@active_battler, skill)
  1443.       display_action_effects(target, skill)
  1444.     end
  1445.     #=====================
  1446.     #@active_battler.cp = 0
  1447.     #=====================
  1448.   end
  1449.   
  1450.   #==============================
  1451.   #★物品行动 执行
  1452.   #==============================
  1453.   
  1454.   def execute_action_item
  1455.     item = @active_battler.action.item
  1456.    
  1457.    
  1458.     user = @active_battler.action.skill_user
  1459.     if item.animation2_id != 0
  1460.       display_animation(user,item.animation2_id)
  1461.     end  
  1462.    
  1463.    
  1464.     targets = @active_battler.action.make_targets
  1465.     display_animation(targets, item.animation_id)
  1466.    
  1467.     wait_for_animation
  1468.    
  1469.     $game_party.consume_item(item)
  1470.     $game_temp.common_event_id = item.common_event_id
  1471.     for target in targets
  1472.       target.item_effect(@active_battler, item)
  1473.       display_action_effects(target, item)
  1474.     end
  1475.     #=====================
  1476.    # @active_battler.cp = 0
  1477.     #=====================
  1478.   end
  1479.   #===========================
  1480.   #★行动动画显示
  1481.   #animation_id :-1 为普通攻击
  1482.   #===========================
  1483.   def display_animation(targets, animation_id)
  1484.     if animation_id < 0
  1485.       display_attack_animation(targets)
  1486.     else
  1487.       display_normal_animation(targets, animation_id)
  1488.     end
  1489.     wait(20)
  1490.    
  1491.   end
  1492.   #====================================
  1493.   #★普通攻击的动画显示
  1494.   #====================================
  1495.   def display_attack_animation(targets)

  1496.     if @active_battler.is_a?(Game_Enemy)
  1497.         user = @active_battler.action.skill_user
  1498.       if @select_input == true
  1499.         a1 = 0
  1500.         a2 = 0
  1501.         eval(@active_battler.note)
  1502.         display_normal_animation(user,a1)if   a1 != 0
  1503.         display_normal_animation(targets,a2)if  a2 !=0
  1504.         Sound.play_enemy_attack if   a1 == 0 and a2 == 0
  1505.         wait(15, true) if  a1 == 0 and  a2 == 0
  1506.       elsif @active_battler.animation1_id != 0 or @active_battler.animation2_id != 0
  1507.             display_normal_animation(user,@active_battler.animation1_id)if @active_battler.animation1_id != 0
  1508.             display_normal_animation(targets,@active_battler.animation2_id)if @active_battler.animation2_id != 0
  1509.             Sound.play_enemy_attack if  @active_battler.animation1_id == 0 and @active_battler.animation2_id == 0
  1510.             wait(15, true) if  @active_battler.animation1_id == 0 and @active_battler.animation2_id == 0
  1511.        end     
  1512.    
  1513.    
  1514.    else
  1515.       aid1 = @active_battler.atk_animation_id
  1516.       aid2 = @active_battler.atk_animation_id2
  1517.      
  1518.       user = @active_battler.action.skill_user
  1519.       if @active_battler.act_animation_id != 0
  1520.         display_normal_animation(user,@active_battler.act_animation_id)
  1521.       end  
  1522.      
  1523.    
  1524.       
  1525.       display_normal_animation(targets, aid1, false)
  1526.       display_normal_animation(targets, aid2, true)
  1527.     end
  1528.     wait_for_animation
  1529.   end
  1530.   
  1531.   #========================================
  1532.   #★显示行动结果
  1533.   #========================================
  1534.    def display_action_effects(target, obj = nil)
  1535.     unless target.skipped
  1536.       wait(0)
  1537.       #=======================
  1538.       target.damage_pop = true
  1539.       #=======================
  1540.       display_damage(target, obj)
  1541.       display_critical(target, obj)
  1542.       display_state_changes(target, obj)
  1543.    
  1544.     end
  1545.   end
  1546.   
  1547.   #======================================
  1548.   #★显示HP伤害
  1549.   #======================================
  1550.   
  1551.   
  1552.   def display_hp_damage(target, obj = nil)
  1553.      
  1554.     if target.hp_damage == 0               
  1555.       return if obj != nil and obj.damage_to_mp
  1556.       return if obj != nil and obj.base_damage == 0
  1557.       
  1558.     elsif target.absorbed                   # 吸収
  1559.      
  1560.        #=====================================
  1561.       @active_battler.damage_pop = true
  1562.       @active_battler.damage = target.hp_damage
  1563.      
  1564.       target.cp -= target.hp_damage/100
  1565.       target.cp = [target.cp,0].max
  1566.       @cp_battle.cp_battler[target].x = [390+300*target.cp/target.maxcp,95].max
  1567.      if target.dead?
  1568.          @cp_battle.cp_battler[target].collapse = true
  1569.          target.cp = 0
  1570.          @cp_battle.cp_battler[target].update
  1571.       end
  1572.       
  1573.       
  1574.    
  1575.       #=====================================
  1576.     elsif target.hp_damage > 0            
  1577.      
  1578.       if target.actor?
  1579.       
  1580.         Sound.play_actor_damage
  1581.         $game_troop.screen.start_shake(5, 5, 10)
  1582.       else
  1583.       
  1584.         Sound.play_enemy_damage
  1585.         target.blink = true
  1586.       end
  1587.       #=====================================
  1588.       
  1589.       target.cp -= target.hp_damage/100
  1590.       target.cp = [target.cp,0].max
  1591.       @cp_battle.cp_battler[target].x = [390 + 300*target.cp/target.maxcp,95].max
  1592.       
  1593.       if target.dead?
  1594.          @cp_battle.cp_battler[target].collapse = true
  1595.          target.cp = 0
  1596.          @cp_battle.cp_battler[target].update
  1597.       end
  1598.       
  1599.      
  1600.       #wait(20)
  1601.       #=====================================
  1602.     else                                    
  1603.      
  1604.       Sound.play_recovery
  1605.     end
  1606.    
  1607.   end
  1608.   #--------------------------------------------------------------------------
  1609.   # ● MP 伤害表示
  1610.   #--------------------------------------------------------------------------
  1611.   def display_mp_damage(target, obj = nil)
  1612.     return if target.dead?
  1613.     return if target.mp_damage == 0
  1614.    
  1615.     if target.absorbed                      # 吸收
  1616.       
  1617.       #=====================================
  1618.       @active_battler.damage_pop = true
  1619.       @active_battler.damage = - target.mp_damage
  1620.      
  1621.       
  1622.       target.cp -= target.mp_damage/100
  1623.       target.cp = [target.cp,0].max
  1624.       @cp_battle.cp_battler[target].x = [390+300*target.cp/target.maxcp,95].max
  1625.       
  1626.       #=====================================
  1627.     elsif target.mp_damage > 0              
  1628.    
  1629.      #=====================================
  1630.       target.cp -= target.mp_damage/100
  1631.       target.cp = [target.cp,0].max
  1632.       @cp_battle.cp_battler[target].x = [390+300*target.cp/target.maxcp,95].max
  1633.       
  1634.       #=====================================
  1635.     else                                    
  1636.    
  1637.       Sound.play_recovery
  1638.     end
  1639.    
  1640.   end
  1641.   
  1642.   #============================================
  1643.   #★伤害变化显示
  1644.   #============================================  
  1645.   def display_state_changes(target,obj = nil)
  1646.     for state in target.added_states
  1647.       if state.id == 1 # 不能战斗
  1648.         target.perform_collapse
  1649.          return
  1650.       end
  1651.       target.damage_pop = true if state != nil
  1652.       target.state_name = state.name if state.id != 1 #战斗不能不显示
  1653.         update_basic
  1654.       end
  1655.     for state in target.removed_states
  1656.       target.damage_pop = true if state != nil
  1657.       target.state_name = "解除" + state.name if state.id != 1 #复活时不显示
  1658.       update_basic
  1659.     end
  1660.       
  1661.   end
  1662.   #=======================================
  1663.   #★重定义对话窗口刷新
  1664.   #=======================================
  1665.   def wait_for_message
  1666.    wait(45)
  1667.   end
  1668.   
  1669.   #================================================
  1670.   #★经验金钱获得物品提示窗口(原方法重定义)
  1671.   #================================================
  1672.   def display_exp_and_gold
  1673.     exp=$game_troop.exp_total
  1674.     gold=$game_troop.gold_total
  1675.     $game_party.gain_gold(gold)
  1676.     drop_items = $game_troop.make_drop_items
  1677.     @window_egi = Window_egi.new(exp,gold,drop_items)
  1678.     @window_egi.openness=0
  1679.     wait(15)
  1680.     loop do
  1681.       if @window_egi.openness <= 255
  1682.        @window_egi.openness+=48
  1683.       end
  1684.       if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1685.         break
  1686.       end
  1687.       Graphics.update
  1688.       Input.update
  1689.       
  1690.       
  1691.     end
  1692.    
  1693.     loop do
  1694.       @window_egi.openness -= 48 if @window_egi.openness >= 0
  1695.       Graphics.update
  1696.       if @window_egi.openness <= 0
  1697.         break
  1698.       end  
  1699.     end #loop
  1700.    
  1701.   end

  1702.   alias oldstart_skill_selection  start_skill_selection
  1703.   def start_skill_selection
  1704.     oldstart_skill_selection
  1705.     @skill_window.z = 3000
  1706.     @skill_window.help_window.z = 3000
  1707.    
  1708.   end  
  1709.   alias oldstart_item_selection  start_item_selection
  1710.   def start_item_selection
  1711.     oldstart_item_selection
  1712.     @item_window.z=3000
  1713.     @item_window.help_window.z = 3000

  1714.   end

  1715.   
  1716. end #class


  1717. #=====================================================
  1718. #★战斗状态窗口类
  1719. #=====================================================

  1720. class Window_BattleStatus < Window_Selectable
  1721.   
  1722.   def draw_item(index)
  1723.     rect = item_rect(index)
  1724.     rect.x += 4
  1725.     rect.width -= 8
  1726.     self.contents.clear_rect(rect)
  1727.     actor = $game_party.members[index]
  1728.     self.contents.font.color = black_color
  1729.     draw_actor_name(actor, 96, rect.y)
  1730.     draw_actor_state(actor, 114+48, rect.y, 48)
  1731.     draw_actor_hp(actor, 174, rect.y, 120)
  1732.     draw_actor_mp(actor, 310, rect.y, 120)
  1733.   end
  1734.   #=======================================================================
  1735.   #★定义角色头像的描绘
  1736.   #=======================================================================
  1737.    def draw_actorface(actor)
  1738.       
  1739.     draw_face(actor.face_name, actor.face_index, 5, 5, size = 80)
  1740.   end
  1741.   #=========================================================================
  1742.   
  1743.   def update_cursor
  1744.      super
  1745.      self.cursor_rect.width = self.width - 120
  1746.      self.cursor_rect.x = 90
  1747.      
  1748.   end  
  1749.   #========================================================================
  1750. end #class

  1751. #=================================================
  1752. #★战斗图处理的类
  1753. #=================================================

  1754. class Sprite_Battler < Sprite_Base
  1755.   
  1756. #=================================
  1757. #★刷新
  1758. #=================================
  1759. def update
  1760.     super
  1761.     if @battler == nil
  1762.       self.bitmap = nil
  1763.     else
  1764.       @use_sprite = @battler.use_sprite?
  1765.       if @use_sprite
  1766.         self.x = @battler.screen_x
  1767.         self.y = @battler.screen_y
  1768.         self.z = @battler.screen_z
  1769.         update_battler_bitmap
  1770.         if @battler.act_status == 1
  1771.          if self.opacity <280
  1772.            self.opacity += 20
  1773.         end
  1774.       elsif @battler.act_status == -1
  1775.          if self.opacity > 125
  1776.            self.opacity -= 20
  1777.          end  
  1778.       elsif  (@battler.dead? or   @battler.hidden) and @battler.collapse == false
  1779.       
  1780.       else
  1781.         self.opacity = 255
  1782.       end  
  1783.       end
  1784.       
  1785.       setup_new_effect
  1786.       update_effect
  1787.      
  1788.     end
  1789.   end  
  1790. #===============================
  1791. #
  1792. #===============================
  1793.   def update_battler_bitmap
  1794.     if @battler.battler_name != @battler_name or
  1795.        @battler.battler_hue != @battler_hue
  1796.       @battler_name = @battler.battler_name
  1797.       @battler_hue = @battler.battler_hue
  1798.       self.bitmap = Cache.battler(@battler_name, @battler_hue)
  1799.       @width = bitmap.width
  1800.       @height = bitmap.height
  1801.       self.ox = @width / 2
  1802.       self.oy = @height
  1803.       if (@battler.dead? or @battler.hidden) and @battler.collapse == false
  1804.         
  1805.       end
  1806.     end
  1807.     if @battler.is_a?(Game_Actor)
  1808.       count = 80
  1809.     else
  1810.       count = 90
  1811.     end  
  1812.    
  1813. #此处定义了待机图多少帧切换一次   
  1814.     if Graphics.frame_count%count <= 9
  1815.       self.bitmap = Cache.battler(@battler_name,@battler_hue)
  1816.       @width = bitmap.width
  1817.       @height = bitmap.height
  1818.       self.ox = @width / 2
  1819.       self.oy = @height
  1820.     elsif Graphics.frame_count%count <= 19
  1821.       b_name = @battler_name + "待1"
  1822.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1823.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1824.          @width = bitmap.width
  1825.          @height = bitmap.height
  1826.          self.ox = @width/2
  1827.          self.oy = @height
  1828.        end
  1829.     elsif Graphics.frame_count%count <= 29
  1830.       b_name = @battler_name + "待2"
  1831.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1832.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1833.          @width = bitmap.width
  1834.          @height = bitmap.height
  1835.          self.ox = @width/2
  1836.          self.oy = @height
  1837.        end
  1838.     elsif Graphics.frame_count%count <= 39
  1839.       b_name = @battler_name + "待3"
  1840.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1841.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1842.          @width = bitmap.width
  1843.          @height = bitmap.height
  1844.          self.ox = @width/2
  1845.          self.oy = @height
  1846.        end
  1847.     elsif Graphics.frame_count%count <= 49
  1848.       b_name = @battler_name + "待4"
  1849.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1850.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1851.          @width = bitmap.width
  1852.          @height = bitmap.height
  1853.          self.ox = @width/2
  1854.          self.oy = @height
  1855.        end
  1856.     elsif Graphics.frame_count%count <= 59
  1857.       b_name = @battler_name + "待5"
  1858.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1859.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1860.          @width = bitmap.width
  1861.          @height = bitmap.height
  1862.          self.ox = @width/2
  1863.          self.oy = @height
  1864.        end
  1865.     elsif Graphics.frame_count%count <= 69
  1866.       b_name = @battler_name + "待6"
  1867.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1868.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1869.          @width = bitmap.width
  1870.          @height = bitmap.height
  1871.          self.ox = @width/2
  1872.          self.oy = @height
  1873.        end
  1874.     elsif Graphics.frame_count%count <= 79
  1875.       b_name = @battler_name + "待7"
  1876.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1877.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1878.          @width = bitmap.width
  1879.          @height = bitmap.height
  1880.          self.ox = @width/2
  1881.          self.oy = @height
  1882.        end
  1883.     end      
  1884.       
  1885.    
  1886.   end
  1887.   
  1888. #==================================
  1889. #
  1890. #==================================
  1891. def setup_new_effect
  1892.     if @battler.white_flash
  1893.       @effect_type = WHITEN
  1894.       @effect_duration = 16
  1895.       @battler.white_flash = false
  1896.     end
  1897.    
  1898.     if @battler.blink
  1899.       @effect_type = BLINK
  1900.       @effect_duration = 20
  1901.       @battler.blink = false
  1902.     end
  1903.     if not @battler_visible and @battler.exist?
  1904.       @effect_type = APPEAR
  1905.       @effect_duration = 16
  1906.       @battler_visible = true
  1907.     end
  1908.    
  1909.     if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
  1910.       if @battler.damage != nil
  1911.         s_1 = @battler.damage > 0 ? 0 : 1
  1912.         @battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
  1913.       end
  1914.       damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
  1915.       damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
  1916.       damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
  1917.       damage("失误",@battler.critical) if @battler.missed
  1918.       damage("MISS",@battler.critical) if @battler.evaded
  1919.       damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
  1920.       #================================
  1921.       damage(@battler.state_name, @battler.critical) if @battler.state_name != nil
  1922.       @battler.state_name = nil
  1923.       #================================
  1924.       @battler.slip_damage = 0
  1925.       @battler.auto_damage = 0
  1926.       @battler.damage = nil
  1927.       @battler.damage_pop = false
  1928.     end
  1929.    
  1930.    
  1931.     if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
  1932.       if @battler.damage != nil
  1933.         s_1 = @battler.damage > 0 ? 0 : 1
  1934.         @battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
  1935.       end  
  1936.       
  1937.       damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
  1938.       damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
  1939.       damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
  1940.       damage("失误",@battler.critical) if @battler.missed
  1941.       damage("MISS",@battler.critical) if @battler.evaded
  1942.       damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
  1943.       @battler.slip_damage = 0
  1944.       @battler.auto_damage = 0
  1945.       @battler.damage = nil
  1946.       @battler.damage_pop = false
  1947.     end
  1948.    
  1949.    
  1950.    
  1951.     if @battler_visible and @battler.hidden
  1952.       @effect_type = DISAPPEAR
  1953.       @effect_duration = 32
  1954.       @battler_visible = false
  1955.     end
  1956.     if @battler.collapse and self.opacity != 0
  1957.       @effect_type = COLLAPSE
  1958.       @effect_duration = 48
  1959.       @battler.collapse = false
  1960.       @battler_visible = false
  1961.     end
  1962.     if @battler.animation_id != 0 and @battler.collapse == false
  1963.       self.opacity = 255
  1964.       animation = $data_animations[@battler.animation_id]
  1965.       mirror = @battler.animation_mirror
  1966.       start_animation(animation, mirror)
  1967.       @battler.animation_id = 0
  1968.     end
  1969.    
  1970.       
  1971.   end
  1972. #=========================================
  1973. #
  1974. #=========================================
  1975.   
  1976.   

  1977.   
  1978.   
  1979. end #class  








  1980. #=================================================
  1981. #★处理战斗行动的类
  1982. #=================================================
  1983. class Game_BattleAction

  1984.   def skill_user
  1985.     targets = []
  1986.     targets.push(battler)
  1987.      
  1988.      return targets.compact
  1989.    end
  1990.   

  1991.   
  1992.    
  1993. end#class  
  1994. #=======================================================
  1995. #★处理敌人的类
  1996. #
  1997. #=======================================================

  1998. class Game_Enemy < Game_Battler
  1999. def note
  2000.     return $data_enemies[@enemy_id].note
  2001. end  

  2002.   
  2003. end#class
  2004. #======================================================
  2005. #★角色处理类
  2006. #======================================================
  2007. class Game_Actor < Game_Battler

  2008.   def setup(actor_id)
  2009.     actor = $data_actors[actor_id]
  2010.     @actor_id = actor_id
  2011.     @name = actor.name
  2012.     #--------------------------------------------
  2013.     #★添加战斗图名称,以便战斗中获取战斗图
  2014.     #--------------------------------------------
  2015.     @battler_name = actor_id.to_s + "_z"
  2016.     @battler_hue = 0
  2017.     @flash = false
  2018.     @character_name = actor.character_name
  2019.     @character_index = actor.character_index
  2020.     @face_name = actor.face_name
  2021.     @face_index = actor.face_index
  2022.     @class_id = actor.class_id
  2023.     @weapon_id = actor.weapon_id
  2024.     @armor1_id = actor.armor1_id
  2025.     @armor2_id = actor.armor2_id
  2026.     @armor3_id = actor.armor3_id
  2027.     @armor4_id = actor.armor4_id
  2028.     @level = actor.initial_level
  2029.     @exp_list = Array.new(101)
  2030.     make_exp_list
  2031.     @exp = @exp_list[@level]
  2032.     @skills = []
  2033.     for i in self.class.learnings
  2034.       learn_skill(i.skill_id) if i.level <= @level
  2035.     end
  2036.     clear_extra_values
  2037.     recover_all
  2038.   end
  2039.   #--------------------------------------------------------------------------
  2040.   # ● 执行自动回复 (回合结束时调用)
  2041.   #--------------------------------------------------------------------------
  2042.   def do_auto_recovery
  2043.     if auto_hp_recover and not dead?
  2044.       self.hp += maxhp / 20
  2045.       @auto_damage = maxhp / 20
  2046.     end
  2047.   end
  2048.   #==========================================================================
  2049.   #★ 定义武器的行动方动画id,默认为第一武器的id
  2050.   #==========================================================================
  2051.   
  2052.   def act_animation_id
  2053.     return weapons[0] == nil ? 0 : weapons[0].animation2_id
  2054.   end  
  2055.   
  2056.   #==========================================================================
  2057.   #==========================================================================
  2058.   #==========================================================================
  2059.   #★定义角色战斗图 X 坐标
  2060.   #==========================================================================
  2061.   def screen_x
  2062.    if self.index != nil
  2063.     case index
  2064.      when 0
  2065.       return 420
  2066.      when 1
  2067.       return 560
  2068.      when 2
  2069.       return 560
  2070.      when 3
  2071.       return 700
  2072.     end  
  2073.   else
  2074.    return 0
  2075.   end
  2076. end
  2077.   #========================================================================
  2078.   #★定义角色战斗图 Y 坐标
  2079.   #========================================================================
  2080.   def screen_y
  2081.     if self.index != nil
  2082.       case index
  2083.        when 0
  2084.          return 470
  2085.        when 1
  2086.          return 390
  2087.        when 2
  2088.          return 530
  2089.        when 3
  2090.          return 470
  2091.        end
  2092.     else   
  2093.    
  2094.     return 230
  2095.    end
  2096.   end  
  2097.   
  2098.   #========================================================================
  2099.   #★定义角色战斗图 Z 坐标
  2100.   #========================================================================   
  2101.   def screen_z
  2102.      if self.index != nil
  2103.       return 4 - self.index
  2104.     else
  2105.       return 0
  2106.     end
  2107.   end
  2108.   
  2109.   

  2110.   
  2111.   def use_sprite?
  2112.     return true
  2113.   end
  2114.   
  2115. end#class




  2116. #==========================================================
  2117. #★模块定义
  2118. #==========================================================
  2119.   module RPG
  2120.   class BaseItem
  2121.     def animation2_id
  2122.       return @note != nil ? @note.to_i : 0
  2123.     end
  2124.   end  
  2125.    class Enemy
  2126.      def animation1_id
  2127.        animation1_id = @note.split(/,/)[0]
  2128.        return animation1_id != nil ? animation1_id.to_i : 0
  2129.      end
  2130.      def animation2_id
  2131.        animation2_id = @note.split(/,/)[1]
  2132.        return animation2_id != nil ? animation2_id.to_i : 0
  2133.      end
  2134.     end
  2135.    
  2136.   end
  2137.   
  2138.   
  2139. #======================================================
  2140. #★精灵类主模块_伤害部分的添加
  2141. #======================================================
  2142. class Sprite_Base < Sprite
  2143.   def initialize(viewport = nil)
  2144.     super(viewport)
  2145.     @use_sprite = true         
  2146.     @animation_duration = 0     
  2147.     #=============
  2148.     @_damage_duration = 0
  2149.     #=============
  2150.   end
  2151. alias oldupdate update
  2152.   def update
  2153.     oldupdate
  2154.     #================
  2155.     damge_update
  2156.     #================

  2157.   end

  2158. alias olddispose dispose
  2159.    def dispose
  2160.      olddispose
  2161.      
  2162.     #===============
  2163.     dispose_damage
  2164.     #===============
  2165.    end
  2166.   
  2167. #==========================================================================
  2168. #★定义伤害处理
  2169. #==========================================================================

  2170.    def damage(value, critical,type = 0)
  2171.       dispose_damage
  2172.       if value.is_a?(Numeric)
  2173.         damage_string = value.abs.to_s
  2174.       else
  2175.         damage_string = value.to_s
  2176.       end
  2177.       bitmap = Bitmap.new(160, 48)
  2178.       bitmap.font.name = "楷体"
  2179.       bitmap.font.size = 35
  2180.       bitmap.font.color.set(0, 0, 0)
  2181.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2182.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2183.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2184.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2185.       if value.is_a?(Numeric) and value < 0
  2186.         case type
  2187.          when 0
  2188.            bitmap.font.color.set(176, 255, 144)
  2189.          when 1
  2190.            bitmap.font.color.set(0,100,255)
  2191.          end  
  2192.       else
  2193.         case type
  2194.         when 0
  2195.           bitmap.font.color.set(255, 255, 255)
  2196.         when 1
  2197.           bitmap.font.color.set(200,0,185)
  2198.         end  
  2199.       end
  2200.       
  2201.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2202.       if critical and type == 0
  2203.         bitmap.font.size = 40
  2204.         bitmap.font.color.set(0, 0, 0)
  2205.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2206.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2207.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2208.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2209.         bitmap.font.color.set(255, 255, 255)
  2210.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2211.       end
  2212.       @_damage_sprite = ::Sprite.new(self.viewport)
  2213.       @_damage_sprite.bitmap = bitmap
  2214.       @_damage_sprite.ox = 80
  2215.       @_damage_sprite.oy = 20
  2216.       @_damage_sprite.x = self.x
  2217.       @_damage_sprite.y = self.y - self.oy / 2
  2218.       @_damage_sprite.z = 3000
  2219.       @_damage_duration = 40
  2220.     end
  2221.    
  2222.     #===================================================
  2223.     #
  2224.     #===================================================
  2225.     def dispose_damage
  2226.       if @_damage_sprite != nil
  2227.         @_damage_sprite.bitmap.dispose
  2228.         @_damage_sprite.dispose
  2229.         @_damage_sprite = nil
  2230.         @_damage_duration = 0
  2231.       end
  2232.     end
  2233.     #=============================================
  2234.     #
  2235.     #=============================================
  2236.     def damge_update
  2237.        if @_damage_duration > 0
  2238.         @_damage_duration -= 1
  2239.         case @_damage_duration
  2240.         when 38..39
  2241.           @_damage_sprite.y -= 4
  2242.         when 36..37
  2243.           @_damage_sprite.y -= 2
  2244.         when 34..35
  2245.           @_damage_sprite.y += 2
  2246.         when 28..33
  2247.           @_damage_sprite.y += 4
  2248.         end
  2249.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  2250.         if @_damage_duration == 0
  2251.           dispose_damage
  2252.         end
  2253.       end
  2254.    end
  2255.   
  2256.   

  2257. end#class
  2258. #=======================================================
  2259. #★战斗经验、金钱、物品提示窗口
  2260. #=======================================================
  2261. class Window_egi<Window_Base
  2262. #====================================
  2263. #●初始化
  2264. #====================================
  2265. def initialize(exp, gold,item)
  2266.    
  2267.    
  2268.     @exp=exp
  2269.     @gold=gold
  2270.     @item=item
  2271.     @item_name = {}
  2272.     n=0
  2273.     m=0
  2274.    
  2275.     if @item != nil
  2276.      for itn in @item
  2277.       
  2278.       if @item_name[itn.name]==nil
  2279.          @item_name[itn.name]=[0,""]
  2280.          @item_name[itn.name][1]=itn.icon_index
  2281.          m+=1
  2282.       end
  2283.       @item_name[itn.name][0] += 1
  2284.     end
  2285.     end
  2286.     if @gold>0
  2287.       m+=1
  2288.     end  
  2289.     super(300,150, 200,32*m+112 )
  2290.     self.opacity = 150
  2291.    
  2292.     refresh
  2293.   end
  2294.   #--------------------------------------------------------------------------
  2295.   # ● 刷新
  2296.   #--------------------------------------------------------------------------
  2297. def refresh
  2298.     self.contents.clear
  2299.     self.contents.font.size=19
  2300.     if @exp > 0
  2301.      self.contents.font.color = Color.new(255,255,0,255)
  2302.      self.contents.draw_text(6,8,96,32,"获得经验:")
  2303.      self.contents.font.color = Color.new(255,255,255,255)
  2304.      self.contents.draw_text(112,8,64,32,sprintf("%4s",@exp))
  2305.    
  2306.    elsif @exp == 0
  2307.      self.contents.font.color = Color.new(255,0,0,0)
  2308.      self.contents.draw_text(6,8,128,32,"没有获得经验!")
  2309.      
  2310.    end
  2311.    if @gold>0
  2312.      self.contents.font.color = Color.new(255,255,0,255)
  2313.      self.contents.draw_text(6,40,96,32,"获得金钱:")
  2314.      self.contents.font.color = Color.new(255,255,255,255)
  2315.      self.contents.draw_text(96,40,64,32,sprintf("%4s",@gold)+Vocab::gold)
  2316.    end  
  2317.    if @item_name.size != 0
  2318.    self.contents.font.size = 20
  2319.    self.contents.font.color = Color.new(255,255,0)
  2320.    self.contents.draw_text(25,72,96,32,"获得物品")
  2321.    i=0

  2322.     i=0
  2323.     self.contents.font.size = 18
  2324.     self.contents.font.color = Color.new(255,255,255,255)
  2325.     for itn in @item_name
  2326.      draw_icon(itn[1][1] ,6 ,106+i*32 , true)
  2327.      self.contents.draw_text(30,106+i*32,148,32,itn[0] + " × "+ itn[1][0].to_s)
  2328.    
  2329.      i+=1
  2330.     end
  2331.       
  2332.      
  2333.   end
  2334.   
  2335.    
  2336.    
  2337. end
  2338.    
  2339.    
  2340. end#class  

  2341. module Cache
  2342.   def self.battleback(filename)
  2343.      load_bitmap("Graphics/Battlebacks/", filename)
  2344.    end   
  2345. end   
  2346.   
  2347. #=====================================================
  2348. #添加战斗背景的相关定义
  2349. #=====================================================
  2350. class Game_Map
  2351.   attr_accessor :name   
  2352.     def setup(map_id)
  2353.     @map_id = map_id
  2354.     @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
  2355.     @mapinfo = load_data("Data/MapInfos.rvdata")
  2356.     #============================
  2357.     @name = @mapinfo[@map_id].name
  2358.     #============================
  2359.     @display_x = 0
  2360.     @display_y = 0
  2361.     @passages = $data_system.passages
  2362.     referesh_vehicles
  2363.     setup_events
  2364.     setup_scroll
  2365.     setup_parallax
  2366.     @need_refresh = false
  2367.    end #class
  2368.   
  2369.   
  2370.    def area(old_name,new_name)
  2371.   
  2372.     for area in  $data_areas.values
  2373.       if area.name == old_name and area.map_id == @map_id
  2374.         area.name == new_name
  2375.       end
  2376.     end
  2377.   end  
  2378. end #class

  2379. class Spriteset_Battle

  2380.   def create_battleback
  2381.     name = $game_map.name
  2382.     source = $game_temp.background_bitmap
  2383.     bitmap = Bitmap.new(870, 640)
  2384.     if BATTLE_BACK[name] != nil
  2385.      
  2386.      bitmap.blt(0,0,source,source.rect)
  2387.      @battleback_sprite = Sprite.new(@viewport1)
  2388.      @battleback_sprite.bitmap = bitmap
  2389.      @battleback_sprite.ox = 272
  2390.      @battleback_sprite.oy = 208
  2391.      @battleback_sprite.x = 260
  2392.      @battleback_sprite.y = 208
  2393.     else
  2394.    
  2395.      bitmap.stretch_blt(bitmap.rect, source, source.rect)
  2396.      bitmap.radial_blur(90, 12)
  2397.      @battleback_sprite = Sprite.new(@viewport1)
  2398.      @battleback_sprite.bitmap = bitmap
  2399.      @battleback_sprite.ox = 320
  2400.      @battleback_sprite.oy = 240
  2401.      @battleback_sprite.x = 272
  2402.      @battleback_sprite.y = 176
  2403.      @battleback_sprite.wave_amp = 8
  2404.      @battleback_sprite.wave_length = 240
  2405.      @battleback_sprite.wave_speed = 120
  2406.     end
  2407.      
  2408.   end
  2409.   alias oldcreate_battlefloor create_battlefloor
  2410.   def create_battlefloor
  2411.    oldcreate_battlefloor
  2412.    @battlefloor_sprite.opacity = 0
  2413.   end
  2414. end#class

  2415. #==============================================================================
  2416. # ■ Game_Interpreter
  2417. #------------------------------------------------------------------------------
  2418. #  执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、
  2419. # Game_Event 类的内部使用。
  2420. #==============================================================================

  2421. class Game_Interpreter
  2422.    #===========================================================================
  2423.    #☆角色显示动画方法
  2424.    #○range:动画影响范围,-1全体或相应角色id
  2425.    #●anim_id:动画id
  2426.    #===========================================================================
  2427.    def add_aa(range,anim_id)
  2428.      iterate_battler(1,range) do |battler|
  2429.       next unless battler.exist?
  2430.       battler.animation_id = anim_id
  2431.     end
  2432.      
  2433.    end #def
  2434.    
  2435.   
  2436. end #class
复制代码

作者: 飒沓拂柳絮    时间: 2012-12-23 13:40
继续求大神,或者推荐一个比较好的45度战斗系统也好啊!!!




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