#============================================================================== # ■ VXAce-RGSS3-9 パーティー編集 [Ver.1.1.0] by Claimh #------------------------------------------------------------------------------ # パーティー編集機能を強化します。 #------------------------------------------------------------------------------ # ● 入れ替えロック flag : true(ロック) / false(ロック解除) # $game_actors[アクターID].lock_change = flag # … lock_changeがtrueとなっているアクターは入れ替えできません # 初期状態は全員falseです #------------------------------------------------------------------------------ # ●戦闘メンバーへ強制加入 # $game_party.add_battle_actor(アクターID) # … 戦闘メンバーが最大に達しているときは # 戦闘メンバーの終端アクターが待機メンバーへ移動します。 #------------------------------------------------------------------------------ # ●再定義 # Game_Actor#reserve_members_exp_rate # Game_Party#max_battle_members # Game_Followers#initialize # Spriteset_Battle#create_actors #============================================================================== module PartyEdit # 最大戦闘メンバー MAX_MEMBERS = 4 # イベントで戦闘メンバーを外したときに待機メンバー先頭を戦闘メンバーに入れる ADD_SUB = true # ADD_SUB=trueのときに戦闘メンバーを最大限入れる ADD_SUB_ALL = false # 戦闘スプライトをメンバー数分用意する # (Game_Actor#use_sprite = true時のみ必要) REMAKE_BT_SPRITE = true # 待機メンバーのEXP入手率(%) # ※「待機メンバーの経験値を獲得」がありの時のみ SUB_MEMBER_EXP = 30 # ロック状態のアクターに付けるアイコンIndex LOCK_ICON_IDX = 495 end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :lock_change # 入れ替えロック #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- alias setup_member setup def setup(actor_id) setup_member(actor_id) @lock_change = false end #-------------------------------------------------------------------------- # ● 控えメンバーの経験獲得率を取得 [再定義] #-------------------------------------------------------------------------- def reserve_members_exp_rate $data_system.opt_extra_exp ? (PartyEdit::SUB_MEMBER_EXP/100.0) : 0 end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_party initialize def initialize initialize_party @max_battle_members = PartyEdit::MAX_MEMBERS end #-------------------------------------------------------------------------- # ● バトルメンバーの最大数を取得 [再定義] #-------------------------------------------------------------------------- def max_battle_members @max_battle_members end #-------------------------------------------------------------------------- # ● バトルメンバーの最大数を変更 #-------------------------------------------------------------------------- def max_battle_members=(max) @max_battle_members = [[max, 1].max, PartyEdit::MAX_MEMBERS].min $game_player.refresh $game_map.need_refresh = true end #-------------------------------------------------------------------------- # ● 初期パーティのセットアップ #-------------------------------------------------------------------------- alias setup_starting_members_party setup_starting_members def setup_starting_members setup_starting_members_party self.max_battle_members = @actors.size end #-------------------------------------------------------------------------- # ● 待機メンバーの取得 #-------------------------------------------------------------------------- def sub_members all_members[max_battle_members, @actors.size].select {|actor| actor.exist? } end #-------------------------------------------------------------------------- # ● アクターを加える #-------------------------------------------------------------------------- alias add_actor_party add_actor def add_actor(actor_id) if max_battle_members < PartyEdit::MAX_MEMBERS add_battle_actor(actor_id) # 戦闘メンバーが空いているときは戦闘メンバーへ else add_actor_party(actor_id) end end #-------------------------------------------------------------------------- # ● アクターを外す #-------------------------------------------------------------------------- alias remove_actor_party remove_actor def remove_actor(actor_id) if $game_actors[actor_id].battle_member? # 戦闘メンバーのときは最大数を減らす self.max_battle_members -= 1 # refreshはalias内で実行するので不要 end remove_actor_party(actor_id) add_reserves if PartyEdit::ADD_SUB end #-------------------------------------------------------------------------- # ● 待機メンバーを戦闘メンバーへ加入させる [all][one] #-------------------------------------------------------------------------- def add_reserves return if @actors.size <= max_battle_members return if max_battle_members == PartyEdit::MAX_MEMBERS return add_sub_member unless PartyEdit::ADD_SUB_ALL until (max_battle_members >= PartyEdit::MAX_MEMBERS) do add_sub_member if @actors.size > max_battle_members end end #-------------------------------------------------------------------------- # ● 待機メンバーを戦闘メンバーへ加入させる [one] #-------------------------------------------------------------------------- def add_sub_member insert_battle_actor(max_battle_members) end #-------------------------------------------------------------------------- # ● 戦闘メンバーへ加入 #-------------------------------------------------------------------------- def add_battle_actor(actor_id) return if @actors.include?(actor_id) index = max_battle_members >= PartyEdit::MAX_MEMBERS ? (PartyEdit::MAX_MEMBERS-1) : max_battle_members @actors.insert(index, actor_id) self.max_battle_members += 1 end #-------------------------------------------------------------------------- # ● メンバー入れ替え [待機→戦闘メンバー終端に挿入] #-------------------------------------------------------------------------- def insert_battle_actor(index) id = @actors[index] @actors.delete_at(index) add_battle_actor(id) end #-------------------------------------------------------------------------- # ● メンバー入れ替え [戦闘→待機メンバー終端に挿入] #-------------------------------------------------------------------------- def insert_last_actor(index) @actors.insert(@actors.size, @actors[index]) @actors.delete_at(index) self.max_battle_members -= 1 end end #============================================================================== # ■ Game_Player #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● フォロワーの再構成 #-------------------------------------------------------------------------- def refresh_followers @followers.refresh_followers(self) end end #============================================================================== # ■ Game_Followers #============================================================================== class Game_Followers #-------------------------------------------------------------------------- # ● オブジェクト初期化 [再定義] # leader : 先頭のキャラクター #-------------------------------------------------------------------------- def initialize(leader) @visible = $data_system.opt_followers @gathering = false # 集合処理中フラグ refresh_followers(leader) end #-------------------------------------------------------------------------- # ● フォロワーの再構成 #-------------------------------------------------------------------------- def refresh_followers(leader) @data = [] @data.push(Game_Follower.new(1, leader)) (2...$game_party.max_battle_members).each do |index| @data.push(Game_Follower.new(index, @data[-1])) end end end if PartyEdit::REMAKE_BT_SPRITE #============================================================================== # ■ Spriteset_Battle #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● アクタースプライトの作成 # デフォルトではアクター側の画像は表示しないが、便宜上、敵と味方を同じ # ように扱うためにダミーのスプライトを作成する。 #-------------------------------------------------------------------------- def create_actors # @actor_sprites = Array.new(4) { Sprite_Battler.new(@viewport1) } # 4固定ではなくmembers.size分、生成する @actor_sprites = Array.new($game_party.members.size) { Sprite_Battler.new(@viewport1) } end #-------------------------------------------------------------------------- # ● アクタースプライトの更新 #-------------------------------------------------------------------------- alias update_actors_party update_actors def update_actors if @actor_sprites.size != $game_party.members.size # メンバー数変化⇒再構築 dispose_actors create_actors end update_actors_party end end end # REMAKE_BT_SPRITE