#==============================================================================
# ★ RGSS3_自動戦闘 Ver1.01
#==============================================================================
=begin
作者:tomoaky
webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
增加命令“自动”和“重复”,两种指令追加。
自动全体演员这回合只自动战斗的状态,
重复的全体演员前面的回合采取的行动自动选择。
附加功能全自动战斗开关(初期设定在7号)开了间
遇敌从地图场面回到为止都是自动化。
===注意点===
・前的回合一样行动成本不足等不能实行的场合攻击
、1回合中重复选择的情况全演员的行动,攻击
・前回合开始时被选择的行动重复的对象,
成本不足重复的内容发生变化时,下一次的回合以后也变化了
使用游戏(初期设定)开关
0007,0008
2012.01.17版本1.01
・逃跑指令失败后重复的命令不正确动作极化
2011.12.15版本1.0
公开
=end
#==============================================================================
# □ 設定項目
#==============================================================================
module TMATBTL
SW_FULLAUTO = 7 # 完全自動戦闘フラグとして扱うゲームスイッチ番号
SW_FULLFAST = 8 # 完全自動戦闘の早送りフラグとして扱うゲームスイッチ番号
end
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
AutoBattle = "自动" # 自動戦闘コマンド名
RepeatBattle = "重复" # 繰り返し戦闘コマンド名
end
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :repeat_commands # 前ターンの行動内容
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias tmatbtl_game_temp_initialize initialize
def initialize
tmatbtl_game_temp_initialize
@repeat_commands = []
end
end
#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message
#--------------------------------------------------------------------------
# ● 入力待ち処理
#--------------------------------------------------------------------------
alias tmatbtl_window_message_input_pause input_pause
def input_pause
if $game_party.in_battle && $game_switches[TMATBTL::SW_FULLAUTO]
wait($game_switches[TMATBTL::SW_FULLFAST] ? 30 : 60)
else
tmatbtl_window_message_input_pause
end
end
end
#==============================================================================
# ■ Window_PartyCommand
#==============================================================================
class Window_PartyCommand
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
alias tmatbtl_window_partycommand_make_command_list make_command_list
def make_command_list
tmatbtl_window_partycommand_make_command_list
add_command(Vocab::AutoBattle, :auto)
add_command(Vocab::RepeatBattle, :repeat)
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 早送り判定
#--------------------------------------------------------------------------
alias tmatbtl_scene_battle_show_fast? show_fast?
def show_fast?
tmatbtl_scene_battle_show_fast? || ($game_switches[TMATBTL::SW_FULLAUTO] &&
$game_switches[TMATBTL::SW_FULLFAST])
end
#--------------------------------------------------------------------------
# ● パーティコマンドウィンドウの作成
#--------------------------------------------------------------------------
alias tmatbtl_scene_battle_create_party_command_window create_party_command_window
def create_party_command_window
tmatbtl_scene_battle_create_party_command_window
@party_command_window.set_handler(:auto, method(:command_auto))
@party_command_window.set_handler(:repeat, method(:command_repeat))
end
#--------------------------------------------------------------------------
# ● パーティコマンド選択の開始
#--------------------------------------------------------------------------
alias tmatbtl_scene_battle_start_party_command_selection start_party_command_selection
def start_party_command_selection
tmatbtl_scene_battle_start_party_command_selection
if $game_switches[TMATBTL::SW_FULLAUTO]
command_auto unless scene_changing?
end
end
#--------------------------------------------------------------------------
# ● 戦闘開始
#--------------------------------------------------------------------------
alias tmatbtl_scene_battle_battle_start battle_start
def battle_start
tmatbtl_scene_battle_battle_start
$game_temp.repeat_commands = []
end
#--------------------------------------------------------------------------
# ● ターン開始
#--------------------------------------------------------------------------
alias tmatbtl_scene_battle_turn_start turn_start
def turn_start
$game_party.members.each_with_index do |actor, i|
next unless actor.inputable?
$game_temp.repeat_commands[i] = []
actor.actions.each do |action|
$game_temp.repeat_commands[i].push(action.clone)
end
end
tmatbtl_scene_battle_turn_start
end
#--------------------------------------------------------------------------
# ○ コマンド[オート]
#--------------------------------------------------------------------------
def command_auto
$game_party.members.each do |actor|
actor.make_auto_battle_actions if actor.inputable?
end
@party_command_window.deactivate
turn_start
end
#--------------------------------------------------------------------------
# ○ コマンド[リピート]
#--------------------------------------------------------------------------
def command_repeat
$game_party.members.each_with_index do |actor, i|
next unless actor.inputable?
actor.actions.clear
if !$game_temp.repeat_commands[i] || $game_temp.repeat_commands[i].empty?
$game_temp.repeat_commands[i] =
[Game_Action.new(actor).set_attack.evaluate]
end
$game_temp.repeat_commands[i].each do |action|
actor.actions.push(action.clone)
actor.actions[actor.actions.size - 1].set_attack unless action.valid?
end
end
@party_command_window.deactivate
turn_start
end
end