#============================================================================== # ■ XP-RGSS-35 パーティー拡張 [Ver.1.1.0] by Claimh #------------------------------------------------------------------------------ # ・パーティの人数を拡張します。 # ・主要メンバーで戦闘を行いますが、待機メンバーもEXP獲得可能です。 #------------------------------------------------------------------------------ # [再定義] # Game_Party.add_actor # Game_Party.remove_actor #============================================================================== module Party_Extend #============================================================================== # □ カスタマイズSTART #============================================================================== # 主要メンバーの最大人数(4人まで推奨) MAIN_MEMBER = 4 # 待機メンバーの最大人数(8人まで推奨) SUB_MEMBER = 6 # 待機メンバーにも経験値を分ける SUB_EXP = true # 待機メンバーに分ける経験値の割合(主要メンバーを1としたときの割合) SUB_EXP_PER = 0.5 #============================================================================== # □ カスタマイズEND #============================================================================== module_function def sub_exp(actor, exp) actor.exp += (exp * SUB_EXP_PER).truncate end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :already_change # 入れ替え対象済み attr_accessor :ch_lock # メンバー入れ替え禁止フラグ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_change initialize def initialize(actor_id) initialize_change(actor_id) @already_change = false @ch_lock = false 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] # メインパーティ、サブパーティに加えるアクターがいる場合は無視する return if actor_include?(actor) or subactor_include?(actor) # 主要パーティ人数未満の場合 if @actors.size < Party_Extend::MAIN_MEMBER @actors.push(actor) # アクターを追加 # 待機パーティ人数未満で、このアクターがパーティにいない場合 elsif @sub_actors.size < Party_Extend::SUB_MEMBER @sub_actors.push(actor) # アクターを追加 else p "ERR[add_actor] member full : id=#{actor_id}" end # プレイヤーをリフレッシュ $game_player.refresh end #-------------------------------------------------------------------------- # ● アクターを外す(再定義) # actor_id : アクター ID #-------------------------------------------------------------------------- def remove_actor(actor_id) # アクターを取得 actor = $game_actors[actor_id] # 主要メンバーからはずす if actor_include?(actor) @actors.delete_at(search_actors(actor)) # 待機メンバーからはずす elsif subactor_include?(actor) @sub_actors.delete_at(search_sub_actors(actor)) else p "ERR[remove_actor] unknown actor: id=#{actor_id}" end # プレイヤーをリフレッシュ $game_player.refresh end #-------------------------------------------------------------------------- # ● アクターを入れ替える # actor_id1 : アクター ID # actor_id2 : アクター ID #-------------------------------------------------------------------------- def change_actors(actor_id1, actor_id2) # 同一アクターの入れ替えは実行しない return if actor_id1 == actor_id2 # アクター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_main_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_dummy] = actor2 # メイン → サブ間のパーティーの入れ替え elsif actor_include?(actor1) and subactor_include?(actor2) @actors[search_actors(actor1)] = dummy @sub_actors[search_sub_actors(actor2)] = actor1 @actors[search_main_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_dummy] = actor2 else p "error: can't search change type. id1=#{actor_id1} id2=#{actor_id2}" end # プレイヤーをリフレッシュ $game_player.refresh end #-------------------------------------------------------------------------- # ● @actors.inlude? 代用 # actor : アクター #-------------------------------------------------------------------------- def actor_include?(actor) for s_actor in @actors next if s_actor.nil? return true if actor.id == s_actor.id end return false end #-------------------------------------------------------------------------- # ● @sub_actors.inlude? 代用 # actor : アクター #-------------------------------------------------------------------------- def subactor_include?(actor) for s_actor in @sub_actors next if s_actor.nil? return true if actor.id == s_actor.id end return false end #-------------------------------------------------------------------------- # ● パーティー内のIndexを検索 # actor : アクター #-------------------------------------------------------------------------- def search_actors(actor) for i in 0...@actors.size next if @actors[i].nil? return i if actor.id == @actors[i].id end p "err!:ID指定ミス@main : id=#{actor.id}" return nil end #-------------------------------------------------------------------------- # ● サブパーティー内のIndexを検索 # actor : アクター #-------------------------------------------------------------------------- def search_sub_actors(actor) for i in 0...@sub_actors.size next if @sub_actors[i].nil? return i if actor.id == @sub_actors[i].id end p "err!:ID指定ミス@sub id=#{actor.id}" return nil end #-------------------------------------------------------------------------- # ● メインパーティー内のdummyのIndexを検索 #-------------------------------------------------------------------------- def search_main_dummy for i in 0...@actors.size return i if @actors[i].nil? end p "err!:dummy検出不可@main" return nil end #-------------------------------------------------------------------------- # ● サブパーティー内のdummyのIndexを検索 #-------------------------------------------------------------------------- def search_sub_dummy for i in 0...@sub_actors.size return i if @sub_actors[i].nil? end p "err!:dummy検出不可@sub" return nil end end class Scene_Battle #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase5_double_team start_phase5 def start_phase5 start_phase5_double_team # 待機メンバーEXP を獲得させるか? return unless Party_Extend::SUB_EXP exp = 0 # EXP計算(エネミーが隠れ状態でない場合のみ獲得) for enemy in $game_troop.enemies exp += enemy.exp unless enemy.hidden end # 待機メンバーEXP 獲得 for actor in $game_party.sub_actors Party_Extend.sub_exp(actor, exp) unless actor.cant_get_exp? end end end