Project1

标题: 1.03B CP及时战斗与武器随机属性脚本整合问题! [打印本页]

作者: 迦月    时间: 2009-7-24 22:21
标题: 1.03B CP及时战斗与武器随机属性脚本整合问题!
本帖最后由 迦月 于 2009-7-26 15:27 编辑
  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. #"汪洋"=>"草地1",


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

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

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

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

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

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

  545. #==========================================================================
  546. #
  547. #==========================================================================
  548. class Scene_Battle < Scene_Base
  549.   
  550.   #--------------------------------------------------------------------------
  551.   # ● 開始処理
  552.   #--------------------------------------------------------------------------
  553.   def start
  554.     super
  555.     #======================
  556.     @select_input = true
  557.     #======================
  558.     $game_temp.in_battle = true
  559.     #=============================================
  560.     unless  $BTEST
  561.       @battleback = nil
  562.       for area in  $data_areas.values
  563.         
  564.         if $game_player.in_area?(area)
  565.            
  566.             name = area.name
  567.             unless B_B_CONFIG
  568.              @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")
  569.                break
  570.             else
  571.               if BATTLE_BACK[name] != nil
  572.                 @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")
  573.               end
  574.               break  
  575.                
  576.                
  577.            end
  578.          end
  579.       end     
  580.         if @battleback == nil
  581.             name = $game_map.name
  582.             unless B_B_CONFIG
  583.               
  584.               @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")
  585.             else
  586.               if BATTLE_BACK[name] != nil
  587.                  @battleback = Cache.battleback("#{BATTLE_BACK[name]}")
  588.               else
  589.                  @battleback = nil
  590.               end
  591.             end   
  592.         end      
  593.       $game_temp.background_bitmap  = @battleback if @battleback != nil
  594.     end
  595.    #==================================================
  596.     @spriteset = Spriteset_Battle.new
  597.     @message_window = Window_BattleMessage.new
  598.     @message_window.visible = false
  599.     @action_battlers = []
  600.     @cp_battle = Scene_CP.new
  601.     @cp_battle.stop = false
  602.     create_info_viewport
  603.    
  604.    
  605.     @select_icon = Sprite.new
  606.     @select_icon.z = 148
  607.     @select_icon.bitmap = Bitmap.new("Graphics/system/光标")
  608.     @select_icon.opacity = 240
  609.     @select_icon.visible = false
  610.     @c_c = 0
  611.    
  612.    
  613.   end
  614.   
  615.   #==============================================================
  616.   #★ 定义光标刷新
  617.   #==============================================================
  618.    
  619.   def select_icon_update(s_sw = false)
  620.     if s_sw == false
  621.       @select_icon.visible = false
  622.     else
  623.       @select_icon.visible = true
  624.       @select_icon.x = $game_troop.members[@target_enemy_window.enemy.index].screen_x
  625.       @select_icon.y = $game_troop.members[@target_enemy_window.enemy.index].screen_y - 30
  626.       
  627.       if @c_c%2 == 0
  628.       @select_icon.opacity += 30
  629.       else
  630.       @select_icon.opacity -= 30  
  631.       end
  632.     end  
  633.    
  634.   end   
  635.   
  636.   
  637.   #=================================================
  638.   #★主刷新部分
  639.   #=================================================
  640.   
  641.   
  642.   def update
  643.     super
  644.    
  645.     @c_c += 1
  646.   
  647.     update_basic(true)
  648.     update_info_viewport               
  649.       return if judge_win_loss            
  650.       update_scene_change
  651.       if @target_enemy_window != nil
  652.         update_target_enemy_selection     
  653.       elsif @target_actor_window != nil
  654.         update_target_actor_selection     
  655.       elsif @skill_window != nil
  656.         update_skill_selection            
  657.       elsif @item_window != nil
  658.         update_item_selection            
  659.       
  660.       elsif @actor_command_window.active
  661.         update_actor_command_selection   
  662.       #=================================
  663.       elsif @cp_battle.stop ==  false
  664.         active_battler_update
  665.       #=================================  
  666.          
  667.       end
  668.       
  669.     #end
  670.   
  671.       
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● 战斗事件处理
  675.   #--------------------------------------------------------------------------
  676.   def process_battle_event
  677.     #============================
  678.     if $game_message.texts != nil
  679.      @message_window.visible = true
  680.     end
  681.     #=============================
  682.     loop do
  683.       return if judge_win_loss
  684.       return if $game_temp.next_scene != nil
  685.       $game_troop.interpreter.update
  686.       $game_troop.setup_battle_event
  687.      # wait_for_message
  688.       process_action if $game_troop.forcing_battler != nil
  689.       #======================================
  690.       unless $game_troop.interpreter.running?
  691.          if $game_message.texts != nil
  692.           @message_window.clear
  693.           @message_window.visible = false
  694.         end
  695.          return
  696.       end  
  697.       #=======================================
  698.       update_basic
  699.     end
  700.    
  701.   end
  702.   
  703.   
  704.   #================================================
  705.   #★战斗初始化
  706.   #===============================================
  707.   
  708.   def start_party_command_selection
  709.     if $game_temp.in_battle
  710.       @status_window.refresh
  711.       @status_window.index = @actor_index = -1
  712.       @active_battler = nil
  713.      
  714.      @actor_command_window.active = false
  715.       $game_party.clear_actions
  716.    
  717.     for i in 0..$game_party.members.size-1
  718.       if $game_party.members.act_status != -1
  719.         $game_party.members.act_status = -1
  720.       end  
  721.     end
  722.    
  723.       if $game_troop.surprise or not $game_party.inputable?
  724.         start_main
  725.       end
  726.     end
  727.   end
  728.   
  729.   #=============================================
  730.   #★角色回合的处理函数
  731.   #=============================================
  732.   
  733.   
  734.   def next_actor
  735.    
  736.     for i in 0..$game_party.members.size-1
  737.       if $game_party.members.act_status != -1
  738.         $game_party.members.act_status = -1
  739.       end  
  740.     end
  741.   
  742.     @info_viewport.visible = true
  743.     @status_window.refresh
  744.     @now_face = -1
  745.     @actor_command_window.index = 0
  746.     @actor_command_window.update
  747.     @status_window.update
  748.   
  749.     loop do
  750.    
  751.       if @actor_index == @actor_battler.size - 1
  752.       
  753.         start_main
  754.         return
  755.         
  756.       end   
  757.       @actor_index += 1
  758.       index = 0
  759.       for battler in $game_party.members
  760.         if battler == @actor_battler[@actor_index]
  761.           break
  762.         else
  763.           index += 1
  764.         end
  765.       end  
  766.       @status_window.index = index
  767.      
  768.        if @active_battler != nil and @active_battler != @actor_battler[@actor_index] and @active_battler.is_a?(Game_Actor)
  769.         @active_battler.act_status = -1
  770.       end
  771.       
  772.       @active_battler = @actor_battler[@actor_index]
  773.      
  774.      
  775.       @active_battler.act_status = 1
  776.       #=================================
  777.       #★角色回合事件处理
  778.       #================================
  779.       @active_battler.Battler_turn += 1
  780.       @active_battler.turn_start = 1
  781.       $game_troop.increase_turn
  782.       process_battle_event
  783.       if @active_battler.auto_battle
  784.         @active_battler.make_action
  785.         next
  786.       end
  787.       break if @active_battler.inputable?
  788.     end
  789.     start_actor_command_selection
  790.   end
  791.   
  792.   #===================================================
  793.   #★激活角色指令窗口
  794.   #===================================================
  795.   
  796.   def start_actor_command_selection
  797.     @actor_command_window.setup(@active_battler)
  798.     @actor_command_window.active = true
  799.     @actor_command_window.index = 0
  800.   end
  801.   
  802.   #==============================================
  803.   #★指令窗口刷新
  804.   #==============================================
  805.    def update_actor_command_selection
  806.    
  807.     if Input.trigger?(Input::C)
  808.       case @actor_command_window.index
  809.       when 0  # 攻击
  810.         Sound.play_decision
  811.         @active_battler.action.set_attack
  812.         start_target_enemy_selection
  813.       when 1  # 特技
  814.         Sound.play_decision
  815.         start_skill_selection
  816.       when 2  # 防御
  817.         Sound.play_decision
  818.         @active_battler.action.set_guard
  819.         next_actor
  820.         #@active_battler.cp = 0
  821.       when 3  # 物品
  822.         Sound.play_decision
  823.         start_item_selection
  824.       
  825.       when 4 #逃跑
  826.         if $game_troop.can_escape == false
  827.           Sound.play_buzzer
  828.           return
  829.         end
  830.         Sound.play_decision
  831.         process_escape
  832.     end
  833.     end
  834.   end
  835.   
  836.   #====================================
  837.   #★选择敌人
  838.   #====================================
  839.   def start_target_enemy_selection
  840.      if @skill_window != nil
  841.       @skill_window.visible = false
  842.     end
  843.     if @item_window != nil
  844.       @item_window.visible = false
  845.     end  
  846.     @target_enemy_window = Window_TargetEnemy.new
  847.     @target_enemy_window.opacity = 0
  848.     @target_enemy_window.contents_opacity = 0
  849.     #@target_enemy_window.y = @info_viewport.rect.y
  850.     #@info_viewport.rect.x += @target_enemy_window.width
  851.     #@info_viewport.ox += @target_enemy_window.width
  852.     @actor_command_window.active = false
  853.   
  854.     select_icon_update(true)
  855.   end
  856.   #===========================================================
  857.   #★结束敌人选择
  858.   #===========================================================
  859.    def end_target_enemy_selection
  860.     #@info_viewport.rect.x -= @target_enemy_window.width
  861.     #@info_viewport.ox -= @target_enemy_window.width
  862.     @target_enemy_window.dispose
  863.     @target_enemy_window = nil
  864.    
  865.     select_icon_update
  866.    
  867.     if @actor_command_window.index == 0
  868.       @actor_command_window.active = true
  869.     end
  870.   end  
  871.   #=======================================================
  872.   #★敌人选择刷新
  873.   #=======================================================
  874.   def update_target_enemy_selection
  875.    @target_enemy_window.update
  876.    
  877.     select_icon_update(true)

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

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

  1259. #=============================================================
  1260. #=============================================================
  1261.   #====================================================
  1262.   #★战斗主处理
  1263.   #====================================================
  1264.    def start_main
  1265.    
  1266.     for i in 0..$game_party.members.size-1
  1267.       if $game_party.members.act_status != 0
  1268.         $game_party.members.act_status = 0
  1269.       end  
  1270.     end
  1271.    
  1272.    
  1273.    
  1274.     if @info_viewport.visible
  1275.     @info_viewport.visible = false
  1276.     @status_window.y = 128
  1277.     @actor_command_window.y = 128
  1278.     end
  1279.     @actor_command_window.index = 0
  1280.     @actor_command_window.update
  1281.     @actor_command_window.active = false
  1282.    
  1283.     @status_window.index = @actor_index = -1
  1284.     @active_battler = nil
  1285.   
  1286.     make_action_orders
  1287.     wait(20)
  1288.    #=============================
  1289.   
  1290.    while @action_battlers.size != 0 and judge_win_loss == false
  1291.         process_action
  1292.         #process_battle_event
  1293.    end
  1294.    @cp_battle.stop = false
  1295.    #=============================
  1296.    
  1297. end
  1298. #=====================================
  1299. #★行动顺序生成
  1300. #=====================================


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

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

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

  1670.   alias oldstart_skill_selection  start_skill_selection
  1671.   def start_skill_selection
  1672.     oldstart_skill_selection
  1673.     @skill_window.z = 3000
  1674.     @skill_window.help_window.z = 3000
  1675.    
  1676.   end  
  1677.   alias oldstart_item_selection  start_item_selection
  1678.   def start_item_selection
  1679.     oldstart_item_selection
  1680.     @item_window.z=3000
  1681.     @item_window.help_window.z = 3000
  1682.   end  
  1683.   

  1684.   
  1685. end #class


  1686. #=====================================================
  1687. #★战斗状态窗口类
  1688. #=====================================================


  1689. class Window_BattleStatus < Window_Selectable
  1690.   
  1691.   
  1692.   def draw_item(index)
  1693.     rect = item_rect(index)
  1694.     rect.x += 4
  1695.     rect.width -= 8
  1696.     self.contents.clear_rect(rect)
  1697.     self.contents.font.color = normal_color
  1698.     actor = $game_party.members[index]
  1699.     draw_actor_name(actor, 96, rect.y)
  1700.     draw_actor_state(actor, 114+48, rect.y, 48)
  1701.     draw_actor_hp(actor, 174, rect.y, 120)
  1702.     draw_actor_mp(actor, 310, rect.y, 70)
  1703.   end
  1704.   #=======================================================================
  1705.   #★定义角色头像的描绘
  1706.   #=======================================================================
  1707.    def draw_actorface(actor)
  1708.       
  1709.     draw_face(actor.face_name, actor.face_index, 5, 5, size = 80)
  1710.   end
  1711.   #=========================================================================
  1712.   
  1713.   def update_cursor
  1714.      super
  1715.      self.cursor_rect.width = self.width - 120
  1716.      self.cursor_rect.x = 90
  1717.      
  1718.   end  
  1719.   #========================================================================
  1720. end #class

  1721. #=================================================
  1722. #★战斗图处理的类
  1723. #=================================================

  1724. class Sprite_Battler < Sprite_Base
  1725.   
  1726. #=================================
  1727. #★刷新
  1728. #=================================
  1729. def update
  1730.     super
  1731.     if @battler == nil
  1732.       self.bitmap = nil
  1733.     else
  1734.       @use_sprite = @battler.use_sprite?
  1735.       if @use_sprite
  1736.         self.x = @battler.screen_x
  1737.         self.y = @battler.screen_y
  1738.         self.z = @battler.screen_z
  1739.         update_battler_bitmap
  1740.         if @battler.act_status == 1
  1741.          if self.opacity <280
  1742.            self.opacity += 20
  1743.         end
  1744.       elsif @battler.act_status == -1
  1745.          if self.opacity > 125
  1746.            self.opacity -= 20
  1747.          end  
  1748.       elsif  (@battler.dead? or   @battler.hidden) and @battler.collapse == false
  1749.       
  1750.       else
  1751.         self.opacity = 255
  1752.       end  
  1753.       end
  1754.       
  1755.       setup_new_effect
  1756.       update_effect
  1757.      
  1758.     end
  1759.   end  
  1760. #===============================
  1761. #
  1762. #===============================
  1763.   def update_battler_bitmap
  1764.     if @battler.battler_name != @battler_name or
  1765.        @battler.battler_hue != @battler_hue
  1766.       @battler_name = @battler.battler_name
  1767.       @battler_hue = @battler.battler_hue
  1768.       self.bitmap = Cache.battler(@battler_name, @battler_hue)
  1769.       @width = bitmap.width
  1770.       @height = bitmap.height
  1771.       self.ox = @width / 2
  1772.       self.oy = @height
  1773.       if (@battler.dead? or @battler.hidden) and @battler.collapse == false
  1774.         
  1775.       end
  1776.     end
  1777.     if @battler.is_a?(Game_Actor)
  1778.       count = 40
  1779.     else
  1780.       count = 44
  1781.     end  
  1782.    
  1783.    
  1784.     if Graphics.frame_count%count <= 19
  1785.       self.bitmap = Cache.battler(@battler_name,@battler_hue)
  1786.       @width = bitmap.width
  1787.       @height = bitmap.height
  1788.       self.ox = @width / 2
  1789.       self.oy = @height
  1790.     else
  1791.       b_name = @battler_name + "待"
  1792.        if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
  1793.          self.bitmap = Cache.battler(b_name,@battler_hue)
  1794.          @width = bitmap.width
  1795.          @height = bitmap.height
  1796.          self.ox = @width/2
  1797.          self.oy = @height
  1798.        end
  1799.     end      
  1800.       
  1801.    
  1802.   end
  1803.   
  1804. #==================================
  1805. #
  1806. #==================================
  1807. def setup_new_effect
  1808.     if @battler.white_flash
  1809.       @effect_type = WHITEN
  1810.       @effect_duration = 16
  1811.       @battler.white_flash = false
  1812.     end
  1813.    
  1814.     if @battler.blink
  1815.       @effect_type = BLINK
  1816.       @effect_duration = 20
  1817.       @battler.blink = false
  1818.     end
  1819.     if not @battler_visible and @battler.exist?
  1820.       @effect_type = APPEAR
  1821.       @effect_duration = 16
  1822.       @battler_visible = true
  1823.     end
  1824.     if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
  1825.       if @battler.damage != nil
  1826.         s_1 = @battler.damage > 0 ? 0 : 1
  1827.         @battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
  1828.       end  
  1829.       
  1830.       damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
  1831.       damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
  1832.       damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
  1833.       damage("失误",@battler.critical) if @battler.missed
  1834.       damage("MISS",@battler.critical) if @battler.evaded
  1835.       damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
  1836.       @battler.slip_damage = 0
  1837.       @battler.auto_damage = 0
  1838.       @battler.damage = nil
  1839.       @battler.damage_pop = false
  1840.     end
  1841.     if @battler_visible and @battler.hidden
  1842.       @effect_type = DISAPPEAR
  1843.       @effect_duration = 32
  1844.       @battler_visible = false
  1845.     end
  1846.     if @battler.collapse and self.opacity != 0
  1847.       @effect_type = COLLAPSE
  1848.       @effect_duration = 48
  1849.       @battler.collapse = false
  1850.       @battler_visible = false
  1851.     end
  1852.     if @battler.animation_id != 0 and @battler.collapse == false
  1853.       self.opacity = 255
  1854.       animation = $data_animations[@battler.animation_id]
  1855.       mirror = @battler.animation_mirror
  1856.       start_animation(animation, mirror)
  1857.       @battler.animation_id = 0
  1858.     end
  1859.    
  1860.       
  1861.   end
  1862. #=========================================
  1863. #
  1864. #=========================================
  1865.   
  1866.   

  1867.   
  1868.   
  1869. end #class  








  1870. #=================================================
  1871. #★处理战斗行动的类
  1872. #=================================================
  1873. class Game_BattleAction

  1874.   def skill_user
  1875.     targets = []
  1876.     targets.push(battler)
  1877.      
  1878.      return targets.compact
  1879.    end
  1880.   

  1881.   
  1882.    
  1883. end#class  
  1884. #=======================================================
  1885. #★处理敌人的类
  1886. #
  1887. #=======================================================

  1888. class Game_Enemy < Game_Battler
  1889. def note
  1890.     return $data_enemies[@enemy_id].note
  1891. end  

  1892.   
  1893. end#class
  1894. #======================================================
  1895. #★角色处理类
  1896. #======================================================
  1897. class Game_Actor < Game_Battler

  1898.   def setup(actor_id)
  1899.     actor = $data_actors[actor_id]
  1900.     @actor_id = actor_id
  1901.     @name = actor.name
  1902.     #--------------------------------------------
  1903.     #★添加战斗图名称,以便战斗中获取战斗图
  1904.     #--------------------------------------------
  1905.     @battler_name = actor_id.to_s + "_z"
  1906.     @battler_hue = 0
  1907.     @flash = false
  1908.     @character_name = actor.character_name
  1909.     @character_index = actor.character_index
  1910.     @face_name = actor.face_name
  1911.     @face_index = actor.face_index
  1912.     @class_id = actor.class_id
  1913.     @weapon_id = actor.weapon_id
  1914.     @armor1_id = actor.armor1_id
  1915.     @armor2_id = actor.armor2_id
  1916.     @armor3_id = actor.armor3_id
  1917.     @armor4_id = actor.armor4_id
  1918.     @level = actor.initial_level
  1919.     @exp_list = Array.new(101)
  1920.     make_exp_list
  1921.     @exp = @exp_list[@level]
  1922.     @skills = []
  1923.     for i in self.class.learnings
  1924.       learn_skill(i.skill_id) if i.level <= @level
  1925.     end
  1926.     clear_extra_values
  1927.     recover_all
  1928.   end
  1929.   
  1930.   #--------------------------------------------------------------------------
  1931.   # ● 执行自动回复 (回合结束时调用)
  1932.   #--------------------------------------------------------------------------
  1933.   def do_auto_recovery
  1934.     if auto_hp_recover and not dead?
  1935.       self.hp += maxhp / 20
  1936.       @auto_damage = maxhp / 20
  1937.     end
  1938.   end
  1939.   #==========================================================================
  1940.   #★ 定义武器的行动方动画id,默认为第一武器的id
  1941.   #==========================================================================
  1942.   
  1943.   def act_animation_id
  1944.     return weapons[0] == nil ? 0 : weapons[0].animation2_id
  1945.   end  
  1946.   
  1947.   #==========================================================================
  1948.   #==========================================================================
  1949.   #==========================================================================
  1950.   #★定义角色战斗图 X 坐标
  1951.   #==========================================================================
  1952.   def screen_x
  1953.    if self.index != nil
  1954.     case index
  1955.      when 0
  1956.       return 460
  1957.      when 1
  1958.       return 440
  1959.      when 2
  1960.       return 420
  1961.      when 3
  1962.       return 400
  1963.     end  
  1964.   else
  1965.    return 0
  1966.   end
  1967. end
  1968.   #========================================================================
  1969.   #★定义角色战斗图 Y 坐标
  1970.   #========================================================================
  1971.   def screen_y
  1972.     if self.index != nil
  1973.       case index
  1974.        when 0
  1975.          return 245
  1976.        when 1
  1977.          return 215
  1978.        when 2
  1979.          return 185
  1980.        when 3
  1981.          return 155
  1982.        end
  1983.     else   
  1984.    
  1985.     return 230
  1986.    end
  1987.   end  
  1988.   
  1989.   #========================================================================
  1990.   #★定义角色战斗图 Z 坐标
  1991.   #========================================================================   
  1992.   def screen_z
  1993.      if self.index != nil
  1994.       return 4 - self.index
  1995.     else
  1996.       return 0
  1997.     end
  1998.   end
  1999.   
  2000.   

  2001.   
  2002.   def use_sprite?
  2003.     return true
  2004.   end
  2005.   
  2006. end#class




  2007. #==========================================================
  2008. #★模块定义
  2009. #==========================================================
  2010.   module RPG
  2011.   class BaseItem
  2012.     def animation2_id
  2013.       return @note != nil ? @note.to_i : 0
  2014.     end
  2015.   end  
  2016.    class Enemy
  2017.      def animation1_id
  2018.        animation1_id = @note.split(/,/)[0]
  2019.        return animation1_id != nil ? animation1_id.to_i : 0
  2020.      end
  2021.      def animation2_id
  2022.        animation2_id = @note.split(/,/)[1]
  2023.        return animation2_id != nil ? animation2_id.to_i : 0
  2024.      end
  2025.     end
  2026.    
  2027.   end
  2028.   
  2029.   
  2030. #======================================================
  2031. #★精灵类主模块_伤害部分的添加
  2032. #======================================================
  2033. class Sprite_Base < Sprite
  2034.   def initialize(viewport = nil)
  2035.     super(viewport)
  2036.     @use_sprite = true         
  2037.     @animation_duration = 0     
  2038.     #=============
  2039.     @_damage_duration = 0
  2040.     #=============
  2041.   end
  2042. alias oldupdate update
  2043.   def update
  2044.     oldupdate
  2045.     #================
  2046.     damge_update
  2047.     #================

  2048.   end

  2049. alias olddispose dispose
  2050.    def dispose
  2051.      olddispose
  2052.      
  2053.     #===============
  2054.     dispose_damage
  2055.     #===============
  2056.    end
  2057.   
  2058. #==========================================================================
  2059. #★定义伤害处理
  2060. #==========================================================================

  2061.    def damage(value, critical,type = 0)
  2062.       dispose_damage
  2063.       if value.is_a?(Numeric)
  2064.         damage_string = value.abs.to_s
  2065.       else
  2066.         damage_string = value.to_s
  2067.       end
  2068.       bitmap = Bitmap.new(160, 48)
  2069.       bitmap.font.name = "黑体"
  2070.       bitmap.font.size = 25
  2071.       bitmap.font.color.set(0, 0, 0)
  2072.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2073.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2074.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2075.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2076.       if value.is_a?(Numeric) and value < 0
  2077.         case type
  2078.          when 0
  2079.            bitmap.font.color.set(176, 255, 144)
  2080.          when 1
  2081.            bitmap.font.color.set(0,100,255)
  2082.          end  
  2083.       else
  2084.         case type
  2085.         when 0
  2086.         bitmap.font.color.set(255, 255, 255)
  2087.         when 1
  2088.           bitmap.font.color.set(200,0,185)
  2089.         end  
  2090.       end
  2091.       
  2092.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2093.       if critical and type == 0
  2094.         bitmap.font.size = 18
  2095.         bitmap.font.color.set(0, 0, 0)
  2096.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2097.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2098.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2099.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2100.         bitmap.font.color.set(255, 255, 255)
  2101.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2102.       end
  2103.       @_damage_sprite = ::Sprite.new(self.viewport)
  2104.       @_damage_sprite.bitmap = bitmap
  2105.       @_damage_sprite.ox = 80
  2106.       @_damage_sprite.oy = 20
  2107.       @_damage_sprite.x = self.x
  2108.       @_damage_sprite.y = self.y - self.oy / 2
  2109.       @_damage_sprite.z = 3000
  2110.       @_damage_duration = 40
  2111.     end
  2112.    
  2113.     #===================================================
  2114.     #
  2115.     #===================================================
  2116.     def dispose_damage
  2117.       if @_damage_sprite != nil
  2118.         @_damage_sprite.bitmap.dispose
  2119.         @_damage_sprite.dispose
  2120.         @_damage_sprite = nil
  2121.         @_damage_duration = 0
  2122.       end
  2123.     end
  2124.     #=============================================
  2125.     #
  2126.     #=============================================
  2127.     def damge_update
  2128.        if @_damage_duration > 0
  2129.         @_damage_duration -= 1
  2130.         case @_damage_duration
  2131.         when 38..39
  2132.           @_damage_sprite.y -= 4
  2133.         when 36..37
  2134.           @_damage_sprite.y -= 2
  2135.         when 34..35
  2136.           @_damage_sprite.y += 2
  2137.         when 28..33
  2138.           @_damage_sprite.y += 4
  2139.         end
  2140.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  2141.         if @_damage_duration == 0
  2142.           dispose_damage
  2143.         end
  2144.       end
  2145.    end
  2146.   
  2147.   

  2148. end#class
  2149. #=======================================================
  2150. #★战斗经验、金钱、物品提示窗口
  2151. #=======================================================
  2152. class Window_egi<Window_Base
  2153. #====================================
  2154. #●初始化
  2155. #====================================
  2156. def initialize(exp, gold,item)
  2157.    
  2158.    
  2159.     @exp=exp
  2160.     @gold=gold
  2161.     @item=item
  2162.     @item_name = {}
  2163.     n=0
  2164.     m=0
  2165.    
  2166.     if @item != nil
  2167.      for itn in @item
  2168.       
  2169.       if @item_name[itn.name]==nil
  2170.          @item_name[itn.name]=[0,""]
  2171.          @item_name[itn.name][1]=itn.icon_index
  2172.          m+=1
  2173.       end
  2174.       @item_name[itn.name][0] += 1
  2175.     end
  2176.     end
  2177.     if @gold>0
  2178.       m+=1
  2179.     end  
  2180.     super(200,100, 160,32*m+112 )
  2181.     self.opacity = 150
  2182.    
  2183.     refresh
  2184.   end
  2185.   #--------------------------------------------------------------------------
  2186.   # ● 刷新
  2187.   #--------------------------------------------------------------------------
  2188. def refresh
  2189.     self.contents.clear
  2190.     self.contents.font.size=19
  2191.     if @exp > 0
  2192.      self.contents.font.color = Color.new(255,255,0,255)
  2193.      self.contents.draw_text(6,8,64,32,"获得经验:")
  2194.      self.contents.font.color = Color.new(255,255,255,255)
  2195.      self.contents.draw_text(80,8,32,32,sprintf("%4s",@exp))
  2196.    
  2197.    elsif @exp == 0
  2198.      self.contents.font.color = Color.new(255,0,0,0)
  2199.      self.contents.draw_text(6,8,32,32,"没有获得经验!")
  2200.      
  2201.    end
  2202.    if @gold>0
  2203.      self.contents.font.color = Color.new(255,255,0,255)
  2204.      self.contents.draw_text(6,40,64,32,"获得金钱:")
  2205.      self.contents.font.color = Color.new(255,255,255,255)
  2206.      self.contents.draw_text(80,40,32,32,sprintf("%4s",@gold)+Vocab::gold)
  2207.    end  
  2208.    if @item_name.size != 0
  2209.    self.contents.font.size = 20
  2210.    self.contents.font.color = Color.new(255,255,0)
  2211.    self.contents.draw_text(25,72,64,32,"获得物品")
  2212.    i=0

  2213.     i=0
  2214.     self.contents.font.size = 18
  2215.     self.contents.font.color = Color.new(255,255,255,255)
  2216.     for itn in @item_name
  2217.      draw_icon(itn[1][1] ,6 ,106+i*32 , true)
  2218.      self.contents.draw_text(30,106+i*32,64,32,itn[0] + " × "+ itn[1][0].to_s)
  2219.    
  2220.      i+=1
  2221.     end
  2222.       
  2223.      
  2224.   end
  2225.   
  2226.    
  2227.    
  2228. end
  2229.    
  2230.    
  2231. end#class  

  2232. module Cache
  2233.   def self.battleback(filename)
  2234.      load_bitmap("Graphics/Battlebacks/", filename)
  2235.    end   
  2236. end   
  2237.   
  2238. #=====================================================
  2239. #添加战斗背景的相关定义
  2240. #=====================================================
  2241. class Game_Map
  2242.   attr_accessor :name   
  2243.     def setup(map_id)
  2244.     @map_id = map_id
  2245.     @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
  2246.     @mapinfo = load_data("Data/MapInfos.rvdata")
  2247.     #============================
  2248.     @name = @mapinfo[@map_id].name
  2249.     #============================
  2250.     @display_x = 0
  2251.     @display_y = 0
  2252.     @passages = $data_system.passages
  2253.     referesh_vehicles
  2254.     setup_events
  2255.     setup_scroll
  2256.     setup_parallax
  2257.     @need_refresh = false
  2258.    end #class
  2259.   
  2260.   
  2261.    def area(old_name,new_name)
  2262.   
  2263.     for area in  $data_areas.values
  2264.       if area.name == old_name and area.map_id == @map_id
  2265.         area.name == new_name
  2266.       end
  2267.     end
  2268.   end  
  2269. end #class

  2270. class Spriteset_Battle

  2271.   def create_battleback
  2272.     name = $game_map.name
  2273.     source = $game_temp.background_bitmap
  2274.     bitmap = Bitmap.new(640, 480)
  2275.     if BATTLE_BACK[name] != nil
  2276.      
  2277.      bitmap.blt(0,0,source,source.rect)
  2278.      @battleback_sprite = Sprite.new(@viewport1)
  2279.      @battleback_sprite.bitmap = bitmap
  2280.      @battleback_sprite.ox = 272
  2281.      @battleback_sprite.oy = 208
  2282.      @battleback_sprite.x = 260
  2283.      @battleback_sprite.y = 208
  2284.     else
  2285.    
  2286.      bitmap.stretch_blt(bitmap.rect, source, source.rect)
  2287.      bitmap.radial_blur(90, 12)
  2288.      @battleback_sprite = Sprite.new(@viewport1)
  2289.      @battleback_sprite.bitmap = bitmap
  2290.      @battleback_sprite.ox = 320
  2291.      @battleback_sprite.oy = 240
  2292.      @battleback_sprite.x = 272
  2293.      @battleback_sprite.y = 176
  2294.      @battleback_sprite.wave_amp = 8
  2295.      @battleback_sprite.wave_length = 240
  2296.      @battleback_sprite.wave_speed = 120
  2297.     end
  2298.      
  2299.   end
  2300.   alias oldcreate_battlefloor create_battlefloor
  2301.   def create_battlefloor
  2302.    oldcreate_battlefloor
  2303.    @battlefloor_sprite.opacity = 0
  2304.   end
  2305. end#class

  2306. #==============================================================================
  2307. # ■ Game_Interpreter
  2308. #------------------------------------------------------------------------------
  2309. #  执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、
  2310. # Game_Event 类的内部使用。
  2311. #==============================================================================

  2312. class Game_Interpreter
  2313.    #===========================================================================
  2314.    #☆角色显示动画方法
  2315.    #○range:动画影响范围,-1全体或相应角色id
  2316.    #●anim_id:动画id
  2317.    #===========================================================================
  2318.    def add_aa(range,anim_id)
  2319.      iterate_battler(1,range) do |battler|
  2320.       next unless battler.exist?
  2321.       battler.animation_id = anim_id
  2322.     end
  2323.      
  2324.    end #def
  2325.    
  2326.   
  2327. end #class
复制代码
战斗系统
  1. #==============================================================================
  2. # 复杂装备系统之随机属性(征求bug版) by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 说明: 让装备类似暗黑那样附加随机属性,目前有17种属性元素可供组合,允许按
  5. #       能力百分比加成.
  6. #
  7. #       附加属性的名称允许多个(按能力从小大到排列),用英文逗号隔开,自动按
  8. #       附加能力大小选择词缀
  9. #
  10. #       极品爆率不影响物品掉落机率,而是指掉落的物品带附加属性的机率
  11. #
  12. # 获得随机属性装备的方法:
  13. #       事件脚本中输入 get_weapon(母版武器id, 数量, 附加属性1, 附加属性2...)
  14. #       或者直接指定附加属性数 get_weapon(母版武器id, 数量, 附加属性数)
  15. #       将随机生成指定附加属性数的装备
  16. #       获得防具方法是 get_armor() 参数含义同上
  17. #
  18. # 获得普通装备的方法:
  19. #       事件脚本中输入 get_weapon(母版武器id, 数量)
  20. #       获得防具方法是 get_armor() 参数含义同上
  21. #==============================================================================
  22. # 参数设定
  23. #==============================================================================
  24. module Game_Equip
  25.   ## 最大附加属性数
  26.   GiftMax = 4
  27.   ## 附加属性影响价格基数
  28.   GiftPrice = 10
  29.   ## 极品爆率最低值和最高值(0到100)
  30.   Equip_Chance = [5, 75]  
  31.   
  32.   ## 附加属性各参数:
  33.   ##     name    添加到装备前的修饰词
  34.   ##     max     该属性最大值
  35.   ##     weight  权重(最大值的权重,用于计算价值,用于计算颜色也行)
  36.   ##     percent 是否按百分比计算
  37.   Gift = Struct.new(:name, :max, :weight, :percent)
  38.   Gifts = [
  39.      # 攻击
  40.      Gift.new("锐利,伤害,霸道", 50, 25, false),
  41.      Gift.new("残忍,残酷,凶残", 50, 40, true),
  42.      # 防御
  43.      Gift.new("厚重,守卫,守护", 50, 10, false),
  44.      Gift.new("结实,防卫,防护", 50, 20, true),
  45.      # 精神
  46.      Gift.new("光荣", 50, 15, false),
  47.      Gift.new("祝福", 50, 25, true),
  48.      # 敏捷
  49.      Gift.new("敏捷", 50, 20, false),
  50.      Gift.new("灵巧", 50, 30, true),
  51.      # hp
  52.      Gift.new("落英", 80, 20, false),
  53.      Gift.new("武士", 15, 20, true),
  54.      # mp
  55.      Gift.new("神灵", 80, 15, false),
  56.      Gift.new("圣者", 15, 15, true),
  57.      # 命中
  58.      Gift.new("精确", 10, 10,false),
  59.      # 闪避
  60.      Gift.new("幻影", 10, 10, false),
  61.      # 暴击
  62.      Gift.new("暴击", 10, 10, false),
  63.      # 经验
  64.      Gift.new("贪婪", 20, 10, true),
  65.      # 极品爆率  ###(待定)
  66.      Gift.new("幸运", 50, 10, false)
  67.   ]
  68. end


  69. #==============================================================================
  70. # ■ Game_Equip 自定义装备模块
  71. #==============================================================================
  72. module Game_Equip
  73.   #--------------------------------------------------------------------------
  74.   # ● 物品(装备)重生
  75.   #    item:  物品
  76.   #    *gift: 附加属性(留空表示无属性,数字表示指定数量随机属性)
  77.   #--------------------------------------------------------------------------
  78.   def self.reini(item, *gift)
  79.     return if item.nil?
  80.     result = item.clone
  81.     gifts = *gift
  82.     gifts.flatten! if gifts.is_a? Array
  83.     ## 附加属性为空或指定为(0)时,直接返回母版
  84.     return self.result(result) if gifts.nil? or gifts == 0
  85.     ## 指定附加属性数量时
  86.     if gifts.is_a? Integer
  87.       ## 控制数量
  88.       num = [gifts, GiftMax].min
  89.       gifts = []
  90.       ## 随机生成指定数量的附加属性
  91.       rd = different_rand(Gifts.size-1, num)
  92.       rd.each{|n| gifts.push Game_Gift.new(n)}
  93.     end
  94.     gifts = [gifts].flatten
  95.     return self.result(result) if gifts.empty?
  96.     ## 处理数据
  97.     result.gifts = gifts
  98.     name = ""
  99.     price = 0
  100.     for gift in gifts
  101.       name  += gift.name
  102.       price += gift.weight * GiftPrice
  103.     end
  104.     ## 设定名称
  105.     result.name =  name + '的' + result.name
  106.     ## 设定价格
  107.     result.price += price.round
  108.     ## 设定颜色
  109.     result.text_color = gifts.size
  110.     return self.result(result)
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 返回结果
  114.   #    item: 物品
  115.   #--------------------------------------------------------------------------
  116.   def self.result(item)
  117.     case item
  118.     when RPG::Item
  119.       
  120.     when RPG::Weapon
  121.       item.base_id = item.id
  122.       item.id = $data_weapons.size
  123.       $data_weapons << item
  124.     when RPG::Armor
  125.       item.base_id = item.id
  126.       item.id = $data_armors.size
  127.       $data_armors << item
  128.     end
  129.     return item
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 物品(装备)重生
  133.   #    item_id: 物品id
  134.   #    type:    类型
  135.   #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  136.   #--------------------------------------------------------------------------
  137.   def self.reini_id(item_id, type, *gift)
  138.     ## 排除装备id为零的情况
  139.     return 0 if item_id == 0
  140.     case type
  141.     when 0
  142.       item = $base_weapons[item_id]
  143.     when 1
  144.       item = $base_armors[item_id]
  145.     end
  146.     return self.reini(item, *gift).id
  147.   end
  148. end

  149. #==============================================================================
  150. # ■ Game_Gift 装备附加能力
  151. #==============================================================================
  152. class Game_Gift
  153.   include Game_Equip
  154.   #--------------------------------------------------------------------------
  155.   # ● 读取口
  156.   #--------------------------------------------------------------------------
  157.   attr_reader   :type
  158.   attr_reader   :value
  159.   attr_reader   :name
  160.   #--------------------------------------------------------------------------
  161.   # ● 初始化
  162.   #--------------------------------------------------------------------------
  163.   def initialize(type = nil, value = nil)
  164.     get_type(type)
  165.     get_value(value)
  166.     get_name
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 获取属性
  170.   #--------------------------------------------------------------------------
  171.   def get_type(type)
  172.     unless type.nil? or type > Gifts.size or type < 0
  173.       @type = type
  174.     else
  175.       @type = rand(Gifts.size - 1)
  176.     end
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取品质值
  180.   #--------------------------------------------------------------------------
  181.   def get_value(value)
  182.     unless value.nil? or value.abs > max
  183.       @value = value
  184.     else
  185.       @value = linear_rand(max) + 1
  186.     end
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 获取名称
  190.   #--------------------------------------------------------------------------
  191.   def get_name
  192.     names = Gifts[@type].name.split(/,/)
  193.     n = (@value.abs-1)/(max.to_f/names.size)
  194.     @name = names[n.truncate]
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 获取最大值
  198.   #--------------------------------------------------------------------------
  199.   def max
  200.     return Gifts[@type].max
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 获取权重
  204.   #--------------------------------------------------------------------------
  205.   def weight
  206.     return @value > 0 ? @value / max.to_f * Gifts[@type].weight : 0
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 获取是否百分比
  210.   #--------------------------------------------------------------------------
  211.   def percent
  212.     return Gifts[@type].percent
  213.   end
  214.   
  215.   #--------------------------------------------------------------------------
  216.   # ● 攻击力
  217.   #--------------------------------------------------------------------------
  218.   def atk(actor_id)
  219.     # 无角色信息时返回
  220.     return 0 unless actor_id
  221.     # 数据类型不符时返回
  222.     return 0 if @type != 0 and @type != 1
  223.     if percent
  224.       return $game_actors[actor_id].self_atk * @value / 100
  225.     else
  226.       return @value
  227.     end
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 防御力
  231.   #--------------------------------------------------------------------------
  232.   def def(actor_id)
  233.     # 无角色信息时返回
  234.     return 0 unless actor_id
  235.     # 数据类型不符时返回
  236.     return 0 if @type != 2 and @type != 3
  237.     if percent
  238.       return $game_actors[actor_id].self_def * @value / 100
  239.     else
  240.       return @value
  241.     end
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 精神
  245.   #--------------------------------------------------------------------------
  246.   def spi(actor_id)
  247.     # 无角色信息时返回
  248.     return 0 unless actor_id
  249.     # 数据类型不符时返回
  250.     return 0 if @type != 4 and @type != 5
  251.     if percent
  252.       return $game_actors[actor_id].self_spi * @value / 100
  253.     else
  254.       return @value
  255.     end
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 敏捷
  259.   #--------------------------------------------------------------------------
  260.   def agi(actor_id)
  261.     # 无角色信息时返回
  262.     return 0 unless actor_id
  263.     # 数据类型不符时返回
  264.     return 0 if @type != 6 and @type != 7
  265.     if percent
  266.       return $game_actors[actor_id].self_agi * @value / 100
  267.     else
  268.       return @value
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● hp
  273.   #--------------------------------------------------------------------------
  274.   def hp(actor_id)
  275.     # 无角色信息时返回
  276.     return 0 unless actor_id
  277.     # 数据类型不符时返回
  278.     return 0 if @type != 8 and @type != 9
  279.     if percent
  280.       return $game_actors[actor_id].self_maxhp * @value / 100
  281.     else
  282.       return @value
  283.     end
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● mp
  287.   #--------------------------------------------------------------------------
  288.   def mp(actor_id)
  289.     # 无角色信息时返回
  290.     return 0 unless actor_id
  291.     # 数据类型不符时返回
  292.     return 0 if @type != 10 and @type != 11
  293.     if percent
  294.       return $game_actors[actor_id].self_maxmp * @value / 100
  295.     else
  296.       return @value
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 命中
  301.   #--------------------------------------------------------------------------
  302.   def hit
  303.     # 数据类型不符时返回
  304.     return 0 if @type != 12
  305.     return @value
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 闪避
  309.   #--------------------------------------------------------------------------
  310.   def eva
  311.     # 数据类型不符时返回
  312.     return 0 if @type != 13
  313.     return @value
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 暴击
  317.   #--------------------------------------------------------------------------
  318.   def cri
  319.     # 数据类型不符时返回
  320.     return 0 if @type != 14
  321.     return @value
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 经验(百分比)
  325.   #--------------------------------------------------------------------------
  326.   def exp
  327.     # 数据类型不符时返回
  328.     return 0 if @type != 15
  329.     return @value
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 高级装备暴率(百分比)
  333.   #--------------------------------------------------------------------------
  334.   def equip_chance
  335.     # 数据类型不符时返回
  336.     return 0 if @type != 16
  337.     return @value
  338.   end
  339. end
  340. #==============================================================================
  341. # ■ RPG::BaseItem
  342. #==============================================================================
  343. module RPG
  344.   class BaseItem
  345.     ## 颜色
  346.     attr_accessor :text_color
  347.   end
  348. end
  349. #==============================================================================
  350. # ■ RPG::Weapon
  351. #==============================================================================
  352. module RPG
  353.   class Weapon < BaseItem
  354.     #------------------------------------------------------------------------
  355.     # 附加属性
  356.     #------------------------------------------------------------------------
  357.     attr_accessor :base_id
  358.     attr_accessor :actor_id
  359.     attr_accessor :gifts
  360.     #------------------------------------------------------------------------
  361.     # 攻击力(合)
  362.     #------------------------------------------------------------------------
  363.     def atk
  364.       n = @atk
  365.       @gifts = [] if @gifts.nil?
  366.       for g in @gifts.compact do n += g.atk(actor_id) end
  367.       return n
  368.     end
  369.     #------------------------------------------------------------------------
  370.     # 防御力(合)
  371.     #------------------------------------------------------------------------
  372.     def def
  373.       n = @def
  374.       @gifts = [] if @gifts.nil?
  375.       for g in @gifts.compact do n += g.def(actor_id) end
  376.       return n
  377.     end
  378.     #------------------------------------------------------------------------
  379.     # 魔力(合)
  380.     #------------------------------------------------------------------------
  381.     def spi
  382.       n = @spi
  383.       @gifts = [] if @gifts.nil?
  384.       for g in @gifts.compact do n += g.spi(actor_id) end
  385.       return n
  386.     end
  387.     #------------------------------------------------------------------------
  388.     # 敏捷(合)
  389.     #------------------------------------------------------------------------
  390.     def agi
  391.       n = @agi
  392.       @gifts = [] if @gifts.nil?
  393.       for g in @gifts.compact do n += g.agi(actor_id) end
  394.       return n
  395.     end
  396.     #------------------------------------------------------------------------
  397.     # 最大hp(合)
  398.     #------------------------------------------------------------------------
  399.     def maxhp
  400.       n = 0
  401.       @gifts = [] if @gifts.nil?
  402.       for g in @gifts.compact do n += g.maxhp(actor_id) end
  403.       return n
  404.     end
  405.     #------------------------------------------------------------------------
  406.     # 最大mp(合)
  407.     #------------------------------------------------------------------------
  408.     def maxmp
  409.       n = 0
  410.       @gifts = [] if @gifts.nil?
  411.       for g in @gifts.compact do n += g.maxmp(actor_id) end
  412.       return n
  413.     end
  414.     #------------------------------------------------------------------------
  415.     # 命中率(合)
  416.     #------------------------------------------------------------------------
  417.     def hit
  418.       n = @hit
  419.       @gifts = [] if @gifts.nil?
  420.       for g in @gifts.compact do n += g.hit end
  421.       return n
  422.     end
  423.     #------------------------------------------------------------------------
  424.     # 闪避率(合)
  425.     #------------------------------------------------------------------------
  426.     def eva
  427.       n = 0
  428.       @gifts = [] if @gifts.nil?
  429.       for g in @gifts.compact do n += g.eva end
  430.       return n
  431.     end
  432.     #------------------------------------------------------------------------
  433.     # 暴击率(合)
  434.     #------------------------------------------------------------------------
  435.     def cri
  436.       n = 0
  437.       @gifts = [] if @gifts.nil?
  438.       for g in @gifts.compact do n += g.cri end
  439.       return n
  440.     end
  441.     #--------------------------------------------------------------------------
  442.     # ● 经验(百分比)
  443.     #--------------------------------------------------------------------------
  444.     def exp
  445.       n = 0
  446.       @gifts = [] if @gifts.nil?
  447.       for g in @gifts.compact do n += g.exp end
  448.       return n
  449.     end
  450.     #--------------------------------------------------------------------------
  451.     # ● 高级装备暴率(百分比)
  452.     #--------------------------------------------------------------------------
  453.     def equip_chance
  454.       n = 0
  455.       @gifts = [] if @gifts.nil?
  456.       for g in @gifts.compact do n += g.equip_chance end
  457.       return n
  458.     end
  459.   end
  460. end
  461. #==============================================================================
  462. # ■ RPG::Armor
  463. #==============================================================================
  464. module RPG
  465.   class Armor < BaseItem
  466.     #------------------------------------------------------------------------
  467.     # 附加属性
  468.     #------------------------------------------------------------------------
  469.     attr_accessor :base_id
  470.     attr_accessor :actor_id
  471.     attr_accessor :gifts
  472.     #------------------------------------------------------------------------
  473.     # 攻击力(合)
  474.     #------------------------------------------------------------------------
  475.     def atk
  476.       n = @atk
  477.       @gifts = [] if @gifts.nil?
  478.       for g in @gifts.compact do n += g.atk(actor_id) end
  479.       return n
  480.     end
  481.     #------------------------------------------------------------------------
  482.     # 防御力(合)
  483.     #------------------------------------------------------------------------
  484.     def def
  485.       n = @def
  486.       @gifts = [] if @gifts.nil?
  487.       for g in @gifts.compact do n += g.def(actor_id) end
  488.       return n
  489.     end
  490.     #------------------------------------------------------------------------
  491.     # 魔力(合)
  492.     #------------------------------------------------------------------------
  493.     def spi
  494.       n = @spi
  495.       @gifts = [] if @gifts.nil?
  496.       for g in @gifts.compact do n += g.spi(actor_id) end
  497.       return n
  498.     end
  499.     #------------------------------------------------------------------------
  500.     # 敏捷(合)
  501.     #------------------------------------------------------------------------
  502.     def agi
  503.       n = @agi
  504.       @gifts = [] if @gifts.nil?
  505.       for g in @gifts.compact do n += g.agi(actor_id) end
  506.       return n
  507.     end
  508.     #------------------------------------------------------------------------
  509.     # 最大hp(合)
  510.     #------------------------------------------------------------------------
  511.     def maxhp
  512.       n = 0
  513.       @gifts = [] if @gifts.nil?
  514.       for g in @gifts.compact do n += g.maxhp(actor_id) end
  515.       return n
  516.     end
  517.     #------------------------------------------------------------------------
  518.     # 最大mp(合)
  519.     #------------------------------------------------------------------------
  520.     def maxmp
  521.       n = 0
  522.       @gifts = [] if @gifts.nil?
  523.       for g in @gifts.compact do n += g.maxmp(actor_id) end
  524.       return n
  525.     end
  526.     #------------------------------------------------------------------------
  527.     # 命中率(合)
  528.     #------------------------------------------------------------------------
  529.     def hit
  530.       n = 0
  531.       @gifts = [] if @gifts.nil?
  532.       for g in @gifts.compact do n += g.hit end
  533.       return n
  534.     end
  535.     #------------------------------------------------------------------------
  536.     # 闪避率(合)
  537.     #------------------------------------------------------------------------
  538.     def eva
  539.       n = @eva
  540.       @gifts = [] if @gifts.nil?
  541.       for g in @gifts.compact do n += g.eva end
  542.       return n
  543.     end
  544.     #------------------------------------------------------------------------
  545.     # 暴击率(合)
  546.     #------------------------------------------------------------------------
  547.     def cri
  548.       n = 0
  549.       @gifts = [] if @gifts.nil?
  550.       for g in @gifts.compact do n += g.cri end
  551.       return n
  552.     end
  553.     #--------------------------------------------------------------------------
  554.     # ● 经验(百分比)
  555.     #--------------------------------------------------------------------------
  556.     def exp
  557.       n = 0
  558.       @gifts = [] if @gifts.nil?
  559.       for g in @gifts.compact do n += g.exp end
  560.       return n
  561.     end
  562.     #--------------------------------------------------------------------------
  563.     # ● 高级装备暴率(百分比)
  564.     #--------------------------------------------------------------------------
  565.     def equip_chance
  566.       n = 0
  567.       @gifts = [] if @gifts.nil?
  568.       for g in @gifts.compact do n += g.equip_chance end
  569.       return n
  570.     end
  571.   end
  572. end
  573. #==============================================================================
  574. # ■ Game_Actor
  575. #==============================================================================
  576. class Game_Actor < Game_Battler
  577.   #--------------------------------------------------------------------------
  578.   # ● 获取自身 MaxHP
  579.   #--------------------------------------------------------------------------
  580.   def self_maxhp
  581.     return actor.parameters[0, @level]
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● 获取自身 MaxMP
  585.   #--------------------------------------------------------------------------
  586.   def self_maxmp
  587.     return actor.parameters[1, @level]
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ● 获取自身攻击力
  591.   #--------------------------------------------------------------------------
  592.   def self_atk
  593.     return actor.parameters[2, @level]
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 获取自身防御力
  597.   #--------------------------------------------------------------------------
  598.   def self_def
  599.     return actor.parameters[3, @level]
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● 获取自身精神力
  603.   #--------------------------------------------------------------------------
  604.   def self_spi
  605.     return actor.parameters[4, @level]
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 获取自身敏捷性
  609.   #--------------------------------------------------------------------------
  610.   def self_agi
  611.     return actor.parameters[5, @level]
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ● 获取命中率
  615.   #--------------------------------------------------------------------------
  616.   def hit
  617.     n = 95
  618.     for e in equips.compact do n += e.hit end
  619.     return n
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # ● 获取回避率
  623.   #--------------------------------------------------------------------------
  624.   def eva
  625.     n = 5
  626.     for e in equips.compact do n += e.eva end
  627.     return n
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 获取会心一击概率
  631.   #--------------------------------------------------------------------------
  632.   def cri
  633.     n = 4
  634.     n += 4 if actor.critical_bonus
  635.     for e in equips.compact do n += e.cri end
  636.     return n
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ● 获取更多经验值
  640.   #--------------------------------------------------------------------------
  641.   def exp_added
  642.     exp = 100
  643.     for equip in equips.compact
  644.       exp += equip.exp
  645.     end
  646.     return exp
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● 获取高级物品暴率
  650.   #--------------------------------------------------------------------------
  651.   def equip_chance
  652.     equip_chance = 0
  653.     for equip in equips.compact
  654.       equip_chance += equip.equip_chance
  655.     end
  656.     return equip_chance
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # ● 获得经验值 (考虑到附加经验值)
  660.   #     exp  : 经验值增加量
  661.   #     show : 显示升级标志
  662.   #--------------------------------------------------------------------------
  663.   def gain_exp(exp, show)
  664.     change_exp(@exp + exp * exp_added, show)
  665.   end
  666. end
  667. #==============================================================================
  668. # ■ Game_Actor
  669. #==============================================================================
  670. class Game_Actor < Game_Battler
  671.   #--------------------------------------------------------------------------
  672.   # ● 初始化对象
  673.   #     actor_id : 角色 ID
  674.   #--------------------------------------------------------------------------
  675.   def initialize(actor_id)
  676.     super()
  677.     setup(actor_id)
  678.     @last_skill_id = 0
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● 设置
  682.   #     actor_id : 角色 ID
  683.   #--------------------------------------------------------------------------
  684.   def setup(actor_id)
  685.     actor = $data_actors[actor_id]
  686.     @actor_id = actor_id
  687.     @name = actor.name
  688.     @character_name = actor.character_name
  689.     @character_index = actor.character_index
  690.     @face_name = actor.face_name
  691.     @face_index = actor.face_index
  692.     @class_id = actor.class_id
  693.     @weapon_id = actor.weapon_id
  694.     @armor1_id = actor.armor1_id
  695.     @armor2_id = actor.armor2_id
  696.     @armor3_id = actor.armor3_id
  697.     @armor4_id = actor.armor4_id
  698.     @level = actor.initial_level
  699.     @exp_list = Array.new(101)
  700.     make_exp_list
  701.     @exp = @exp_list[@level]
  702.     @skills = []
  703.     for i in self.class.learnings
  704.       learn_skill(i.skill_id) if i.level <= @level
  705.     end
  706.     clear_extra_values
  707.     recover_all
  708.     ## 生成新装备id
  709.     reset_equip_id
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 装备重设
  713.   #--------------------------------------------------------------------------
  714.   def reset_equip_id
  715.     @weapon_id = Game_Equip.reini_id(@weapon_id, 0)
  716.     @armor1_id = Game_Equip.reini_id(@armor1_id, two_hands_legal? ? 0 : 1)
  717.     @armor2_id = Game_Equip.reini_id(@armor2_id, 1)
  718.     @armor3_id = Game_Equip.reini_id(@armor3_id, 1)
  719.     @armor4_id = Game_Equip.reini_id(@armor4_id, 1)
  720.   end
  721.   #--------------------------------------------------------------------------
  722.   # ● 判断是否可以装备
  723.   #     item : 物品
  724.   #     base : 是否读取母版数据
  725.   #--------------------------------------------------------------------------
  726.   def equippable?(item, base = true)
  727.     id = base ? item.base_id : item.id
  728.     if item.is_a?(RPG::Weapon)
  729.       return self.class.weapon_set.include?(id)
  730.     elsif item.is_a?(RPG::Armor)
  731.       return false if two_swords_style and item.kind == 0
  732.       return self.class.armor_set.include?(id)
  733.     end
  734.     return false
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● 更改装备 (指定对象)
  738.   #     equip_type : 装备部位 (0..4)
  739.   #     item       : 武器 or 防具 (nil 为解除装备)
  740.   #     test       : 测试标志 (战斗测试、以及装备画面的临时装备)
  741.   #--------------------------------------------------------------------------
  742.   def change_equip(equip_type, item, test = false)
  743.     last_item = equips[equip_type]
  744.     unless test
  745.       return if $game_party.item_number(item) == 0 if item != nil
  746.       $game_party.gain_item(last_item, 1)
  747.       $game_party.lose_item(item, 1)
  748.       last_item.actor_id = nil unless last_item.nil?
  749.     end
  750.     item_id = item == nil ? 0 : item.id
  751.     case equip_type
  752.     when 0  # 武器
  753.       @weapon_id = item_id
  754.       unless two_hands_legal?             # 违反双手拿取的情况下
  755.         change_equip(1, nil, test)        # 解除反手的装备
  756.       end
  757.     when 1  # 盾
  758.       @armor1_id = item_id
  759.       unless two_hands_legal?             # 违反双手拿取的情况下
  760.         change_equip(0, nil, test)        # 解除反手的装备
  761.       end
  762.     when 2  # 头
  763.       @armor2_id = item_id
  764.     when 3  # 身体
  765.       @armor3_id = item_id
  766.     when 4  # 装饰品
  767.       @armor4_id = item_id
  768.     end
  769.     item.actor_id = self.id unless item.nil?
  770.   end
  771. end
  772. #==============================================================================
  773. # ■ Game_Party
  774. #==============================================================================
  775. class Game_Party < Game_Unit
  776.   #--------------------------------------------------------------------------
  777.   # ● 判断持有的物品
  778.   #     item          : 物品
  779.   #     include_equip : 包括装备品
  780.   #--------------------------------------------------------------------------
  781.   def has_item_by_base_id?(item, include_equip = false)
  782.     for i in items
  783.       return true if i.base_id == item.id
  784.     end
  785.     if include_equip
  786.       for actor in members
  787.         for e in actor.equips
  788.           return true if e.base_id == item.id
  789.         end
  790.       end
  791.     end
  792.     return false
  793.   end
  794.   #--------------------------------------------------------------------------
  795.   # ● 获得物品
  796.   #     item          : 物品
  797.   #     n             : 个数
  798.   #--------------------------------------------------------------------------
  799.   def gain_reini(item, n, include_equip = false, *gift)
  800.     if n < 0
  801.       lose_item(item, -n, include_equip = false)
  802.     else
  803.       case item
  804.       when RPG::Item
  805.         number = item_number(item)
  806.         @items[item.id] = [[number + n, 0].max, 99].min
  807.       when RPG::Weapon
  808.         for i in 0...n
  809.           w = Game_Equip.reini(item, *gift)
  810.           @weapons[w.id] = 1
  811.         end
  812.       when RPG::Armor
  813.         for i in 0...n
  814.           a = Game_Equip.reini(item, *gift)
  815.           @armors[a.id] = 1
  816.         end
  817.       end
  818.     end
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● 减少物品 (减少)
  822.   #     item          : 物品
  823.   #     n             : 个数
  824.   #     include_equip : 包括装备品
  825.   #--------------------------------------------------------------------------
  826.   def lose_reini(item, n, include_equip = false)
  827.     number = item_number(item)
  828.     case item
  829.     when RPG::Item
  830.       @items[item.id] = [[number - n, 0].max, 99].min
  831.     when RPG::Weapon
  832.       @weapons[item.id] = [[number - n, 0].max, 99].min
  833.     when RPG::Armor
  834.       @armors[item.id] = [[number - n, 0].max, 99].min
  835.     end
  836.     n -= number
  837.     if include_equip and n > 0
  838.       for actor in members
  839.         while n > 0 and actor.equips.include?(item)
  840.           actor.discard_equip(item)
  841.           n -= 1
  842.         end
  843.       end
  844.     end
  845.   end
  846.   #--------------------------------------------------------------------------
  847.   # ● 获得物品
  848.   #     item_id       : 物品id
  849.   #     type          : 类型(0物品, 1武器, 2防具)
  850.   #     n             : 个数
  851.   #--------------------------------------------------------------------------
  852.   def gain_reini_byid(item_id, type, n, include_equip = false, *gift)
  853.     case type
  854.     when 0
  855.       item = $data_items[item_id]
  856.     when 1
  857.       item = $base_weapons[item_id]
  858.     when 2
  859.       item = $base_armors[item_id]
  860.     end
  861.     gain_reini(item, n, include_equip, *gift)
  862.   end
  863.   #--------------------------------------------------------------------------
  864.   # ● 极品爆率
  865.   #--------------------------------------------------------------------------
  866.   def equip_chance
  867.     chance = Game_Equip::Equip_Chance[0]
  868.     members.each {|actor| chance += actor.equip_chance}
  869.     return chance
  870.   end
  871. end
  872. #==============================================================================
  873. # ■ Game_Troop
  874. #==============================================================================
  875. class Game_Troop < Game_Unit
  876.   #--------------------------------------------------------------------------
  877.   # ● 敌人角色名称后的文字表
  878.   #--------------------------------------------------------------------------
  879.   LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
  880.                    'K','L','M','N','O','P','Q','R','S','T',
  881.                    'U','V','W','X','Y','Z']
  882.   #--------------------------------------------------------------------------
  883.   # ● 生成掉落物品队列
  884.   #--------------------------------------------------------------------------
  885.   def make_drop_items
  886.     drop_items = []
  887.     for enemy in dead_members
  888.       for di in [enemy.drop_item1, enemy.drop_item2]
  889.         next if di.kind == 0
  890.         next if rand(di.denominator) != 0
  891.         if di.kind == 1
  892.           drop_items.push($data_items[di.item_id])
  893.         elsif di.kind == 2
  894.           item = reini_chance($base_weapons[di.weapon_id], $game_party.equip_chance)
  895.           drop_items.push(item)
  896.         elsif di.kind == 3
  897.           item = reini_chance($base_armors[di.weapon_id], $game_party.equip_chance)
  898.           drop_items.push(item)
  899.         end
  900.       end
  901.     end
  902.     return drop_items
  903.   end
  904.   #--------------------------------------------------------------------------
  905.   # ● 处理极品爆率
  906.   #--------------------------------------------------------------------------
  907.   def reini_chance(item, chance)
  908.     @item = item
  909.     @chance = [chance/100.0, Game_Equip::Equip_Chance[1]/100.0].min
  910.     @gifts = []
  911.     loop do
  912.       if rand(0) < @chance and @gifts.size < Game_Equip::GiftMax
  913.         @gifts << Game_Gift.new
  914.         @chance /= 2
  915.       else
  916.         return Game_Equip.reini(@item, @gifts)
  917.       end
  918.     end
  919.   end
  920. end
  921. #==============================================================================
  922. # ■ Game_Interpreter
  923. #==============================================================================
  924. class Game_Interpreter
  925.   #--------------------------------------------------------------------------
  926.   # ● 计算操作的值
  927.   #     operation    : 操作 (0:增加 1:减少)
  928.   #     operand_type : 运算域类型 (0:常量 1:变量)
  929.   #     operand      : 运算域 (数值为变量 ID)
  930.   #--------------------------------------------------------------------------
  931.   def operate_value(operation, operand_type, operand)
  932.     if operand_type == 0
  933.       value = operand
  934.     else
  935.       value = $game_variables[operand]
  936.     end
  937.     if operation == 1
  938.       value = -value
  939.     end
  940.     return value
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● 条件分歧
  944.   #--------------------------------------------------------------------------
  945.   def command_111
  946.     result = false
  947.     case @params[0]
  948.     when 0  # 开关
  949.       result = ($game_switches[@params[1]] == (@params[2] == 0))
  950.     when 1  # 变量
  951.       value1 = $game_variables[@params[1]]
  952.       if @params[2] == 0
  953.         value2 = @params[3]
  954.       else
  955.         value2 = $game_variables[@params[3]]
  956.       end
  957.       case @params[4]
  958.       when 0  # 相等
  959.         result = (value1 == value2)
  960.       when 1  # 大于等于
  961.         result = (value1 >= value2)
  962.       when 2  # 小于等于
  963.         result = (value1 <= value2)
  964.       when 3  # 大于
  965.         result = (value1 > value2)
  966.       when 4  # 小于
  967.         result = (value1 < value2)
  968.       when 5  # 不等于
  969.         result = (value1 != value2)
  970.       end
  971.     when 2  # 自我开关
  972.       if @original_event_id > 0
  973.         key = [@map_id, @original_event_id, @params[1]]
  974.         if @params[2] == 0
  975.           result = ($game_self_switches[key] == true)
  976.         else
  977.           result = ($game_self_switches[key] != true)
  978.         end
  979.       end
  980.     when 3  # 计时器
  981.       if $game_system.timer_working
  982.         sec = $game_system.timer / Graphics.frame_rate
  983.         if @params[2] == 0
  984.           result = (sec >= @params[1])
  985.         else
  986.           result = (sec <= @params[1])
  987.         end
  988.       end
  989.     when 4  # 角色
  990.       actor = $game_actors[@params[1]]
  991.       if actor != nil
  992.         case @params[2]
  993.         when 0  # 是同伴
  994.           result = ($game_party.members.include?(actor))
  995.         when 1  # 姓名
  996.           result = (actor.name == @params[3])
  997.         when 2  # 特技
  998.           result = (actor.skill_learn?($data_skills[@params[3]]))
  999.         when 3  # 武器
  1000.           ## 判断是否符合母版id
  1001.           actor.weapons.each do |weapon|
  1002.             if weapon.base_id == @params[3]
  1003.               result = true
  1004.               break
  1005.             end
  1006.           end
  1007.         when 4  # 防具
  1008.           ## 判断是否符合母版id
  1009.           actor.armors.each do |armor|
  1010.             if armor.base_id == @params[3]
  1011.               result = true
  1012.               break
  1013.             end
  1014.           end
  1015.         when 5  # 状态
  1016.           result = (actor.state?(@params[3]))
  1017.         end
  1018.       end
  1019.     when 5  # 敌方角色
  1020.       enemy = $game_troop.members[@params[1]]
  1021.       if enemy != nil
  1022.         case @params[2]
  1023.         when 0  # 出现
  1024.           result = (enemy.exist?)
  1025.         when 1  # 状态
  1026.           result = (enemy.state?(@params[3]))
  1027.         end
  1028.       end
  1029.     when 6  # 角色
  1030.       character = get_character(@params[1])
  1031.       if character != nil
  1032.         result = (character.direction == @params[2])
  1033.       end
  1034.     when 7  # 金钱
  1035.       if @params[2] == 0
  1036.         result = ($game_party.gold >= @params[1])
  1037.       else
  1038.         result = ($game_party.gold <= @params[1])
  1039.       end
  1040.     when 8  # 物品
  1041.       result = $game_party.has_item?($data_items[@params[1]])
  1042.     when 9  # 武器
  1043.       result = $game_party.has_item_by_base_id?($base_weapons[@params[1]], @params[2])
  1044.     when 10  # 防具
  1045.       result = $game_party.has_item_by_base_id?($base_armors[@params[1]], @params[2])
  1046.     when 11  # 按钮
  1047.       result = Input.press?(@params[1])
  1048.     when 12  # 脚本
  1049.       result = eval(@params[1])
  1050.     when 13  # 交通工具
  1051.       result = ($game_player.vehicle_type == @params[1])
  1052.     end
  1053.     @branch[@indent] = result     # 将判断结果放置在缓存中
  1054.     if @branch[@indent] == true
  1055.       @branch.delete(@indent)
  1056.       return true
  1057.     end
  1058.     return command_skip
  1059.   end
  1060.   
  1061.   
  1062.   #--------------------------------------------------------------------------
  1063.   # ● 计算装备操作的值
  1064.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1065.   #     operand      : 运算域 (数值为变量 ID)
  1066.   #--------------------------------------------------------------------------
  1067.   def opera_equip_value(operation, operand_type, operand)
  1068.     if operand_type == 0
  1069.       value = operand
  1070.     else
  1071.       value = $game_variables[operand]
  1072.     end
  1073.     return value
  1074.   end
  1075.   #--------------------------------------------------------------------------
  1076.   # ● 增减武器
  1077.   #--------------------------------------------------------------------------
  1078.   def command_127
  1079.     value = operate_value(@params[1], @params[2], @params[3])
  1080.     if @params[1] == 0
  1081.       $game_party.gain_reini($base_weapons[@params[0]], value.abs, @params[4])
  1082.     else
  1083.       $game_party.lose_reini($base_weapons[@params[0]], value.abs, @params[4])
  1084.     end
  1085.     return true
  1086.   end
  1087.   #--------------------------------------------------------------------------
  1088.   # ● 增减防具
  1089.   #--------------------------------------------------------------------------
  1090.   def command_128
  1091.     value = operate_value(@params[1], @params[2], @params[3])
  1092.     if @params[1] == 0
  1093.       $game_party.gain_reini($base_armors[@params[0]], value.abs, @params[4])
  1094.     else
  1095.       $game_party.lose_reini($base_armors[@params[0]], value.abs, @params[4])
  1096.     end
  1097.     return true
  1098.   end
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 更改装备
  1101.   #--------------------------------------------------------------------------
  1102.   def command_319
  1103.     actor = $game_actors[@params[0]]
  1104.     if actor != nil
  1105.       actor.change_equip_by_id(@params[1], @params[2])
  1106.     end
  1107.     return true
  1108.   end
  1109.   #--------------------------------------------------------------------------
  1110.   # ● 增减武器
  1111.   #--------------------------------------------------------------------------
  1112.   def get_weapon(id, n, *gift)
  1113.     $game_party.gain_reini($base_weapons[id], n, false, *gift)
  1114.   end
  1115.   #--------------------------------------------------------------------------
  1116.   # ● 增减防具
  1117.   #--------------------------------------------------------------------------
  1118.   def get_armor(id, n, *gift)
  1119.     $game_party.gain_reini($base_armors[id], n, false, *gift)
  1120.   end
  1121. end
  1122. #==============================================================================
  1123. # ■ Window_Base
  1124. #==============================================================================
  1125. class Window_Base < Window
  1126.   def draw_item_name(item, x, y, enabled = true)
  1127.     if item != nil
  1128.       draw_icon(item.icon_index, x, y, enabled)
  1129.       self.contents.font.color = text_color(item.text_color.to_i)
  1130.       self.contents.font.color.alpha = enabled ? 255 : 128
  1131.       self.contents.draw_text(x + 24, y, 172, WLH, item.name)
  1132.     end
  1133.   end
  1134. end
  1135. #==============================================================================
  1136. # ■ Window_ShopBuy
  1137. #==============================================================================
  1138. class Window_ShopBuy < Window_Selectable
  1139.   #--------------------------------------------------------------------------
  1140.   # ● 刷新
  1141.   #--------------------------------------------------------------------------
  1142.   def refresh
  1143.     @data = []
  1144.     for goods_item in @shop_goods
  1145.       case goods_item[0]
  1146.       when 0
  1147.         item = $base_items[goods_item[1]]
  1148.       when 1
  1149.         item = $base_weapons[goods_item[1]]
  1150.       when 2
  1151.         item = $base_armors[goods_item[1]]
  1152.       end
  1153.       if item != nil
  1154.         @data.push(item)
  1155.       end
  1156.     end
  1157.     @item_max = @data.size
  1158.     create_contents
  1159.     for i in 0...@item_max
  1160.       draw_item(i)
  1161.     end
  1162.   end
  1163. end
  1164. #==============================================================================
  1165. # ■ Window_ShopStatus
  1166. #==============================================================================
  1167. class Window_ShopStatus < Window_Base
  1168.   #--------------------------------------------------------------------------
  1169.   # ● 描绘角色现在装备的能力值变化
  1170.   #     actor : 角色
  1171.   #     x     : 描画目标 X 坐标
  1172.   #     y     : 描画目标 Y 坐标
  1173.   #--------------------------------------------------------------------------
  1174.   def draw_actor_parameter_change(actor, x, y)
  1175.     return if @item.is_a?(RPG::Item)
  1176.     enabled = actor.equippable?(@item, false)
  1177.     self.contents.font.color = normal_color
  1178.     self.contents.font.color.alpha = enabled ? 255 : 128
  1179.     self.contents.draw_text(x, y, 200, WLH, actor.name)
  1180.     if @item.is_a?(RPG::Weapon)
  1181.       item1 = weaker_weapon(actor)
  1182.     elsif actor.two_swords_style and @item.kind == 0
  1183.       item1 = nil
  1184.     else
  1185.       item1 = actor.equips[1 + @item.kind]
  1186.     end
  1187.     if enabled
  1188.       if @item.is_a?(RPG::Weapon)
  1189.         atk1 = item1 == nil ? 0 : item1.atk
  1190.         atk2 = @item == nil ? 0 : @item.atk
  1191.         change = atk2 - atk1
  1192.       else
  1193.         def1 = item1 == nil ? 0 : item1.def
  1194.         def2 = @item == nil ? 0 : @item.def
  1195.         change = def2 - def1
  1196.       end
  1197.       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  1198.     end
  1199.     draw_item_name(item1, x, y + WLH, enabled)
  1200.   end
  1201. end
  1202. #==============================================================================
  1203. # ■ Scene_File
  1204. #==============================================================================
  1205. class Scene_File < Scene_Base
  1206.   #--------------------------------------------------------------------------
  1207.   # ● 写入存档数据
  1208.   #     file : 写入文件用对象 (已经打开)
  1209.   #--------------------------------------------------------------------------
  1210.   def write_save_data(file)
  1211.     characters = []
  1212.     for actor in $game_party.members
  1213.       characters.push([actor.character_name, actor.character_index])
  1214.     end
  1215.     $game_system.save_count += 1
  1216.     $game_system.version_id = $data_system.version_id
  1217.     @last_bgm = RPG::BGM::last
  1218.     @last_bgs = RPG::BGS::last
  1219.     Marshal.dump(characters,           file)
  1220.     Marshal.dump(Graphics.frame_count, file)
  1221.     Marshal.dump(@last_bgm,            file)
  1222.     Marshal.dump(@last_bgs,            file)
  1223.     Marshal.dump($game_system,         file)
  1224.     Marshal.dump($game_message,        file)
  1225.     Marshal.dump($game_switches,       file)
  1226.     Marshal.dump($game_variables,      file)
  1227.     Marshal.dump($game_self_switches,  file)
  1228.     Marshal.dump($game_actors,         file)
  1229.     Marshal.dump($game_party,          file)
  1230.     Marshal.dump($game_troop,          file)
  1231.     Marshal.dump($game_map,            file)
  1232.     Marshal.dump($game_player,         file)
  1233.     Marshal.dump($data_weapons,        file)
  1234.     Marshal.dump($data_armors,         file)
  1235.   end
  1236.   #--------------------------------------------------------------------------
  1237.   # ● 读取存档数据
  1238.   #     file : 读取文件用对象 (已经打开)
  1239.   #--------------------------------------------------------------------------
  1240.   def read_save_data(file)
  1241.     characters           = Marshal.load(file)
  1242.     Graphics.frame_count = Marshal.load(file)
  1243.     @last_bgm            = Marshal.load(file)
  1244.     @last_bgs            = Marshal.load(file)
  1245.     $game_system         = Marshal.load(file)
  1246.     $game_message        = Marshal.load(file)
  1247.     $game_switches       = Marshal.load(file)
  1248.     $game_variables      = Marshal.load(file)
  1249.     $game_self_switches  = Marshal.load(file)
  1250.     $game_actors         = Marshal.load(file)
  1251.     $game_party          = Marshal.load(file)
  1252.     $game_troop          = Marshal.load(file)
  1253.     $game_map            = Marshal.load(file)
  1254.     $game_player         = Marshal.load(file)
  1255.     $data_weapons        = Marshal.load(file)
  1256.     $data_armors         = Marshal.load(file)
  1257.     if $game_system.version_id != $data_system.version_id
  1258.       $game_map.setup($game_map.map_id)
  1259.       $game_player.center($game_player.x, $game_player.y)
  1260.     end
  1261.   end
  1262. end
  1263. #==============================================================================
  1264. # ■ Scene_Shop
  1265. #==============================================================================
  1266. class Scene_Shop < Scene_Base
  1267.   #--------------------------------------------------------------------------
  1268.   # ● 确定输入个数
  1269.   #--------------------------------------------------------------------------
  1270.   def decide_number_input
  1271.     Sound.play_shop
  1272.     @number_window.active = false
  1273.     @number_window.visible = false
  1274.     case @command_window.index
  1275.     when 0  # 购买
  1276.       $game_party.lose_gold(@number_window.number * @item.price)
  1277.       $game_party.gain_reini(@item, @number_window.number)
  1278.       @gold_window.refresh
  1279.       @buy_window.refresh
  1280.       @status_window.refresh
  1281.       @buy_window.active = true
  1282.       @buy_window.visible = true
  1283.     when 1  # 卖出
  1284.       $game_party.gain_gold(@number_window.number * (@item.price / 2))
  1285.       $game_party.lose_reini_item(@item, @number_window.number)
  1286.       @gold_window.refresh
  1287.       @sell_window.refresh
  1288.       @status_window.refresh
  1289.       @sell_window.active = true
  1290.       @sell_window.visible = true
  1291.       @status_window.visible = false
  1292.     end
  1293.   end
  1294. end
  1295. #==============================================================================
  1296. # ■ Scene_Title
  1297. #==============================================================================
  1298. class Scene_Title < Scene_Base
  1299.   #--------------------------------------------------------------------------
  1300.   # ● 载入数据库
  1301.   #--------------------------------------------------------------------------
  1302.   def load_database
  1303.     $data_actors        = load_data("Data/Actors.rvdata")
  1304.     $data_classes       = load_data("Data/Classes.rvdata")
  1305.     $data_skills        = load_data("Data/Skills.rvdata")
  1306.     $data_items         = load_data("Data/Items.rvdata")
  1307.     $base_weapons       = load_data("Data/Weapons.rvdata")
  1308.     $base_armors        = load_data("Data/Armors.rvdata")
  1309.     $data_enemies       = load_data("Data/Enemies.rvdata")
  1310.     $data_troops        = load_data("Data/Troops.rvdata")
  1311.     $data_states        = load_data("Data/States.rvdata")
  1312.     $data_animations    = load_data("Data/Animations.rvdata")
  1313.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  1314.     $data_system        = load_data("Data/System.rvdata")
  1315.     $data_areas         = load_data("Data/Areas.rvdata")
  1316.     $data_weapons       = [nil]
  1317.     $data_armors        = [nil]
  1318.   end
  1319.   #--------------------------------------------------------------------------
  1320.   # ● 载入战斗测试用的数据库
  1321.   #--------------------------------------------------------------------------
  1322.   def load_bt_database
  1323.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  1324.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  1325.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  1326.     $data_items         = load_data("Data/BT_Items.rvdata")
  1327.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  1328.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  1329.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  1330.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  1331.     $data_states        = load_data("Data/BT_States.rvdata")
  1332.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  1333.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  1334.     $data_system        = load_data("Data/BT_System.rvdata")
  1335.     $base_weapons       = $data_weapons
  1336.     $base_armors        = $data_armors
  1337.   end
  1338. end

复制代码
随机武器属性系统

这两脚本在战斗显示与刷新中似乎有冲突···
战斗时无法看到我方人物!
class Window_ShopStatus < Window_Base
这里的描述应该怎么样修改!
求高手整合一下
作者: 迦月    时间: 2009-7-26 15:28
#=============================================================================
#★Zhong RMVX 半即时战斗系统 1.03b版★
#-----------------------------------------------------------------------------
#★Scene_CP核心部分参考自 : 神思  《战斗真位移》战斗系统
#★作者: Zhong_zw
#★联系方式: 66rpg.com论坛短信 或 [email protected]
#★游戏中如若引用本脚本,请保留以上信息,并作相关说明.
#☆如若转载本脚本请联系本人☆
#=============================================================================
#=============================================================================
#☆1.01版修正问题:
#1、物品、特技窗口选择我方人物时,头像重叠
#2、连续伤害及自动回复效果无效。
#☆1.02版修正问题:
#1、减少刷新次数,提高速度
#2、修正被打击时有可能退到cp槽外
#☆1.02a版修正问题:
#1、复活问题.
#2、头像刷新问题.
#☆1.03版更新内容:
#1、地图名称与战斗背景的对应关系可在哈希表中设置
#2、如无相应战斗背景直接采用默认战斗背景
#3、角色CP图缺失时,用角色相应行走图代替
#☆1.03a版更新内容:
#1、物品经验得失窗口有时图标显示错误的问题
#★注:旧版本的只要把脚本中“class Window_egi<Window_Base”这个类完整的覆盖原来就行了。
#☆1.03b版更新内容:
#1、图标战斗指令窗口刷新的问题
#2、修正战斗事件响应的部分功能
#=============================================================================
#☆使用方法说明☆
#☆使用方法基本与我之前发的朴素横版战斗相同
#☆动画设置:
#1、武器、特技、物品的施展动画直接在其备注填入动画id即可。如果为空即不显示施展动画。
#2、敌人普通攻击动画,在其备注里填写格式如下:
#  a1=XX #施展动画id
#  a2=XX #对方动画id
#如果为空即使用默认普通动画(画面震动).
#☆战斗图设置:
#3、角色战斗图的的命名方式是角色id后面加上_z,如1_z.存放在Battlers文件夹。
#4、默认待机图为两帧,只要在Battlers文件夹里放一个“战斗图名+待“的文件,就会自动循环播放
#这两个战斗图,如1_b待,没有则没待机动作。
#☆战斗背景设置:
#5、在Graphics目录下新建Battlebacks文件夹。
#6、战斗时先搜索文件夹内是否有与角色所在区域同名的战斗图,如果没有则搜索文件夹里是否
#存在与地图同名的图片。
#7、简而言之,你须储存与你地图同名的战斗背景在Battlebacks,如果想在同一幅地图实现不同地域
#战斗背景不同,就在Battlebacks文件夹里储存与这个地域同名的战斗背景.至少保证战斗的地图
#都有一幅该地图同名的战斗背景,不然战斗时会提示找不到地图.(可参考《拉尔夫战记》或朴素横版的范例)
#☆CP条设置:
#8、CP条:在system文件夹里储存一个命名为"cp条"的图片,默认长度为327,如果需要可在Scene_CP类里调整相
#关参数.
#9、角色cp图命名方式是"角色id+_cp",如:1_cp,角色活跃cp图命名方式是"角色id+_a_cp",如1_a_cp,
#敌人cp图命名方式是"敌人名 + _敌人cp",如史莱姆_敌人cp,敌人活跃cp图是"敌人名+_a_cp".
#亦可在system文件夹里储存名为"敌人cp"的图片,作为敌人的统一cp图,活跃图名为"a_敌人cp",默认如果找不到敌人相关cp图就直接
#用这张图片.
#☆选择光标设置
#10、在system文件夹里储存名为"光标"的图片作为选择光标.
#11、B_B_CONFIG = true 时地图与战斗背景的命名关系写在BATTLE_BACK 这个数组里,
#B_B_CONFIG = false时,和战斗背景和以前的命名方式相同。
#12、战斗背景文件缺失时,用回默认战斗背景。
#★队伍战斗事件的设置说明★:
#13、除“回合”和“回合结束”条件外,其他事件条件设置与默认系统相同。
#14、关于角色回合的定义:角色回合是指每个角色各自独有一个回合属性,角色CP值每满一次就增加一个回合,角色间的回合相互独立。
#15、关于角色回合条件设置,参照工程目录下的“说明图片”文件夹的图片1、2,3对各个框进行设置,实现两种回合条件的设置
#    步骤如下:
#     一、一般回合条件设置,即当角色回合等于或大于小于某个数值时就在回合开始前或后执行
#         事件。
#       1. 参看“说明图片”文件夹中的图1对各个框的定义。
#       2. 在事件条件设置窗口中勾上“回合结束”,即打开回合条件设置开关。
#       3. 勾上“回合数”,在“回合关系参数”框里输入“回合关系参数”。★注:旁边的那个框值为0
#       回合关系参数取值:
#            0 为当 "角色回合"等于"回合参数"值时,回合开始前执行。
#            1 为当 "角色回合"大于"回合参数"值时,回合开始前执行。
#            2 为当 "角色回合"小于"回合参数"值时,回合开始前执行。
#            3 为当 "角色回合"等于"回合参数"值时,回合进行后执行。
#            4 为当 "角色回合"大于"回合参数"值时,回合进行后执行。
#            5 为当 "角色回合"小于"回合参数"值时,回合进行后执行。
#        
#       4.选择“回合对象”,勾上相应的"敌角色"或"角色",选择相应对象。
#       5.在“回合参数”框上填入相关数值。

#     二、循环回合条件设置,即当角色回合等于某个回合后执行事件,以后每隔N个回合在执行一次。
#         1. 参看“说明图片”文件夹中的图2对各个框的定义。
#         2.设置事件执行时机,即回合执行前或后。
#           对“事件执行时机参数”进行设置,取值如下:
#             0 为回合执行前。
#             1 为回合执行后。
#         3.设置"间隔参数",即当达到一定回合数后,每隔N个回合再执行事件的间隔。
#         4.设置相应“回合对象”
#         5.设置“回合参数”
#         6.如图3设置,把“间隔”设为回合。
#16、附赠角色显示动画函数:
#     $game_troop.interpreter.add_aa(动画对象,动画id)
#     "动画对象"取值:角色id或-1,-1时即全体动画
#      在事件的"脚本"中调用就可以了!
#
#           
#=============================================================================
#=============================================================================
#★战斗背景设置及其他功能开关
#=============================================================================
BATTLE_BACK = {"汪洋"=>"草地","树林"=>"山岛森林"} #地图名称与战斗背景对应关系,命名方式:地图名或区域=>战斗背景名
B_B_CONFIG = true #是否启用地图名称与战斗背景对应关系功能
#"汪洋"=>"草地1",


#================================================
#★战斗者类
#================================================
class Game_Battler
   attr_accessor :cp
   attr_accessor :cp_total
   #================================================
   attr_accessor :Battler_turn #角色单独的回合数
   attr_accessor :turn_start  #角色回合状态 0:回合结束或非角色回合 1:角色回合 3:角色回合准备
   #================================================
   attr_accessor :cp_turn #角色能不行动时,计算角色实际cp爆满次数,用以代替回合,计算状态解除时机
   #=======================================
  attr_accessor :animation2_id   
  attr_accessor :act_status
  attr_accessor :damage
  attr_accessor :damage_pop
  attr_accessor :slip_damage
  attr_accessor :auto_damage
  #=========================================
   
   alias oldinitialize  initialize
   def initialize
     @cp = 0
     @cp_total = false
     @cp_turn = 0
     @damage = nil
     @damage_pop = false
     @act_status = 0
     @slip_damage = 0
     @auto_damage = 0
     @Battler_turn = 0
     @turn_start = 0
     oldinitialize
   end
  def maxcp
    return 100
  end  
  #--------------------------------------------------------------------------
  # ● 应用连续伤害效果
  #--------------------------------------------------------------------------
  def slip_damage_effect
    if slip_damage? and @hp > 0
      @hp_damage = apply_variance(maxhp / 10, 10)
      @hp_damage = @hp - 1 if @hp_damage >= @hp
      @slip_damage = @hp_damage
      self.hp -= @hp_damage
    end
  end

end #class   
#===============================================
#★角色队伍类
#===============================================
class Game_Party < Game_Unit
attr_accessor :actor_battler
alias oldinitialize initialize
def initialize
  oldinitialize
  @actor_battler = []
end
end #class  
#================================================
#★敌人队伍类
#================================================
class Game_Troop < Game_Unit
  attr_accessor :enemy_battler
alias  oldinitialize initialize
def initialize
   oldinitialize
   @enemy_battler = []
end  
  #--------------------------------------------------------------------------
  # ● 判断是否符合战斗事件 (页) 条件
  #     page : 战斗事件页
  #--------------------------------------------------------------------------
  def conditions_met?(page)
    c = page.condition
    if not c.turn_ending and not c.turn_valid and not c.enemy_valid and
       not c.actor_valid and not c.switch_valid
      return false      # 未设置条件…不执行
    end
    if @event_flags
      return false      # 已执行
    end

    if c.enemy_valid    # 敌方角色
      enemy = $game_troop.members[c.enemy_index]
      return false if enemy == nil
      if c.turn_ending == false  #
        return false if enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
      elsif c.turn_ending and not c.turn_valid  
        return false if enemy.Battler_turn != c.enemy_hp  or enemy.cp != 100
      elsif c.turn_ending and  c.turn_valid
        a = c.turn_a
        b = c.turn_b
       if b>0
        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))
        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))
       else
         if a == 0 #回合开始时 等于
          return false if ( enemy.Battler_turn != c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
         
          elsif a == 1 # #回合开始时 回合数大于
           return false if (enemy.Battler_turn <= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
          elsif a == 2 #回合开始时 回合数小于
           return false if (enemy.Battler_turn >= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 1)
          elsif a == 3 #回合结束时 回合数等于
           return false if (enemy.Battler_turn != c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
          elsif a == 4 #回合结束时 回合数大于
           return false if (enemy.Battler_turn <= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
          elsif a == 5 # 回合结束时 回合数小于
           return false if (enemy.Battler_turn >= c.enemy_hp or enemy.cp != 100 or enemy.turn_start != 0)
         end
       end
      end
    end
    if c.actor_valid    # 角色
      actor = $game_actors[c.actor_id]
      return false if actor == nil
      if c.turn_ending == false  #
        return false if actor.hp * 100.0 / actor.maxhp > c.actor_hp
      elsif c.turn_ending and not c.turn_valid  
        return false if actor.Battler_turn != c.actor_hp  or actor.cp != 100
      elsif c.turn_ending and  c.turn_valid
        a = c.turn_a
        b = c.turn_b
       if b > 0
        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))
        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))
       else
        if a == 0 # 等于
          return false if (actor.Battler_turn != c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
         
        elsif a == 1 #回合开始时 回合数大于
          return false if (actor.Battler_turn <= c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
        elsif a == 2 #回合开始时 回合数小于
          return false if (actor.Battler_turn >= c.actor_hp or actor.cp != 100 or actor.turn_start != 1)
        elsif a == 3 #回合结束时 回合数等于
          return false if (actor.Battler_turn != c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
        elsif a == 4 #回合结束时 回合数大于
          return false if (actor.Battler_turn <= c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
        elsif a == 5 #回合结束时 回合数小于
           return false if (actor.Battler_turn >= c.actor_hp or actor.cp != 100   or actor.turn_start != 0)
        end  
       end
      end  
        
    end
    if c.switch_valid   # 开关
      return false if $game_switches[c.switch_id] == false
    end
    return true         # 符合条件
  end
  #--------------------------------------------------------------------------
  # ● 增加回合
  #--------------------------------------------------------------------------
  def increase_turn
    for page in troop.pages
      if page.span == 1
        @event_flags= false
      end
    end
    #@turn_count += 1
  end

end#class
#================================================
#★cp条处理类
#================================================

class Scene_CP
    attr_accessor :stop
    attr_accessor :in_battler
    attr_accessor :cp_battler
    BATTLE_SPEED = 0.8
    def initialize
      @stop = false
      @all_agi = 0
      @v =  Viewport.new(0, 0, 544, 90)
      @count = 0
      @cpline = Sprite.new(@v)
      @cpline.bitmap = Bitmap.new(544,416)
      bitmap = Bitmap.new("Graphics/system/cp条")
      @cpline.bitmap.blt(105,8,bitmap,bitmap.rect)
      @cp_battler = {}
      @walk_count = 0
      for battler in $game_party.members + $game_troop.members
        @all_agi += battler.agi
        @cp_battler[battler] = Sprite_cpbattler.new
        if battler.is_a?(Game_Actor)
          name = battler.id.to_s + "_cp"
          if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
              bitmap = Bitmap.new("Graphics/system/#{name}")
              rect = bitmap.rect
              @cp_battler[battler].bitmap = bitmap
          else
              
               
               bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
                sign = battler.character_name[/^[\!\$]./]
                if sign != nil and sign.include?('$')
                  cw = bitmap.width / 3
                  ch = bitmap.height / 4
                  
                else
                  cw = bitmap.width / 12
                  ch = bitmap.height / 8
                  
                end
                 n = battler.character_index
                 rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
               
                 @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
          end
         
         
          @cp_battler[battler].bitmap.blt(0, 0,bitmap,rect)
        else
          name = battler.original_name + "_敌人cp"
          if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
          else
             @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
          end
             @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
        end  
        @cp_battler[battler].z = 101
        @cp_battler[battler].visible = false
        
      end
    end   
   
    #===========================================
   
   
   
   
    #===========================================
   
   
    def update
      
      return if @stop
      
      
      for battler in $game_party.members + $game_troop.members
        if (@cp_battler[battler].disposed? or @cp_battler[battler].opacity == 0) and battler.dead?
          @cp_battler.delete(@cp_battler[battler])
          next
        end  
        if battler.dead?
         if  @cp_battler.include?(battler)
              @cp_battler[battler].collapse = true
          end   
          battler.cp = 0
          next
        end  
       next if @cp_battler[battler].disposed?   
       battler.cp = [[battler.cp + BATTLE_SPEED*10*battler.agi / @all_agi,0].max,battler.maxcp].min if battler.movable?
       battler.cp_turn = [[battler.cp_turn+BATTLE_SPEED*10*battler.agi / @all_agi, 0].max,battler.maxcp].min
       if battler.cp == battler.maxcp
         #============================
         #☆设置战斗者处于回合准备状态
         #============================
           battler.turn_start = 3
         #============================  
         if battler.is_a?(Game_Actor)
              name = battler.id.to_s + "_a_cp"
              if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
               bitmap = Bitmap.new("Graphics/system/#{name}")
               rect = bitmap.rect
               @cp_battler[battler].bitmap = bitmap
              else
               
                bitmap = Bitmap.new("Graphics/Characters/#{battler.character_name}")
                sign = battler.character_name[/^[\!\$]./]
                if sign != nil and sign.include?('$')
                  cw = bitmap.width / 3
                  ch = bitmap.height / 4
                else
                  cw = bitmap.width / 12
                  ch = bitmap.height / 8
                end
                 n = battler.character_index
                 
                 rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
               
                 @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
                 
              end
              
              @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
            
          else
            name = battler.original_name + "_a_cp"
            if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
            @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
            else
            @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/a_敌人cp")
            end
            @cp_battler[battler].bitmap.blt(80,60,  @cp_battler[battler].bitmap,  @cp_battler[battler].bitmap.rect)
          end  
            @cp_battler[battler].z = 101
            battler.cp_total = true
     
      elsif battler.cp_total == true
          if battler.is_a?(Game_Actor)
             name = battler.id.to_s + "_cp"
             if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
              bitmap = Bitmap.new("Graphics/system/#{name}")
              rect = bitmap.rect
              @cp_battler[battler].bitmap = bitmap
             else
              
                bitmap =  Bitmap.new("Graphics/Characters/#{battler.character_name}")
                sign = battler.character_name[/^[\!\$]./]
                if sign != nil and sign.include?('$')
                  cw = bitmap.width / 3
                  ch = bitmap.height / 4
                else
                  cw = bitmap.width / 12
                  ch = bitmap.height / 8
                end
                 n = battler.character_index
                 rect = Rect.new((n%4*3+1)*cw, (n/4*4+2)*ch, cw, ch)
                 
                 @cp_battler[battler].bitmap = Bitmap.new(cw,ch)
                 
                 
              end
            
              @cp_battler[battler].bitmap.blt(0,0,bitmap,rect)
            
            
          elsif  
             name = battler.original_name + "_敌人cp"
             if FileTest.exist?("Graphics/system/#{name}.jpg") or FileTest.exist?("Graphics/system/#{name}.png") or FileTest.exist?("Graphics/system/#{name}.bmp")
                 @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/#{name}")
               
             else
                 @cp_battler[battler].bitmap = Bitmap.new("Graphics/system/敌人cp")
               
             end
               
               @cp_battler[battler].bitmap.blt(80,60, @cp_battler[battler].bitmap, @cp_battler[battler].bitmap.rect)
            end
            battler.cp_total = false
            @cp_battler[battler].z = 105
            
      end
      
      @cp_battler[battler].visible = true if @cp_battler[battler].visible == false
      @cp_battler[battler].opacity = 255
      @cp_battler[battler].y = 30
      @cp_battler[battler].x = 95+300*battler.cp/battler.maxcp
      if battler.cp_turn == battler.maxcp
        battler.remove_states_auto unless battler.movable?
        battler.slip_damage_effect
        battler.do_auto_recovery if battler.is_a?(Game_Actor)
        battler.damage_pop = true if battler.slip_damage != 0 or battler.auto_damage != 0
        battler.cp_turn = 0
      end  
      if battler.cp == battler.maxcp
         if battler.is_a?(Game_Actor)
           $game_party.actor_battler.push(battler)
         else
           battler.make_action
           $game_troop.enemy_battler.push(battler)
           battler.make_action
          end   
      else
        next
      end  
      
      
      
   end     
end

  def dispose
    for j in 0..25
    @cpline.opacity -= 10
    for i in @cp_battler.values
      unless i.disposed?
      i.opacity -= 10
      end
    end  
     Graphics.update
    end  
    @v.dispose
    @cpline.dispose
    for i in @cp_battler.values
      i.dispose unless i.disposed?
    end
  end  
end
  
  
  
  
  
  
  
  
  class Sprite_cpbattler < Sprite
    attr_accessor :collapse
   
    def initialize (viewport = nil)
      super (viewport)
     
      @effect_duration = 0        
      @collapse = false
    end
    def update
       super
  
     if self.collapse == true and self.opacity != 0
      @effect_type = 5
      @effect_duration = 48
      self.color.set(255, 128, 128, 128)
      for i in 0..48
      self.opacity = 256 - (48 - @effect_duration) * 6
      if self.opacity == 0
   
      break
      end  
      Graphics.update
      @effect_duration -= 1
      end
     
      self.collapse = false
      self.color.set(255,255,255,5)
     end
     
    end
   
  def dispose
     if self.bitmap != nil
      self.bitmap.dispose
     end
   
    super
  end
      
end  

#==========================================================================
#
#==========================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    #======================
    @select_input = true
    #======================
    $game_temp.in_battle = true
    #=============================================
    unless  $BTEST
      @battleback = nil
      for area in  $data_areas.values
        
        if $game_player.in_area?(area)
           
            name = area.name
            unless B_B_CONFIG
             @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")
               break
            else
              if BATTLE_BACK[name] != nil
                @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")
              end
              break  
               
               
           end
         end
      end     
        if @battleback == nil
            name = $game_map.name
            unless B_B_CONFIG
              
              @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")
            else
              if BATTLE_BACK[name] != nil
                 @battleback = Cache.battleback("#{BATTLE_BACK[name]}")
              else
                 @battleback = nil
              end
            end   
        end      
      $game_temp.background_bitmap  = @battleback if @battleback != nil
    end
   #==================================================
    @spriteset = Spriteset_Battle.new
    @message_window = Window_BattleMessage.new
    @message_window.visible = false
    @action_battlers = []
    @cp_battle = Scene_CP.new
    @cp_battle.stop = false
    create_info_viewport
   
   
    @select_icon = Sprite.new
    @select_icon.z = 148
    @select_icon.bitmap = Bitmap.new("Graphics/system/光标")
    @select_icon.opacity = 240
    @select_icon.visible = false
    @c_c = 0
   
   
  end
  
  #==============================================================
  #★ 定义光标刷新
  #==============================================================
   
  def select_icon_update(s_sw = false)
    if s_sw == false
      @select_icon.visible = false
    else
      @select_icon.visible = true
      @select_icon.x = $game_troop.members[@target_enemy_window.enemy.index].screen_x
      @select_icon.y = $game_troop.members[@target_enemy_window.enemy.index].screen_y - 30
      
      if @c_c%2 == 0
      @select_icon.opacity += 30
      else
      @select_icon.opacity -= 30  
      end
    end  
   
  end   
  
  
  #=================================================
  #★主刷新部分
  #=================================================
  
  
  def update
    super
   
    @c_c += 1
  
    update_basic(true)
    update_info_viewport               
      return if judge_win_loss            
      update_scene_change
      if @target_enemy_window != nil
        update_target_enemy_selection     
      elsif @target_actor_window != nil
        update_target_actor_selection     
      elsif @skill_window != nil
        update_skill_selection            
      elsif @item_window != nil
        update_item_selection            
      
      elsif @actor_command_window.active
        update_actor_command_selection   
      #=================================
      elsif @cp_battle.stop ==  false
        active_battler_update
      #=================================  
         
      end
      
    #end
  
      
  end
  #--------------------------------------------------------------------------
  # ● 战斗事件处理
  #--------------------------------------------------------------------------
  def process_battle_event
    #============================
    if $game_message.texts != nil
     @message_window.visible = true
    end
    #=============================
    loop do
      return if judge_win_loss
      return if $game_temp.next_scene != nil
      $game_troop.interpreter.update
      $game_troop.setup_battle_event
     # wait_for_message
      process_action if $game_troop.forcing_battler != nil
      #======================================
      unless $game_troop.interpreter.running?
         if $game_message.texts != nil
          @message_window.clear
          @message_window.visible = false
        end
         return
      end  
      #=======================================
      update_basic
    end
   
  end
  
  
  #================================================
  #★战斗初始化
  #===============================================
  
  def start_party_command_selection
    if $game_temp.in_battle
      @status_window.refresh
      @status_window.index = @actor_index = -1
      @active_battler = nil
     
     @actor_command_window.active = false
      $game_party.clear_actions
   
    for i in 0..$game_party.members.size-1
      if $game_party.members.act_status != -1
        $game_party.members.act_status = -1
      end  
    end
   
      if $game_troop.surprise or not $game_party.inputable?
        start_main
      end
    end
  end
  
  #=============================================
  #★角色回合的处理函数
  #=============================================
  
  
  def next_actor
   
    for i in 0..$game_party.members.size-1
      if $game_party.members.act_status != -1
        $game_party.members.act_status = -1
      end  
    end
  
    @info_viewport.visible = true
    @status_window.refresh
    @now_face = -1
    @actor_command_window.index = 0
    @actor_command_window.update
    @status_window.update
  
    loop do
   
      if @actor_index == @actor_battler.size - 1
      
        start_main
        return
        
      end   
      @actor_index += 1
      index = 0
      for battler in $game_party.members
        if battler == @actor_battler[@actor_index]
          break
        else
          index += 1
        end
      end  
      @status_window.index = index
     
       if @active_battler != nil and @active_battler != @actor_battler[@actor_index] and @active_battler.is_a?(Game_Actor)
        @active_battler.act_status = -1
      end
      
      @active_battler = @actor_battler[@actor_index]
     
     
      @active_battler.act_status = 1
      #=================================
      #★角色回合事件处理
      #================================
      @active_battler.Battler_turn += 1
      @active_battler.turn_start = 1
      $game_troop.increase_turn
      process_battle_event
      if @active_battler.auto_battle
        @active_battler.make_action
        next
      end
      break if @active_battler.inputable?
    end
    start_actor_command_selection
  end
  
  #===================================================
  #★激活角色指令窗口
  #===================================================
  
  def start_actor_command_selection
    @actor_command_window.setup(@active_battler)
    @actor_command_window.active = true
    @actor_command_window.index = 0
  end
  
  #==============================================
  #★指令窗口刷新
  #==============================================
   def update_actor_command_selection
   
    if Input.trigger?(Input::C)
      case @actor_command_window.index
      when 0  # 攻击
        Sound.play_decision
        @active_battler.action.set_attack
        start_target_enemy_selection
      when 1  # 特技
        Sound.play_decision
        start_skill_selection
      when 2  # 防御
        Sound.play_decision
        @active_battler.action.set_guard
        next_actor
        #@active_battler.cp = 0
      when 3  # 物品
        Sound.play_decision
        start_item_selection
      
      when 4 #逃跑
        if $game_troop.can_escape == false
          Sound.play_buzzer
          return
        end
        Sound.play_decision
        process_escape
    end
    end
  end
  
  #====================================
  #★选择敌人
  #====================================
  def start_target_enemy_selection
     if @skill_window != nil
      @skill_window.visible = false
    end
    if @item_window != nil
      @item_window.visible = false
    end  
    @target_enemy_window = Window_TargetEnemy.new
    @target_enemy_window.opacity = 0
    @target_enemy_window.contents_opacity = 0
    #@target_enemy_window.y = @info_viewport.rect.y
    #@info_viewport.rect.x += @target_enemy_window.width
    #@info_viewport.ox += @target_enemy_window.width
    @actor_command_window.active = false
  
    select_icon_update(true)
  end
  #===========================================================
  #★结束敌人选择
  #===========================================================
   def end_target_enemy_selection
    #@info_viewport.rect.x -= @target_enemy_window.width
    #@info_viewport.ox -= @target_enemy_window.width
    @target_enemy_window.dispose
    @target_enemy_window = nil
   
    select_icon_update
   
    if @actor_command_window.index == 0
      @actor_command_window.active = true
    end
  end  
  #=======================================================
  #★敌人选择刷新
  #=======================================================
  def update_target_enemy_selection
   @target_enemy_window.update
   
    select_icon_update(true)

    if Input.trigger?(Input::B)
      Sound.play_cancel
      if @skill_window != nil
        @skill_window.visible = true
      end
      if @item_window != nil
        @item_window.visible = true
      end  
      end_target_enemy_selection
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @active_battler.action.target_index = @target_enemy_window.enemy.index
      end_target_enemy_selection
      end_skill_selection
      end_item_selection
      next_actor
     # @active_battler.cp = 0
    end
  end
  
  #======================================================
  #★己方选择
  #======================================================
  def start_target_actor_selection
    @target_actor_window = Window_BattleStatus.new
    @target_actor_window.index = 0
    @target_actor_window.active = true
    @target_actor_window.y = @info_viewport.rect.y
    @target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
    @info_viewport.rect.x += @target_actor_window.width
    @info_viewport.ox += @target_actor_window.width
    @actor_command_window.active = false
    #=====================
    #☆减少刷新次数
    #=====================
    @last_index = -1
  end
  #==================================================
  #★己方选择结束处理
  #==================================================
  def end_target_actor_selection
    @info_viewport.rect.x -= @target_actor_window.width
    @info_viewport.ox -= @target_actor_window.width
    @target_actor_window.dispose
    @target_actor_window = nil
    #=====================
    #☆减少刷新次数
    #=====================
    @last_index = -1
  end
  #===================================================
  #★己方选择刷新
  #===================================================
  def update_target_actor_selection
    if @last_index != @target_actor_window.index
     @target_actor_window.refresh
     @target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
     @last_index = @target_actor_window.index
    end
    @target_actor_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_target_actor_selection
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @active_battler.action.target_index = @target_actor_window.index
     
      end_target_actor_selection
      end_skill_selection
      end_item_selection
      next_actor
     # @active_battler.cp = 0
    end
  end
  #============================================
  #★特技使用决定  处理
  #===========================================
  
  
  def determine_skill
    @active_battler.action.set_skill(@skill.id)
    @skill_window.active = false
    if @skill.need_selection?
      if @skill.for_opponent?
        start_target_enemy_selection
      else
        start_target_actor_selection
      end
    else
      end_skill_selection
      next_actor
     # @active_battler.cp = 0
    end
  end
  #=========================================
  #★物品使用决定  处理
  #=========================================
  
  
  def determine_item
    @active_battler.action.set_item(@item.id)
    @item_window.active = false
    if @item.need_selection?
      if @item.for_opponent?
        start_target_enemy_selection
      else
        start_target_actor_selection
      end
    else
      end_item_selection
      next_actor
     #  @active_battler.cp = 0
    end
  end
  
  #===============================================
  #★各窗口视口生成
  #===============================================
   def create_info_viewport
    @info_viewport = Viewport.new(0, 288, 544, 256)
    @info_viewport.z = 100
    @status_window = Window_BattleStatus.new
    @actor_command_window = Window_ActorCommand.new
    @status_window.viewport = @info_viewport
    @actor_command_window.viewport = @info_viewport
    @status_window.x = 0
    @actor_command_window.x = 416
    @status_window.y = 128
    @actor_command_window.y = 128
    @info_viewport.visible = false
    #========================
    #☆减少头像刷新用
    #========================
    @now_face = -1
   
  end
  #================================================
  #★视口释放
  #================================================
  def dispose_info_viewport
    @status_window.dispose
    @actor_command_window.dispose
    @info_viewport.dispose
    #========================
    #☆减少头像刷新用
    #========================
    @now_face = -1
    if @window_egi != nil
     @window_egi.dispose
    end
  end
  #======================================================
  #★视口刷新
  #======================================================
  
  
  def update_info_viewport
   
    @actor_command_window.update
   
  
    if @active_battler != nil and @active_battler.is_a?(Game_Actor) and @active_battler.id != @now_face
      @status_window.draw_actorface(@active_battler)
      @now_face = @active_battler.id
    end  
   
   
    @status_window.update
   
   
   
    if @actor_command_window.active and   @actor_command_window.y > 0
     @actor_command_window.y -= 8
     @status_window.y -= 8
   
   
    end

  end
  
  #================================================
  #★战斗开始 处理
  #================================================
  
  def process_battle_start
   
   
    if $game_troop.preemptive
     
      for battler in $game_party.members
         battler.cp = battler.maxcp
       end  
       $game_troop.preemptive = false
    elsif $game_troop.surprise
      
      for battler in $game_troop.members
        battler.cp = battler.maxcp
      end
      $game_troop.surprise = false
    end
   
    make_escape_ratio
    process_battle_event
   
    #===========================================
    @status_window.refresh
    @status_window.index = @actor_index = -1
   
    #=====================
    @cp_battle.stop = false
    #=====================
  
  end
  #=========================================
  #★战斗结束cp条释放处理
  #=========================================
  def dispose_cp_battle
      #=============================
      @cp_battle.dispose
      #=============================
      for battler in $game_party.members + $game_troop.members
        battler.cp = 0
        #=========================
        battler.Battler_turn = 0
        battler.turn_start = 0
        #=========================
      end  
  
  end
  
  #==========================================
  #★逃走处理
  #==========================================
  def process_escape
    @message_window.visible = false
    @info_viewport.visible = false
   
    if $game_troop.preemptive
      success = true
    else
      success = (rand(100) < @escape_ratio)
    end
    Sound.play_escape
    if success
      #=============================
      @cp_battle.dispose
      #=============================
      for battler in $game_party.members
        battler.cp = 0
        #=========================
        battler.Battler_turn = 0
        battler.turn_start = 0
        #=========================
      end  
     
      battle_end(1)
    else
      @escape_ratio += 10
     
      #@active_battler.cp = 0
      @active_battler.action.clear
      next_actor   
    end
  end
  #========================================
  #★胜利处理
  #========================================
  def process_victory
    @message_window.visible = false
    @info_viewport.visible = false
  
    RPG::BGM.stop
    $game_system.battle_end_me.play
    for battler in $game_troop.members
      if battler.dead?
         if  @cp_battle.cp_battler.include?(battler)
              @cp_battle.cp_battler[battler].collapse = true
              
              next
          end  
       end     
    end
     @cp_battle.cp_battler.each{|key,value|
      if value.disposed?
        @cp_battler.delete(key)
        next
      end
      value.update}
    #=============================
    @cp_battle.dispose
    #=============================
   for battler in $game_party.members
      #=========================
      battler.Battler_turn = 0
      battler.turn_start = 0
      #=========================
     battler.cp = 0
   end
    unless $BTEST
      $game_temp.map_bgm.play
      $game_temp.map_bgs.play
    end
    display_exp_and_gold
    display_drop_items
    display_level_up
    battle_end(0)
  end
   
  #=================================
  #★失败处理
  #=================================
  def process_defeat
    @message_window.visible = false
    @cp_battle.dispose
    for battler in $game_party.members + $game_troop.members
      #=========================
      battler.Battler_turn = 0
      battler.turn_start = 0
      #=========================
      battler.cp = 0
    end
    @info_viewport.visible = false
   
    battle_end(2)
   
  end
  #=====================================
  # ★ 执行画面转换
  #=====================================
  def update_scene_change
    case $game_temp.next_scene
    when "map"
      dispose_cp_battle
      call_map
    when "gameover"
      dispose_cp_battle
      call_gameover
    when "title"
      dispose_cp_battle
      call_title
    else
      $game_temp.next_scene = nil
    end
  end
  #=============================================================================
  #★CP战斗的主要刷新★
  #=============================================================================
  
   def active_battler_update
   
    #===================================
    @actor_battler = []
    @enemy_battler = []
    $game_party.actor_battler = []
    $game_troop.enemy_battler = []
    #===================================
    @cp_battle.update
    @actor_battler = $game_party.actor_battler
    @enemy_battler = $game_troop.enemy_battler
    #for battler in $game_party.members + $game_troop.members
      
    #end
    if @actor_battler.size != 0
      @cp_battle.stop = true
#~       @active_battler.Battler_turn += 1
#~       @active_battler.turn_start = 1
#~       $game_troop.increase_turn
#~       process_battle_event
      next_actor
      Audio.se_play("Audio/SE/Jump2",100,100)
    elsif @enemy_battler.size != 0  
   
    #================
    @cp_battle.stop = true
    start_main
    #================
   
   
     
   end
  
end

#=============================================================
#=============================================================
  #====================================================
  #★战斗主处理
  #====================================================
   def start_main
   
    for i in 0..$game_party.members.size-1
      if $game_party.members.act_status != 0
        $game_party.members.act_status = 0
      end  
    end
   
   
   
    if @info_viewport.visible
    @info_viewport.visible = false
    @status_window.y = 128
    @actor_command_window.y = 128
    end
    @actor_command_window.index = 0
    @actor_command_window.update
    @actor_command_window.active = false
   
    @status_window.index = @actor_index = -1
    @active_battler = nil
  
    make_action_orders
    wait(20)
   #=============================
  
   while @action_battlers.size != 0 and judge_win_loss == false
        process_action
        #process_battle_event
   end
   @cp_battle.stop = false
   #=============================
   
end
#=====================================
#★行动顺序生成
#=====================================


def make_action_orders
    @action_battlers = []
   
    unless $game_troop.surprise
      @action_battlers += @actor_battler if @actor_battler.size != 0
    end
   
   
    unless $game_troop.preemptive
      @action_battlers += @enemy_battler if @enemy_battler.size != 0
    end
    for battler in @action_battlers
      
      battler.action.make_speed
    end
    @action_battlers.sort! do |a,b|
      b.action.speed - a.action.speed
    end
  end
#====================================
#★战斗行动处理
#====================================
def process_action
   
    return if judge_win_loss
    return if $game_temp.next_scene != nil
    set_next_active_battler
   
    return if @active_battler == nil
    return if @active_battler.dead?
   
    @active_battler.white_flash = true
   
    unless @active_battler.is_a?(Game_Actor)
      @active_battler.Battler_turn += 1
      @active_battler.turn_start = 1
      $game_troop.increase_turn
      process_battle_event
    end  
   
    unless @active_battler.action.forcing
      @active_battler.action.prepare
    end
    if @active_battler.action.valid?
      execute_action
    end
   
    unless @active_battler.action.forcing
     
      remove_states_auto
      display_current_state
    end
    @active_battler.white_flash = false
    @active_battler.turn_start = 0
    process_battle_event
    @active_battler.cp = 0
  end

  #=================================
  #★攻击行动 执行
  #=================================
  def execute_action_attack
   
    targets = @active_battler.action.make_targets
    display_attack_animation(targets)
    wait(20)
    for target in targets
      target.attack_effect(@active_battler)
      display_action_effects(target)
    end
    #=====================
    #@active_battler.cp = 0
    #=====================
   end
  #===============================
  #★防御行动   执行
  #===============================
   
   
   def execute_action_guard
   
    wait(45)
    #=====================
    #@active_battler.cp = 0
    #=====================
  end
   #===============================
   #★逃走  执行
   #===============================
  
  def execute_action_escape
   
    @active_battler.escape
    Sound.play_escape
    wait(45)
    #=====================
    #@active_battler.cp = 0
    #=====================
  end
  #====================================
  #★待机  执行
  #====================================
  def execute_action_wait
   
    wait(45)
    #=====================
    #@active_battler.cp = 0
    #=====================
  end
  
  #============================
  #★特技   执行
  #============================
  def execute_action_skill
    skill = @active_battler.action.skill
   
    targets = @active_battler.action.make_targets
   
   
    user = @active_battler.action.skill_user
    if skill.animation2_id != 0
      display_animation(user,skill.animation2_id)
    end  
    display_animation(targets, skill.animation_id)
   
    wait_for_animation
   
    @active_battler.mp -= @active_battler.calc_mp_cost(skill)
    $game_temp.common_event_id = skill.common_event_id
    for target in targets
      target.skill_effect(@active_battler, skill)
      display_action_effects(target, skill)
    end
    #=====================
    #@active_battler.cp = 0
    #=====================
  end
  
  #==============================
  #★物品行动 执行
  #==============================
  
  def execute_action_item
    item = @active_battler.action.item
   
   
    user = @active_battler.action.skill_user
    if item.animation2_id != 0
      display_animation(user,item.animation2_id)
    end  
   
   
    targets = @active_battler.action.make_targets
    display_animation(targets, item.animation_id)
   
    wait_for_animation
   
    $game_party.consume_item(item)
    $game_temp.common_event_id = item.common_event_id
    for target in targets
      target.item_effect(@active_battler, item)
      display_action_effects(target, item)
    end
    #=====================
   # @active_battler.cp = 0
    #=====================
  end
  #===========================
  #★行动动画显示
  #animation_id :-1 为普通攻击
  #===========================
  def display_animation(targets, animation_id)
    if animation_id < 0
      display_attack_animation(targets)
    else
      display_normal_animation(targets, animation_id)
    end
    wait(20)
   
  end
  #====================================
  #★普通攻击的动画显示
  #====================================
  def display_attack_animation(targets)

    if @active_battler.is_a?(Game_Enemy)
        user = @active_battler.action.skill_user
      if @select_input == true
        a1 = 0
        a2 = 0
        eval(@active_battler.note)
        display_normal_animation(user,a1)if   a1 != 0
        display_normal_animation(targets,a2)if  a2 !=0
        Sound.play_enemy_attack if   a1 == 0 and a2 == 0
        wait(15, true) if  a1 == 0 and  a2 == 0
      elsif @active_battler.animation1_id != 0 or @active_battler.animation2_id != 0
            display_normal_animation(user,@active_battler.animation1_id)if @active_battler.animation1_id != 0
            display_normal_animation(targets,@active_battler.animation2_id)if @active_battler.animation2_id != 0
            Sound.play_enemy_attack if  @active_battler.animation1_id == 0 and @active_battler.animation2_id == 0
            wait(15, true) if  @active_battler.animation1_id == 0 and @active_battler.animation2_id == 0
       end     
   
   
   else
      aid1 = @active_battler.atk_animation_id
      aid2 = @active_battler.atk_animation_id2
     
      user = @active_battler.action.skill_user
      if @active_battler.act_animation_id != 0
        display_normal_animation(user,@active_battler.act_animation_id)
      end  
     
   
      
      display_normal_animation(targets, aid1, false)
      display_normal_animation(targets, aid2, true)
    end
    wait_for_animation
  end
  
  #========================================
  #★显示行动结果
  #========================================
   def display_action_effects(target, obj = nil)
    unless target.skipped
     
      wait(5)
      #=======================
      target.damage_pop = true
      #=======================
      display_critical(target, obj)
      display_damage(target, obj)
      display_state_changes(target, obj)
   
    end
  end
  
  #======================================
  #★显示HP伤害
  #======================================
  
  
  def display_hp_damage(target, obj = nil)
     
    if target.hp_damage == 0               
      return if obj != nil and obj.damage_to_mp
      return if obj != nil and obj.base_damage == 0
      
    elsif target.absorbed                   # 吸収
     
       #=====================================
      @active_battler.damage_pop = true
      @active_battler.damage = target.hp_damage
     
      target.cp -= target.hp_damage/100
      target.cp = [target.cp,0].max
      @cp_battle.cp_battler[target].x = [95+300*target.cp/target.maxcp,95].max
     if target.dead?
         @cp_battle.cp_battler[target].collapse = true
         target.cp = 0
         @cp_battle.cp_battler[target].update
      end
      
      
   
      #=====================================
    elsif target.hp_damage > 0            
     
      if target.actor?
      
        Sound.play_actor_damage
        $game_troop.screen.start_shake(5, 5, 10)
      else
      
        Sound.play_enemy_damage
        target.blink = true
      end
      #=====================================
      
      target.cp -= target.hp_damage/100
      target.cp = [target.cp,0].max
      @cp_battle.cp_battler[target].x = [95 + 300*target.cp/target.maxcp,95].max
      
      if target.dead?
         @cp_battle.cp_battler[target].collapse = true
         target.cp = 0
         @cp_battle.cp_battler[target].update
      end
      
     
      #wait(10)
      #=====================================
    else                                    
     
      Sound.play_recovery
    end
   
  end
  #--------------------------------------------------------------------------
  # ● MP 伤害表示
  #--------------------------------------------------------------------------
  def display_mp_damage(target, obj = nil)
    return if target.dead?
    return if target.mp_damage == 0
   
    if target.absorbed                      # 吸收
      
      #=====================================
      @active_battler.damage_pop = true
      @active_battler.damage = - target.mp_damage
     
      
      target.cp -= target.mp_damage/100
      target.cp = [target.cp,0].max
      @cp_battle.cp_battler[target].x = [95+300*target.cp/target.maxcp,95].max
      
      #=====================================
    elsif target.mp_damage > 0              
   
     #=====================================
      target.cp -= target.mp_damage/100
      target.cp = [target.cp,0].max
      @cp_battle.cp_battler[target].x = [95+300*target.cp/target.maxcp,95].max
      
      #=====================================
    else                                    
   
      Sound.play_recovery
    end
   
  end
  #=======================================
  #★重定义对话窗口刷新
  #=======================================
  def wait_for_message
   #wait(45)
  end
  
  #================================================
  #★经验金钱获得物品提示窗口(原方法重定义)
  #================================================
  def display_exp_and_gold
    exp=$game_troop.exp_total
    gold=$game_troop.gold_total
    $game_party.gain_gold(gold)
    drop_items = $game_troop.make_drop_items
    @window_egi = Window_egi.new(exp,gold,drop_items)
    @window_egi.openness=0
    wait(15)
    loop do
      if @window_egi.openness <= 255
       @window_egi.openness+=48
      end
      if Input.trigger?(Input::C) or Input.trigger?(Input::B)
        break
      end
      Graphics.update
      Input.update
      
      
    end
   
    loop do
      @window_egi.openness -= 48 if @window_egi.openness >= 0
      Graphics.update
      if @window_egi.openness <= 0
        break
      end  
    end #loop
   
  end

  alias oldstart_skill_selection  start_skill_selection
  def start_skill_selection
    oldstart_skill_selection
    @skill_window.z = 3000
    @skill_window.help_window.z = 3000
   
  end  
  alias oldstart_item_selection  start_item_selection
  def start_item_selection
    oldstart_item_selection
    @item_window.z=3000
    @item_window.help_window.z = 3000
  end  
  

  
end #class


#=====================================================
#★战斗状态窗口类
#=====================================================


class Window_BattleStatus < Window_Selectable
  
  
  def draw_item(index)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    actor = $game_party.members[index]
    draw_actor_name(actor, 96, rect.y)
    draw_actor_state(actor, 114+48, rect.y, 48)
    draw_actor_hp(actor, 174, rect.y, 120)
    draw_actor_mp(actor, 310, rect.y, 70)
  end
  #=======================================================================
  #★定义角色头像的描绘
  #=======================================================================
   def draw_actorface(actor)
      
    draw_face(actor.face_name, actor.face_index, 5, 5, size = 80)
  end
  #=========================================================================
  
  def update_cursor
     super
     self.cursor_rect.width = self.width - 120
     self.cursor_rect.x = 90
     
  end  
  #========================================================================
end #class

#=================================================
#★战斗图处理的类
#=================================================

class Sprite_Battler < Sprite_Base
  
#=================================
#★刷新
#=================================
def update
    super
    if @battler == nil
      self.bitmap = nil
    else
      @use_sprite = @battler.use_sprite?
      if @use_sprite
        self.x = @battler.screen_x
        self.y = @battler.screen_y
        self.z = @battler.screen_z
        update_battler_bitmap
        if @battler.act_status == 1
         if self.opacity <280
           self.opacity += 20
        end
      elsif @battler.act_status == -1
         if self.opacity > 125
           self.opacity -= 20
         end  
      elsif  (@battler.dead? or   @battler.hidden) and @battler.collapse == false
      
      else
        self.opacity = 255
      end  
      end
      
      setup_new_effect
      update_effect
     
    end
  end  
#===============================
#
#===============================
  def update_battler_bitmap
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      if (@battler.dead? or @battler.hidden) and @battler.collapse == false
        
      end
    end
    if @battler.is_a?(Game_Actor)
      count = 40
    else
      count = 44
    end  
   
   
    if Graphics.frame_count%count <= 19
      self.bitmap = Cache.battler(@battler_name,@battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
    else
      b_name = @battler_name + "待"
       if FileTest.exist?("Graphics/Battlers/#{b_name}.png") or FileTest.exist?("Graphics/Battlers/#{b_name}.jpg")  or  FileTest.exist?("Graphics/Battlers/#{b_name}.bmp")
         self.bitmap = Cache.battler(b_name,@battler_hue)
         @width = bitmap.width
         @height = bitmap.height
         self.ox = @width/2
         self.oy = @height
       end
    end      
      
   
  end
  
#==================================
#
#==================================
def setup_new_effect
    if @battler.white_flash
      @effect_type = WHITEN
      @effect_duration = 16
      @battler.white_flash = false
    end
   
    if @battler.blink
      @effect_type = BLINK
      @effect_duration = 20
      @battler.blink = false
    end
    if not @battler_visible and @battler.exist?
      @effect_type = APPEAR
      @effect_duration = 16
      @battler_visible = true
    end
    if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
      if @battler.damage != nil
        s_1 = @battler.damage > 0 ? 0 : 1
        @battler.damage = @battler.damage > 0 ? [email protected] : @battler.damage
      end  
      
      damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
      damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
      damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
      damage("失误",@battler.critical) if @battler.missed
      damage("MISS",@battler.critical) if @battler.evaded
      damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
      @battler.slip_damage = 0
      @battler.auto_damage = 0
      @battler.damage = nil
      @battler.damage_pop = false
    end
    if @battler_visible and @battler.hidden
      @effect_type = DISAPPEAR
      @effect_duration = 32
      @battler_visible = false
    end
    if @battler.collapse and self.opacity != 0
      @effect_type = COLLAPSE
      @effect_duration = 48
      @battler.collapse = false
      @battler_visible = false
    end
    if @battler.animation_id != 0 and @battler.collapse == false
      self.opacity = 255
      animation = $data_animations[@battler.animation_id]
      mirror = @battler.animation_mirror
      start_animation(animation, mirror)
      @battler.animation_id = 0
    end
   
      
  end
#=========================================
#
#=========================================
  
  

  
  
end #class  








#=================================================
#★处理战斗行动的类
#=================================================
class Game_BattleAction

  def skill_user
    targets = []
    targets.push(battler)
     
     return targets.compact
   end
  

  
   
end#class  
#=======================================================
#★处理敌人的类
#
#=======================================================

class Game_Enemy < Game_Battler
def note
    return $data_enemies[@enemy_id].note
end  

  
end#class
#======================================================
#★角色处理类
#======================================================
class Game_Actor < Game_Battler

  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    #--------------------------------------------
    #★添加战斗图名称,以便战斗中获取战斗图
    #--------------------------------------------
    @battler_name = actor_id.to_s + "_z"
    @battler_hue = 0
    @flash = false
    @character_name = actor.character_name
    @character_index = actor.character_index
    @face_name = actor.face_name
    @face_index = actor.face_index
    @class_id = actor.class_id
    @weapon_id = actor.weapon_id
    @armor1_id = actor.armor1_id
    @armor2_id = actor.armor2_id
    @armor3_id = actor.armor3_id
    @armor4_id = actor.armor4_id
    @level = actor.initial_level
    @exp_list = Array.new(101)
    make_exp_list
    @exp = @exp_list[@level]
    @skills = []
    for i in self.class.learnings
      learn_skill(i.skill_id) if i.level <= @level
    end
    clear_extra_values
    recover_all
  end
  
  #--------------------------------------------------------------------------
  # ● 执行自动回复 (回合结束时调用)
  #--------------------------------------------------------------------------
  def do_auto_recovery
    if auto_hp_recover and not dead?
      self.hp += maxhp / 20
      @auto_damage = maxhp / 20
    end
  end
  #==========================================================================
  #★ 定义武器的行动方动画id,默认为第一武器的id
  #==========================================================================
  
  def act_animation_id
    return weapons[0] == nil ? 0 : weapons[0].animation2_id
  end  
  
  #==========================================================================
  #==========================================================================
  #==========================================================================
  #★定义角色战斗图 X 坐标
  #==========================================================================
  def screen_x
   if self.index != nil
    case index
     when 0
      return 460
     when 1
      return 440
     when 2
      return 420
     when 3
      return 400
    end  
  else
   return 0
  end
end
  #========================================================================
  #★定义角色战斗图 Y 坐标
  #========================================================================
  def screen_y
    if self.index != nil
      case index
       when 0
         return 245
       when 1
         return 215
       when 2
         return 185
       when 3
         return 155
       end
    else   
   
    return 230
   end
  end  
  
  #========================================================================
  #★定义角色战斗图 Z 坐标
  #========================================================================   
  def screen_z
     if self.index != nil
      return 4 - self.index
    else
      return 0
    end
  end
  
  

  
  def use_sprite?
    return true
  end
  
end#class




#==========================================================
#★模块定义
#==========================================================
  module RPG
  class BaseItem
    def animation2_id
      return @note != nil ? @note.to_i : 0
    end
  end  
   class Enemy
     def animation1_id
       animation1_id = @note.split(/,/)[0]
       return animation1_id != nil ? animation1_id.to_i : 0
     end
     def animation2_id
       animation2_id = @note.split(/,/)[1]
       return animation2_id != nil ? animation2_id.to_i : 0
     end
    end
   
  end
  
  
#======================================================
#★精灵类主模块_伤害部分的添加
#======================================================
class Sprite_Base < Sprite
  def initialize(viewport = nil)
    super(viewport)
    @use_sprite = true         
    @animation_duration = 0     
    #=============
    @_damage_duration = 0
    #=============
  end
alias oldupdate update
  def update
    oldupdate
    #================
    damge_update
    #================

  end

alias olddispose dispose
   def dispose
     olddispose
     
    #===============
    dispose_damage
    #===============
   end
  
#==========================================================================
#★定义伤害处理
#==========================================================================

   def damage(value, critical,type = 0)
      dispose_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "黑体"
      bitmap.font.size = 25
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        case type
         when 0
           bitmap.font.color.set(176, 255, 144)
         when 1
           bitmap.font.color.set(0,100,255)
         end  
      else
        case type
        when 0
        bitmap.font.color.set(255, 255, 255)
        when 1
          bitmap.font.color.set(200,0,185)
        end  
      end
      
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical and type == 0
        bitmap.font.size = 18
        bitmap.font.color.set(0, 0, 0)
        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
        bitmap.font.color.set(255, 255, 255)
        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
      end
      @_damage_sprite = ::Sprite.new(self.viewport)
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80
      @_damage_sprite.oy = 20
      @_damage_sprite.x = self.x
      @_damage_sprite.y = self.y - self.oy / 2
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end
   
    #===================================================
    #
    #===================================================
    def dispose_damage
      if @_damage_sprite != nil
        @_damage_sprite.bitmap.dispose
        @_damage_sprite.dispose
        @_damage_sprite = nil
        @_damage_duration = 0
      end
    end
    #=============================================
    #
    #=============================================
    def damge_update
       if @_damage_duration > 0
        @_damage_duration -= 1
        case @_damage_duration
        when 38..39
          @_damage_sprite.y -= 4
        when 36..37
          @_damage_sprite.y -= 2
        when 34..35
          @_damage_sprite.y += 2
        when 28..33
          @_damage_sprite.y += 4
        end
        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
        if @_damage_duration == 0
          dispose_damage
        end
      end
   end
  
  

end#class
#=======================================================
#★战斗经验、金钱、物品提示窗口
#=======================================================
class Window_egi<Window_Base
#====================================
#●初始化
#====================================
def initialize(exp, gold,item)
   
   
    @exp=exp
    @gold=gold
    @item=item
    @item_name = {}
    n=0
    m=0
   
    if @item != nil
     for itn in @item
      
      if @item_name[itn.name]==nil
         @item_name[itn.name]=[0,""]
         @item_name[itn.name][1]=itn.icon_index
         m+=1
      end
      @item_name[itn.name][0] += 1
    end
    end
    if @gold>0
      m+=1
    end  
    super(200,100, 160,32*m+112 )
    self.opacity = 150
   
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
def refresh
    self.contents.clear
    self.contents.font.size=19
    if @exp > 0
     self.contents.font.color = Color.new(255,255,0,255)
     self.contents.draw_text(6,8,64,32,"获得经验:")
     self.contents.font.color = Color.new(255,255,255,255)
     self.contents.draw_text(80,8,32,32,sprintf("%4s",@exp))
   
   elsif @exp == 0
     self.contents.font.color = Color.new(255,0,0,0)
     self.contents.draw_text(6,8,32,32,"没有获得经验!")
     
   end
   if @gold>0
     self.contents.font.color = Color.new(255,255,0,255)
     self.contents.draw_text(6,40,64,32,"获得金钱:")
     self.contents.font.color = Color.new(255,255,255,255)
     self.contents.draw_text(80,40,32,32,sprintf("%4s",@gold)+Vocab::gold)
   end  
   if @item_name.size != 0
   self.contents.font.size = 20
   self.contents.font.color = Color.new(255,255,0)
   self.contents.draw_text(25,72,64,32,"获得物品")
   i=0

    i=0
    self.contents.font.size = 18
    self.contents.font.color = Color.new(255,255,255,255)
    for itn in @item_name
     draw_icon(itn[1][1] ,6 ,106+i*32 , true)
     self.contents.draw_text(30,106+i*32,64,32,itn[0] + " × "+ itn[1][0].to_s)
   
     i+=1
    end
      
     
  end
  
   
   
end
   
   
end#class  

module Cache
  def self.battleback(filename)
     load_bitmap("Graphics/Battlebacks/", filename)
   end   
end   
  
#=====================================================
#添加战斗背景的相关定义
#=====================================================
class Game_Map
  attr_accessor :name   
    def setup(map_id)
    @map_id = map_id
    @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
    @mapinfo = load_data("Data/MapInfos.rvdata")
    #============================
    @name = @mapinfo[@map_id].name
    #============================
    @display_x = 0
    @display_y = 0
    @passages = $data_system.passages
    referesh_vehicles
    setup_events
    setup_scroll
    setup_parallax
    @need_refresh = false
   end #class
  
  
   def area(old_name,new_name)
  
    for area in  $data_areas.values
      if area.name == old_name and area.map_id == @map_id
        area.name == new_name
      end
    end
  end  
end #class

class Spriteset_Battle

  def create_battleback
    name = $game_map.name
    source = $game_temp.background_bitmap
    bitmap = Bitmap.new(640, 480)
    if BATTLE_BACK[name] != nil
     
     bitmap.blt(0,0,source,source.rect)
     @battleback_sprite = Sprite.new(@viewport1)
     @battleback_sprite.bitmap = bitmap
     @battleback_sprite.ox = 272
     @battleback_sprite.oy = 208
     @battleback_sprite.x = 260
     @battleback_sprite.y = 208
    else
   
     bitmap.stretch_blt(bitmap.rect, source, source.rect)
     bitmap.radial_blur(90, 12)
     @battleback_sprite = Sprite.new(@viewport1)
     @battleback_sprite.bitmap = bitmap
     @battleback_sprite.ox = 320
     @battleback_sprite.oy = 240
     @battleback_sprite.x = 272
     @battleback_sprite.y = 176
     @battleback_sprite.wave_amp = 8
     @battleback_sprite.wave_length = 240
     @battleback_sprite.wave_speed = 120
    end
     
  end
  alias oldcreate_battlefloor create_battlefloor
  def create_battlefloor
   oldcreate_battlefloor
   @battlefloor_sprite.opacity = 0
  end
end#class

#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、
# Game_Event 类的内部使用。
#==============================================================================

class Game_Interpreter
   #===========================================================================
   #☆角色显示动画方法
   #○range:动画影响范围,-1全体或相应角色id
   #●anim_id:动画id
   #===========================================================================
   def add_aa(range,anim_id)
     iterate_battler(1,range) do |battler|
      next unless battler.exist?
      battler.animation_id = anim_id
    end
     
   end #def
   
  
end #class
作者: 迦月    时间: 2009-7-26 15:29
#==============================================================================
# 复杂装备系统之随机属性(征求bug版) by 沉影不器
#------------------------------------------------------------------------------
# 说明: 让装备类似暗黑那样附加随机属性,目前有17种属性元素可供组合,允许按
#       能力百分比加成.
#
#       附加属性的名称允许多个(按能力从小大到排列),用英文逗号隔开,自动按
#       附加能力大小选择词缀
#
#       极品爆率不影响物品掉落机率,而是指掉落的物品带附加属性的机率
#
# 获得随机属性装备的方法:
#       事件脚本中输入 get_weapon(母版武器id, 数量, 附加属性1, 附加属性2...)
#       或者直接指定附加属性数 get_weapon(母版武器id, 数量, 附加属性数)
#       将随机生成指定附加属性数的装备
#       获得防具方法是 get_armor() 参数含义同上
#
# 获得普通装备的方法:
#       事件脚本中输入 get_weapon(母版武器id, 数量)
#       获得防具方法是 get_armor() 参数含义同上
#==============================================================================
# 参数设定
#==============================================================================
module Game_Equip
  ## 最大附加属性数
  GiftMax = 4
  ## 附加属性影响价格基数
  GiftPrice = 10
  ## 极品爆率最低值和最高值(0到100)
  Equip_Chance = [5, 75]  
  
  ## 附加属性各参数:
  ##     name    添加到装备前的修饰词
  ##     max     该属性最大值
  ##     weight  权重(最大值的权重,用于计算价值,用于计算颜色也行)
  ##     percent 是否按百分比计算
  Gift = Struct.new(:name, :max, :weight, :percent)
  Gifts = [
     # 攻击
     Gift.new("锐利,伤害,霸道", 50, 25, false),
     Gift.new("残忍,残酷,凶残", 50, 40, true),
     # 防御
     Gift.new("厚重,守卫,守护", 50, 10, false),
     Gift.new("结实,防卫,防护", 50, 20, true),
     # 精神
     Gift.new("光荣", 50, 15, false),
     Gift.new("祝福", 50, 25, true),
     # 敏捷
     Gift.new("敏捷", 50, 20, false),
     Gift.new("灵巧", 50, 30, true),
     # hp
     Gift.new("落英", 80, 20, false),
     Gift.new("武士", 15, 20, true),
     # mp
     Gift.new("神灵", 80, 15, false),
     Gift.new("圣者", 15, 15, true),
     # 命中
     Gift.new("精确", 10, 10,false),
     # 闪避
     Gift.new("幻影", 10, 10, false),
     # 暴击
     Gift.new("暴击", 10, 10, false),
     # 经验
     Gift.new("贪婪", 20, 10, true),
     # 极品爆率  ###(待定)
     Gift.new("幸运", 50, 10, false)
  ]
end


#==============================================================================
# ■ Game_Equip 自定义装备模块
#==============================================================================
module Game_Equip
  #--------------------------------------------------------------------------
  # ● 物品(装备)重生
  #    item:  物品
  #    *gift: 附加属性(留空表示无属性,数字表示指定数量随机属性)
  #--------------------------------------------------------------------------
  def self.reini(item, *gift)
    return if item.nil?
    result = item.clone
    gifts = *gift
    gifts.flatten! if gifts.is_a? Array
    ## 附加属性为空或指定为(0)时,直接返回母版
    return self.result(result) if gifts.nil? or gifts == 0
    ## 指定附加属性数量时
    if gifts.is_a? Integer
      ## 控制数量
      num = [gifts, GiftMax].min
      gifts = []
      ## 随机生成指定数量的附加属性
      rd = different_rand(Gifts.size-1, num)
      rd.each{|n| gifts.push Game_Gift.new(n)}
    end
    gifts = [gifts].flatten
    return self.result(result) if gifts.empty?
    ## 处理数据
    result.gifts = gifts
    name = ""
    price = 0
    for gift in gifts
      name  += gift.name
      price += gift.weight * GiftPrice
    end
    ## 设定名称
    result.name =  name + '的' + result.name
    ## 设定价格
    result.price += price.round
    ## 设定颜色
    result.text_color = gifts.size
    return self.result(result)
  end
  #--------------------------------------------------------------------------
  # ● 返回结果
  #    item: 物品
  #--------------------------------------------------------------------------
  def self.result(item)
    case item
    when RPG::Item
      
    when RPG::Weapon
      item.base_id = item.id
      item.id = $data_weapons.size
      $data_weapons << item
    when RPG::Armor
      item.base_id = item.id
      item.id = $data_armors.size
      $data_armors << item
    end
    return item
  end
  #--------------------------------------------------------------------------
  # ● 物品(装备)重生
  #    item_id: 物品id
  #    type:    类型
  #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  #--------------------------------------------------------------------------
  def self.reini_id(item_id, type, *gift)
    ## 排除装备id为零的情况
    return 0 if item_id == 0
    case type
    when 0
      item = $base_weapons[item_id]
    when 1
      item = $base_armors[item_id]
    end
    return self.reini(item, *gift).id
  end
end

#==============================================================================
# ■ Game_Gift 装备附加能力
#==============================================================================
class Game_Gift
  include Game_Equip
  #--------------------------------------------------------------------------
  # ● 读取口
  #--------------------------------------------------------------------------
  attr_reader   :type
  attr_reader   :value
  attr_reader   :name
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize(type = nil, value = nil)
    get_type(type)
    get_value(value)
    get_name
  end
  #--------------------------------------------------------------------------
  # ● 获取属性
  #--------------------------------------------------------------------------
  def get_type(type)
    unless type.nil? or type > Gifts.size or type < 0
      @type = type
    else
      @type = rand(Gifts.size - 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取品质值
  #--------------------------------------------------------------------------
  def get_value(value)
    unless value.nil? or value.abs > max
      @value = value
    else
      @value = linear_rand(max) + 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取名称
  #--------------------------------------------------------------------------
  def get_name
    names = Gifts[@type].name.split(/,/)
    n = (@value.abs-1)/(max.to_f/names.size)
    @name = names[n.truncate]
  end
  #--------------------------------------------------------------------------
  # ● 获取最大值
  #--------------------------------------------------------------------------
  def max
    return Gifts[@type].max
  end
  #--------------------------------------------------------------------------
  # ● 获取权重
  #--------------------------------------------------------------------------
  def weight
    return @value > 0 ? @value / max.to_f * Gifts[@type].weight : 0
  end
  #--------------------------------------------------------------------------
  # ● 获取是否百分比
  #--------------------------------------------------------------------------
  def percent
    return Gifts[@type].percent
  end
  
  #--------------------------------------------------------------------------
  # ● 攻击力
  #--------------------------------------------------------------------------
  def atk(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 0 and @type != 1
    if percent
      return $game_actors[actor_id].self_atk * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● 防御力
  #--------------------------------------------------------------------------
  def def(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 2 and @type != 3
    if percent
      return $game_actors[actor_id].self_def * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● 精神
  #--------------------------------------------------------------------------
  def spi(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 4 and @type != 5
    if percent
      return $game_actors[actor_id].self_spi * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● 敏捷
  #--------------------------------------------------------------------------
  def agi(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 6 and @type != 7
    if percent
      return $game_actors[actor_id].self_agi * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● hp
  #--------------------------------------------------------------------------
  def hp(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 8 and @type != 9
    if percent
      return $game_actors[actor_id].self_maxhp * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● mp
  #--------------------------------------------------------------------------
  def mp(actor_id)
    # 无角色信息时返回
    return 0 unless actor_id
    # 数据类型不符时返回
    return 0 if @type != 10 and @type != 11
    if percent
      return $game_actors[actor_id].self_maxmp * @value / 100
    else
      return @value
    end
  end
  #--------------------------------------------------------------------------
  # ● 命中
  #--------------------------------------------------------------------------
  def hit
    # 数据类型不符时返回
    return 0 if @type != 12
    return @value
  end
  #--------------------------------------------------------------------------
  # ● 闪避
  #--------------------------------------------------------------------------
  def eva
    # 数据类型不符时返回
    return 0 if @type != 13
    return @value
  end
  #--------------------------------------------------------------------------
  # ● 暴击
  #--------------------------------------------------------------------------
  def cri
    # 数据类型不符时返回
    return 0 if @type != 14
    return @value
  end
  #--------------------------------------------------------------------------
  # ● 经验(百分比)
  #--------------------------------------------------------------------------
  def exp
    # 数据类型不符时返回
    return 0 if @type != 15
    return @value
  end
  #--------------------------------------------------------------------------
  # ● 高级装备暴率(百分比)
  #--------------------------------------------------------------------------
  def equip_chance
    # 数据类型不符时返回
    return 0 if @type != 16
    return @value
  end
end
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
module RPG
  class BaseItem
    ## 颜色
    attr_accessor :text_color
  end
end
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
module RPG
  class Weapon < BaseItem
    #------------------------------------------------------------------------
    # 附加属性
    #------------------------------------------------------------------------
    attr_accessor :base_id
    attr_accessor :actor_id
    attr_accessor :gifts
    #------------------------------------------------------------------------
    # 攻击力(合)
    #------------------------------------------------------------------------
    def atk
      n = @atk
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.atk(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 防御力(合)
    #------------------------------------------------------------------------
    def def
      n = @def
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.def(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 魔力(合)
    #------------------------------------------------------------------------
    def spi
      n = @spi
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.spi(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 敏捷(合)
    #------------------------------------------------------------------------
    def agi
      n = @agi
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.agi(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 最大hp(合)
    #------------------------------------------------------------------------
    def maxhp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.maxhp(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 最大mp(合)
    #------------------------------------------------------------------------
    def maxmp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.maxmp(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 命中率(合)
    #------------------------------------------------------------------------
    def hit
      n = @hit
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.hit end
      return n
    end
    #------------------------------------------------------------------------
    # 闪避率(合)
    #------------------------------------------------------------------------
    def eva
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.eva end
      return n
    end
    #------------------------------------------------------------------------
    # 暴击率(合)
    #------------------------------------------------------------------------
    def cri
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.cri end
      return n
    end
    #--------------------------------------------------------------------------
    # ● 经验(百分比)
    #--------------------------------------------------------------------------
    def exp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.exp end
      return n
    end
    #--------------------------------------------------------------------------
    # ● 高级装备暴率(百分比)
    #--------------------------------------------------------------------------
    def equip_chance
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.equip_chance end
      return n
    end
  end
end
#==============================================================================
# ■ RPG::Armor
#==============================================================================
module RPG
  class Armor < BaseItem
    #------------------------------------------------------------------------
    # 附加属性
    #------------------------------------------------------------------------
    attr_accessor :base_id
    attr_accessor :actor_id
    attr_accessor :gifts
    #------------------------------------------------------------------------
    # 攻击力(合)
    #------------------------------------------------------------------------
    def atk
      n = @atk
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.atk(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 防御力(合)
    #------------------------------------------------------------------------
    def def
      n = @def
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.def(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 魔力(合)
    #------------------------------------------------------------------------
    def spi
      n = @spi
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.spi(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 敏捷(合)
    #------------------------------------------------------------------------
    def agi
      n = @agi
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.agi(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 最大hp(合)
    #------------------------------------------------------------------------
    def maxhp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.maxhp(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 最大mp(合)
    #------------------------------------------------------------------------
    def maxmp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.maxmp(actor_id) end
      return n
    end
    #------------------------------------------------------------------------
    # 命中率(合)
    #------------------------------------------------------------------------
    def hit
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.hit end
      return n
    end
    #------------------------------------------------------------------------
    # 闪避率(合)
    #------------------------------------------------------------------------
    def eva
      n = @eva
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.eva end
      return n
    end
    #------------------------------------------------------------------------
    # 暴击率(合)
    #------------------------------------------------------------------------
    def cri
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.cri end
      return n
    end
    #--------------------------------------------------------------------------
    # ● 经验(百分比)
    #--------------------------------------------------------------------------
    def exp
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.exp end
      return n
    end
    #--------------------------------------------------------------------------
    # ● 高级装备暴率(百分比)
    #--------------------------------------------------------------------------
    def equip_chance
      n = 0
      @gifts = [] if @gifts.nil?
      for g in @gifts.compact do n += g.equip_chance end
      return n
    end
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取自身 MaxHP
  #--------------------------------------------------------------------------
  def self_maxhp
    return actor.parameters[0, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取自身 MaxMP
  #--------------------------------------------------------------------------
  def self_maxmp
    return actor.parameters[1, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取自身攻击力
  #--------------------------------------------------------------------------
  def self_atk
    return actor.parameters[2, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取自身防御力
  #--------------------------------------------------------------------------
  def self_def
    return actor.parameters[3, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取自身精神力
  #--------------------------------------------------------------------------
  def self_spi
    return actor.parameters[4, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取自身敏捷性
  #--------------------------------------------------------------------------
  def self_agi
    return actor.parameters[5, @level]
  end
  #--------------------------------------------------------------------------
  # ● 获取命中率
  #--------------------------------------------------------------------------
  def hit
    n = 95
    for e in equips.compact do n += e.hit end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 获取回避率
  #--------------------------------------------------------------------------
  def eva
    n = 5
    for e in equips.compact do n += e.eva end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 获取会心一击概率
  #--------------------------------------------------------------------------
  def cri
    n = 4
    n += 4 if actor.critical_bonus
    for e in equips.compact do n += e.cri end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 获取更多经验值
  #--------------------------------------------------------------------------
  def exp_added
    exp = 100
    for equip in equips.compact
      exp += equip.exp
    end
    return exp
  end
  #--------------------------------------------------------------------------
  # ● 获取高级物品暴率
  #--------------------------------------------------------------------------
  def equip_chance
    equip_chance = 0
    for equip in equips.compact
      equip_chance += equip.equip_chance
    end
    return equip_chance
  end
  #--------------------------------------------------------------------------
  # ● 获得经验值 (考虑到附加经验值)
  #     exp  : 经验值增加量
  #     show : 显示升级标志
  #--------------------------------------------------------------------------
  def gain_exp(exp, show)
    change_exp(@exp + exp * exp_added, show)
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #     actor_id : 角色 ID
  #--------------------------------------------------------------------------
  def initialize(actor_id)
    super()
    setup(actor_id)
    @last_skill_id = 0
  end
  #--------------------------------------------------------------------------
  # ● 设置
  #     actor_id : 角色 ID
  #--------------------------------------------------------------------------
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    @character_name = actor.character_name
    @character_index = actor.character_index
    @face_name = actor.face_name
    @face_index = actor.face_index
    @class_id = actor.class_id
    @weapon_id = actor.weapon_id
    @armor1_id = actor.armor1_id
    @armor2_id = actor.armor2_id
    @armor3_id = actor.armor3_id
    @armor4_id = actor.armor4_id
    @level = actor.initial_level
    @exp_list = Array.new(101)
    make_exp_list
    @exp = @exp_list[@level]
    @skills = []
    for i in self.class.learnings
      learn_skill(i.skill_id) if i.level <= @level
    end
    clear_extra_values
    recover_all
    ## 生成新装备id
    reset_equip_id
  end
  #--------------------------------------------------------------------------
  # ● 装备重设
  #--------------------------------------------------------------------------
  def reset_equip_id
    @weapon_id = Game_Equip.reini_id(@weapon_id, 0)
    @armor1_id = Game_Equip.reini_id(@armor1_id, two_hands_legal? ? 0 : 1)
    @armor2_id = Game_Equip.reini_id(@armor2_id, 1)
    @armor3_id = Game_Equip.reini_id(@armor3_id, 1)
    @armor4_id = Game_Equip.reini_id(@armor4_id, 1)
  end
  #--------------------------------------------------------------------------
  # ● 判断是否可以装备
  #     item : 物品
  #     base : 是否读取母版数据
  #--------------------------------------------------------------------------
  def equippable?(item, base = true)
    id = base ? item.base_id : item.id
    if item.is_a?(RPG::Weapon)
      return self.class.weapon_set.include?(id)
    elsif item.is_a?(RPG::Armor)
      return false if two_swords_style and item.kind == 0
      return self.class.armor_set.include?(id)
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 更改装备 (指定对象)
  #     equip_type : 装备部位 (0..4)
  #     item       : 武器 or 防具 (nil 为解除装备)
  #     test       : 测试标志 (战斗测试、以及装备画面的临时装备)
  #--------------------------------------------------------------------------
  def change_equip(equip_type, item, test = false)
    last_item = equips[equip_type]
    unless test
      return if $game_party.item_number(item) == 0 if item != nil
      $game_party.gain_item(last_item, 1)
      $game_party.lose_item(item, 1)
      last_item.actor_id = nil unless last_item.nil?
    end
    item_id = item == nil ? 0 : item.id
    case equip_type
    when 0  # 武器
      @weapon_id = item_id
      unless two_hands_legal?             # 违反双手拿取的情况下
        change_equip(1, nil, test)        # 解除反手的装备
      end
    when 1  # 盾
      @armor1_id = item_id
      unless two_hands_legal?             # 违反双手拿取的情况下
        change_equip(0, nil, test)        # 解除反手的装备
      end
    when 2  # 头
      @armor2_id = item_id
    when 3  # 身体
      @armor3_id = item_id
    when 4  # 装饰品
      @armor4_id = item_id
    end
    item.actor_id = self.id unless item.nil?
  end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 判断持有的物品
  #     item          : 物品
  #     include_equip : 包括装备品
  #--------------------------------------------------------------------------
  def has_item_by_base_id?(item, include_equip = false)
    for i in items
      return true if i.base_id == item.id
    end
    if include_equip
      for actor in members
        for e in actor.equips
          return true if e.base_id == item.id
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 获得物品
  #     item          : 物品
  #     n             : 个数
  #--------------------------------------------------------------------------
  def gain_reini(item, n, include_equip = false, *gift)
    if n < 0
      lose_item(item, -n, include_equip = false)
    else
      case item
      when RPG::Item
        number = item_number(item)
        @items[item.id] = [[number + n, 0].max, 99].min
      when RPG::Weapon
        for i in 0...n
          w = Game_Equip.reini(item, *gift)
          @weapons[w.id] = 1
        end
      when RPG::Armor
        for i in 0...n
          a = Game_Equip.reini(item, *gift)
          @armors[a.id] = 1
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 减少物品 (减少)
  #     item          : 物品
  #     n             : 个数
  #     include_equip : 包括装备品
  #--------------------------------------------------------------------------
  def lose_reini(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number - n, 0].max, 99].min
    when RPG::Weapon
      @weapons[item.id] = [[number - n, 0].max, 99].min
    when RPG::Armor
      @armors[item.id] = [[number - n, 0].max, 99].min
    end
    n -= number
    if include_equip and n > 0
      for actor in members
        while n > 0 and actor.equips.include?(item)
          actor.discard_equip(item)
          n -= 1
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 获得物品
  #     item_id       : 物品id
  #     type          : 类型(0物品, 1武器, 2防具)
  #     n             : 个数
  #--------------------------------------------------------------------------
  def gain_reini_byid(item_id, type, n, include_equip = false, *gift)
    case type
    when 0
      item = $data_items[item_id]
    when 1
      item = $base_weapons[item_id]
    when 2
      item = $base_armors[item_id]
    end
    gain_reini(item, n, include_equip, *gift)
  end
  #--------------------------------------------------------------------------
  # ● 极品爆率
  #--------------------------------------------------------------------------
  def equip_chance
    chance = Game_Equip::Equip_Chance[0]
    members.each {|actor| chance += actor.equip_chance}
    return chance
  end
end
#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● 敌人角色名称后的文字表
  #--------------------------------------------------------------------------
  LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
                   'K','L','M','N','O','P','Q','R','S','T',
                   'U','V','W','X','Y','Z']
  #--------------------------------------------------------------------------
  # ● 生成掉落物品队列
  #--------------------------------------------------------------------------
  def make_drop_items
    drop_items = []
    for enemy in dead_members
      for di in [enemy.drop_item1, enemy.drop_item2]
        next if di.kind == 0
        next if rand(di.denominator) != 0
        if di.kind == 1
          drop_items.push($data_items[di.item_id])
        elsif di.kind == 2
          item = reini_chance($base_weapons[di.weapon_id], $game_party.equip_chance)
          drop_items.push(item)
        elsif di.kind == 3
          item = reini_chance($base_armors[di.weapon_id], $game_party.equip_chance)
          drop_items.push(item)
        end
      end
    end
    return drop_items
  end
  #--------------------------------------------------------------------------
  # ● 处理极品爆率
  #--------------------------------------------------------------------------
  def reini_chance(item, chance)
    @item = item
    @chance = [chance/100.0, Game_Equip::Equip_Chance[1]/100.0].min
    @gifts = []
    loop do
      if rand(0) < @chance and @gifts.size < Game_Equip::GiftMax
        @gifts << Game_Gift.new
        @chance /= 2
      else
        return Game_Equip.reini(@item, @gifts)
      end
    end
  end
end
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 计算操作的值
  #     operation    : 操作 (0:增加 1:减少)
  #     operand_type : 运算域类型 (0:常量 1:变量)
  #     operand      : 运算域 (数值为变量 ID)
  #--------------------------------------------------------------------------
  def operate_value(operation, operand_type, operand)
    if operand_type == 0
      value = operand
    else
      value = $game_variables[operand]
    end
    if operation == 1
      value = -value
    end
    return value
  end
  #--------------------------------------------------------------------------
  # ● 条件分歧
  #--------------------------------------------------------------------------
  def command_111
    result = false
    case @params[0]
    when 0  # 开关
      result = ($game_switches[@params[1]] == (@params[2] == 0))
    when 1  # 变量
      value1 = $game_variables[@params[1]]
      if @params[2] == 0
        value2 = @params[3]
      else
        value2 = $game_variables[@params[3]]
      end
      case @params[4]
      when 0  # 相等
        result = (value1 == value2)
      when 1  # 大于等于
        result = (value1 >= value2)
      when 2  # 小于等于
        result = (value1 <= value2)
      when 3  # 大于
        result = (value1 > value2)
      when 4  # 小于
        result = (value1 < value2)
      when 5  # 不等于
        result = (value1 != value2)
      end
    when 2  # 自我开关
      if @original_event_id > 0
        key = [@map_id, @original_event_id, @params[1]]
        if @params[2] == 0
          result = ($game_self_switches[key] == true)
        else
          result = ($game_self_switches[key] != true)
        end
      end
    when 3  # 计时器
      if $game_system.timer_working
        sec = $game_system.timer / Graphics.frame_rate
        if @params[2] == 0
          result = (sec >= @params[1])
        else
          result = (sec <= @params[1])
        end
      end
    when 4  # 角色
      actor = $game_actors[@params[1]]
      if actor != nil
        case @params[2]
        when 0  # 是同伴
          result = ($game_party.members.include?(actor))
        when 1  # 姓名
          result = (actor.name == @params[3])
        when 2  # 特技
          result = (actor.skill_learn?($data_skills[@params[3]]))
        when 3  # 武器
          ## 判断是否符合母版id
          actor.weapons.each do |weapon|
            if weapon.base_id == @params[3]
              result = true
              break
            end
          end
        when 4  # 防具
          ## 判断是否符合母版id
          actor.armors.each do |armor|
            if armor.base_id == @params[3]
              result = true
              break
            end
          end
        when 5  # 状态
          result = (actor.state?(@params[3]))
        end
      end
    when 5  # 敌方角色
      enemy = $game_troop.members[@params[1]]
      if enemy != nil
        case @params[2]
        when 0  # 出现
          result = (enemy.exist?)
        when 1  # 状态
          result = (enemy.state?(@params[3]))
        end
      end
    when 6  # 角色
      character = get_character(@params[1])
      if character != nil
        result = (character.direction == @params[2])
      end
    when 7  # 金钱
      if @params[2] == 0
        result = ($game_party.gold >= @params[1])
      else
        result = ($game_party.gold <= @params[1])
      end
    when 8  # 物品
      result = $game_party.has_item?($data_items[@params[1]])
    when 9  # 武器
      result = $game_party.has_item_by_base_id?($base_weapons[@params[1]], @params[2])
    when 10  # 防具
      result = $game_party.has_item_by_base_id?($base_armors[@params[1]], @params[2])
    when 11  # 按钮
      result = Input.press?(@params[1])
    when 12  # 脚本
      result = eval(@params[1])
    when 13  # 交通工具
      result = ($game_player.vehicle_type == @params[1])
    end
    @branch[@indent] = result     # 将判断结果放置在缓存中
    if @branch[@indent] == true
      @branch.delete(@indent)
      return true
    end
    return command_skip
  end
  
  
  #--------------------------------------------------------------------------
  # ● 计算装备操作的值
  #     operand_type : 运算域类型 (0:常量 1:变量)
  #     operand      : 运算域 (数值为变量 ID)
  #--------------------------------------------------------------------------
  def opera_equip_value(operation, operand_type, operand)
    if operand_type == 0
      value = operand
    else
      value = $game_variables[operand]
    end
    return value
  end
  #--------------------------------------------------------------------------
  # ● 增减武器
  #--------------------------------------------------------------------------
  def command_127
    value = operate_value(@params[1], @params[2], @params[3])
    if @params[1] == 0
      $game_party.gain_reini($base_weapons[@params[0]], value.abs, @params[4])
    else
      $game_party.lose_reini($base_weapons[@params[0]], value.abs, @params[4])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减防具
  #--------------------------------------------------------------------------
  def command_128
    value = operate_value(@params[1], @params[2], @params[3])
    if @params[1] == 0
      $game_party.gain_reini($base_armors[@params[0]], value.abs, @params[4])
    else
      $game_party.lose_reini($base_armors[@params[0]], value.abs, @params[4])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 更改装备
  #--------------------------------------------------------------------------
  def command_319
    actor = $game_actors[@params[0]]
    if actor != nil
      actor.change_equip_by_id(@params[1], @params[2])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减武器
  #--------------------------------------------------------------------------
  def get_weapon(id, n, *gift)
    $game_party.gain_reini($base_weapons[id], n, false, *gift)
  end
  #--------------------------------------------------------------------------
  # ● 增减防具
  #--------------------------------------------------------------------------
  def get_armor(id, n, *gift)
    $game_party.gain_reini($base_armors[id], n, false, *gift)
  end
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color = text_color(item.text_color.to_i)
      self.contents.font.color.alpha = enabled ? 255 : 128
      self.contents.draw_text(x + 24, y, 172, WLH, item.name)
    end
  end
end
#==============================================================================
# ■ Window_ShopBuy
#==============================================================================
class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    @data = []
    for goods_item in @shop_goods
      case goods_item[0]
      when 0
        item = $base_items[goods_item[1]]
      when 1
        item = $base_weapons[goods_item[1]]
      when 2
        item = $base_armors[goods_item[1]]
      end
      if item != nil
        @data.push(item)
      end
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
end
#==============================================================================
# ■ Window_ShopStatus
#==============================================================================
class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● 描绘角色现在装备的能力值变化
  #     actor : 角色
  #     x     : 描画目标 X 坐标
  #     y     : 描画目标 Y 坐标
  #--------------------------------------------------------------------------
  def draw_actor_parameter_change(actor, x, y)
    return if @item.is_a?(RPG::Item)
    enabled = actor.equippable?(@item, false)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(x, y, 200, WLH, actor.name)
    if @item.is_a?(RPG::Weapon)
      item1 = weaker_weapon(actor)
    elsif actor.two_swords_style and @item.kind == 0
      item1 = nil
    else
      item1 = actor.equips[1 + @item.kind]
    end
    if enabled
      if @item.is_a?(RPG::Weapon)
        atk1 = item1 == nil ? 0 : item1.atk
        atk2 = @item == nil ? 0 : @item.atk
        change = atk2 - atk1
      else
        def1 = item1 == nil ? 0 : item1.def
        def2 = @item == nil ? 0 : @item.def
        change = def2 - def1
      end
      self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
    end
    draw_item_name(item1, x, y + WLH, enabled)
  end
end
#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入文件用对象 (已经打开)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    characters = []
    for actor in $game_party.members
      characters.push([actor.character_name, actor.character_index])
    end
    $game_system.save_count += 1
    $game_system.version_id = $data_system.version_id
    @last_bgm = RPG::BGM::last
    @last_bgs = RPG::BGS::last
    Marshal.dump(characters,           file)
    Marshal.dump(Graphics.frame_count, file)
    Marshal.dump(@last_bgm,            file)
    Marshal.dump(@last_bgs,            file)
    Marshal.dump($game_system,         file)
    Marshal.dump($game_message,        file)
    Marshal.dump($game_switches,       file)
    Marshal.dump($game_variables,      file)
    Marshal.dump($game_self_switches,  file)
    Marshal.dump($game_actors,         file)
    Marshal.dump($game_party,          file)
    Marshal.dump($game_troop,          file)
    Marshal.dump($game_map,            file)
    Marshal.dump($game_player,         file)
    Marshal.dump($data_weapons,        file)
    Marshal.dump($data_armors,         file)
  end
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取文件用对象 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    characters           = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    @last_bgm            = Marshal.load(file)
    @last_bgs            = Marshal.load(file)
    $game_system         = Marshal.load(file)
    $game_message        = Marshal.load(file)
    $game_switches       = Marshal.load(file)
    $game_variables      = Marshal.load(file)
    $game_self_switches  = Marshal.load(file)
    $game_actors         = Marshal.load(file)
    $game_party          = Marshal.load(file)
    $game_troop          = Marshal.load(file)
    $game_map            = Marshal.load(file)
    $game_player         = Marshal.load(file)
    $data_weapons        = Marshal.load(file)
    $data_armors         = Marshal.load(file)
    if $game_system.version_id != $data_system.version_id
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
  end
end
#==============================================================================
# ■ Scene_Shop
#==============================================================================
class Scene_Shop < Scene_Base
  #--------------------------------------------------------------------------
  # ● 确定输入个数
  #--------------------------------------------------------------------------
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # 购买
      $game_party.lose_gold(@number_window.number * @item.price)
      $game_party.gain_reini(@item, @number_window.number)
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
    when 1  # 卖出
      $game_party.gain_gold(@number_window.number * (@item.price / 2))
      $game_party.lose_reini_item(@item, @number_window.number)
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end
end
#==============================================================================
# ■ Scene_Title
#==============================================================================
class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● 载入数据库
  #--------------------------------------------------------------------------
  def load_database
    $data_actors        = load_data("Data/Actors.rvdata")
    $data_classes       = load_data("Data/Classes.rvdata")
    $data_skills        = load_data("Data/Skills.rvdata")
    $data_items         = load_data("Data/Items.rvdata")
    $base_weapons       = load_data("Data/Weapons.rvdata")
    $base_armors        = load_data("Data/Armors.rvdata")
    $data_enemies       = load_data("Data/Enemies.rvdata")
    $data_troops        = load_data("Data/Troops.rvdata")
    $data_states        = load_data("Data/States.rvdata")
    $data_animations    = load_data("Data/Animations.rvdata")
    $data_common_events = load_data("Data/CommonEvents.rvdata")
    $data_system        = load_data("Data/System.rvdata")
    $data_areas         = load_data("Data/Areas.rvdata")
    $data_weapons       = [nil]
    $data_armors        = [nil]
  end
  #--------------------------------------------------------------------------
  # ● 载入战斗测试用的数据库
  #--------------------------------------------------------------------------
  def load_bt_database
    $data_actors        = load_data("Data/BT_Actors.rvdata")
    $data_classes       = load_data("Data/BT_Classes.rvdata")
    $data_skills        = load_data("Data/BT_Skills.rvdata")
    $data_items         = load_data("Data/BT_Items.rvdata")
    $data_weapons       = load_data("Data/BT_Weapons.rvdata")
    $data_armors        = load_data("Data/BT_Armors.rvdata")
    $data_enemies       = load_data("Data/BT_Enemies.rvdata")
    $data_troops        = load_data("Data/BT_Troops.rvdata")
    $data_states        = load_data("Data/BT_States.rvdata")
    $data_animations    = load_data("Data/BT_Animations.rvdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
    $data_system        = load_data("Data/BT_System.rvdata")
    $base_weapons       = $data_weapons
    $base_armors        = $data_armors
  end
end
作者: 迦月    时间: 2009-7-27 11:43
怎么没人能帮我看看嘛?
  我想是不是Z轴描述出了问题啊?  高人  看看拜托~~
作者: doublehjb    时间: 2009-7-27 14:21
应该是脚本冲突....LZ把那么一大堆脚本搬出来肯定没人看,没人理你的...........................
劝你还是2选1吧........................
作者: 迦月    时间: 2009-7-27 16:21
冲突的位置大体知道在什么位置,现在就是不知道怎么改··我把它改成了纵版CP了···
我汗··
作者: 小闵    时间: 2009-7-30 00:36
哇~好大堆的脚本...
LZ你可以点【插入代码】的...
伱这么厉害的脚本估计没多少个人会帮伱看....
作者: zh99998    时间: 2009-8-2 08:21
哇~好大堆的脚本...
LZ你可以点【插入代码】的...
伱这么厉害的脚本估计没多少个人会帮伱看....
小闵 发表于 2009-7-30 00:36

因为好像论坛有点bug……代码过长的话code标签就会显示不出

LZ……你还是2选1吧,或者悬赏整合
作者: 迦月    时间: 2009-8-18 16:56
诶··真是痛苦啊     现在苦读F1    争取自己解决吧··




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