设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: jingfp
打印 上一主题 下一主题

[已经解决] 求一个VX队员更换系统

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
15 小时
注册时间
2010-9-4
帖子
24
11
发表于 2010-9-9 21:33:10 | 只看该作者
本帖最后由 xujunxuan 于 2010-9-10 23:44 编辑
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 多人数パーティ - KGC_LargeParty ◆ VX ◆
  3. #_/    ◇ Last update : 2009/02/15 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  5人以上の大規模パーティを構築可能にします。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module LargeParty
  12.   # ◆ パーティ編成許可を表すスイッチ番号
  13.   #  このスイッチの ON/OFF でパーティ編成の 許可/不許可 を切り替えます。
  14.   PARTYFORM_SWITCH          = 1
  15.   # ◆ 戦闘中のパーティ編成許可を表すスイッチ番号
  16.   #  ↑と異なる番号を指定すると、戦闘中のみの入れ替え可否を設定できます。
  17.   BATTLE_PARTYFORM_SWITCH   = 1
  18.   # ◆ デフォルトの編成許可フラグ
  19.   #  true にすると、「ニューゲーム」選択時に両方のパーティ編成許可スイッチが
  20.   #  自動的に ON になります。
  21.   DEFAULT_PARTYFORM_ENABLED = true

  22.   # ◆ 戦闘メンバー最大数 (デフォルト値)
  23.   #  5 以上にすると、戦闘画面のステータスがやや見辛くなります。
  24.   MAX_BATTLE_MEMBERS = 5
  25.   # ◆ パーティメンバー最大数
  26.   #  Game_Party::MAX_MEMBERS を上書きします。
  27.   #  100 以上にすると [Window_MenuStatus] がバグります。
  28.   MAX_MEMBERS = 99

  29.   # ◆ 固定メンバーの並び替えを禁止
  30.   #  スクリプトからの操作以外では並び替えできなくなります。
  31.   FORBID_CHANGE_SHIFT_FIXED = false

  32.   # ◆ 待機メンバーの背景色
  33.   #  色を変えない場合は  Color.new(0, 0, 0, 0)
  34.   STAND_BY_COLOR = Color.new(0, 0, 0, 128)
  35.   # ◆ 固定メンバーの背景色
  36.   FIXED_COLOR    = Color.new(255, 128, 64, 96)
  37.   # ◆ 並び替え時の背景色
  38.   SELECTED_COLOR = Color.new(64, 255, 128, 128)

  39.   # ◆ パーティ編成ボタン (メニュー画面用)
  40.   #  メニュー画面でこのボタンを押すと、パーティ編成画面に移行します。
  41.   #  使用しない場合は nil
  42.   MENU_PARTYFORM_BUTTON      = Input::A
  43.   # ◆ メニュー画面にパーティ編成コマンドを追加する
  44.   #  追加する場所は、メニューコマンドの最下部です。
  45.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  46.   USE_MENU_PARTYFORM_COMMAND = true
  47.   # ◆ メニュー画面のパーティ編成コマンドの名称
  48.   VOCAB_MENU_PARTYFORM       = "隊伍編成"

  49.   # ◆ 戦闘中にパーティ編成コマンドを使用する
  50.   #  追加する場所は、パーティコマンドの最下部(「逃げる」の下)です。
  51.   USE_BATTLE_PARTYFORM   = true
  52.   # ◆ 戦闘中のパーティ編成コマンドの名称
  53.   VOCAB_BATTLE_PARTYFORM = "隊伍編成"

  54.   # ◆ 編成画面のキャラクター描画サイズ [幅, 高さ]
  55.   #  アクターの歩行グラフィックのサイズに応じて書き換えてください。
  56.   PARTY_FORM_CHARACTER_SIZE   = [40, 48]
  57.   # ◆ 編成画面の戦闘メンバーウィンドウの空欄に表示するテキスト
  58.   BATTLE_MEMBER_BLANK_TEXT    = "EMPTY"
  59.   # ◆ 編成画面のパーティメンバーウィンドウの最大行数
  60.   #  ステータスウィンドウが画面からはみ出る場合は、
  61.   #  この値を 1 にしてください。
  62.   PARTY_MEMBER_WINDOW_ROW_MAX = 2
  63.   # ◆ 編成画面のパーティメンバーウィンドウに戦闘メンバーを表示する
  64.   SHOW_BATTLE_MEMBER_IN_PARTY = false
  65.   # ◆ 編成画面のパーティメンバーウィンドウの空欄に表示するテキスト
  66.   PARTY_MEMBER_BLANK_TEXT     = "-"

  67.   # ◆ 編成画面のキャプションウィンドウの幅
  68.   CAPTION_WINDOW_WIDTH  = 192
  69.   # ◆ 編成画面の戦闘メンバーウィンドウのキャプション
  70.   BATTLE_MEMBER_CAPTION = "出戰者"

  71.   if SHOW_BATTLE_MEMBER_IN_PARTY
  72.     # ◆ 編成画面のパーティメンバーウィンドウのキャプション
  73.     #  SHOW_BATTLE_MEMBER_IN_PARTY = true のとき
  74.     PARTY_MEMBER_CAPTION = "パーティメンバー"
  75.   else
  76.     # ◆ 編成画面のパーティメンバーウィンドウのキャプション
  77.     #  SHOW_BATTLE_MEMBER_IN_PARTY = false のとき
  78.     PARTY_MEMBER_CAPTION = "待機者"
  79.   end

  80.   # ◆ 編成確認ウィンドウの幅
  81.   CONFIRM_WINDOW_WIDTH    = 160
  82.   # ◆ 編成確認ウィンドウの文字列
  83.   #  ※コマンド数・順番を変更するとバグります。
  84.   CONFIRM_WINDOW_COMMANDS = ["編成完了", "編成中止", "取消"]

  85.   # ◆ ショップ画面のステータスウィンドウスクロール時に使用するボタン
  86.   #  このボタンを押している間、上下ボタンでスクロールできます。
  87.   #  スクロールを無効にする場合は nil を指定。
  88.   #  ≪ヘルプウィンドウ機能拡張≫ 併用時は、上に導入したものを優先。
  89.   SHOP_STATUS_SCROLL_BUTTON = Input::A

  90.   # ◆ 待機メンバー獲得経験値割合【単位:‰(千分率 1‰=0.1%)】
  91.   #  500 なら 50.0% です。
  92.   STAND_BY_EXP_RATE = 500
  93.   # ◆ リザルト画面で待機メンバーのレベルアップを表示する
  94.   #  true  : 待機メンバーのレベルアップを表示。
  95.   #  false : 戦闘メンバーのみ表示。
  96.   SHOW_STAND_BY_LEVEL_UP = true
  97.   # ◆ 戦闘以外でも待機メンバーを表示する
  98.   #  true  : 戦闘以外では常に全員を表示。
  99.   #  false : 入れ替え時以外は、待機メンバーをいないものとして扱う。
  100.   SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE = true
  101. end
  102. end

  103. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  104. $imported = {} if $imported == nil
  105. $imported["LargeParty"] = true

  106. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  107. #==============================================================================
  108. # □ KGC::Commands
  109. #==============================================================================

  110. module KGC
  111. module Commands
  112.   # メンバーのソート形式
  113.   SORT_BY_ID    = 0  # ID順
  114.   SORT_BY_NAME  = 1  # 名前順
  115.   SORT_BY_LEVEL = 2  # レベル順

  116.   module_function
  117.   #--------------------------------------------------------------------------
  118.   # ○ パーティ編成画面の呼び出し
  119.   #--------------------------------------------------------------------------
  120.   def call_partyform
  121.     return if $game_temp.in_battle
  122.     $game_temp.next_scene = :partyform
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ○ 戦闘メンバー最大数を設定
  126.   #     value : 人数 (省略した場合はデフォルト値を使用)
  127.   #--------------------------------------------------------------------------
  128.   def set_max_battle_member_count(value = nil)
  129.     $game_party.max_battle_member_count = value
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ○ 全メンバー数取得
  133.   #     variable_id : 取得した値を代入する変数の ID
  134.   #--------------------------------------------------------------------------
  135.   def get_all_member_count(variable_id = 0)
  136.     n = $game_party.all_members.size
  137.     if variable_id > 0
  138.       $game_variables[variable_id] = n
  139.       $game_map.need_refresh = true
  140.     end
  141.     return n
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ○ 戦闘メンバー数取得
  145.   #     variable_id : 取得した値を代入する変数の ID
  146.   #--------------------------------------------------------------------------
  147.   def get_battle_member_count(variable_id = 0)
  148.     n = $game_party.battle_members.size
  149.     if variable_id > 0
  150.       $game_variables[variable_id] = n
  151.       $game_map.need_refresh = true
  152.     end
  153.     return n
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 待機メンバー数取得
  157.   #     variable_id : 取得した値を代入する変数の ID
  158.   #--------------------------------------------------------------------------
  159.   def get_stand_by_member_count(variable_id = 0)
  160.     n = $game_party.stand_by_members.size
  161.     if variable_id > 0
  162.       $game_variables[variable_id] = n
  163.       $game_map.need_refresh = true
  164.     end
  165.     return n
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ○ パーティ人数が一杯か
  169.   #--------------------------------------------------------------------------
  170.   def party_full?
  171.     return $game_party.full?
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ○ パーティ編成可否を設定
  175.   #     enabled : 有効フラグ (省略時 : true)
  176.   #--------------------------------------------------------------------------
  177.   def permit_partyform(enabled = true)
  178.     $game_switches[KGC::LargeParty::PARTYFORM_SWITCH] = enabled
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ○ 戦闘中のパーティ編成可否を設定
  182.   #     enabled : 有効フラグ (省略時 : true)
  183.   #--------------------------------------------------------------------------
  184.   def permit_battle_partyform(enabled = true)
  185.     $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH] = enabled
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ○ アクターの固定状態を設定
  189.   #     actor_id : アクター ID
  190.   #     fixed    : 固定フラグ (省略時 : true)
  191.   #--------------------------------------------------------------------------
  192.   def fix_actor(actor_id, fixed = true)
  193.     $game_party.fix_actor(actor_id, fixed)
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ○ 並び替え
  197.   #    メンバーの index1 番目と index2 番目を入れ替える
  198.   #--------------------------------------------------------------------------
  199.   def change_party_shift(index1, index2)
  200.     $game_party.change_shift(index1, index2)
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ○ メンバー整列 (昇順)
  204.   #     sort_type : ソート形式 (SORT_BY_xxx)
  205.   #     reverse   : true だと降順
  206.   #--------------------------------------------------------------------------
  207.   def sort_party_member(sort_type = SORT_BY_ID, reverse = false)
  208.     $game_party.sort_member(sort_type, reverse)
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ 待機メンバーの ID を取得
  212.   #--------------------------------------------------------------------------
  213.   def get_stand_by_member_ids
  214.     result = []
  215.     $game_party.stand_by_members.each { |actor| result << actor.id }
  216.     return result
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ アクターが待機メンバーか
  220.   #     actor_id : アクター ID
  221.   #--------------------------------------------------------------------------
  222.   def stand_by_member?(actor_id)
  223.     return get_stand_by_member_ids.include?(actor_id)
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ○ アクターを戦闘メンバーに加える
  227.   #     actor_id : アクター ID
  228.   #     index    : 追加位置 (省略時は最後尾)
  229.   #--------------------------------------------------------------------------
  230.   def add_battle_member(actor_id, index = nil)
  231.     $game_party.add_battle_member(actor_id, index)
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ アクターを戦闘メンバーから外す
  235.   #     actor_id : アクター ID
  236.   #--------------------------------------------------------------------------
  237.   def remove_battle_member(actor_id)
  238.     $game_party.remove_battle_member(actor_id)
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ○ 固定アクター以外を戦闘メンバーから外す
  242.   #--------------------------------------------------------------------------
  243.   def remove_all_battle_member
  244.     $game_party.all_members.each { |actor|
  245.       $game_party.remove_battle_member(actor.id)
  246.     }
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ○ ランダム出撃
  250.   #--------------------------------------------------------------------------
  251.   def random_launch
  252.     new_battle_members = $game_party.fixed_members
  253.     candidates = $game_party.all_members - new_battle_members
  254.     num = [$game_party.max_battle_member_count - new_battle_members.size,
  255.       candidates.size].min
  256.     return if num <= 0

  257.     # ランダムに選ぶ
  258.     ary = (0...candidates.size).to_a.sort_by { rand }
  259.     ary[0...num].each { |i| new_battle_members << candidates[i] }
  260.     $game_party.set_battle_member(new_battle_members)
  261.   end
  262. end
  263. end

  264. class Game_Interpreter
  265.   include KGC::Commands
  266. end

  267. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  268. #==============================================================================
  269. # ■ Vocab
  270. #==============================================================================

  271. module Vocab
  272.   # 「パーティ編成」コマンド名 (メニュー)
  273.   def self.partyform
  274.     return KGC::LargeParty::VOCAB_MENU_PARTYFORM
  275.   end

  276.   # 「パーティ編成」コマンド名 (戦闘)
  277.   def self.partyform_battle
  278.     return KGC::LargeParty::VOCAB_BATTLE_PARTYFORM
  279.   end
  280. end

  281. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  282. #==============================================================================
  283. # ■ Game_Actor
  284. #==============================================================================

  285. class Game_Actor < Game_Battler
  286.   #--------------------------------------------------------------------------
  287.   # ○ パーティ内インデックス取得
  288.   #--------------------------------------------------------------------------
  289.   def party_index
  290.     return $game_party.all_members.index(self)
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ○ 戦闘メンバーか判定
  294.   #--------------------------------------------------------------------------
  295.   def battle_member?
  296.     return $game_party.battle_members.include?(self)
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ○ 固定メンバーか判定
  300.   #--------------------------------------------------------------------------
  301.   def fixed_member?
  302.     return $game_party.fixed_members.include?(self)
  303.   end
  304. end

  305. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  306. #==============================================================================
  307. # ■ Game_Party
  308. #==============================================================================

  309. class Game_Party
  310.   #--------------------------------------------------------------------------
  311.   # ● 定数
  312.   #--------------------------------------------------------------------------
  313.   MAX_MEMBERS = KGC::LargeParty::MAX_MEMBERS  # 最大パーティ人数
  314.   #--------------------------------------------------------------------------
  315.   # ● オブジェクト初期化
  316.   #--------------------------------------------------------------------------
  317.   alias initialize_KGC_LargeParty initialize
  318.   def initialize
  319.     initialize_KGC_LargeParty

  320.     @max_battle_member_count = nil
  321.     @battle_member_count = 0
  322.     @fixed_actors = []
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ○ 戦闘メンバー最大数取得
  326.   #--------------------------------------------------------------------------
  327.   def max_battle_member_count
  328.     if @max_battle_member_count == nil
  329.       return KGC::LargeParty::MAX_BATTLE_MEMBERS
  330.     else
  331.       return @max_battle_member_count
  332.     end
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ○ 戦闘メンバー最大数変更
  336.   #--------------------------------------------------------------------------
  337.   def max_battle_member_count=(value)
  338.     if value.is_a?(Integer)
  339.       value = [value, 1].max
  340.     end
  341.     @max_battle_member_count = value
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ○ 戦闘メンバー数取得
  345.   #--------------------------------------------------------------------------
  346.   def battle_member_count
  347.     if @battle_member_count == nil
  348.       @battle_member_count = @actors.size
  349.     end
  350.     @battle_member_count =
  351.       [@battle_member_count, @actors.size, max_battle_member_count].min
  352.     return @battle_member_count
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ○ 戦闘メンバー数設定
  356.   #--------------------------------------------------------------------------
  357.   def battle_member_count=(value)
  358.     @battle_member_count = [[value, 0].max,
  359.       @actors.size, max_battle_member_count].min
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● メンバーの取得
  363.   #--------------------------------------------------------------------------
  364.   alias members_KGC_LargeParty members
  365.   def members
  366.     if $game_temp.in_battle ||
  367.         !KGC::LargeParty::SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE
  368.       return battle_members
  369.     else
  370.       return members_KGC_LargeParty
  371.     end
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ○ 全メンバーの取得
  375.   #--------------------------------------------------------------------------
  376.   def all_members
  377.     return members_KGC_LargeParty
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ○ 戦闘メンバーの取得
  381.   #--------------------------------------------------------------------------
  382.   def battle_members
  383.     result = []
  384.     battle_member_count.times { |i| result << $game_actors[@actors[i]] }
  385.     return result
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ○ 待機メンバーの取得
  389.   #--------------------------------------------------------------------------
  390.   def stand_by_members
  391.     return (all_members - battle_members)
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ○ 固定メンバーの取得
  395.   #--------------------------------------------------------------------------
  396.   def fixed_members
  397.     result = []
  398.     @fixed_actors.each { |i| result << $game_actors[i] }
  399.     return result
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 初期パーティのセットアップ
  403.   #--------------------------------------------------------------------------
  404.   alias setup_starting_members_KGC_LargeParty setup_starting_members
  405.   def setup_starting_members
  406.     setup_starting_members_KGC_LargeParty

  407.     self.battle_member_count = @actors.size
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● 戦闘テスト用パーティのセットアップ
  411.   #--------------------------------------------------------------------------
  412.   alias setup_battle_test_members_KGC_LargeParty setup_battle_test_members
  413.   def setup_battle_test_members
  414.     setup_battle_test_members_KGC_LargeParty

  415.     self.battle_member_count = @actors.size
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ○ メンバーの新規設定
  419.   #     new_member : 新しいメンバー
  420.   #--------------------------------------------------------------------------
  421.   def set_member(new_member)
  422.     @actors = []
  423.     new_member.each { |actor| @actors << actor.id }
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ○ 戦闘メンバーの新規設定
  427.   #     new_member : 新しい戦闘メンバー
  428.   #--------------------------------------------------------------------------
  429.   def set_battle_member(new_member)
  430.     new_battle_member = []
  431.     new_member.each { |actor|
  432.       @actors.delete(actor.id)
  433.       new_battle_member << actor.id
  434.     }
  435.     @actors = new_battle_member + @actors
  436.     self.battle_member_count = new_member.size
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ○ パーティ編成を許可しているか判定
  440.   #--------------------------------------------------------------------------
  441.   def partyform_enable?
  442.     return $game_switches[KGC::LargeParty::PARTYFORM_SWITCH]
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ○ 戦闘中のパーティ編成を許可しているか判定
  446.   #--------------------------------------------------------------------------
  447.   def battle_partyform_enable?
  448.     return false unless partyform_enable?
  449.     return $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH]
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ○ メンバーが一杯か判定
  453.   #--------------------------------------------------------------------------
  454.   def full?
  455.     return (@actors.size >= MAX_MEMBERS)
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ○ 固定アクターか判定
  459.   #     actor_id : 判定するアクターの ID
  460.   #--------------------------------------------------------------------------
  461.   def actor_fixed?(actor_id)
  462.     return @fixed_actors.include?(actor_id)
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ● アクターを加える
  466.   #     actor_id : アクター ID
  467.   #--------------------------------------------------------------------------
  468.   alias add_actor_KGC_LargeParty add_actor
  469.   def add_actor(actor_id)
  470.     last_size = @actors.size

  471.     add_actor_KGC_LargeParty(actor_id)

  472.     if last_size < @actors.size
  473.       self.battle_member_count += 1
  474.     end
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ○ アクターを戦闘メンバーに加える
  478.   #     actor_id : アクター ID
  479.   #     index    : 追加位置 (省略時は最後尾)
  480.   #--------------------------------------------------------------------------
  481.   def add_battle_member(actor_id, index = nil)
  482.     return unless @actors.include?(actor_id)  # パーティにいない
  483.     if index == nil
  484.       return if battle_members.include?($game_actors[actor_id])  # 出撃済み
  485.       return if battle_member_count == max_battle_member_count   # 人数が最大
  486.       index = battle_member_count
  487.     end

  488.     @actors.delete(actor_id)
  489.     @actors.insert(index, actor_id)
  490.     self.battle_member_count += 1
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ○ アクターを戦闘メンバーから外す
  494.   #     actor_id : アクター ID
  495.   #--------------------------------------------------------------------------
  496.   def remove_battle_member(actor_id)
  497.     return unless @actors.include?(actor_id)  # パーティにいない
  498.     return if actor_fixed?(actor_id)          # 固定済み
  499.     return if stand_by_members.include?($game_actors[actor_id])  # 待機中

  500.     @actors.delete(actor_id)
  501.     @actors.push(actor_id)
  502.     self.battle_member_count -= 1
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ○ アクターの固定状態を設定
  506.   #     actor_id : アクター ID
  507.   #     fixed    : 固定フラグ (省略時 : false)
  508.   #--------------------------------------------------------------------------
  509.   def fix_actor(actor_id, fixed = false)
  510.     return unless @actors.include?(actor_id)  # パーティにいない

  511.     if fixed
  512.       # 固定
  513.       unless @fixed_actors.include?(actor_id)
  514.         @fixed_actors << actor_id
  515.         unless battle_members.include?($game_actors[actor_id])
  516.           self.battle_member_count += 1
  517.         end
  518.       end
  519.       # 強制出撃
  520.       apply_force_launch
  521.     else
  522.       # 固定解除
  523.       @fixed_actors.delete(actor_id)
  524.     end
  525.     $game_player.refresh
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # ○ 強制出撃適用
  529.   #--------------------------------------------------------------------------
  530.   def apply_force_launch
  531.     while (fixed_members - battle_members).size > 0
  532.       # 固定状態でないメンバーを適当に持ってきて入れ替え
  533.       actor1 = stand_by_members.find { |a| @fixed_actors.include?(a.id) }
  534.       actor2 = battle_members.reverse.find { |a| !@fixed_actors.include?(a.id) }
  535.       index1 = @actors.index(actor1.id)
  536.       index2 = @actors.index(actor2.id)
  537.       @actors[index1], @actors[index2] = @actors[index2], @actors[index1]

  538.       # 戦闘メンバーが全員固定されたら戻る (無限ループ防止)
  539.       all_fixed = true
  540.       battle_members.each { |actor|
  541.         unless actor.fixed_member?
  542.           all_fixed = false
  543.           break
  544.         end
  545.       }
  546.       break if all_fixed
  547.     end
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ○ メンバー整列 (昇順)
  551.   #     sort_type : ソート形式 (SORT_BY_xxx)
  552.   #     reverse   : true だと降順
  553.   #--------------------------------------------------------------------------
  554.   def sort_member(sort_type = KGC::Commands::SORT_BY_ID,
  555.                   reverse = false)
  556.     # バッファを準備
  557.     b_actors = battle_members
  558.     actors   = all_members - b_actors
  559.     f_actors = fixed_members
  560.     # 固定キャラはソートしない
  561.     if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
  562.       actors   -= f_actors
  563.       b_actors -= f_actors
  564.     end

  565.     # ソート
  566.     case sort_type
  567.     when KGC::Commands::SORT_BY_ID     # ID順
  568.       actors.sort!   { |a, b| a.id <=> b.id }
  569.       b_actors.sort! { |a, b| a.id <=> b.id }
  570.     when KGC::Commands::SORT_BY_NAME   # 名前順
  571.       actors.sort!   { |a, b| a.name <=> b.name }
  572.       b_actors.sort! { |a, b| a.name <=> b.name }
  573.     when KGC::Commands::SORT_BY_LEVEL  # レベル順
  574.       actors.sort!   { |a, b| a.level <=> b.level }
  575.       b_actors.sort! { |a, b| a.level <=> b.level }
  576.     end
  577.     # 反転
  578.     if reverse
  579.       actors.reverse!
  580.       b_actors.reverse!
  581.     end

  582.     # 固定キャラを先頭に持ってくる
  583.     if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
  584.       actors   = f_actors + actors
  585.       b_actors = f_actors + b_actors
  586.     end

  587.     # 復帰
  588.     set_member(actors)
  589.     set_battle_member(b_actors)

  590.     apply_force_launch
  591.     $game_player.refresh
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ○ 並び替え
  595.   #    戦闘メンバーの index1 番目と index2 番目を入れ替える
  596.   #--------------------------------------------------------------------------
  597.   def change_shift(index1, index2)
  598.     size = @actors.size
  599.     if index1 >= size || index2 >= size
  600.       return
  601.     end
  602.     buf = @actors[index1]
  603.     @actors[index1] = @actors[index2]
  604.     @actors[index2] = buf
  605.     $game_player.refresh
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 戦闘用ステートの解除 (戦闘終了時に呼び出し)
  609.   #--------------------------------------------------------------------------
  610.   def remove_states_battle
  611.     for actor in all_members
  612.       actor.remove_states_battle
  613.     end
  614.   end
  615. end

  616. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  617. #==============================================================================
  618. # ■ Window_Command
  619. #==============================================================================

  620. class Window_Command < Window_Selectable
  621.   unless method_defined?(:add_command)
  622.   #--------------------------------------------------------------------------
  623.   # ○ コマンドを追加
  624.   #    追加した位置を返す
  625.   #--------------------------------------------------------------------------
  626.   def add_command(command)
  627.     @commands << command
  628.     @item_max = @commands.size
  629.     item_index = @item_max - 1
  630.     refresh_command
  631.     draw_item(item_index)
  632.     return item_index
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ○ コマンドをリフレッシュ
  636.   #--------------------------------------------------------------------------
  637.   def refresh_command
  638.     buf = self.contents.clone
  639.     self.height = [self.height, row_max * WLH + 32].max
  640.     create_contents
  641.     self.contents.blt(0, 0, buf, buf.rect)
  642.     buf.dispose
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ○ コマンドを挿入
  646.   #--------------------------------------------------------------------------
  647.   def insert_command(index, command)
  648.     @commands.insert(index, command)
  649.     @item_max = @commands.size
  650.     refresh_command
  651.     refresh
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ○ コマンドを削除
  655.   #--------------------------------------------------------------------------
  656.   def remove_command(command)
  657.     @commands.delete(command)
  658.     @item_max = @commands.size
  659.     refresh
  660.   end
  661.   end
  662. end

  663. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  664. #==============================================================================
  665. # ■ Window_MenuStatus
  666. #==============================================================================

  667. class Window_MenuStatus < Window_Selectable
  668.   #--------------------------------------------------------------------------
  669.   # ● 定数
  670.   #--------------------------------------------------------------------------
  671.   STATUS_HEIGHT = 96  # ステータス一人分の高さ
  672.   #--------------------------------------------------------------------------
  673.   # ● ウィンドウ内容の作成
  674.   #--------------------------------------------------------------------------
  675.   def create_contents
  676.     self.contents.dispose
  677.     self.contents = Bitmap.new(width - 32,
  678.       [height - 32, row_max * STATUS_HEIGHT].max)
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● 先頭の行の取得
  682.   #--------------------------------------------------------------------------
  683.   def top_row
  684.     return self.oy / STATUS_HEIGHT
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● 先頭の行の設定
  688.   #     row : 先頭に表示する行
  689.   #--------------------------------------------------------------------------
  690.   def top_row=(row)
  691.     super(row)
  692.     self.oy = self.oy / WLH * STATUS_HEIGHT
  693.   end
  694.   #--------------------------------------------------------------------------
  695.   # ● 1 ページに表示できる行数の取得
  696.   #--------------------------------------------------------------------------
  697.   def page_row_max
  698.     return (self.height - 32) / STATUS_HEIGHT
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● 項目を描画する矩形の取得
  702.   #     index : 項目番号
  703.   #--------------------------------------------------------------------------
  704.   def item_rect(index)
  705.     rect = super(index)
  706.     rect.height = STATUS_HEIGHT
  707.     rect.y = index / @column_max * STATUS_HEIGHT
  708.     return rect
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● リフレッシュ
  712.   #--------------------------------------------------------------------------
  713.   def refresh
  714.     @item_max = $game_party.members.size
  715.     create_contents
  716.     fill_stand_by_background
  717.     draw_member
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ○ パーティメンバー描画
  721.   #--------------------------------------------------------------------------
  722.   def draw_member
  723.     for actor in $game_party.members
  724.       draw_actor_face(actor, 2, actor.party_index * 96 + 2, 92)
  725.       x = 104
  726.       y = actor.party_index * 96 + WLH / 2
  727.       draw_actor_name(actor, x, y)
  728.       draw_actor_class(actor, x + 120, y)
  729.       draw_actor_level(actor, x, y + WLH * 1)
  730.       draw_actor_state(actor, x, y + WLH * 2)
  731.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  732.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  733.     end
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ○ 待機メンバーの背景色を塗る
  737.   #--------------------------------------------------------------------------
  738.   def fill_stand_by_background
  739.     color = KGC::LargeParty::STAND_BY_COLOR
  740.     dy = STATUS_HEIGHT * $game_party.battle_members.size
  741.     dh = STATUS_HEIGHT * $game_party.stand_by_members.size
  742.     if dh > 0
  743.       self.contents.fill_rect(0, dy, self.width - 32, dh, color)
  744.     end
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ● カーソルの更新
  748.   #--------------------------------------------------------------------------
  749.   def update_cursor
  750.     if @index < 0               # カーソルなし
  751.       self.cursor_rect.empty
  752.     elsif @index < @item_max    # 通常
  753.       super
  754.     elsif @index >= 100         # 自分
  755.       self.cursor_rect.set(0, (@index - 100) * STATUS_HEIGHT,
  756.         contents.width, STATUS_HEIGHT)
  757.     else                        # 全体
  758.       self.cursor_rect.set(0, 0, contents.width, @item_max * STATUS_HEIGHT)
  759.     end
  760.   end
  761. end

  762. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  763. #==============================================================================
  764. # ■ Window_ShopStatus
  765. #==============================================================================

  766. class Window_ShopStatus < Window_Base
  767.   #--------------------------------------------------------------------------
  768.   # ● ウィンドウ内容の作成
  769.   #--------------------------------------------------------------------------
  770.   def create_contents
  771.     self.contents.dispose
  772.     self.contents = Bitmap.new(width - 32,
  773.       WLH * ($game_party.members.size + 1) * 2)
  774.   end
  775. end

  776. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  777. #==============================================================================
  778. # ■ Window_BattleStatus
  779. #==============================================================================

  780. class Window_BattleStatus < Window_Selectable
  781.   #--------------------------------------------------------------------------
  782.   # ● ウィンドウ内容の作成
  783.   #--------------------------------------------------------------------------
  784.   def create_contents
  785.     self.contents.dispose
  786.     self.contents = Bitmap.new(width - 32,
  787.       [WLH * $game_party.members.size, height - 32].max)
  788.   end
  789.   #--------------------------------------------------------------------------
  790.   # ● リフレッシュ
  791.   #--------------------------------------------------------------------------
  792.   alias refresh_KGC_LargeParty refresh
  793.   def refresh
  794.     create_contents

  795.     refresh_KGC_LargeParty
  796.   end
  797. end

  798. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  799. #==============================================================================
  800. # □ Window_PartyFormCaption
  801. #------------------------------------------------------------------------------
  802. #  パーティ編成画面でウィンドウのキャプションを表示するウィンドウです。
  803. #==============================================================================

  804. class Window_PartyFormCaption < Window_Base
  805.   #--------------------------------------------------------------------------
  806.   # ● オブジェクト初期化
  807.   #     caption : 表示するキャプション
  808.   #--------------------------------------------------------------------------
  809.   def initialize(caption = "")
  810.     super(0, 0, KGC::LargeParty::CAPTION_WINDOW_WIDTH, WLH + 32)
  811.     @caption = caption
  812.     refresh
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● リフレッシュ
  816.   #--------------------------------------------------------------------------
  817.   def refresh
  818.     self.contents.clear
  819.     self.contents.draw_text(0, 0, width - 32, WLH, @caption)
  820.   end
  821. end

  822. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  823. #==============================================================================
  824. # □ Window_PartyFormMember
  825. #------------------------------------------------------------------------------
  826. #  パーティ編成画面でメンバーを表示するウィンドウです。
  827. #==============================================================================

  828. class Window_PartyFormMember < Window_Selectable
  829.   #--------------------------------------------------------------------------
  830.   # ○ 定数
  831.   #--------------------------------------------------------------------------
  832.   DRAW_SIZE = KGC::LargeParty::PARTY_FORM_CHARACTER_SIZE
  833.   #--------------------------------------------------------------------------
  834.   # ● 公開インスタンス変数
  835.   #--------------------------------------------------------------------------
  836.   attr_accessor :selected_index           # 選択済みインデックス
  837.   #--------------------------------------------------------------------------
  838.   # ● オブジェクト初期化
  839.   #     x       : ウィンドウの X 座標
  840.   #     y       : ウィンドウの Y 座標
  841.   #     width   : ウィンドウの幅
  842.   #     height  : ウィンドウの高さ
  843.   #     spacing : 横に項目が並ぶときの空白の幅
  844.   #--------------------------------------------------------------------------
  845.   def initialize(x, y, width, height, spacing = 8)
  846.     super(x, y, width, height, spacing)
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ● ウィンドウ内容の作成
  850.   #--------------------------------------------------------------------------
  851.   def create_contents
  852.     self.contents.dispose
  853.     self.contents = Bitmap.new(width - 32,
  854.       [height - 32, row_max * DRAW_SIZE[1]].max)
  855.   end
  856.   #--------------------------------------------------------------------------
  857.   # ● 先頭の行の取得
  858.   #--------------------------------------------------------------------------
  859.   def top_row
  860.     return self.oy / DRAW_SIZE[1]
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # ● 先頭の行の設定
  864.   #     row : 先頭に表示する行
  865.   #--------------------------------------------------------------------------
  866.   def top_row=(row)
  867.     super(row)
  868.     self.oy = self.oy / WLH * DRAW_SIZE[1]
  869.   end
  870.   #--------------------------------------------------------------------------
  871.   # ● 1 ページに表示できる行数の取得
  872.   #--------------------------------------------------------------------------
  873.   def page_row_max
  874.     return (self.height - 32) / DRAW_SIZE[1]
  875.   end
  876.   #--------------------------------------------------------------------------
  877.   # ● 項目を描画する矩形の取得
  878.   #     index : 項目番号
  879.   #--------------------------------------------------------------------------
  880.   def item_rect(index)
  881.     rect = super(index)
  882.     rect.width = DRAW_SIZE[0]
  883.     rect.height = DRAW_SIZE[1]
  884.     rect.y = index / @column_max * DRAW_SIZE[1]
  885.     return rect
  886.   end
  887.   #--------------------------------------------------------------------------
  888.   # ○ 選択アクター取得
  889.   #--------------------------------------------------------------------------
  890.   def actor
  891.     return @actors[self.index]
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ● リフレッシュ
  895.   #--------------------------------------------------------------------------
  896.   def refresh
  897.     self.contents.clear
  898.     restore_member_list
  899.     draw_member
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # ○ メンバーリスト修復
  903.   #--------------------------------------------------------------------------
  904.   def restore_member_list
  905.     # 継承先で定義
  906.   end
  907.   #--------------------------------------------------------------------------
  908.   # ○ メンバー描画
  909.   #--------------------------------------------------------------------------
  910.   def draw_member
  911.     # 継承先で定義
  912.   end
  913.   #--------------------------------------------------------------------------
  914.   # ○ 空欄アクター描画
  915.   #     index : 項目番号
  916.   #--------------------------------------------------------------------------
  917.   def draw_empty_actor(index)
  918.     # 継承先で定義
  919.   end
  920.   #--------------------------------------------------------------------------
  921.   # ○ 固定キャラ背景描画
  922.   #     index : 項目番号
  923.   #--------------------------------------------------------------------------
  924.   def draw_fixed_back(index)
  925.     rect = item_rect(index)
  926.     self.contents.fill_rect(rect, KGC::LargeParty::FIXED_COLOR)
  927.   end
  928.   #--------------------------------------------------------------------------
  929.   # ○ 選択中キャラ背景描画
  930.   #     index : 項目番号
  931.   #--------------------------------------------------------------------------
  932.   def draw_selected_back(index)
  933.     rect = item_rect(index)
  934.     self.contents.fill_rect(rect, KGC::LargeParty::SELECTED_COLOR)
  935.   end
  936. end

  937. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  938. #==============================================================================
  939. # □ Window_PartyFormBattleMember
  940. #------------------------------------------------------------------------------
  941. #  パーティ編成画面で戦闘メンバーを表示するウィンドウです。
  942. #==============================================================================

  943. class Window_PartyFormBattleMember < Window_PartyFormMember
  944.   #--------------------------------------------------------------------------
  945.   # ● 公開インスタンス変数
  946.   #--------------------------------------------------------------------------
  947.   attr_accessor :selected_index           # 選択済みインデックス
  948.   #--------------------------------------------------------------------------
  949.   # ● オブジェクト初期化
  950.   #--------------------------------------------------------------------------
  951.   def initialize
  952.     super(0, 0, 64, DRAW_SIZE[1] + 32)
  953.     column_width = DRAW_SIZE[0] + @spacing
  954.     nw = [column_width * $game_party.max_battle_member_count + 32,
  955.       Graphics.width].min
  956.     self.width = nw

  957.     @item_max = $game_party.max_battle_member_count
  958.     @column_max = width / column_width
  959.     @selected_index = nil
  960.     create_contents
  961.     refresh
  962.     self.active = true
  963.     self.index = 0
  964.   end
  965.   #--------------------------------------------------------------------------
  966.   # ○ メンバーリスト修復
  967.   #--------------------------------------------------------------------------
  968.   def restore_member_list
  969.     @actors = $game_party.battle_members
  970.   end
  971.   #--------------------------------------------------------------------------
  972.   # ○ メンバー描画
  973.   #--------------------------------------------------------------------------
  974.   def draw_member
  975.     @item_max.times { |i|
  976.       actor = @actors[i]
  977.       if actor == nil
  978.         draw_empty_actor(i)
  979.       else
  980.         if i == @selected_index
  981.           draw_selected_back(i)
  982.         elsif $game_party.actor_fixed?(actor.id)
  983.           draw_fixed_back(i)
  984.         end
  985.         rect = item_rect(i)
  986.         draw_actor_graphic(actor,
  987.           rect.x + DRAW_SIZE[0] / 2,
  988.           rect.y + DRAW_SIZE[1] - 4)
  989.       end
  990.     }
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # ○ 空欄アクター描画
  994.   #     index : 項目番号
  995.   #--------------------------------------------------------------------------
  996.   def draw_empty_actor(index)
  997.     rect = item_rect(index)
  998.     self.contents.font.color = system_color
  999.     self.contents.draw_text(rect, KGC::LargeParty::BATTLE_MEMBER_BLANK_TEXT, 1)
  1000.     self.contents.font.color = normal_color
  1001.   end
  1002. end

  1003. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1004. #==============================================================================
  1005. # □ Window_PartyFormAllMember
  1006. #------------------------------------------------------------------------------
  1007. #  パーティ編成画面で全メンバーを表示するウィンドウです。
  1008. #==============================================================================

  1009. class Window_PartyFormAllMember < Window_PartyFormMember
  1010.   #--------------------------------------------------------------------------
  1011.   # ● オブジェクト初期化
  1012.   #--------------------------------------------------------------------------
  1013.   def initialize
  1014.     super(0, 0, 64, 64)
  1015.     restore_member_list
  1016.     @item_max = $game_party.all_members.size

  1017.     # 各種サイズ計算
  1018.     column_width = DRAW_SIZE[0] + @spacing
  1019.     sw = [@item_max * column_width + 32, Graphics.width].min
  1020.     @column_max = (sw - 32) / column_width
  1021.     sh = ([@item_max - 1, 0].max / @column_max + 1) * DRAW_SIZE[1] + 32
  1022.     sh = [sh, DRAW_SIZE[1] * KGC::LargeParty::PARTY_MEMBER_WINDOW_ROW_MAX + 32].min

  1023.     # 座標・サイズ調整
  1024.     self.y += DRAW_SIZE[1] + 32
  1025.     self.width = sw
  1026.     self.height = sh

  1027.     create_contents
  1028.     refresh
  1029.     self.active = false
  1030.     self.index = 0
  1031.   end
  1032.   #--------------------------------------------------------------------------
  1033.   # ○ 選択しているアクターのインデックス取得
  1034.   #--------------------------------------------------------------------------
  1035.   def actor_index
  1036.     return @index_offset + self.index
  1037.   end
  1038.   #--------------------------------------------------------------------------
  1039.   # ○ メンバーリスト修復
  1040.   #--------------------------------------------------------------------------
  1041.   def restore_member_list
  1042.     if KGC::LargeParty::SHOW_BATTLE_MEMBER_IN_PARTY
  1043.       @actors = $game_party.all_members
  1044.       @index_offset = 0
  1045.     else
  1046.       @actors = $game_party.stand_by_members
  1047.       @index_offset = $game_party.battle_members.size
  1048.     end
  1049.   end
  1050.   #--------------------------------------------------------------------------
  1051.   # ○ メンバー描画
  1052.   #--------------------------------------------------------------------------
  1053.   def draw_member
  1054.     @item_max.times { |i|
  1055.       actor = @actors[i]
  1056.       if actor == nil
  1057.         draw_empty_actor(i)
  1058.         next
  1059.       end

  1060.       if $game_party.actor_fixed?(actor.id)
  1061.         draw_fixed_back(i)
  1062.       end
  1063.       rect = item_rect(i)
  1064.       opacity = ($game_party.battle_members.include?(actor) ? 96 : 255)
  1065.       draw_actor_graphic(actor,
  1066.         rect.x + DRAW_SIZE[0] / 2,
  1067.         rect.y + DRAW_SIZE[1] - 4,
  1068.         opacity)
  1069.     }
  1070.   end
  1071.   #--------------------------------------------------------------------------
  1072.   # ● アクターの歩行グラフィック描画
  1073.   #     actor   : アクター
  1074.   #     x       : 描画先 X 座標
  1075.   #     y       : 描画先 Y 座標
  1076.   #     opacity : 不透明度
  1077.   #--------------------------------------------------------------------------
  1078.   def draw_actor_graphic(actor, x, y, opacity = 255)
  1079.     draw_character(actor.character_name, actor.character_index, x, y, opacity)
  1080.   end
  1081.   #--------------------------------------------------------------------------
  1082.   # ● 歩行グラフィックの描画
  1083.   #     character_name  : 歩行グラフィック ファイル名
  1084.   #     character_index : 歩行グラフィック インデックス
  1085.   #     x               : 描画先 X 座標
  1086.   #     y               : 描画先 Y 座標
  1087.   #     opacity         : 不透明度
  1088.   #--------------------------------------------------------------------------
  1089.   def draw_character(character_name, character_index, x, y, opacity = 255)
  1090.     return if character_name == nil
  1091.     bitmap = Cache.character(character_name)
  1092.     sign = character_name[/^[\!\$]./]
  1093.     if sign != nil and sign.include?('$')
  1094.       cw = bitmap.width / 3
  1095.       ch = bitmap.height / 4
  1096.     else
  1097.       cw = bitmap.width / 12
  1098.       ch = bitmap.height / 8
  1099.     end
  1100.     n = character_index
  1101.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  1102.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, opacity)
  1103.   end
  1104.   #--------------------------------------------------------------------------
  1105.   # ○ 空欄アクター描画
  1106.   #     index : 項目番号
  1107.   #--------------------------------------------------------------------------
  1108.   def draw_empty_actor(index)
  1109.     rect = item_rect(index)
  1110.     self.contents.font.color = system_color
  1111.     self.contents.draw_text(rect, KGC::LargeParty::PARTY_MEMBER_BLANK_TEXT, 1)
  1112.     self.contents.font.color = normal_color
  1113.   end
  1114. end

  1115. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1116. #==============================================================================
  1117. # □ Window_PartyFormStatus
  1118. #------------------------------------------------------------------------------
  1119. #  パーティ編成画面でアクターのステータスを表示するウィンドウです。
  1120. #==============================================================================

  1121. class Window_PartyFormStatus < Window_Base
  1122.   #--------------------------------------------------------------------------
  1123.   # ● オブジェクト初期化
  1124.   #--------------------------------------------------------------------------
  1125.   def initialize
  1126.     super(0, 0, 384, 128)
  1127.     self.z = 1000
  1128.     @actor = nil
  1129.     refresh
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # ○ アクター設定
  1133.   #--------------------------------------------------------------------------
  1134.   def set_actor(actor)
  1135.     if @actor != actor
  1136.       @actor = actor
  1137.       refresh
  1138.     end
  1139.   end
  1140.   #--------------------------------------------------------------------------
  1141.   # ● リフレッシュ
  1142.   #--------------------------------------------------------------------------
  1143.   def refresh
  1144.     self.contents.clear
  1145.     if @actor == nil
  1146.       return
  1147.     end

  1148.     draw_actor_face(@actor, 0, 0)
  1149.     dx = 104
  1150.     draw_actor_name(@actor, dx, 0)
  1151.     draw_actor_level(@actor, dx, WLH * 1)
  1152.     draw_actor_hp(@actor, dx, WLH * 2)
  1153.     draw_actor_mp(@actor, dx, WLH * 3)
  1154.     4.times { |i|
  1155.       draw_actor_parameter(@actor, dx + 128, WLH * i, i, 120)
  1156.     }
  1157.   end
  1158.   #--------------------------------------------------------------------------
  1159.   # ● 能力値の描画
  1160.   #     actor : アクター
  1161.   #     x     : 描画先 X 座標
  1162.   #     y     : 描画先 Y 座標
  1163.   #     type  : 能力値の種類 (0~3)
  1164.   #     width : 描画幅
  1165.   #--------------------------------------------------------------------------
  1166.   def draw_actor_parameter(actor, x, y, type, width = 156)
  1167.     case type
  1168.     when 0
  1169.       parameter_name = Vocab::atk
  1170.       parameter_value = actor.atk
  1171.     when 1
  1172.       parameter_name = Vocab::def
  1173.       parameter_value = actor.def
  1174.     when 2
  1175.       parameter_name = Vocab::spi
  1176.       parameter_value = actor.spi
  1177.     when 3
  1178.       parameter_name = Vocab::agi
  1179.       parameter_value = actor.agi
  1180.     end
  1181.     nw = width - 36
  1182.     self.contents.font.color = system_color
  1183.     self.contents.draw_text(x, y, nw, WLH, parameter_name)
  1184.     self.contents.font.color = normal_color
  1185.     self.contents.draw_text(x + nw, y, 36, WLH, parameter_value, 2)
  1186.   end
  1187. end

  1188. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1189. #==============================================================================
  1190. # □ Window_PartyFormControl
  1191. #------------------------------------------------------------------------------
  1192. #  パーティ編成画面で操作方法を表示するウィンドウです。
  1193. #==============================================================================

  1194. class Window_PartyFormControl < Window_Base
  1195.   #--------------------------------------------------------------------------
  1196.   # ○ 定数
  1197.   #--------------------------------------------------------------------------
  1198.   MODE_BATTLE_MEMBER = 0
  1199.   MODE_SHIFT_CHANGE  = 1
  1200.   MODE_PARTY_MEMBER  = 2
  1201.   #--------------------------------------------------------------------------
  1202.   # ● オブジェクト初期化
  1203.   #--------------------------------------------------------------------------
  1204.   def initialize
  1205.     super(0, 0, Graphics.width - 384, 128)
  1206.     self.z = 1000
  1207.     @mode = MODE_BATTLE_MEMBER
  1208.     refresh
  1209.   end
  1210.   #--------------------------------------------------------------------------
  1211.   # ○ モード変更
  1212.   #--------------------------------------------------------------------------
  1213.   def mode=(value)
  1214.     @mode = value
  1215.     refresh
  1216.   end
  1217.   #--------------------------------------------------------------------------
  1218.   # ● リフレッシュ
  1219.   #--------------------------------------------------------------------------
  1220.   def refresh
  1221.     self.contents.clear
  1222.     case @mode
  1223.     when MODE_BATTLE_MEMBER  # 戦闘メンバー
  1224.       buttons = [
  1225.         "Shift:外移",
  1226.         "X鍵 :結束",
  1227.         "Z鍵 :選擇",
  1228.         "A鍵 :替換"
  1229.       ]
  1230.     when MODE_SHIFT_CHANGE   # 並び替え
  1231.       buttons = [
  1232.         "B鍵 :取消",
  1233.         "Z鍵 :選擇",
  1234.         "B鍵 :確認"
  1235.       ]
  1236.     when MODE_PARTY_MEMBER   # パーティメンバー
  1237.       buttons = [
  1238.         "X鍵 :取消",
  1239.         "Z鍵 :確認"
  1240.       ]
  1241.     else
  1242.       return
  1243.     end

  1244.     buttons.each_with_index { |c, i|
  1245.       self.contents.draw_text(0, WLH * i, width - 32, WLH, c)
  1246.     }
  1247.   end
  1248. end

  1249. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1250. #==============================================================================
  1251. # ■ Scene_Title
  1252. #==============================================================================

  1253. class Scene_Title < Scene_Base
  1254.   #--------------------------------------------------------------------------
  1255.   # ● 各種ゲームオブジェクトの作成
  1256.   #--------------------------------------------------------------------------
  1257.   alias create_game_objects_KGC_LargeParty create_game_objects
  1258.   def create_game_objects
  1259.     create_game_objects_KGC_LargeParty

  1260.     if KGC::LargeParty::DEFAULT_PARTYFORM_ENABLED
  1261.       $game_switches[KGC::LargeParty::PARTYFORM_SWITCH] = true
  1262.       $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH] = true
  1263.     end
  1264.   end
  1265. end

  1266. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1267. #==============================================================================
  1268. # ■ Scene_Map
  1269. #==============================================================================

  1270. class Scene_Map < Scene_Base
  1271.   #--------------------------------------------------------------------------
  1272.   # ● 画面切り替えの実行
  1273.   #--------------------------------------------------------------------------
  1274.   alias update_scene_change_KGC_LargeParty update_scene_change
  1275.   def update_scene_change
  1276.     return if $game_player.moving?    # プレイヤーの移動中?

  1277.     if $game_temp.next_scene == :partyform
  1278.       call_partyform
  1279.       return
  1280.     end

  1281.     update_scene_change_KGC_LargeParty
  1282.   end
  1283.   #--------------------------------------------------------------------------
  1284.   # ○ パーティ編成画面への切り替え
  1285.   #--------------------------------------------------------------------------
  1286.   def call_partyform
  1287.     $game_temp.next_scene = nil
  1288.     $scene = Scene_PartyForm.new(0, Scene_PartyForm::HOST_MAP)
  1289.   end
  1290. end

  1291. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1292. #==============================================================================
  1293. # ■ Scene_Menu
  1294. #==============================================================================

  1295. class Scene_Menu < Scene_Base
  1296.   if KGC::LargeParty::USE_MENU_PARTYFORM_COMMAND
  1297.   #--------------------------------------------------------------------------
  1298.   # ● コマンドウィンドウの作成
  1299.   #--------------------------------------------------------------------------
  1300.   alias create_command_window_KGC_LargeParty create_command_window
  1301.   def create_command_window
  1302.     create_command_window_KGC_LargeParty

  1303.     return if $imported["CustomMenuCommand"]

  1304.     @__command_partyform_index =
  1305.       @command_window.add_command(Vocab.partyform)
  1306.     @command_window.draw_item(@__command_partyform_index,
  1307.       $game_party.partyform_enable?)
  1308.     if @command_window.oy > 0
  1309.       @command_window.oy -= Window_Base::WLH
  1310.     end
  1311.     @command_window.index = @menu_index
  1312.   end
  1313.   end
  1314.   #--------------------------------------------------------------------------
  1315.   # ● コマンド選択の更新
  1316.   #--------------------------------------------------------------------------
  1317.   alias update_command_selection_KGC_LargeParty update_command_selection
  1318.   def update_command_selection
  1319.     current_menu_index = @__command_partyform_index
  1320.     call_partyform_flag = false

  1321.     if Input.trigger?(Input::C)
  1322.       case @command_window.index
  1323.       when @__command_partyform_index  # パーティ編成
  1324.         call_partyform_flag = true
  1325.       end
  1326.     # パーティ編成ボタン押下
  1327.     elsif KGC::LargeParty::MENU_PARTYFORM_BUTTON != nil &&
  1328.         Input.trigger?(KGC::LargeParty::MENU_PARTYFORM_BUTTON)
  1329.       call_partyform_flag = true
  1330.       current_menu_index = @command_window.index if current_menu_index == nil
  1331.     end

  1332.     # パーティ編成画面に移行
  1333.     if call_partyform_flag
  1334.       if $game_party.members.size == 0 || !$game_party.partyform_enable?
  1335.         Sound.play_buzzer
  1336.         return
  1337.       end
  1338.       Sound.play_decision
  1339.       $scene = Scene_PartyForm.new(current_menu_index)
  1340.       return
  1341.     end

  1342.     update_command_selection_KGC_LargeParty
  1343.   end
  1344. end

  1345. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1346. #==============================================================================
  1347. # ■ Scene_Shop
  1348. #==============================================================================

  1349. unless $imported["HelpExtension"]
  1350. class Scene_Shop < Scene_Base
  1351.   #--------------------------------------------------------------------------
  1352.   # ● フレーム更新
  1353.   #--------------------------------------------------------------------------
  1354.   alias udpate_KGC_LargeParty update
  1355.   def update
  1356.     # スクロール判定
  1357.     if !@command_window.active &&
  1358.         KGC::LargeParty::SHOP_STATUS_SCROLL_BUTTON != nil &&
  1359.         Input.press?(KGC::LargeParty::SHOP_STATUS_SCROLL_BUTTON)
  1360.       super
  1361.       update_menu_background
  1362.       update_scroll_status
  1363.       return
  1364.     else
  1365.       @status_window.cursor_rect.empty
  1366.     end

  1367.     udpate_KGC_LargeParty
  1368.   end
  1369.   #--------------------------------------------------------------------------
  1370.   # ○ ステータスウィンドウのスクロール処理
  1371.   #--------------------------------------------------------------------------
  1372.   def update_scroll_status
  1373.     # ステータスウィンドウにカーソルを表示
  1374.     @status_window.cursor_rect.width = @status_window.contents.width
  1375.     @status_window.cursor_rect.height = @status_window.height - 32
  1376.     @status_window.update

  1377.     if Input.press?(Input::UP)
  1378.       @status_window.oy = [@status_window.oy - 4, 0].max
  1379.     elsif Input.press?(Input::DOWN)
  1380.       max_pos = [@status_window.contents.height -
  1381.         (@status_window.height - 32), 0].max
  1382.       @status_window.oy = [@status_window.oy + 4, max_pos].min
  1383.     end
  1384.   end
  1385. end
  1386. end

  1387. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1388. #==============================================================================
  1389. # □ Scene_PartyForm
  1390. #------------------------------------------------------------------------------
  1391. #  パーティ編成画面の処理を行うクラスです。
  1392. #==============================================================================

  1393. class Scene_PartyForm < Scene_Base
  1394.   #--------------------------------------------------------------------------
  1395.   # ○ 定数
  1396.   #--------------------------------------------------------------------------
  1397.   CAPTION_OFFSET = 40  # キャプションウィンドウの位置補正
  1398.   HOST_MENU   = 0      # 呼び出し元 : メニュー
  1399.   HOST_MAP    = 1      # 呼び出し元 : マップ
  1400.   HOST_BATTLE = 2      # 呼び出し元 : 戦闘
  1401.   #--------------------------------------------------------------------------
  1402.   # ● オブジェクト初期化
  1403.   #     menu_index : コマンドのカーソル初期位置
  1404.   #     host_scene : 呼び出し元 (0..メニュー  1..マップ  2..戦闘)
  1405.   #--------------------------------------------------------------------------
  1406.   def initialize(menu_index = 0, host_scene = HOST_MENU)
  1407.     @menu_index = menu_index
  1408.     @host_scene = host_scene
  1409.   end
  1410.   #--------------------------------------------------------------------------
  1411.   # ● 開始処理
  1412.   #--------------------------------------------------------------------------
  1413.   def start
  1414.     super
  1415.     create_menu_background

  1416.     create_windows
  1417.     create_confirm_window
  1418.     adjust_window_location

  1419.     # 編成前のパーティを保存
  1420.     @battle_actors = $game_party.battle_members.dup
  1421.     @party_actors  = $game_party.all_members.dup
  1422.   end
  1423.   #--------------------------------------------------------------------------
  1424.   # ○ ウィンドウの作成
  1425.   #--------------------------------------------------------------------------
  1426.   def create_windows
  1427.     # 編成用ウィンドウを作成
  1428.     @battle_member_window = Window_PartyFormBattleMember.new
  1429.     @party_member_window  = Window_PartyFormAllMember.new
  1430.     @status_window        = Window_PartyFormStatus.new
  1431.     @status_window.set_actor(@battle_member_window.actor)

  1432.     # その他のウィンドウを作成
  1433.     @battle_member_caption_window =
  1434.       Window_PartyFormCaption.new(KGC::LargeParty::BATTLE_MEMBER_CAPTION)
  1435.     @party_member_caption_window =
  1436.       Window_PartyFormCaption.new(KGC::LargeParty::PARTY_MEMBER_CAPTION)
  1437.     @control_window = Window_PartyFormControl.new
  1438.   end
  1439.   #--------------------------------------------------------------------------
  1440.   # ○ 確認ウィンドウの作成
  1441.   #--------------------------------------------------------------------------
  1442.   def create_confirm_window
  1443.     commands = KGC::LargeParty::CONFIRM_WINDOW_COMMANDS
  1444.     @confirm_window =
  1445.       Window_Command.new(KGC::LargeParty::CONFIRM_WINDOW_WIDTH, commands)
  1446.     @confirm_window.index    = 0
  1447.     @confirm_window.openness = 0
  1448.     @confirm_window.active   = false
  1449.   end
  1450.   #--------------------------------------------------------------------------
  1451.   # ○ ウィンドウの座標調整
  1452.   #--------------------------------------------------------------------------
  1453.   def adjust_window_location
  1454.     # 基準座標を計算
  1455.     base_x = [@battle_member_window.width, @party_member_window.width].max
  1456.     base_x = [(Graphics.width - base_x) / 2, 0].max
  1457.     base_y = @battle_member_window.height + @party_member_window.height +
  1458.       @status_window.height + CAPTION_OFFSET * 2
  1459.     base_y = [(Graphics.height - base_y) / 2, 0].max
  1460.     base_z = @menuback_sprite.z + 1000

  1461.     # 編成用ウィンドウの座標をセット
  1462.     @battle_member_window.x = base_x
  1463.     @battle_member_window.y = base_y + CAPTION_OFFSET
  1464.     @battle_member_window.z = base_z
  1465.     @party_member_window.x = base_x
  1466.     @party_member_window.y = @battle_member_window.y +
  1467.       @battle_member_window.height + CAPTION_OFFSET
  1468.     @party_member_window.z = base_z
  1469.     @status_window.x = 0
  1470.     @status_window.y = @party_member_window.y + @party_member_window.height
  1471.     @status_window.z = base_z

  1472.     # その他のウィンドウの座標をセット
  1473.     @battle_member_caption_window.x = [base_x - 16, 0].max
  1474.     @battle_member_caption_window.y = @battle_member_window.y - CAPTION_OFFSET
  1475.     @battle_member_caption_window.z = base_z + 500
  1476.     @party_member_caption_window.x = [base_x - 16, 0].max
  1477.     @party_member_caption_window.y = @party_member_window.y - CAPTION_OFFSET
  1478.     @party_member_caption_window.z = base_z + 500
  1479.     @control_window.x = @status_window.width
  1480.     @control_window.y = @status_window.y
  1481.     @control_window.z = base_z

  1482.     @confirm_window.x = (Graphics.width - @confirm_window.width) / 2
  1483.     @confirm_window.y = (Graphics.height - @confirm_window.height) / 2
  1484.     @confirm_window.z = base_z + 1000
  1485.   end
  1486.   #--------------------------------------------------------------------------
  1487.   # ● 終了処理
  1488.   #--------------------------------------------------------------------------
  1489.   def terminate
  1490.     super
  1491.     dispose_menu_background
  1492.     @battle_member_window.dispose
  1493.     @party_member_window.dispose
  1494.     @status_window.dispose
  1495.     @battle_member_caption_window.dispose
  1496.     @party_member_caption_window.dispose
  1497.     @control_window.dispose
  1498.     @confirm_window.dispose
  1499.   end
  1500.   #--------------------------------------------------------------------------
  1501.   # ● メニュー画面系の背景作成
  1502.   #--------------------------------------------------------------------------
  1503.   def create_menu_background
  1504.     super
  1505.     @menuback_sprite.z = 20000
  1506.   end
  1507.   #--------------------------------------------------------------------------
  1508.   # ● 元の画面へ戻る
  1509.   #--------------------------------------------------------------------------
  1510.   def return_scene
  1511.     case @host_scene
  1512.     when HOST_MENU
  1513.       $scene = Scene_Menu.new(@menu_index)
  1514.     when HOST_MAP
  1515.       $scene = Scene_Map.new
  1516.     when HOST_BATTLE
  1517.       $scene = Scene_Battle.new
  1518.     end
  1519.     $game_player.refresh
  1520.   end
  1521.   #--------------------------------------------------------------------------
  1522.   # ● フレーム更新
  1523.   #--------------------------------------------------------------------------
  1524.   def update
  1525.     super
  1526.     update_menu_background
  1527.     update_window
  1528.     if @battle_member_window.active
  1529.       update_battle_member
  1530.     elsif @party_member_window.active
  1531.       update_party_member
  1532.     elsif @confirm_window.active
  1533.       update_confirm
  1534.     end
  1535.   end
  1536.   #--------------------------------------------------------------------------
  1537.   # ○ ウィンドウ更新
  1538.   #--------------------------------------------------------------------------
  1539.   def update_window
  1540.     @battle_member_window.update
  1541.     @party_member_window.update
  1542.     @status_window.update
  1543.     @battle_member_caption_window.update
  1544.     @party_member_caption_window.update
  1545.     @control_window.update
  1546.     @confirm_window.update
  1547.   end
  1548.   #--------------------------------------------------------------------------
  1549.   # ○ ウィンドウ再描画
  1550.   #--------------------------------------------------------------------------
  1551.   def refresh_window
  1552.     @battle_member_window.refresh
  1553.     @party_member_window.refresh
  1554.   end
  1555.   #--------------------------------------------------------------------------
  1556.   # ○ フレーム更新 (戦闘メンバーウィンドウがアクティブの場合)
  1557.   #--------------------------------------------------------------------------
  1558.   def update_battle_member
  1559.     @status_window.set_actor(@battle_member_window.actor)
  1560.     if Input.trigger?(Input::A)
  1561.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1562.         actor = @battle_member_window.actor
  1563.         # アクターを外せない場合
  1564.         if actor == nil || $game_party.actor_fixed?(actor.id)
  1565.           Sound.play_buzzer
  1566.           return
  1567.         end
  1568.         # アクターを外す
  1569.         Sound.play_decision
  1570.         actors = $game_party.battle_members
  1571.         actors.delete_at(@battle_member_window.index)
  1572.         $game_party.set_battle_member(actors)
  1573.         refresh_window
  1574.       end
  1575.     elsif Input.trigger?(Input::B)
  1576.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1577.         # 確認ウィンドウに切り替え
  1578.         Sound.play_cancel
  1579.         show_confirm_window
  1580.       else                                            # 並び替え中
  1581.         # 並び替え解除
  1582.         Sound.play_cancel
  1583.         @battle_member_window.selected_index = nil
  1584.         @battle_member_window.refresh
  1585.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1586.       end
  1587.     elsif Input.trigger?(Input::C)
  1588.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1589.         actor = @battle_member_window.actor
  1590.         # アクターを外せない場合
  1591.         if actor != nil && $game_party.actor_fixed?(actor.id)
  1592.           Sound.play_buzzer
  1593.           return
  1594.         end
  1595.         # パーティメンバーウィンドウに切り替え
  1596.         Sound.play_decision
  1597.         @battle_member_window.active = false
  1598.         @party_member_window.active = true
  1599.         @control_window.mode = Window_PartyFormControl::MODE_PARTY_MEMBER
  1600.       else                                            # 並び替え中
  1601.         unless can_change_shift?(@battle_member_window.actor)
  1602.           Sound.play_buzzer
  1603.           return
  1604.         end
  1605.         # 並び替え実行
  1606.         Sound.play_decision
  1607.         index1 = @battle_member_window.selected_index
  1608.         index2 = @battle_member_window.index
  1609.         change_shift(index1, index2)
  1610.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1611.       end
  1612.     elsif Input.trigger?(Input::X)
  1613.       # 並び替え不可能な場合
  1614.       unless can_change_shift?(@battle_member_window.actor)
  1615.         Sound.play_buzzer
  1616.         return
  1617.       end
  1618.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1619.         # 並び替え開始
  1620.         Sound.play_decision
  1621.         @battle_member_window.selected_index = @battle_member_window.index
  1622.         @battle_member_window.refresh
  1623.         @control_window.mode = Window_PartyFormControl::MODE_SHIFT_CHANGE
  1624.       else                                            # 並び替え中
  1625.         # 並び替え実行
  1626.         Sound.play_decision
  1627.         index1 = @battle_member_window.selected_index
  1628.         index2 = @battle_member_window.index
  1629.         change_shift(index1, index2)
  1630.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1631.       end
  1632.     end
  1633.   end
  1634.   #--------------------------------------------------------------------------
  1635.   # ○ 並び替え可否判定
  1636.   #--------------------------------------------------------------------------
  1637.   def can_change_shift?(actor)
  1638.     # 選択したアクターが存在しない、または並び替え不能な場合
  1639.     if actor == nil ||
  1640.         (KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED &&
  1641.          $game_party.actor_fixed?(actor.id))
  1642.       return false
  1643.     end
  1644.     return true
  1645.   end
  1646.   #--------------------------------------------------------------------------
  1647.   # ○ 並び替え
  1648.   #--------------------------------------------------------------------------
  1649.   def change_shift(index1, index2)
  1650.     # 位置を入れ替え
  1651.     $game_party.change_shift(index1, index2)
  1652.     # 選択済みインデックスをクリア
  1653.     @battle_member_window.selected_index = nil
  1654.     refresh_window
  1655.   end
  1656.   #--------------------------------------------------------------------------
  1657.   # ○ フレーム更新 (パーティウィンドウがアクティブの場合)
  1658.   #--------------------------------------------------------------------------
  1659.   def update_party_member
  1660.     @status_window.set_actor(@party_member_window.actor)
  1661.     if Input.trigger?(Input::B)
  1662.       Sound.play_cancel
  1663.       # 戦闘メンバーウィンドウに切り替え
  1664.       @battle_member_window.active = true
  1665.       @party_member_window.active = false
  1666.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1667.     elsif Input.trigger?(Input::C)
  1668.       actor = @party_member_window.actor
  1669.       # アクターが戦闘メンバーに含まれる場合
  1670.       if $game_party.battle_members.include?(actor)
  1671.         Sound.play_buzzer
  1672.         return
  1673.       end
  1674.       # アクターを入れ替え
  1675.       Sound.play_decision
  1676.       actors = $game_party.all_members
  1677.       battle_actors = $game_party.battle_members
  1678.       if @battle_member_window.actor != nil
  1679.         actors[@party_member_window.actor_index] = @battle_member_window.actor
  1680.         actors[@battle_member_window.index] = actor
  1681.         $game_party.set_member(actors.compact)
  1682.       end
  1683.       battle_actors[@battle_member_window.index] = actor
  1684.       $game_party.set_battle_member(battle_actors.compact)
  1685.       refresh_window
  1686.       # 戦闘メンバーウィンドウに切り替え
  1687.       @battle_member_window.active = true
  1688.       @party_member_window.active = false
  1689.       @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1690.     end
  1691.   end
  1692.   #--------------------------------------------------------------------------
  1693.   # ○ フレーム更新 (確認ウィンドウがアクティブの場合)
  1694.   #--------------------------------------------------------------------------
  1695.   def update_confirm
  1696.     if Input.trigger?(Input::B)
  1697.       Sound.play_cancel
  1698.       hide_confirm_window
  1699.     elsif Input.trigger?(Input::C)
  1700.       case @confirm_window.index
  1701.       when 0  # 編成完了
  1702.         # パーティが無効の場合
  1703.         unless battle_member_valid?
  1704.           Sound.play_buzzer
  1705.           return
  1706.         end
  1707.         Sound.play_decision
  1708.         return_scene
  1709.       when 1  # 編成中断
  1710.         Sound.play_decision
  1711.         # パーティを編成前の状態に戻す
  1712.         $game_party.set_member(@party_actors)
  1713.         $game_party.set_battle_member(@battle_actors)
  1714.         return_scene
  1715.       when 2  # キャンセル
  1716.         Sound.play_cancel
  1717.         hide_confirm_window
  1718.       end
  1719.     end
  1720.   end
  1721.   #--------------------------------------------------------------------------
  1722.   # ○ 戦闘メンバー有効判定
  1723.   #--------------------------------------------------------------------------
  1724.   def battle_member_valid?
  1725.     return false if $game_party.battle_members.size == 0  # 戦闘メンバーが空
  1726.     $game_party.battle_members.each { |actor|
  1727.       return true if actor.exist?  # 生存者がいればOK
  1728.     }
  1729.     return false
  1730.   end
  1731.   #--------------------------------------------------------------------------
  1732.   # ○ 確認ウィンドウの表示
  1733.   #--------------------------------------------------------------------------
  1734.   def show_confirm_window
  1735.     if @battle_member_window.active
  1736.       @last_active_window = @battle_member_window
  1737.     else
  1738.       @last_active_window = @party_member_window
  1739.     end
  1740.     @battle_member_window.active = false
  1741.     @party_member_window.active = false

  1742.     @confirm_window.draw_item(0, battle_member_valid?)
  1743.     @confirm_window.open
  1744.     @confirm_window.active = true
  1745.   end
  1746.   #--------------------------------------------------------------------------
  1747.   # ○ 確認ウィンドウの非表示
  1748.   #--------------------------------------------------------------------------
  1749.   def hide_confirm_window
  1750.     @confirm_window.active = false
  1751.     @confirm_window.close
  1752.     @last_active_window.active = true
  1753.   end
  1754. end

  1755. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1756. #==============================================================================
  1757. # ■ Scene_Battle
  1758. #==============================================================================

  1759. class Scene_Battle < Scene_Base
  1760.   #--------------------------------------------------------------------------
  1761.   # ● メッセージ表示が終わるまでウェイト
  1762.   #--------------------------------------------------------------------------
  1763.   alias wait_for_message_KGC_LargeParty wait_for_message
  1764.   def wait_for_message
  1765.     return if @ignore_wait_for_message  # メッセージ終了までのウェイトを無視

  1766.     wait_for_message_KGC_LargeParty
  1767.   end
  1768.   #--------------------------------------------------------------------------
  1769.   # ● レベルアップの表示
  1770.   #--------------------------------------------------------------------------
  1771.   alias display_level_up_KGC_LargeParty display_level_up
  1772.   def display_level_up
  1773.     @ignore_wait_for_message = true

  1774.     display_level_up_KGC_LargeParty

  1775.     exp = $game_troop.exp_total * KGC::LargeParty::STAND_BY_EXP_RATE / 1000
  1776.     $game_party.stand_by_members.each { |actor|
  1777.       if actor.exist?
  1778.         actor.gain_exp(exp, KGC::LargeParty::SHOW_STAND_BY_LEVEL_UP)
  1779.       end
  1780.     }
  1781.     @ignore_wait_for_message = false
  1782.     wait_for_message
  1783.   end
  1784.   #--------------------------------------------------------------------------
  1785.   # ● パーティコマンド選択の開始
  1786.   #--------------------------------------------------------------------------
  1787.   alias start_party_command_selection_KGC_LargeParty start_party_command_selection
  1788.   def start_party_command_selection
  1789.     if $game_temp.in_battle
  1790.       @status_window.index = 0
  1791.     end

  1792.     start_party_command_selection_KGC_LargeParty
  1793.   end

  1794.   if KGC::LargeParty::USE_BATTLE_PARTYFORM
  1795.   #--------------------------------------------------------------------------
  1796.   # ● 情報表示ビューポートの作成
  1797.   #--------------------------------------------------------------------------
  1798.   alias create_info_viewport_KGC_LargeParty create_info_viewport
  1799.   def create_info_viewport
  1800.     create_info_viewport_KGC_LargeParty

  1801.     @__command_partyform_index =
  1802.       @party_command_window.add_command(Vocab.partyform_battle)
  1803.     @party_command_window.draw_item(@__command_partyform_index,
  1804.       $game_party.battle_partyform_enable?)
  1805.   end
  1806.   #--------------------------------------------------------------------------
  1807.   # ● パーティコマンド選択の更新
  1808.   #--------------------------------------------------------------------------
  1809.   alias update_party_command_selection_KGC_LargeParty update_party_command_selection
  1810.   def update_party_command_selection
  1811.     if Input.trigger?(Input::C)
  1812.       case @party_command_window.index
  1813.       when @__command_partyform_index  # パーティ編成
  1814.         unless $game_party.battle_partyform_enable?
  1815.           Sound.play_buzzer
  1816.           return
  1817.         end
  1818.         Sound.play_decision
  1819.         process_partyform
  1820.         return
  1821.       end
  1822.     end

  1823.     update_party_command_selection_KGC_LargeParty
  1824.   end
  1825.   #--------------------------------------------------------------------------
  1826.   # ○ パーティ編成の処理
  1827.   #--------------------------------------------------------------------------
  1828.   def process_partyform
  1829.     Graphics.freeze
  1830.     snapshot_for_background
  1831.     $scene = Scene_PartyForm.new(0, Scene_PartyForm::HOST_BATTLE)
  1832.     $scene.main
  1833.     $scene = self
  1834.     @status_window.refresh
  1835.     perform_transition
  1836.   end
  1837.   end
  1838. end
复制代码
代码太长,就用文本发了
使用方便,就是日文的。。。

评分

参与人数 1星屑 -200 收起 理由
八云紫 -200 挖坟,脚本使用脚本框.

查看全部评分

【广告签名已被咔嚓】
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-13 10:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表