| 赞 | 2  | 
 
| VIP | 0 | 
 
| 好人卡 | 2 | 
 
| 积分 | 20 | 
 
| 经验 | 26750 | 
 
| 最后登录 | 2025-2-12 | 
 
| 在线时间 | 940 小时 | 
 
 
 
 
 
Lv3.寻梦者 
	- 梦石
 - 0 
 
        - 星屑
 - 2019 
 
        - 在线时间
 - 940 小时
 
        - 注册时间
 - 2015-10-26
 
        - 帖子
 - 358
 
 
  
 
 | 
	
2楼
 
 
 楼主 |
发表于 2015-11-4 09:09:35
|
只看该作者
 
 
 
@赤炎- #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 || [email protected]_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("Graphics/System/CP.png")
 
 -     @cpgauge_back.x = 105
 
 -     @cpgauge_back.y = 16
 
 -     # 为战斗中的各个角色生成其图标
 
 -   @icons = {}  
 
 -     for iii in $game_party.members
 
 -       @icons[iii] = Sprite.new(@viewport3)
 
 -       @icons[iii].bitmap = Bitmap.new("Graphics/Characters/"+iii.character_name)
 
 -       @icons[iii].ox = 12
 
 -       @icons[iii].oy = 12
 
 -       @icons[iii].x = 16
 
 -       @icons[iii].y = 20
 
 -       index = iii.character_index * 3
 
 -       indey = index > 9 ? 4 : 0
 
 -       index = index - 12 if index > 9
 
 -       if iii.character_name.include?(')
 
 -         cw = @icons[iii].bitmap.width / 3
 
 -         ch = @icons[iii].bitmap.height / 4
 
 -         @icons[iii].src_rect.set(index % 3 * 32 + cw, index / 4 * 32, cw, ch)
 
 -       else
 
 -         cw = @icons[iii].bitmap.width / 12
 
 -         ch = @icons[iii].bitmap.height / 8
 
 -         @icons[iii].src_rect.set(index * 32 + cw, indey * 32, cw, ch)
 
 -       end  
 
 -     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 = 105 + 400 * iii.rtab_cp / @cp_quota
 
 -       @icons[iii].visible = iii.alive?
 
 -     end
 
 -   end
 
 - end
 
  复制代码 |   
 
 
 
 |