- #RTAB战斗系统 For RPG Maker VX Ace 编写者:SLICK 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ Scene_Battle 
- #------------------------------------------------------------------------------ 
- #  战斗画面 
- #============================================================================== 
-   
- class Scene_Battle < Scene_Base 
-   attr_accessor :cp_quota 
-   attr_accessor :rtab_wait 
-   attr_accessor :active_members 
-   #-------------------------------------------------------------------------- 
-   # ● 开始处理 
-   #-------------------------------------------------------------------------- 
-   def start 
-     super 
-     @cp_quota = 0 
-     create_spriteset 
-     create_all_windows 
-     BattleManager.method_wait_for_message = method(:wait_for_message) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 战斗开始 
-   #-------------------------------------------------------------------------- 
-   def battle_start 
-     @rtab_wait = true 
-     @active_members = [] 
-     BattleManager.battle_start 
-     set_cp_quota 
-     process_event 
-     #start_party_command_selection 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取敌我双方人物的平均行动速度并决定CP槽的Quota值 
-   #-------------------------------------------------------------------------- 
-   def set_cp_quota 
-     sss = 0.0 
-     for iii in $game_party.members 
-       sss += iii.param(6) 
-     end 
-     sss /= $game_party.members.size 
-     @cp_quota = sss * 200 
-     @spriteset.cp_quota = @cp_quota 
-     for iii in $game_party.members + $game_troop.members 
-       iii.cp_quota = @cp_quota 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 进行下一个指令输入 
-   #-------------------------------------------------------------------------- 
-   def next_command 
-     if BattleManager.next_command 
-       start_actor_command_selection 
-     else 
-       turn_start(@active_members) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 返回上一个指令输入 
-   #-------------------------------------------------------------------------- 
-   def prior_command 
-     if BattleManager.prior_command 
-       start_actor_command_selection 
-     else 
-       start_party_command_selection 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新画面 
-   #-------------------------------------------------------------------------- 
-   def update 
-     super 
-     if BattleManager.in_turn? 
-       process_event 
-       process_action 
-     else 
-       if @rtab_wait 
-         for iii in $game_party.members + $game_troop.members 
-           iii.in_turn = false 
-           iii.rtab_cp += iii.param(6) 
-           if iii.rtab_cp >= iii.cp_quota 
-             @active_members.push(iii) 
-             iii.in_turn = true 
-           end 
-         end 
-         if @active_members.size > 0 
-           @rtab_wait = false 
-           start_party_command_selection 
-         end 
-       end 
-     end 
-     BattleManager.judge_win_loss 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 回合开始 
-   #-------------------------------------------------------------------------- 
-   def turn_start(members) 
-     @party_command_window.close 
-     @actor_command_window.close 
-     @status_window.unselect 
-     @subject = nil 
-     BattleManager.turn_start(members) 
-     @log_window.wait 
-     @log_window.clear 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 回合结束 
-   #-------------------------------------------------------------------------- 
-   def turn_end 
-     @active_members.each do |battler| 
-       battler.on_turn_end 
-       refresh_status 
-       @log_window.display_auto_affected_status(battler) 
-       @log_window.wait_and_clear 
-     end 
-     BattleManager.turn_end 
-     process_event 
-     @rtab_wait = true 
-     @active_members = [] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 处理战斗行动 
-   #-------------------------------------------------------------------------- 
-   def process_action 
-     return if scene_changing? 
-     if !@subject || !@subject.current_action 
-       @subject = BattleManager.next_subject 
-     end 
-     return turn_end unless @subject 
-     if @subject.current_action 
-       @subject.current_action.prepare 
-       if @subject.current_action.valid? 
-         @status_window.open 
-         execute_action 
-       end 
-       @subject.remove_current_action 
-     end 
-     process_action_end unless @subject.current_action 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 开始队伍指令的选择 
-   #-------------------------------------------------------------------------- 
-   def start_party_command_selection 
-     unless scene_changing? 
-       refresh_status 
-       @status_window.unselect 
-       @status_window.open 
-       if BattleManager.input_start 
-         BattleManager.clear_actor 
-         BattleManager.next_command 
-         @status_window.select(BattleManager.actor.index) 
-         @actor_command_window.setup(BattleManager.actor) 
-       else 
-         @party_command_window.deactivate 
-         @actor_command_window.close 
-         turn_start(@active_members) 
-       end 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 生成角色指令窗口 
-   #-------------------------------------------------------------------------- 
-   def create_actor_command_window 
-     @actor_command_window = Window_ActorCommand.new 
-     @actor_command_window.viewport = @info_viewport 
-     @actor_command_window.set_handler(:attack, method(:command_attack)) 
-     @actor_command_window.set_handler(:skill,  method(:command_skill)) 
-     @actor_command_window.set_handler(:guard,  method(:command_guard)) 
-     @actor_command_window.set_handler(:item,   method(:command_item)) 
-     @actor_command_window.set_handler(:cancel, method(:prior_command)) 
-     @actor_command_window.set_handler(:escape, method(:command_escape)) 
-     @actor_command_window.x = Graphics.width 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 指令“撤退” 
-   #-------------------------------------------------------------------------- 
-   def command_escape 
-     unless BattleManager.process_escape 
-       turn_start(@active_members)  
-       for iii in @active_members 
-         iii.rtab_cp = 0 
-       end 
-     end 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ Window_ActorCommand 
- #------------------------------------------------------------------------------ 
- #  战斗画面中,选择角色行动的窗口。 
- #============================================================================== 
-   
- class Window_ActorCommand < Window_Command 
-   #-------------------------------------------------------------------------- 
-   # ● 生成指令列表 
-   #-------------------------------------------------------------------------- 
-   def make_command_list 
-     return unless @actor 
-     add_attack_command 
-     add_skill_commands 
-     add_guard_command 
-     add_item_command 
-     add_escape_command 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 添加撤退指令 
-   #-------------------------------------------------------------------------- 
-   def add_escape_command 
-     add_command(Vocab::escape, :escape, BattleManager.can_escape?) 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ BattleManager 
- #------------------------------------------------------------------------------ 
- #  战斗过程的管理器。 
- #============================================================================== 
-   
- module BattleManager 
-   #-------------------------------------------------------------------------- 
-   # ● 战斗开始 
-   #-------------------------------------------------------------------------- 
-   def self.battle_start 
-     $game_system.battle_count += 1 
-     $game_party.on_battle_start 
-     $game_troop.on_battle_start 
-     $game_troop.enemy_names.each do |name| 
-       $game_message.add(sprintf(Vocab::Emerge, name)) 
-     end 
-     if @preemptive 
-       $game_message.add(sprintf(Vocab::Preemptive, $game_party.name)) 
-     elsif @surprise 
-       $game_message.add(sprintf(Vocab::Surprise, $game_party.name)) 
-     end 
-     wait_for_message 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 遇敌时的处理 
-   #-------------------------------------------------------------------------- 
-   def self.on_encounter 
-     @preemptive = false 
-     @surprise = false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 回合开始 
-   #-------------------------------------------------------------------------- 
-   def self.turn_start(members) 
-     @phase = :turn 
-     clear_actor 
-     $game_troop.increase_turn(members) 
-     make_action_orders(members) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 生成行动顺序 
-   #-------------------------------------------------------------------------- 
-   def self.make_action_orders(members) 
-     @action_battlers = [] 
-     for iii in $game_party.members 
-       if members.include?(iii) 
-         @action_battlers.push(iii) unless @surprise 
-       end 
-     end 
-     for iii in $game_troop.members 
-       if members.include?(iii) 
-         @action_battlers.push(iii) unless @preemptive 
-       end 
-     end 
-     @action_battlers.each {|battler| battler.make_speed } 
-     @action_battlers.sort! {|a,b| b.speed - a.speed } 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ Game_Battler 
- #------------------------------------------------------------------------------ 
- #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。 
- #============================================================================== 
-   
- class Game_Battler < Game_BattlerBase 
-   attr_accessor :turn_count 
-   attr_accessor :rtab_cp 
-   attr_accessor :cp_quota 
-   attr_accessor :in_turn 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化对象 
-   #-------------------------------------------------------------------------- 
-   alias neoinitialize initialize 
-   def initialize 
-     @turn_count = 0 
-     @rtab_cp = 0 
-     @cp_quota = 100 
-     @in_turn = false 
-     neoinitialize 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 战斗开始处理 
-   #-------------------------------------------------------------------------- 
-   def on_battle_start 
-     @turn_count = 0 
-     @rtab_cp = 0 
-     @cp_quota = 100 
-     @in_turn = false 
-     init_tp unless preserve_tp? 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 处理伤害 
-   #    调用前需要设置好 
-   #    @result.hp_damage   @result.mp_damage  
-   #    @result.hp_drain    @result.mp_drain 
-   #-------------------------------------------------------------------------- 
-   def execute_damage(user) 
-     on_damage(@result.hp_damage) if @result.hp_damage > 0 
-     self.hp -= @result.hp_damage 
-     self.mp -= @result.mp_damage 
-     user.hp += @result.hp_drain 
-     user.mp += @result.mp_drain 
-     # 受伤后计算CP退后量 
-     cpback = @result.hp_damage + @result.mp_damage 
-     cpback = (cpback < 0 ? 0 : cpback) 
-     pent = 100.0 * cpback / self.mhp 
-     cppentback = ((5 + pent / 10) * self.cp_quota / 100).to_i 
-     @rtab_cp -= cppentback 
-     @rtab_cp = (@rtab_cp < 0 ? 0 : @rtab_cp) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定是否可以输入指令 
-   #-------------------------------------------------------------------------- 
-   def inputable? 
-     normal? && !auto_battle? && @in_turn 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 回合结束处理 
-   #-------------------------------------------------------------------------- 
-   def on_turn_end 
-     @result.clear 
-     regenerate_all 
-     update_state_turns 
-     update_buff_turns 
-     remove_states_auto(2) 
-     # 该角色的回合计数加1并清空CP 
-     @turn_count += 1 
-     @rtab_cp = 0 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ Game_Troop 
- #------------------------------------------------------------------------------ 
- #  管理敌群和战斗相关资料的类,也可执行如战斗事件管理之类的功能。 
- #   本类的实例请参考 $game_troop 。 
- #============================================================================== 
-   
- class Game_Troop < Game_Unit 
-   #-------------------------------------------------------------------------- 
-   # ● 增加回合 
-   #-------------------------------------------------------------------------- 
-   def increase_turn(members) 
-     troop.pages.each {|page| @event_flags= false if page.span == 1 } 
-     turnmax = [] 
-     for iii in members 
-       turnmax.push(iii.turn_count) 
-     end 
-     @turn_count = turnmax.max 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ Spriteset_Battle 
- #------------------------------------------------------------------------------ 
- #  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。 
- #============================================================================== 
-   
- class Spriteset_Battle 
-   attr_accessor :icons 
-   attr_accessor :cp_quota 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化对象 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     @cp_quota = 100 
-     create_viewports 
-     create_battleback1 
-     create_battleback2 
-     create_enemies 
-     create_actors 
-     create_pictures 
-     create_timer 
-     create_rtabcp_gauge 
-     update 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 生成战斗CP条 
-   #-------------------------------------------------------------------------- 
-   def create_rtabcp_gauge 
-     @cpgauge_back = Sprite.new(@viewport3) 
-     @cpgauge_back.bitmap = Bitmap.new(400, 8) 
-     @cpgauge_back.bitmap.gradient_fill_rect(0, 0, 400, 16, Color.new(0, 255, 0), Color.new(255, 0, 0)) 
-     @cpgauge_back.x = 16 
-     @cpgauge_back.y = 16 
-     # 为战斗中的各个角色生成其图标 
-     @icons = {} 
-     for iii in $game_party.members 
-       @icons[iii] = Sprite.new(@viewport3) 
-       @icons[iii].bitmap = Bitmap.new("Graphics/System/bicon1.png") 
-       @icons[iii].ox = 12 
-       @icons[iii].oy = 12 
-       @icons[iii].x = 16 
-       @icons[iii].y = 20 
-     end 
-     for iii in $game_troop.members 
-       @icons[iii] = Sprite.new(@viewport3) 
-       @icons[iii].bitmap = Bitmap.new("Graphics/System/bicon2.png") 
-       @icons[iii].ox = 12 
-       @icons[iii].oy = 12 
-       @icons[iii].x = 16 
-       @icons[iii].y = 20 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 释放 
-   #-------------------------------------------------------------------------- 
-   def dispose 
-     dispose_battleback1 
-     dispose_battleback2 
-     dispose_enemies 
-     dispose_actors 
-     dispose_pictures 
-     dispose_timer 
-     dispose_viewports 
-     dispose_rtabcp_gauge 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 消灭战斗CP条 
-   #-------------------------------------------------------------------------- 
-   def dispose_rtabcp_gauge 
-     @cpgauge_back.bitmap.dispose 
-     @cpgauge_back.dispose 
-     for iii in $game_party.members 
-       @icons[iii].bitmap.dispose 
-       @icons[iii].dispose 
-     end 
-     for iii in $game_troop.members 
-       @icons[iii].bitmap.dispose 
-       @icons[iii].dispose 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新画面 
-   #-------------------------------------------------------------------------- 
-   def update 
-     update_battleback1 
-     update_battleback2 
-     update_enemies 
-     update_actors 
-     update_cp 
-     update_pictures 
-     update_timer 
-     update_viewports 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新CP条 
-   #-------------------------------------------------------------------------- 
-   def update_cp 
-     for iii in $game_party.members + $game_troop.members 
-       @icons[iii].x = 16 + 400 * iii.rtab_cp / @cp_quota 
-       @icons[iii].visible = iii.alive? 
-     end 
-   end 
- end