#==============================================================================
# ■ RGSS3 戦闘中装備変更 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# パーティコマンド、もしくはアクターコマンドに装備変更コマンドを追加します。
# パーティコマンドの場合は全体、アクターコマンドの場合は個別です。
#------------------------------------------------------------------------------
# ★設定例(特徴を有する項目のメモ欄を使用します)
#------------------------------------------------------------------------------
# <戦闘中装備変更>
#
# このアクターのアクターコマンドに装備変更を追加します。
# TYPEが0の場合は意味がありません。
#------------------------------------------------------------------------------
# <戦闘中装備変更禁止:4>
#
# このアクターの装備部位4を戦闘中のみ変更できなくします。
# 装備部位の対応は以下の通りです。(デフォルトの場合です)
# 0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
#==============================================================================
module BATTLE_EQUIP_CHANGE
#戦闘中の装備変更コマンドのコマンド名を指定します。
WORD1 = "装备变更"
#指定した装備の種類を戦闘中装備変更不可能にします。
#装備部位の対応は以下の通りです。(デフォルトの場合です)
#0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
#それぞれ、数字を「,」で区切って指定して下さい。
#例.[2,3]
SEAL = []
#戦闘中の装備変更タイプを指定します。
#0の場合 パーティコマンドに無条件に追加されます。(アクターの切り替えはL・Rボタン)
#1の場合 アクターコマンドに無条件に追加されます。(アクターの切り替え不可)
#2の場合 戦闘中装備変更特徴があるアクターのみ
# アクターコマンドに追加されます。(アクターの切り替え不可)
TYPE = 2
#戦闘中の装備変更を可能とする特徴を作成する為の指定用キーワードを指定します。
#TYPEが1か2の時しか意味はありません。
WORD2 = "戦闘中装備変更"
#部位別に戦闘中の装備変更を禁止する特徴を作成する為の
#指定用キーワードを指定します。
#装備変更画面以外の、イベントコマンド等での装備変更は有効です。
WORD3 = "戦闘中装備変更禁止"
end
class Game_Temp
attr_accessor :battle_equip
#--------------------------------------------------------------------------
# オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_battle_equip initialize
def initialize
#本来の処理を実行。
initialize_battle_equip
#装備変更関連を初期化。
@battle_equip = false
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 装備変更コマンドの追加可否
#--------------------------------------------------------------------------
def equip_command_usable
#特徴の中に装備変更コマンド追加特徴があればtrueを返す。
feature_objects.each {|f| return true if f.equip_command_usable}
#falseを返す。
false
end
#--------------------------------------------------------------------------
# 装備変更コマンドの追加可否
#--------------------------------------------------------------------------
def equip_command_seal
#空の配列を作成。
array = []
#特徴で戦闘中の装備変更禁止箇所が指定されている場合
#その箇所の値を配列に加える。
feature_objects.each {|f| array += f.equip_command_seal}
#配列を返す。
array
end
#--------------------------------------------------------------------------
# 装備変更の可能判定
# slot_id : 装備スロット ID
#--------------------------------------------------------------------------
alias equip_change_ok_battle_equip? equip_change_ok?
def equip_change_ok?(slot_id)
#戦闘中の装備変更であり戦闘中の装備変更禁止箇所に含まれている場合はfalseを返す。
return false if battle_equip_seal.include?(equip_slots[slot_id]) if $game_temp.battle_equip
#本来の処理を実行する。
equip_change_ok_battle_equip?(slot_id)
end
#--------------------------------------------------------------------------
# 戦闘中の装備変更禁止箇所
#--------------------------------------------------------------------------
def battle_equip_seal
#設定で指定した装備禁止箇所と
#アクター個別に設定された装備箇所を合わせ
#重複分を削除して返す。
(BATTLE_EQUIP_CHANGE::SEAL + equip_command_seal).uniq
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# 装備変更コマンドの追加可否
#--------------------------------------------------------------------------
def equip_command_usable
#キャッシュが存在する場合はキャッシュを返す。
return @equip_command_usable if @equip_command_usable != nil
#メモ欄からデータを取得。
@equip_command_usable = self.note.include?("<" + BATTLE_EQUIP_CHANGE::WORD2 + ">")
#データを返す。
@equip_command_usable
end
#--------------------------------------------------------------------------
# 装備変更コマンド封印判定
#--------------------------------------------------------------------------
def equip_command_seal
#キャッシュが存在する場合はキャッシュを返す。
return @equip_command_seal if @equip_command_seal != nil
#空の配列を作成。
@equip_command_seal = []
#メモ欄からデータを取得。
memo = self.note.scan(/<#{BATTLE_EQUIP_CHANGE::WORD3}[::](\S+)>/).flatten
if memo != nil && !memo.empty?
memo = memo[0].split(/\s*,\s*/)
memo.each {|i| @equip_command_seal.push(i.to_i)}
end
#データを返す。
@equip_command_seal
end
end
#タイプ別に処理を分ける。
case BATTLE_EQUIP_CHANGE::TYPE
#パーティコマンドに追加する場合
when 0
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# 戦闘開始
#--------------------------------------------------------------------------
alias battle_start_equip battle_start
def battle_start
#装備変更から戻ってきた場合は行動を作成し直し
#パーティコマンドの選択から開始する。
#そうでない場合は、通常の処理を行う。
if $game_temp.battle_equip
$game_party.make_actions
start_party_command_selection
else
battle_start_equip
end
#戦闘中装備変更フラグを初期化する。
$game_temp.battle_equip = false
end
#--------------------------------------------------------------------------
# パーティコマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_party_command_window_equip create_party_command_window
def create_party_command_window
#本来の処理を実行。
create_party_command_window_equip
#装備変更コマンド用と命令を関連付ける。
@party_command_window.set_handler(:equip_change, method(:command_equip_change))
end
#--------------------------------------------------------------------------
# コマンド[装備変更]
#--------------------------------------------------------------------------
def command_equip_change
#戦闘中装備変更フラグを立てる。
$game_temp.battle_equip = true
#Scene_Equipを呼び出す。
SceneManager.call(Scene_Equip)
end
end
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# コマンドリストの作成
#--------------------------------------------------------------------------
alias make_command_list_equip make_command_list
def make_command_list
#本来の処理を実行。
make_command_list_equip
#装備変更コマンドを追加する。
add_command(BATTLE_EQUIP_CHANGE::WORD1, :equip_change)
end
end
#アクターコマンドに追加する場合
when 1..2
class Game_BattlerBase
def equip_command_usable
#戦闘中装備変更特徴の有無をチェックする。
feature_objects.each {|f| return true if f.equip_command_usable}
false
end
end
class Scene_Equip < Scene_MenuBase
#--------------------------------------------------------------------------
# コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_command_window_equip create_command_window
def create_command_window
#本来の処理を実行。
create_command_window_equip
#戦闘中装備変更の場合、装備コマンドウィンドウから
#アクター切り替えの機能を削除する。
@command_window.battle_command_seal if $game_temp.battle_equip
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# 戦闘開始
#--------------------------------------------------------------------------
alias battle_start_equip battle_start
def battle_start
#戦闘中装備変更から戻った場合ではない場合
if !$game_temp.battle_equip
#本来の処理を実行。
battle_start_equip
else
#そうでない場合は、ステータスをリフレッシュし
#ステータスウィンドウを開く。
refresh_status
@status_window.unselect
@status_window.open
#アクターが操作不能に陥っている場合は、行動内容を作成して
#次のアクターにコマンド選択を移す。
if BattleManager.actor && !BattleManager.actor.inputable?
BattleManager.actor.make_auto_battle_actions
BattleManager.next_command
end
#アクターコマンドの選択を開始する。
BattleManager.actor ? start_actor_command_selection : next_command
end
#戦闘中装備変更フラグを初期化する。
$game_temp.battle_equip = false
end
#--------------------------------------------------------------------------
# アクターコマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_actor_command_window_equip create_actor_command_window
def create_actor_command_window
#本来の処理を実行。
create_actor_command_window_equip
#装備変更コマンド用と命令を関連付ける。
@actor_command_window.set_handler(:equip_change, method(:command_equip_change))
end
#--------------------------------------------------------------------------
# コマンド[装備変更]
#--------------------------------------------------------------------------
def command_equip_change
#戦闘中装備変更フラグを立てる。
$game_temp.battle_equip = true
#メニューアクターを行動選択中のアクターにする。
$game_party.menu_actor = BattleManager.actor
#装備画面を開く。
SceneManager.call(Scene_Equip)
end
end
class Window_ActorCommand < Window_Command
#--------------------------------------------------------------------------
# コマンドリストの作成
#--------------------------------------------------------------------------
alias make_command_list_equip make_command_list
def make_command_list
#本来の処理を実行。
make_command_list_equip
#アクターが存在しない場合は処理を飛ばす。
return unless @actor
#タイプ1の場合は無条件で追加する。
#タイプ2の場合は戦闘中装備変更特徴がある場合に追加する。
add_command(BATTLE_EQUIP_CHANGE::WORD1,:equip_change) if BATTLE_EQUIP_CHANGE::TYPE == 1 or @actor.equip_command_usable
end
end
class Window_EquipCommand < Window_HorzCommand
def battle_command_seal
#アクター切り替えの機能を削除する。
@handler.delete(:pageup)
@handler.delete(:pagedown)
end
end
end