#==============================================================================
# 「パーティコマンド拡張」(ACE) ver1.0
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# このスクリプトを改変したり、改変したものを配布するなどは自由ですが
# その場合も元のスクリプトの作成者として名前は載せて下さい。
# その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
# 戦闘時のパーティコマンド「戦う」を最大3つまで拡張します。
# コマンド選択時に、指定したステートを付与できます。
# これにより自動戦闘や陣形のようなシステムを実装できます。
#
#
# 使い方は、初期設定で行います。
#
# TAC1_NAME = "○○"
# コマンド名を設定します。
# これを空白("")にすると、そのコマンドは未使用になります。
#
# TAC1_SW = n
# 条件スイッチを設定します。nはスイッチNoです。
# 0を指定した場合は、そのコマンドは常に表示されます。
# それ以外の場合、n番のスイッチがONの場合のみ表示されます。
#
# TAC1_STATE = n
# TAC1_STATE = [n,n,n,n]
# 付与ステートを設定します。nはステートIDです。
# 1つの数値を指定した場合、パーティ全員にそのステートを付与します。
# []の配列で指定した場合、順番通りにそれぞれのステートを付与します。
# どちらも0を指定した場合は、ステートを付与しません。
#
# ※基本的に付与するステートはコマンド専用にして下さい。
#
#==============================================================================
#◇初期設定
module Nana
module EZ_Tactics
# コマンド名、""でコマンド不使用
TAC1_NAME = "戦う"
# 条件スイッチNo、0で常に表示
TAC1_SW = 0
# 付与ステートID、0で付与なし
TAC1_STATE = 0
# 作戦2の設定
TAC2_NAME = "自動戦闘"
TAC2_SW = 1
TAC2_STATE = 5
# 作戦3の設定
TAC3_NAME = ""
TAC3_SW = 0
TAC3_STATE = [17,21,22,23]
end
end
#==============================================================================
#==============================================================================
# ■ Window_PartyCommand
#------------------------------------------------------------------------------
# バトル画面で、戦うか逃げるかを選択するウィンドウです。
#==============================================================================
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command(Nana::EZ_Tactics::TAC1_NAME, :tac1, Nana::EZ_Tactics::TAC1_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC1_SW]) unless Nana::EZ_Tactics::TAC1_NAME == ""
add_command(Nana::EZ_Tactics::TAC2_NAME, :tac2, Nana::EZ_Tactics::TAC2_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC2_SW]) unless Nana::EZ_Tactics::TAC2_NAME == ""
add_command(Nana::EZ_Tactics::TAC3_NAME, :tac3, Nana::EZ_Tactics::TAC3_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC3_SW]) unless Nana::EZ_Tactics::TAC3_NAME == ""
add_command(Vocab::escape, :escape, BattleManager.can_escape?)
end
end
#==============================================================================
# ■ RPG::State
#------------------------------------------------------------------------------
# ステートのデータクラス。
#==============================================================================
class RPG::State < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 作戦ステートかどうか
#--------------------------------------------------------------------------
def tactics?
list = []
Nana::EZ_Tactics::TAC1_STATE.class == Array ?
list += Nana::EZ_Tactics::TAC1_STATE : list += [Nana::EZ_Tactics::TAC1_STATE]
Nana::EZ_Tactics::TAC2_STATE.class == Array ?
list += Nana::EZ_Tactics::TAC2_STATE : list += [Nana::EZ_Tactics::TAC2_STATE]
Nana::EZ_Tactics::TAC3_STATE.class == Array ?
list += Nana::EZ_Tactics::TAC3_STATE : list += [Nana::EZ_Tactics::TAC3_STATE]
list.include?(self.id)
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● パーティコマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_party_command_window
@party_command_window = Window_PartyCommand.new
@party_command_window.viewport = @info_viewport
@party_command_window.set_handler(:tac1, method(:command_tac1)) unless Nana::EZ_Tactics::TAC1_NAME == ""
@party_command_window.set_handler(:tac2, method(:command_tac2)) unless Nana::EZ_Tactics::TAC2_NAME == ""
@party_command_window.set_handler(:tac3, method(:command_tac3)) unless Nana::EZ_Tactics::TAC3_NAME == ""
@party_command_window.set_handler(:escape, method(:command_escape))
@party_command_window.unselect
end
#--------------------------------------------------------------------------
# ● コマンド[作戦1]
#--------------------------------------------------------------------------
def command_tac1
if Nana::EZ_Tactics::TAC1_STATE.class == Array
$game_party.members.each_with_index do |actor,index|
actor.add_state(Nana::EZ_Tactics::TAC1_STATE[index]) if Nana::EZ_Tactics::TAC1_STATE[index] && Nana::EZ_Tactics::TAC1_STATE[index] != 0
end
else
$game_party.members.each do |actor|
actor.add_state(Nana::EZ_Tactics::TAC1_STATE) if Nana::EZ_Tactics::TAC1_STATE != 0
end
end
refresh_status
$game_party.make_actions
next_command
end
#--------------------------------------------------------------------------
# ● コマンド[作戦2]
#--------------------------------------------------------------------------
def command_tac2
if Nana::EZ_Tactics::TAC2_STATE.class == Array
$game_party.members.each_with_index do |actor,index|
actor.add_state(Nana::EZ_Tactics::TAC2_STATE[index]) if Nana::EZ_Tactics::TAC2_STATE[index] && Nana::EZ_Tactics::TAC2_STATE[index] != 0
end
else
$game_party.members.each do |actor|
actor.add_state(Nana::EZ_Tactics::TAC2_STATE) if Nana::EZ_Tactics::TAC2_STATE != 0
end
end
p $game_party.members[0].states
refresh_status
$game_party.make_actions
next_command
end
#--------------------------------------------------------------------------
# ● コマンド[作戦3]
#--------------------------------------------------------------------------
def command_tac3
if Nana::EZ_Tactics::TAC3_STATE.class == Array
$game_party.members.each_with_index do |actor,index|
actor.add_state(Nana::EZ_Tactics::TAC3_STATE[index]) if Nana::EZ_Tactics::TAC3_STATE[index] && Nana::EZ_Tactics::TAC3_STATE[index] != 0
end
else
$game_party.members.each do |actor|
actor.add_state(Nana::EZ_Tactics::TAC3_STATE) if Nana::EZ_Tactics::TAC3_STATE != 0
end
end
p $game_party.members[0].states
refresh_status
$game_party.make_actions
next_command
end
#--------------------------------------------------------------------------
# ● パーティコマンド選択の開始
#--------------------------------------------------------------------------
alias start_party_command_selection_n7eztac start_party_command_selection
def start_party_command_selection
unless scene_changing?
$data_states.each do |state|
next unless state && state.tactics?
$game_party.members.each do |actor|
actor.remove_state(state.id)
end
end
end
start_party_command_selection_n7eztac
end
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
# スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● ステートの解除
#--------------------------------------------------------------------------
def remove_state(state_id)
if state?(state_id)
revive if state_id == death_state_id
erase_state(state_id)
refresh
@result.removed_states.push(state_id).uniq! unless $data_states[state_id].tactics?
end
end
end