- #============================================================================== 
- # □ パーティ編成システム (for VX Ace) 
- #------------------------------------------------------------------------------ 
- # Version : 1_20120731 
- # by サリサ・タイクーン 
- # [url]http://www.tycoon812.com/rgss/[/url] 
- #============================================================================== 
-   
- #============================================================================== 
- # □ 素材スイッチ 
- #============================================================================== 
- $rgsslab = {} if $rgsslab == nil 
- $rgsslab["パーティ編成システム"] = true 
-   
- if $rgsslab["パーティ編成システム"] 
-   
- #============================================================================== 
- # □ カスタマイズポイント 
- #============================================================================== 
- module RGSSLAB end 
- module RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーのソート機能 
-   #    trueにすると、待機メンバーの加入・離脱・パーティ編成システム画面において 
-   #    常にID順にソートされるようになります。 
-   #-------------------------------------------------------------------------- 
-   SORT = true 
-   #-------------------------------------------------------------------------- 
-   # ○ 強制フラグ 
-   #    trueにすると、待機メンバーに加える際に、パーティメンバーにいる場合は 
-   #    強制的に待機メンバーへ移動させます。 
-   #    (falseにすると、移動しない代わりに待機メンバーに加える事ができません) 
-   #-------------------------------------------------------------------------- 
-   FORCE = true 
-   #-------------------------------------------------------------------------- 
-   # ○ パーティ編成画面の一行辺りの待機メンバーの人数 
-   #    横に並べる際に、何人目で改行するのかを設定します。 
-   # 
-   #    空欄(それを選ぶと外れると言う意味)の分も含まれる為 
-   #    正確には、現在の待機メンバー+1の数で割り当てられる事に 
-   #    ご注意下さい。 
-   #-------------------------------------------------------------------------- 
-   COLUMN_MAX = 9 
-   #-------------------------------------------------------------------------- 
-   # ○ 外す事のできないアクターの設定 
-   #    IMPOSSIBLLITYに外す事のできないアクターIDを記述します。 
-   # 
-   #    ここに記述されたアクターIDは、編成画面において 
-   #    選択する事ができなくなります。 
-   # 
-   #    ・イベントコマンドのスクリプトでの変更方法 
-   #     $game_system.rgsslab028.impossibillity = [アクターID, …] 
-   #-------------------------------------------------------------------------- 
-   IMPOSSIBILLITY = [] 
- end 
-   
- # カスタマイズポイントは、ここまで 
-   
- #============================================================================== 
- # □ RGSSLAB::Party_Organization_System [module] 
- #============================================================================== 
- module RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ 素材設定用の定数定義 
-   #-------------------------------------------------------------------------- 
-   MATERIAL_NAME = "パーティ編成システム" 
-   VERSION       = 1 
-   RELEASE       = 20120731 
- end 
-   
- #============================================================================== 
- # ■ Game_System [class] 
- #============================================================================== 
- class Game_System 
-   #-------------------------------------------------------------------------- 
-   # ● 公開インスタンス変数 
-   #-------------------------------------------------------------------------- 
-   attr_accessor :rgsslab028 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 [エイリアス] 
-   #-------------------------------------------------------------------------- 
-   alias party_organization_initialize initialize 
-   def initialize 
-     party_organization_initialize 
-     @rgsslab028 = RgssLab_028.new 
-   end 
- end 
-   
- #============================================================================== 
- # □ RgssLab_028 [class] 
- #============================================================================== 
- class RgssLab_028 
-   #-------------------------------------------------------------------------- 
-   # ○ モジュールの設定 
-   #-------------------------------------------------------------------------- 
-   RGSSLAB_028 = RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ 公開インスタンス変数 
-   #-------------------------------------------------------------------------- 
-   attr_accessor :impossibillity 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     @impossibillity = RGSSLAB_028::IMPOSSIBILLITY 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Game_Party [class] 
- #============================================================================== 
- class Game_Party < Game_Unit 
-   #-------------------------------------------------------------------------- 
-   # ○ モジュールの設定 
-   #-------------------------------------------------------------------------- 
-   RGSSLAB_028 = RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ● 公開インスタンス変数 
-   #-------------------------------------------------------------------------- 
-   attr_reader :standby 
-   attr_reader :actors 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 [エイリアス] 
-   #-------------------------------------------------------------------------- 
-   alias party_organization_initialize initialize 
-   def initialize 
-     party_organization_initialize 
-     @standby = [] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ メンバーの入れ替え 
-   #     new_members : 新しいパーティメンバーの配列 
-   #-------------------------------------------------------------------------- 
-   def all_members=(new_members) 
-     @actors.clear 
-     count = 0 
-     for i in new_members 
-       @actors[count] = i 
-       count += 1 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーを加える 
-   #     actor_id : アクター ID 
-   #-------------------------------------------------------------------------- 
-   def add_actor_organization_system(actor_id) 
-     @standby.push(actor_id) unless @standby.include?(actor_id) && @actors.include?(actor_id) 
-     @standby.uniq! 
-     standby_sort 
-     $game_player.refresh 
-     setup_pos if $rgsslab["陣形導入"] && $rgsslab["アクターバトラー実装"] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーを外す 
-   #     actor_id : アクター ID 
-   #-------------------------------------------------------------------------- 
-   def remove_actor_organization_system(actor_id) 
-     @standby.delete(actor_id) 
-     standby_sort 
-     $game_player.refresh 
-     setup_pos if $rgsslab["陣形導入"] && $rgsslab["アクターバトラー実装"] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーのソート 
-   #-------------------------------------------------------------------------- 
-   def standby_sort 
-     return unless RGSSLAB_028::SORT 
-     @standby.sort!{|a, b| 
-       a <=> b 
-     } 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Game_Interpreter [class] 
- #============================================================================== 
- class Game_Interpreter 
-   #-------------------------------------------------------------------------- 
-   # ○ モジュールの設定 
-   #-------------------------------------------------------------------------- 
-   RGSSLAB_028 = RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーを加える 
-   #     actor_id : アクターID 
-   #-------------------------------------------------------------------------- 
-   def add_standby(actor_id) 
-     return if actor_id < 1 
-     $game_party.remove_actor(actor_id) if $game_party.actors.include?(actor_id) && RGSSLAB_028::FORCE && $game_party.actors.size > 1 
-     $game_party.add_actor_organization_system(actor_id) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 待機メンバーを外す 
-   #     actor_id : アクターID 
-   #     back     : パーティ加入フラグ 
-   #-------------------------------------------------------------------------- 
-   def remove_standby(actor_id, back = true) 
-     return if actor_id < 1 
-     $game_party.add_actor(actor_id) if back && $game_party.standby.include?(actor_id) 
-     $game_party.remove_actor_organization_system(actor_id) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ パーティ編成システムの呼び出し 
-   #-------------------------------------------------------------------------- 
-   def call_standby 
-     SceneManager.call(Scene_Party_Organization_System) 
-     Fiber.yield 
-   end 
- end 
-   
- #============================================================================== 
- # □ Window_Party_Organization_Help [class] 
- #============================================================================== 
- class Window_Party_Organization_Help < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● 公開インスタンス変数 
-   #-------------------------------------------------------------------------- 
-   attr_accessor :text_index 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     super(0, 0, Graphics.width, fitting_height(1)) 
-     @text_index = 0 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ リフレッシュ 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     contents.clear 
-     case @text_index 
-     when 0 
-       str  = "Cボタン:決定 Bボタン:編成終了" 
-       rect = contents.text_size(str) 
-     when 1 
-       str  = "Cボタン:決定 Bボタン:キャンセル" 
-       rect = contents.text_size(str) 
-     end 
-     contents.draw_text(4, 0, rect.width, line_height, str) 
-   end 
- end 
-   
- #============================================================================== 
- # □ Window_Party_Member 
- #============================================================================== 
- class Window_Party_Member < Window_Selectable 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     max = $game_party.all_members.size + 1 
-     @column_max   = max 
-     @item_max     = max 
-     super(0, 96, Graphics.width, 80) 
-     self.opacity  = 0 
-     self.index    = 0 
-     self.z        = 101 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 桁数の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def col_max 
-     return @column_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 項目数の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def item_max 
-     return @item_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ リフレッシュ [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     contents.clear 
-     for actor in $game_party.all_members do draw_actor(actor, actor.index) end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ アクターグラフィックの描画 
-   #     actor : アクター 
-   #     index : 項目番号 
-   #-------------------------------------------------------------------------- 
-   def draw_actor(actor, index) 
-     if $game_system.rgsslab028.impossibillity.include?(actor.id) 
-       draw_actor_graphic_impossibillity(actor, 24 + 48 * index, 40) 
-     else 
-       draw_actor_graphic(actor, 24 + 48 * index, 40) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 入れ替えのできないアクターの歩行グラフィック描画 
-   #     actor : アクター 
-   #     x     : 描画先 X 座標 
-   #     y     : 描画先 Y 座標 
-   #-------------------------------------------------------------------------- 
-   def draw_actor_graphic_impossibillity(actor, x, y) 
-     return if actor.name == nil 
-     bitmap = Cache.character(actor.character_name) 
-     sign = actor.name[/^[\!\$]./] 
-     if sign != nil and sign.include?('$') 
-       cw = bitmap.width / 3 
-       ch = bitmap.height / 4 
-     else 
-       cw = bitmap.width / 12 
-       ch = bitmap.height / 8 
-     end 
-     n = actor.character_index 
-     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch) 
-     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, 64) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ カーソルの更新 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def update_cursor 
-     if @index < 0 
-       self.cursor_rect.empty 
-     else 
-       self.cursor_rect.set(@index * 48, 0, 48, 48) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 最大値の再設定 
-   #-------------------------------------------------------------------------- 
-   def max_reset 
-     @item_max = $game_party.members.size + 1 
-   end 
- end 
-   
- #============================================================================== 
- # □ Window_Standby_Member [class] 
- #============================================================================== 
- class Window_Standby_Member < Window_Selectable 
-   #-------------------------------------------------------------------------- 
-   # ○ モジュールの設定 
-   #-------------------------------------------------------------------------- 
-   RGSSLAB_028 = RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     max = $game_party.standby.size 
-     if max == 0 
-       max = 1 
-     else 
-       max += 1 
-     end 
-     @column_max   = RGSSLAB_028::COLUMN_MAX 
-     @item_max     = max 
-     super(0, 208, Graphics.width, 128) 
-     self.opacity  = 0 
-     self.index    = -1 
-     self.active   = false 
-     self.z        = 101 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 桁数の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def col_max 
-     return @column_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 項目数の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def item_max 
-     return @item_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ リフレッシュ [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     contents.clear 
-     if @item_max > 0 
-       self.contents = Bitmap.new(width - 32, row_max * 48) 
-     end 
-     count = 0 
-     for actor in $game_party.standby 
-       draw_actor($game_actors[actor], count) 
-       count += 1 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ アクターグラフィックの描画 
-   #     actor : アクター 
-   #     index : 項目番号 
-   #-------------------------------------------------------------------------- 
-   def draw_actor(actor, index) 
-     draw_actor_graphic(actor, 24 + 48 * (index % @column_max), 40 + (index / @column_max * 48)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 先頭の行の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def top_row 
-     return self.oy / line_height 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 先頭の行の設定 [オーバーライド] 
-   #     row : 先頭に表示する行 
-   #-------------------------------------------------------------------------- 
-   def top_row=(row) 
-     row = 0 if row < 0 
-     row = row_max - 1 if row > row_max - 1 
-     self.oy = row * line_height 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 1 ページに表示できる行数の取得 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def page_row_max 
-     return height / line_height 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ カーソルの更新 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def update_cursor 
-     if @index < 0 
-       self.cursor_rect.empty 
-       return 
-     end 
-     row = @index / @column_max 
-     if row < self.top_row 
-       self.top_row = row 
-     end 
-     if row > self.top_row + (self.page_row_max - 1) 
-       self.top_row = row - (self.page_row_max - 1) 
-     end 
-     x = @index % @column_max * 48 
-     y = @index / @column_max * 48 - self.oy 
-     self.cursor_rect.set(x, y, 48, 48) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ 最大値の再設定 
-   #-------------------------------------------------------------------------- 
-   def max_reset 
-     max = $game_party.standby.size 
-     if max == 0 
-       max = 1 
-     else 
-       max += 1 
-     end 
-     @item_max     = max 
-   end 
- end 
-   
- #============================================================================== 
- # □ Window_Actor_Information [class] 
- #============================================================================== 
- class Window_Actor_Information < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 [オーバーライド] 
-   #     actor : 一番最初のアクター情報 
-   #-------------------------------------------------------------------------- 
-   def initialize(actor) 
-     super(0, 322, Graphics.width, 78) 
-     refresh(actor) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ リフレッシュ 
-   #     actor : アクター情報 
-   #-------------------------------------------------------------------------- 
-   def refresh(actor) 
-     contents.clear 
-     if actor != nil 
-       actor = $game_actors[actor] if actor.is_a?(Numeric) 
-       draw_actor_graphic(actor, 22, 48) 
-       draw_actor_name(actor, 64, 0) 
-       draw_actor_class(actor, 208, 0) 
-       draw_actor_level(actor, 64, 24) 
-       draw_actor_hp(actor, 208, 24) 
-       draw_actor_mp(actor, 336, 24) 
-     end 
-   end 
- end 
-   
- #============================================================================== 
- # □ Window_Party_Organization [class] 
- #============================================================================== 
- class Window_Party_Organization < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ○ オブジェクト初期化 [オーバーライド] 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     super(0, 48, Graphics.width, 274) 
-     self.opacity = 255 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ リフレッシュ 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     contents.clear 
-     contents.draw_text(4,   0, 155, line_height, "パーティメンバー") 
-     contents.draw_text(4, 112, 155, line_height, "待機メンバー" ) 
-   end 
- end 
-   
- #============================================================================== 
- # □ Scene_Party_Organization_System [class] 
- #============================================================================== 
- class Scene_Party_Organization_System < Scene_Base 
-   #-------------------------------------------------------------------------- 
-   # ○ モジュールの設定 
-   #-------------------------------------------------------------------------- 
-   RGSSLAB_028 = RGSSLAB::Party_Organization_System 
-   #-------------------------------------------------------------------------- 
-   # ○ 開始処理 
-   #-------------------------------------------------------------------------- 
-   def start 
-     super 
-     create_windows 
-     @temporary_actor = nil 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ ウィンドウの作成 
-   #-------------------------------------------------------------------------- 
-   def create_windows 
-     @help_window                = Window_Party_Organization_Help.new 
-     @party_member_window        = Window_Party_Member.new 
-     @standby_member_window      = Window_Standby_Member.new 
-     @information_window         = Window_Actor_Information.new($game_party.all_members[0]) 
-     @organization_window        = Window_Party_Organization.new 
-     @party_member_window.active = true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ フレーム更新 
-   #-------------------------------------------------------------------------- 
-   def update 
-     super 
-     if @party_member_window.active 
-       update_party_member_window 
-       return 
-     end 
-     if @standby_member_window.active 
-       update_standby_member_window 
-       return 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ フレーム更新:パーティメンバーウィンドウ 
-   #-------------------------------------------------------------------------- 
-   def update_party_member_window 
-     @information_window.refresh($game_party.members[@party_member_window.index]) 
-     if Input.trigger?(Input::B) 
-       Sound.play_cancel 
-       SceneManager.return 
-       return 
-     end 
-     if Input.trigger?(Input::C) 
-       if $game_party.members[@party_member_window.index] 
-         if $game_system.rgsslab028.impossibillity.include?($game_party.members[@party_member_window.index].id) 
-           Sound.play_buzzer 
-           return 
-         end 
-       end 
-       Sound.play_ok 
-       @temporary_actor = $game_party.members[@party_member_window.index] 
-       @party_member_window.active = false 
-       @standby_member_window.active = true 
-       @standby_member_window.index = 0 
-       @help_window.text_index = 1 
-       @help_window.refresh 
-       return 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ フレーム更新:待機メンバーウィンドウ 
-   #-------------------------------------------------------------------------- 
-   def update_standby_member_window 
-     @information_window.refresh($game_party.standby[@standby_member_window.index]) 
-     if Input.trigger?(Input::B) 
-       Sound.play_cancel 
-       return_party_member_process 
-       return 
-     end 
-     if Input.trigger?(Input::C) 
-       temp = $game_party.standby[@standby_member_window.index] 
-       if @temporary_actor != nil 
-         if $game_party.standby[@standby_member_window.index] != nil 
-           $game_party.standby[@standby_member_window.index] = @temporary_actor.id 
-           temp_members = [] 
-           for i in $game_party.all_members 
-             temp_members.push(i.id) 
-           end 
-           temp_members[@party_member_window.index] = temp 
-           $game_party.all_members = temp_members 
-         else           
-           if $game_party.members.size == 1 
-             Sound.play_buzzer 
-             return 
-           end 
-           temp = $game_party.members[@party_member_window.index] 
-           $game_party.remove_actor($game_party.members[@party_member_window.index].id) 
-           $game_party.add_actor_organization_system(temp.id) 
-         end 
-       else 
-         if $game_party.standby[@standby_member_window.index] == nil 
-           Sound.play_buzzer 
-           return 
-         end 
-         $game_party.add_actor($game_party.standby[@standby_member_window.index]) 
-         $game_party.remove_actor_organization_system($game_party.standby[@standby_member_window.index]) 
-       end 
-       Sound.play_ok 
-       $game_party.standby_sort 
-       $game_player.refresh 
-       @party_member_window.refresh 
-       @standby_member_window.refresh 
-       return_party_member_process 
-       return 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ○ パーティメンバーウィンドウ復帰処理 
-   #-------------------------------------------------------------------------- 
-   def return_party_member_process 
-     @temporary_actor = nil 
-     @party_member_window.active = true 
-     @standby_member_window.active = false 
-     @standby_member_window.index = -1 
-     @party_member_window.max_reset 
-     @standby_member_window.max_reset 
-     @help_window.text_index = 0 
-     @help_window.refresh 
-   end 
- end 
-   
- end