#============================================================================== # ■ パーティー拡張 Ver.1.0.2 by Claimh #------------------------------------------------------------------------------ # ・パーティの人数を拡張します。 # ・主要メンバーで戦闘を行いますが、待機メンバーもEXP獲得可能です。 #============================================================================== module Party_Extend #============================================================================== # □ カスタマイズSTART #============================================================================== # 主要メンバーの最大人数(4人まで推奨) MAIN_MEMBER = 3 # 待機メンバーの最大人数(8人まで推奨) SUB_MEMBER = 6 # 待機メンバーにも経験値を分ける SUB_EXP = true # 待機メンバーに分ける経験値の割合(主要メンバーを1としたときの割合) SUB_EXP_PER = 0.5 #============================================================================== # □ カスタマイズEND #============================================================================== end class Game_Actor < Game_Battler attr_accessor :already_change # 入れ替え対象済み alias initialize_change initialize def initialize(actor_id) initialize_change(actor_id) @already_change = false end end class Game_BattleAction attr_accessor :change_member # 入れ替え対象 alias clear_party clear def clear clear_party @change_member = nil end end class Game_Party attr_reader :sub_actors # 待機メンバー #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_double initialize def initialize initialize_double # 待機メンバーの配列を作成 @sub_actors = [] end #-------------------------------------------------------------------------- # ● アクターを加える(再定義) # actor_id : アクター ID #-------------------------------------------------------------------------- def add_actor(actor_id) # アクターを取得 actor = $game_actors[actor_id] # 主要パーティ人数未満で、このアクターがパーティにいない場合 if @actors.size < Party_Extend::MAIN_MEMBER and !actor_include?(actor) # アクターを追加 @actors.push(actor) # プレイヤーをリフレッシュ $game_player.refresh elsif !actor_include?(actor) # 待機パーティ人数未満で、このアクターがパーティにいない場合 if @sub_actors.size < Party_Extend::SUB_MEMBER and !subactor_include?(actor) # アクターを追加 @sub_actors.push(actor) # プレイヤーをリフレッシュ $game_player.refresh end end end #-------------------------------------------------------------------------- # ● アクターを外す(再定義) # actor_id : アクター ID #-------------------------------------------------------------------------- def remove_actor(actor_id) # アクターを取得 actor = $game_actors[actor_id] # 主要メンバーからはずす if actor_include?(actor) # アクターを削除 @actors.delete(actor) # 待機メンバーからはずす elsif subactor_include?(actor) @sub_actors.delete(actor) end # プレイヤーをリフレッシュ $game_player.refresh end #-------------------------------------------------------------------------- # ● アクターを入れ替える # actor_id1 : アクター ID # actor_id2 : アクター ID #-------------------------------------------------------------------------- def change_actors(actor_id1, actor_id2) # 同一アクターの入れ替えは実行しない if actor_id1 == actor_id2 return end # アクター1を取得 actor1 = $game_actors[actor_id1] # アクター2を取得 actor2 = $game_actors[actor_id2] dummy = nil # メインパーティー内の入れ替え if actor_include?(actor1) and actor_include?(actor2) @actors[search_actors(actor1)] = dummy @actors[search_actors(actor2)] = actor1 @actors[search_actors(dummy)] = actor2 # サブパーティー内の入れ替え elsif subactor_include?(actor1) and subactor_include?(actor2) @sub_actors[search_sub_actors(actor1)] = dummy @sub_actors[search_sub_actors(actor2)] = actor1 @sub_actors[search_sub_actors(dummy)] = actor2 # メイン⇔サブ間のパーティーの入れ替え else if actor_include?(actor1) and subactor_include?(actor2) @actors[search_actors(actor1)] = dummy @sub_actors[search_sub_actors(actor2)] = actor1 @actors[search_actors(dummy)] = actor2 elsif subactor_include?(actor1) and actor_include?(actor2) @sub_actors[search_sub_actors(actor1)] = dummy @actors[search_actors(actor2)] = actor1 @sub_actors[search_sub_actors(dummy)] = actor2 else p "error:not search" end end # プレイヤーをリフレッシュ $game_player.refresh end #-------------------------------------------------------------------------- # ● @actors.inlude? 代用 # actor : アクター #-------------------------------------------------------------------------- def actor_include?(actor) for s_actor in @actors if actor.id == s_actor.id return true end end return false end #-------------------------------------------------------------------------- # ● @sub_actors.inlude? 代用 # actor : アクター #-------------------------------------------------------------------------- def subactor_include?(actor) for s_actor in @sub_actors if actor.id == s_actor.id return true end end return false end #-------------------------------------------------------------------------- # ● パーティー内のIndexを検索 # actor : アクター #-------------------------------------------------------------------------- def search_actors(actor) for i in 0...@actors.size if actor.id == @actors[i].id return i end end p "err!:ID指定ミス" return nil end #-------------------------------------------------------------------------- # ● サブパーティー内のIndexを検索 # actor : アクター #-------------------------------------------------------------------------- def search_sub_actors(actor) for i in 0...@sub_actors.size if actor.id == @sub_actors[i].id return i end end p "err!:ID指定ミス" return nil end end class Scene_Battle #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase5_double_team start_phase5 def start_phase5 start_phase5_double_team # 待機メンバーEXP 獲得 if Party_Extend::SUB_EXP exp = 0 # EXP計算 for enemy in $game_troop.enemies # エネミーが隠れ状態でない場合 unless enemy.hidden exp += enemy.exp end end # 待機メンバーEXP 獲得 for i in 0...$game_party.sub_actors.size actor = $game_party.sub_actors[i] if actor.cant_get_exp? == false last_level = actor.level actor.exp += (exp * Party_Extend::SUB_EXP_PER).truncate end end end end end