module BattleManager #初期化 def self.init_turn all_battle_members.each do |b| b.turn_count = 0 tvalue = 0 if b.actor? && @preemptive tvalue = rand($turn_value_max) + $turn_value_max elsif b.enemy? && @surprise tvalue = rand($turn_value_max) + $turn_value_max else tvalue = rand($turn_value_max) end b.turn_value = tvalue b.turn_value_t = tvalue b.clear_turn_state_flag b.turn_skill_speed_value = 0 @turnSquence_past = [] end end #-------------------------------------------------------------------------- # ● 戦闘開始 #-------------------------------------------------------------------------- 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.turn_start @phase = :turn clear_actor $game_troop.increase_turn @preemptive = false @surprise = false end #-------------------------------------------------------------------------- # ● 次のコマンド入力へ #-------------------------------------------------------------------------- def self.next_command begin if !actor || !actor.next_command @actor_index += 1 return false if @actor_index >= 1 end end until actor.inputable? return true end #-------------------------------------------------------------------------- # ● コマンド入力中のアクターを取得 #-------------------------------------------------------------------------- def self.actor @tbattler end def self.battler @tbattler end #-------------------------------------------------------------------------- # ● コマンド入力開始 #-------------------------------------------------------------------------- def self.input_start if @phase != :input @phase = :input @tbattler.make_actions if @tbattler clear_actor end return !@surprise && @tbattler.inputable? end #-------------------------------------------------------------------------- # ● 次の行動主体の取得u # 行動順序リストの先頭からバトラーを取得する。 # 現在パーティにいないアクターを取得した場合(index が nil, バトルイベ # ントでの離脱直後などに発生)は、それをスキップする。 #-------------------------------------------------------------------------- def self.next_subject return @tbattler end #-------------------------------------------------------------------------- # ● 敵味方合わせた全バトルメンバーの取得 #-------------------------------------------------------------------------- def self.all_battle_members $game_party.members + $game_troop.members end #-------------------------------------------------------------------------- # ● 敵味方合わせた全バトルメンバーの取得(生存) #-------------------------------------------------------------------------- def self.all_battle_alive_members $game_party.alive_members + $game_troop.alive_members end def self.all_battle_dead_members $game_party.dead_members + $game_troop.dead_members end def self.get_chara_battle_turn dead_member_zero_turn_value while !(over_battle_turn?) add_all_battle_turn end mturnl = (all_battle_alive_members.select {|b| b.check_battle_turn($turn_value_max)}) mturn = mturnl.max_by {|mt| mt.turn_value} if mturn.state?($prepare_skill_state_id) mturn.turn_value_magic = 0 else mturn.turn_value -= $turn_value_max end @tbattler = mturn end def self.get_chara_battle_turnSet dead_member_zero_turn_valueSet while !(over_battle_turnSet?) add_all_battle_turnSet end mturnl = (all_battle_alive_members.select {|b| b.check_battle_turn_t($turn_value_max)}) mturn = mturnl.max_by {|mt| mt.turn_value_t} if (mturn.state?($prepare_skill_state_id) && mturn.turn_state_flag == 0 ) || mturn.turn_skill_speed_value > 0 mturn.turn_value_magic_t = 0 mturn.turn_state_flag = 1 mturn.turn_skill_speed_value = 0 else mturn.turn_value_t -= $turn_value_max end return mturn end #戦闘不能キャラを強制的にturn_valueをゼロにする def self.dead_member_zero_turn_value all_battle_dead_members.each do |i| i.turn_value = 0 i.turn_value_magic= 0 end end #戦闘不能キャラを強制的にturn_valueをゼロにするset def self.dead_member_zero_turn_valueSet all_battle_dead_members.each do |i| i.turn_value_t = 0 i.turn_value_magic_t = 0 end end def self.clear_all_turn_state_flag all_battle_members.each do |i| i.clear_turn_state_flag end end def self.clear_all_turn_state_flag_res(bt) all_battle_members.each do |i| i.clear_turn_state_flag unless i == bt end end def self.set_all_turn_state_flag all_battle_members.each do |i| if i.state?($prepare_skill_state_id) && i != @tbattler i.clear_turn_state_flag else i.turn_state_flag = 1 end end end def self.make_turnSquence(speed_value = 0) # type は1以上で未行動の状態で行動後の列の作成  turn_valueSetUpdate set_init_turnSquence(speed_value) turnSequence = [] while (turnSequence.size <= 8) mt = get_chara_battle_turnSet turnSequence.push(mt) end make_turnSquence_past return [@tbattler] + turnSequence end #turnSquenceの初期設定 def self.set_init_turnSquence(speed_value) set_all_turn_state_flag set_init_turnSquence_turn_value(speed_value) end #turnSquenceにおけるturn_valueの初期設定 def self.set_init_turnSquence_turn_value(speed_value) @tbattler.turn_skill_speed_value = speed_value if speed_value > 0 @tbattler.turn_value_t -= $turn_value_max end end def self.make_turnSquence_past if @turnSquence_past.size >= 3 && !@turnSquence_past.empty? @turnSquence_past.shift @turnSquence_past.push(@tbattler) else @turnSquence_past = @turnSquence_past.push(@tbattler) end @turnSquence_past = @turnSquence_past.compact unless @turnSquence_past.empty? end def self.add_all_battle_turn all_battle_alive_members.each do |i| if i.alive? if i.state?($prepare_skill_state_id) i.turn_value = 0 i.turn_value_magic += i.turn_value_magic_vel else i.turn_value += i.agi i.turn_value_magic = 0 end else i.turn_value = 0 i.turn_value_magic = 0 end end end def self.add_all_battle_turnSet all_battle_alive_members.each do |i| if i.alive? if (i.check_skill_state && i.turn_state_flag == 0) || i.turn_skill_speed_value > 0 i.turn_value_t = 0 i.turn_value_magic_t += i.turn_value_magic_vel else i.turn_value_t += i.agi i.turn_value_magic_t = 0 end else i.turn_value_t = 0 i.turn_value_magic_t = 0 end end end def self.over_battle_turn? all_battle_alive_members.any? {|b| b.check_battle_turn($turn_value_max)} end def self.over_battle_turnSet? all_battle_alive_members.any? {|b| b.check_battle_turn_t($turn_value_max)} end def self.turn_valueSetUpdate all_battle_members.each do |i| i.turn_value_t = i.turn_value i.turn_value_magic_t = i.turn_value_magic end end def self.turn_count all_battle_members.inject(0) {|result ,item| result + item.turn_count} end #-------------------------------------------------------------------------- # ● 勝敗判定 判定のみを返す #-------------------------------------------------------------------------- def self.judge_win_loss_bool if @phase return true if $game_party.members.empty? return true if $game_party.all_dead? return true if $game_troop.all_dead? return true if aborting? end return false end #-------------------------------------------------------------------------- # ● phaseを返す #-------------------------------------------------------------------------- def self.phase @phase end end