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

Project1

 找回密码
 注册会员
搜索
查看: 984|回复: 3
打印 上一主题 下一主题

[已经解决] 一个战斗人数的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
66 小时
注册时间
2011-8-12
帖子
14
跳转到指定楼层
1
发表于 2013-8-21 17:20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
怎么让上场战斗的人数变为1个 并且让队伍中第2个队员上场战斗?

Lv1.梦旅人

梦石
0
星屑
69
在线时间
114 小时
注册时间
2013-4-10
帖子
11
来自 2楼
发表于 2013-8-21 21:06:17 | 只看该作者
本帖最后由 a7790460 于 2013-8-21 21:08 编辑



RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 多人数パーティ - KGC_LargeParty ◆ VX ◆
  3. #_/    ◇ Last update : 2009/11/01 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  5人以上の大規模パーティを構築可能にします。
  6. #_/============================================================================
  7. #_/ 【特殊システム】≪パーティ編成画面2≫ より上に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  9.  
  10. #==============================================================================
  11. # ★ カスタマイズ項目 - Customize BEGIN ★
  12. #==============================================================================
  13.  
  14. module KGC
  15. module LargeParty
  16.   # ◆ パーティ編成許可を表すスイッチ番号
  17.   #  このスイッチの ON/OFF でパーティ編成の 許可/不許可 を切り替えます。
  18.   PARTYFORM_SWITCH          = 1
  19.   # ◆ 戦闘中のパーティ編成許可を表すスイッチ番号
  20.   #  ↑と異なる番号を指定すると、戦闘中のみの入れ替え可否を設定できます。
  21.   BATTLE_PARTYFORM_SWITCH   = 1
  22.   # ◆ デフォルトの編成許可フラグ
  23.   #  true にすると、「ニューゲーム」選択時に両方のパーティ編成許可スイッチが
  24.   #  自動的に ON になります。
  25.   DEFAULT_PARTYFORM_ENABLED = true
  26.  
  27.   # ◆ 戦闘メンバー最大数 (デフォルト値)
  28.   #  5 以上にすると、戦闘画面のステータスがやや見辛くなります。
  29.   MAX_BATTLE_MEMBERS = 5
  30.   # ◆ パーティメンバー最大数
  31.   #  Game_Party::MAX_MEMBERS を上書きします。
  32.   #  100 以上にすると [Window_MenuStatus] がバグります。
  33.   MAX_MEMBERS = 99
  34.  
  35.   # ◆ 固定メンバーの並び替えを禁止
  36.   #  スクリプトからの操作以外では並び替えできなくなります。
  37.   FORBID_CHANGE_SHIFT_FIXED = true
  38.  
  39.   # ◆ 待機メンバーの背景色
  40.   #  色を変えない場合は  Color.new(0, 0, 0, 0)
  41.   STAND_BY_COLOR = Color.new(0, 0, 0, 128)
  42.   # ◆ 固定メンバーの背景色
  43.   FIXED_COLOR    = Color.new(255, 128, 64, 96)
  44.   # ◆ 並び替え時の背景色
  45.   SELECTED_COLOR = Color.new(64, 255, 128, 128)
  46.  
  47.   # ◆ パーティ編成ボタン (メニュー画面用)
  48.   #  メニュー画面でこのボタンを押すと、パーティ編成画面に移行します。
  49.   #  使用しない場合は nil
  50.   MENU_PARTYFORM_BUTTON      = Input::A
  51.   # ◆ メニュー画面にパーティ編成コマンドを追加する
  52.   #  追加する場所は、メニューコマンドの最下部です。
  53.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  54.   USE_MENU_PARTYFORM_COMMAND = true
  55.   # ◆ メニュー画面のパーティ編成コマンドの名称
  56.   VOCAB_MENU_PARTYFORM       = "パーティ編成"
  57.  
  58.   # ◆ 戦闘中にパーティ編成コマンドを使用する
  59.   #  追加する場所は、パーティコマンドの最下部(「逃げる」の下)です。
  60.   USE_BATTLE_PARTYFORM   = true
  61.   # ◆ 戦闘中のパーティ編成コマンドの名称
  62.   VOCAB_BATTLE_PARTYFORM = "入れ替え"
  63.  
  64.   # ◆ 全滅時の自動出撃を使用する
  65.   #   true  : 入れ替え可能なら生存者が出撃 (戦闘中の編成を許可する必要あり)
  66.   #   false : 全滅したら終了
  67.   ENABLE_DEFEAT_LAUNCH  = true
  68.   # ◆ 全滅時の入れ替えメッセージ
  69.   #  %s : 出撃者名
  70.   DEFEAT_LAUNCH_MESSAGE = "%sが飛び出した!"
  71.  
  72.   # ◆ 編成画面のキャラクター描画サイズ [幅, 高さ]
  73.   #  アクターの歩行グラフィックのサイズに応じて書き換えてください。
  74.   PARTY_FORM_CHARACTER_SIZE   = [40, 48]
  75.   # ◆ 編成画面の戦闘メンバーウィンドウの空欄に表示するテキスト
  76.   BATTLE_MEMBER_BLANK_TEXT    = "EMPTY"
  77.   # ◆ 編成画面のパーティメンバーウィンドウの最大行数
  78.   #  ステータスウィンドウが画面からはみ出る場合は、
  79.   #  この値を 1 にしてください。
  80.   PARTY_MEMBER_WINDOW_ROW_MAX = 2
  81.   # ◆ 編成画面のパーティメンバーウィンドウに戦闘メンバーを表示する
  82.   SHOW_BATTLE_MEMBER_IN_PARTY = false
  83.   # ◆ 編成画面のパーティメンバーウィンドウの空欄に表示するテキスト
  84.   PARTY_MEMBER_BLANK_TEXT     = "-"
  85.  
  86.   # ◆ 編成画面のキャプションウィンドウの幅
  87.   CAPTION_WINDOW_WIDTH  = 192
  88.   # ◆ 編成画面の戦闘メンバーウィンドウのキャプション
  89.   BATTLE_MEMBER_CAPTION = "戦闘メンバー"
  90.  
  91.   if SHOW_BATTLE_MEMBER_IN_PARTY
  92.     # ◆ 編成画面のパーティメンバーウィンドウのキャプション
  93.     #  SHOW_BATTLE_MEMBER_IN_PARTY = true のとき
  94.     PARTY_MEMBER_CAPTION = "パーティメンバー"
  95.   else
  96.     # ◆ 編成画面のパーティメンバーウィンドウのキャプション
  97.     #  SHOW_BATTLE_MEMBER_IN_PARTY = false のとき
  98.     PARTY_MEMBER_CAPTION = "待機メンバー"
  99.   end
  100.  
  101.   # ◆ 編成確認ウィンドウの幅
  102.   CONFIRM_WINDOW_WIDTH    = 160
  103.   # ◆ 編成確認ウィンドウの文字列
  104.   #  ※コマンド数・順番を変更するとバグります。
  105.   CONFIRM_WINDOW_COMMANDS = ["編成完了", "編成中止", "キャンセル"]
  106.  
  107.   # ◆ ショップ画面のステータスウィンドウスクロール時に使用するボタン
  108.   #  このボタンを押している間、上下ボタンでスクロールできます。
  109.   #  スクロールを無効にする場合は nil を指定。
  110.   #  ≪ヘルプウィンドウ機能拡張≫ 併用時は、上に導入したものを優先。
  111.   SHOP_STATUS_SCROLL_BUTTON = Input::A
  112.  
  113.   # ◆ 待機メンバー獲得経験値割合【単位:‰(千分率 1‰=0.1%)】
  114.   #  500 なら 50.0% です。
  115.   STAND_BY_EXP_RATE = 500
  116.   # ◆ リザルト画面で待機メンバーのレベルアップを表示する
  117.   #  true  : 待機メンバーのレベルアップを表示。
  118.   #  false : 戦闘メンバーのみ表示。
  119.   SHOW_STAND_BY_LEVEL_UP = true
  120.   # ◆ 戦闘以外でも待機メンバーを表示する
  121.   #  true  : 戦闘以外では常に全員を表示。
  122.   #  false : 入れ替え時以外は、待機メンバーをいないものとして扱う。
  123.   SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE = true
  124. end
  125. end
  126.  
  127. #==============================================================================
  128. # ☆ カスタマイズ項目終了 - Customize END ☆
  129. #==============================================================================
  130.  
  131. $imported = {} if $imported == nil
  132. $imported["LargeParty"] = true
  133.  
  134. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  135.  
  136. #==============================================================================
  137. # □ KGC::Commands
  138. #==============================================================================
  139.  
  140. module KGC
  141. module Commands
  142.   # メンバーのソート形式
  143.   SORT_BY_ID    = 0  # ID順
  144.   SORT_BY_NAME  = 1  # 名前順
  145.   SORT_BY_LEVEL = 2  # レベル順
  146.  
  147.   module_function
  148.   #--------------------------------------------------------------------------
  149.   # ○ パーティ編成画面の呼び出し
  150.   #--------------------------------------------------------------------------
  151.   def call_partyform
  152.     return if $game_temp.in_battle
  153.     $game_temp.next_scene = :partyform
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 戦闘メンバー最大数を設定
  157.   #     value : 人数 (省略した場合はデフォルト値を使用)
  158.   #--------------------------------------------------------------------------
  159.   def set_max_battle_member_count(value = nil)
  160.     $game_party.max_battle_member_count = value
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ 全メンバー数取得
  164.   #     variable_id : 取得した値を代入する変数の ID
  165.   #--------------------------------------------------------------------------
  166.   def get_all_member_count(variable_id = 0)
  167.     n = $game_party.all_members.size
  168.     if variable_id > 0
  169.       $game_variables[variable_id] = n
  170.       $game_map.need_refresh = true
  171.     end
  172.     return n
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ○ 戦闘メンバー数取得
  176.   #     variable_id : 取得した値を代入する変数の ID
  177.   #--------------------------------------------------------------------------
  178.   def get_battle_member_count(variable_id = 0)
  179.     n = $game_party.battle_members.size
  180.     if variable_id > 0
  181.       $game_variables[variable_id] = n
  182.       $game_map.need_refresh = true
  183.     end
  184.     return n
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ○ 待機メンバー数取得
  188.   #     variable_id : 取得した値を代入する変数の ID
  189.   #--------------------------------------------------------------------------
  190.   def get_stand_by_member_count(variable_id = 0)
  191.     n = $game_party.stand_by_members.size
  192.     if variable_id > 0
  193.       $game_variables[variable_id] = n
  194.       $game_map.need_refresh = true
  195.     end
  196.     return n
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ○ パーティ人数が一杯か
  200.   #--------------------------------------------------------------------------
  201.   def party_full?
  202.     return $game_party.full?
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ パーティ編成可否を設定
  206.   #     enabled : 有効フラグ (省略時 : true)
  207.   #--------------------------------------------------------------------------
  208.   def permit_partyform(enabled = true)
  209.     $game_switches[KGC::LargeParty::PARTYFORM_SWITCH] = enabled
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ○ 戦闘中のパーティ編成可否を設定
  213.   #     enabled : 有効フラグ (省略時 : true)
  214.   #--------------------------------------------------------------------------
  215.   def permit_battle_partyform(enabled = true)
  216.     $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH] = enabled
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ アクターの固定状態を設定
  220.   #     actor_id : アクター ID
  221.   #     fixed    : 固定フラグ (省略時 : true)
  222.   #--------------------------------------------------------------------------
  223.   def fix_actor(actor_id, fixed = true)
  224.     $game_party.fix_actor(actor_id, fixed)
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ○ 並び替え
  228.   #    メンバーの index1 番目と index2 番目を入れ替える
  229.   #--------------------------------------------------------------------------
  230.   def change_party_shift(index1, index2)
  231.     $game_party.change_shift(index1, index2)
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ メンバー整列 (昇順)
  235.   #     sort_type : ソート形式 (SORT_BY_xxx)
  236.   #     reverse   : true だと降順
  237.   #--------------------------------------------------------------------------
  238.   def sort_party_member(sort_type = SORT_BY_ID, reverse = false)
  239.     $game_party.sort_member(sort_type, reverse)
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ○ 待機メンバーの ID を取得
  243.   #--------------------------------------------------------------------------
  244.   def get_stand_by_member_ids
  245.     result = []
  246.     $game_party.stand_by_members.each { |actor| result << actor.id }
  247.     return result
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ○ アクターが待機メンバーか
  251.   #     actor_id : アクター ID
  252.   #--------------------------------------------------------------------------
  253.   def stand_by_member?(actor_id)
  254.     return get_stand_by_member_ids.include?(actor_id)
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ○ アクターを戦闘メンバーに加える
  258.   #     actor_id : アクター ID
  259.   #     index    : 追加位置 (省略時は最後尾)
  260.   #--------------------------------------------------------------------------
  261.   def add_battle_member(actor_id, index = nil)
  262.     $game_party.add_battle_member(actor_id, index)
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ○ アクターを戦闘メンバーから外す
  266.   #     actor_id : アクター ID
  267.   #--------------------------------------------------------------------------
  268.   def remove_battle_member(actor_id)
  269.     $game_party.remove_battle_member(actor_id)
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ○ 固定アクター以外を戦闘メンバーから外す
  273.   #--------------------------------------------------------------------------
  274.   def remove_all_battle_member
  275.     $game_party.remove_all_battle_member
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ○ ランダム出撃
  279.   #--------------------------------------------------------------------------
  280.   def random_launch
  281.     new_battle_members = $game_party.fixed_members
  282.     candidates = $game_party.all_members - new_battle_members
  283.     num = [$game_party.max_battle_member_count - new_battle_members.size,
  284.       candidates.size].min
  285.     return if num <= 0
  286.  
  287.     # ランダムに選ぶ
  288.     ary = (0...candidates.size).to_a.sort_by { rand }
  289.     ary[0...num].each { |i| new_battle_members << candidates[i] }
  290.     $game_party.set_battle_member(new_battle_members)
  291.   end
  292. end
  293. end
  294.  
  295. class Game_Interpreter
  296.   include KGC::Commands
  297. end
  298.  
  299. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  300.  
  301. #==============================================================================
  302. # ■ Vocab
  303. #==============================================================================
  304.  
  305. module Vocab
  306.   # 全滅時の入れ替えメッセージ
  307.   DefeatLaunch = KGC::LargeParty::DEFEAT_LAUNCH_MESSAGE
  308.  
  309.   # 「パーティ編成」コマンド名 (メニュー)
  310.   def self.partyform
  311.     return KGC::LargeParty::VOCAB_MENU_PARTYFORM
  312.   end
  313.  
  314.   # 「パーティ編成」コマンド名 (戦闘)
  315.   def self.partyform_battle
  316.     return KGC::LargeParty::VOCAB_BATTLE_PARTYFORM
  317.   end
  318. end
  319.  
  320. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  321.  
  322. #==============================================================================
  323. # ■ Game_Actor
  324. #==============================================================================
  325.  
  326. class Game_Actor < Game_Battler
  327.   #--------------------------------------------------------------------------
  328.   # ○ パーティ内インデックス取得
  329.   #--------------------------------------------------------------------------
  330.   def party_index
  331.     return $game_party.all_members.index(self)
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ○ 戦闘メンバーか判定
  335.   #--------------------------------------------------------------------------
  336.   def battle_member?
  337.     return $game_party.battle_members.include?(self)
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ○ 固定メンバーか判定
  341.   #--------------------------------------------------------------------------
  342.   def fixed_member?
  343.     return $game_party.fixed_members.include?(self)
  344.   end
  345. end
  346.  
  347. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  348.  
  349. #==============================================================================
  350. # ■ Game_Party
  351. #==============================================================================
  352.  
  353. class Game_Party
  354.   #--------------------------------------------------------------------------
  355.   # ● 定数
  356.   #--------------------------------------------------------------------------
  357.   MAX_MEMBERS = KGC::LargeParty::MAX_MEMBERS  # 最大パーティ人数
  358.   #--------------------------------------------------------------------------
  359.   # ● オブジェクト初期化
  360.   #--------------------------------------------------------------------------
  361.   alias initialize_KGC_LargeParty initialize
  362.   def initialize
  363.     initialize_KGC_LargeParty
  364.  
  365.     @max_battle_member_count = nil
  366.     @battle_member_count = 0
  367.     @fixed_actors = []
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ○ 戦闘メンバー最大数取得
  371.   #--------------------------------------------------------------------------
  372.   def max_battle_member_count
  373.     if @max_battle_member_count == nil
  374.       return KGC::LargeParty::MAX_BATTLE_MEMBERS
  375.     else
  376.       return @max_battle_member_count
  377.     end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ○ 戦闘メンバー最大数変更
  381.   #--------------------------------------------------------------------------
  382.   def max_battle_member_count=(value)
  383.     if value.is_a?(Integer)
  384.       value = [value, 1].max
  385.     end
  386.     @max_battle_member_count = value
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ○ 戦闘メンバー数取得
  390.   #--------------------------------------------------------------------------
  391.   def battle_member_count
  392.     if @battle_member_count == nil
  393.       @battle_member_count = @actors.size
  394.     end
  395.     @battle_member_count =
  396.       [@battle_member_count, @actors.size, max_battle_member_count].min
  397.     return @battle_member_count
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ○ 戦闘メンバー数設定
  401.   #--------------------------------------------------------------------------
  402.   def battle_member_count=(value)
  403.     @battle_member_count = [[value, 0].max,
  404.       @actors.size, max_battle_member_count].min
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● メンバーの取得
  408.   #--------------------------------------------------------------------------
  409.   alias members_KGC_LargeParty members
  410.   def members
  411.     if $game_temp.in_battle ||
  412.         !KGC::LargeParty::SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE
  413.       return battle_members
  414.     else
  415.       return members_KGC_LargeParty
  416.     end
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ○ 全メンバーの取得
  420.   #--------------------------------------------------------------------------
  421.   def all_members
  422.     return members_KGC_LargeParty
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ○ 戦闘メンバーの取得
  426.   #--------------------------------------------------------------------------
  427.   def battle_members
  428.     result = []
  429.     battle_member_count.times { |i| result << $game_actors[@actors[i]] }
  430.     return result
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ○ 待機メンバーの取得
  434.   #--------------------------------------------------------------------------
  435.   def stand_by_members
  436.     return (all_members - battle_members)
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ○ 固定メンバーの取得
  440.   #--------------------------------------------------------------------------
  441.   def fixed_members
  442.     result = []
  443.     @fixed_actors.each { |i| result << $game_actors[i] }
  444.     return result
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 初期パーティのセットアップ
  448.   #--------------------------------------------------------------------------
  449.   alias setup_starting_members_KGC_LargeParty setup_starting_members
  450.   def setup_starting_members
  451.     setup_starting_members_KGC_LargeParty
  452.  
  453.     self.battle_member_count = @actors.size
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 戦闘テスト用パーティのセットアップ
  457.   #--------------------------------------------------------------------------
  458.   alias setup_battle_test_members_KGC_LargeParty setup_battle_test_members
  459.   def setup_battle_test_members
  460.     setup_battle_test_members_KGC_LargeParty
  461.  
  462.     self.battle_member_count = @actors.size
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ○ メンバーの新規設定
  466.   #     new_member : 新しいメンバー
  467.   #--------------------------------------------------------------------------
  468.   def set_member(new_member)
  469.     @actors = []
  470.     new_member.each { |actor| @actors << actor.id }
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ○ 戦闘メンバーの新規設定
  474.   #     new_member : 新しい戦闘メンバー
  475.   #--------------------------------------------------------------------------
  476.   def set_battle_member(new_member)
  477.     new_battle_member = []
  478.     new_member.each { |actor|
  479.       @actors.delete(actor.id)
  480.       new_battle_member << actor.id
  481.     }
  482.     @actors = new_battle_member + @actors
  483.     self.battle_member_count = new_member.size
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ○ パーティ編成を許可しているか判定
  487.   #--------------------------------------------------------------------------
  488.   def partyform_enable?
  489.     return $game_switches[KGC::LargeParty::PARTYFORM_SWITCH]
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # ○ 戦闘中のパーティ編成を許可しているか判定
  493.   #--------------------------------------------------------------------------
  494.   def battle_partyform_enable?
  495.     return false unless partyform_enable?
  496.     return $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH]
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ○ メンバーが一杯か判定
  500.   #--------------------------------------------------------------------------
  501.   def full?
  502.     return (@actors.size >= MAX_MEMBERS)
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ○ 出撃中か判定
  506.   #     actor_id : 判定するアクターの ID
  507.   #--------------------------------------------------------------------------
  508.   def actor_launched?(actor_id)
  509.     return battle_members.include?($game_actors[actor_id])
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ○ 固定アクターか判定
  513.   #     actor_id : 判定するアクターの ID
  514.   #--------------------------------------------------------------------------
  515.   def actor_fixed?(actor_id)
  516.     return @fixed_actors.include?(actor_id)
  517.   end
  518.   #--------------------------------------------------------------------------
  519.   # ● アクターを加える
  520.   #     actor_id : アクター ID
  521.   #--------------------------------------------------------------------------
  522.   alias add_actor_KGC_LargeParty add_actor
  523.   def add_actor(actor_id)
  524.     last_size = @actors.size
  525.  
  526.     add_actor_KGC_LargeParty(actor_id)
  527.  
  528.     if last_size < @actors.size
  529.       self.battle_member_count += 1
  530.     end
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ○ アクターを戦闘メンバーに加える
  534.   #     actor_id : アクター ID
  535.   #     index    : 追加位置 (省略時は最後尾)
  536.   #--------------------------------------------------------------------------
  537.   def add_battle_member(actor_id, index = nil)
  538.     return unless @actors.include?(actor_id)  # パーティにいない
  539.     if index == nil
  540.       return if battle_members.include?($game_actors[actor_id])  # 出撃済み
  541.       return if battle_member_count == max_battle_member_count   # 人数が最大
  542.       index = battle_member_count
  543.     end
  544.  
  545.     @actors.delete(actor_id)
  546.     @actors.insert(index, actor_id)
  547.     self.battle_member_count += 1
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ○ アクターを戦闘メンバーから外す
  551.   #     actor_id : アクター ID
  552.   #--------------------------------------------------------------------------
  553.   def remove_battle_member(actor_id)
  554.     return unless @actors.include?(actor_id)  # パーティにいない
  555.     return if actor_fixed?(actor_id)          # 固定済み
  556.     return unless actor_launched?(actor_id)   # 待機中
  557.  
  558.     @actors.delete(actor_id)
  559.     @actors.push(actor_id)
  560.     self.battle_member_count -= 1
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ○ アクターの固定状態を設定
  564.   #     actor_id : アクター ID
  565.   #     fixed    : 固定フラグ (省略時 : false)
  566.   #--------------------------------------------------------------------------
  567.   def fix_actor(actor_id, fixed = false)
  568.     return unless @actors.include?(actor_id)  # パーティにいない
  569.  
  570.     if fixed
  571.       # 固定
  572.       unless @fixed_actors.include?(actor_id)
  573.         @fixed_actors << actor_id
  574.         unless battle_members.include?($game_actors[actor_id])
  575.           self.battle_member_count += 1
  576.         end
  577.       end
  578.       # 強制出撃
  579.       apply_force_launch
  580.     else
  581.       # 固定解除
  582.       @fixed_actors.delete(actor_id)
  583.     end
  584.     $game_player.refresh
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ○ 強制出撃適用
  588.   #--------------------------------------------------------------------------
  589.   def apply_force_launch
  590.     while (fixed_members - battle_members).size > 0
  591.       # 固定状態でないメンバーを適当に持ってきて入れ替え
  592.       actor1 = stand_by_members.find { |a| @fixed_actors.include?(a.id) }
  593.       actor2 = battle_members.reverse.find { |a| !@fixed_actors.include?(a.id) }
  594.       index1 = @actors.index(actor1.id)
  595.       index2 = @actors.index(actor2.id)
  596.       @actors[index1], @actors[index2] = @actors[index2], @actors[index1]
  597.  
  598.       # 戦闘メンバーが全員固定されたら戻る (無限ループ防止)
  599.       all_fixed = true
  600.       battle_members.each { |actor|
  601.         unless actor.fixed_member?
  602.           all_fixed = false
  603.           break
  604.         end
  605.       }
  606.       break if all_fixed
  607.     end
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ○ 固定アクター以外を戦闘メンバーから外す
  611.   #--------------------------------------------------------------------------
  612.   def remove_all_battle_member
  613.     all_members.each { |actor|
  614.       remove_battle_member(actor.id) if actor_launched?(actor.id)
  615.     }
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ○ メンバー整列 (昇順)
  619.   #     sort_type : ソート形式 (SORT_BY_xxx)
  620.   #     reverse   : true だと降順
  621.   #--------------------------------------------------------------------------
  622.   def sort_member(sort_type = KGC::Commands::SORT_BY_ID,
  623.                   reverse = false)
  624.     # バッファを準備
  625.     b_actors = battle_members
  626.     actors   = all_members - b_actors
  627.     f_actors = fixed_members
  628.     # 固定キャラはソートしない
  629.     if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
  630.       actors   -= f_actors
  631.       b_actors -= f_actors
  632.     end
  633.  
  634.     # ソート
  635.     case sort_type
  636.     when KGC::Commands::SORT_BY_ID     # ID順
  637.       actors.sort!   { |a, b| a.id <=> b.id }
  638.       b_actors.sort! { |a, b| a.id <=> b.id }
  639.     when KGC::Commands::SORT_BY_NAME   # 名前順
  640.       actors.sort!   { |a, b| a.name <=> b.name }
  641.       b_actors.sort! { |a, b| a.name <=> b.name }
  642.     when KGC::Commands::SORT_BY_LEVEL  # レベル順
  643.       actors.sort!   { |a, b| a.level <=> b.level }
  644.       b_actors.sort! { |a, b| a.level <=> b.level }
  645.     end
  646.     # 反転
  647.     if reverse
  648.       actors.reverse!
  649.       b_actors.reverse!
  650.     end
  651.  
  652.     # 固定キャラを先頭に持ってくる
  653.     if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
  654.       actors   = f_actors + actors
  655.       b_actors = f_actors + b_actors
  656.     end
  657.  
  658.     # 復帰
  659.     set_member(actors)
  660.     set_battle_member(b_actors)
  661.  
  662.     apply_force_launch
  663.     $game_player.refresh
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ○ 並び替え
  667.   #    戦闘メンバーの index1 番目と index2 番目を入れ替える
  668.   #--------------------------------------------------------------------------
  669.   def change_shift(index1, index2)
  670.     size = @actors.size
  671.     if index1 >= size || index2 >= size
  672.       return
  673.     end
  674.     buf = @actors[index1]
  675.     @actors[index1] = @actors[index2]
  676.     @actors[index2] = buf
  677.     $game_player.refresh
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● 戦闘用ステートの解除 (戦闘終了時に呼び出し)
  681.   #--------------------------------------------------------------------------
  682.   def remove_states_battle
  683.     (1...$data_actors.size).each { |i|
  684.       $game_actors[i].remove_states_battle
  685.     }
  686.   end
  687. end
  688.  
  689. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  690.  
  691. #==============================================================================
  692. # ■ Window_Command
  693. #==============================================================================
  694.  
  695. class Window_Command < Window_Selectable
  696.   unless method_defined?(:add_command)
  697.   #--------------------------------------------------------------------------
  698.   # ○ コマンドを追加
  699.   #    追加した位置を返す
  700.   #--------------------------------------------------------------------------
  701.   def add_command(command)
  702.     @commands << command
  703.     @item_max = @commands.size
  704.     item_index = @item_max - 1
  705.     refresh_command
  706.     draw_item(item_index)
  707.     return item_index
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # ○ コマンドをリフレッシュ
  711.   #--------------------------------------------------------------------------
  712.   def refresh_command
  713.     buf = self.contents.clone
  714.     self.height = [self.height, row_max * WLH + 32].max
  715.     create_contents
  716.     self.contents.blt(0, 0, buf, buf.rect)
  717.     buf.dispose
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ○ コマンドを挿入
  721.   #--------------------------------------------------------------------------
  722.   def insert_command(index, command)
  723.     @commands.insert(index, command)
  724.     @item_max = @commands.size
  725.     refresh_command
  726.     refresh
  727.   end
  728.   #--------------------------------------------------------------------------
  729.   # ○ コマンドを削除
  730.   #--------------------------------------------------------------------------
  731.   def remove_command(command)
  732.     @commands.delete(command)
  733.     @item_max = @commands.size
  734.     refresh
  735.   end
  736.   end
  737. end
  738.  
  739. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  740.  
  741. #==============================================================================
  742. # ■ Window_MenuStatus
  743. #==============================================================================
  744.  
  745. class Window_MenuStatus < Window_Selectable
  746.   #--------------------------------------------------------------------------
  747.   # ● 定数
  748.   #--------------------------------------------------------------------------
  749.   STATUS_HEIGHT = 96  # ステータス一人分の高さ
  750.   #--------------------------------------------------------------------------
  751.   # ● ウィンドウ内容の作成
  752.   #--------------------------------------------------------------------------
  753.   def create_contents
  754.     self.contents.dispose
  755.     self.contents = Bitmap.new(width - 32,
  756.       [height - 32, row_max * STATUS_HEIGHT].max)
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   # ● 先頭の行の取得
  760.   #--------------------------------------------------------------------------
  761.   def top_row
  762.     return self.oy / STATUS_HEIGHT
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ● 先頭の行の設定
  766.   #     row : 先頭に表示する行
  767.   #--------------------------------------------------------------------------
  768.   def top_row=(row)
  769.     super(row)
  770.     self.oy = self.oy / WLH * STATUS_HEIGHT
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ● 1 ページに表示できる行数の取得
  774.   #--------------------------------------------------------------------------
  775.   def page_row_max
  776.     return (self.height - 32) / STATUS_HEIGHT
  777.   end
  778.   #--------------------------------------------------------------------------
  779.   # ● 項目を描画する矩形の取得
  780.   #     index : 項目番号
  781.   #--------------------------------------------------------------------------
  782.   def item_rect(index)
  783.     rect = super(index)
  784.     rect.height = STATUS_HEIGHT
  785.     rect.y = index / @column_max * STATUS_HEIGHT
  786.     return rect
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ● リフレッシュ
  790.   #--------------------------------------------------------------------------
  791.   def refresh
  792.     @item_max = $game_party.members.size
  793.     create_contents
  794.     fill_stand_by_background
  795.     draw_member
  796.   end
  797.   #--------------------------------------------------------------------------
  798.   # ○ パーティメンバー描画
  799.   #--------------------------------------------------------------------------
  800.   def draw_member
  801.     for actor in $game_party.members
  802.       draw_actor_face(actor, 2, actor.party_index * 96 + 2, 92)
  803.       x = 104
  804.       y = actor.party_index * 96 + WLH / 2
  805.       draw_actor_name(actor, x, y)
  806.       draw_actor_class(actor, x + 120, y)
  807.       draw_actor_level(actor, x, y + WLH * 1)
  808.       draw_actor_state(actor, x, y + WLH * 2)
  809.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  810.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  811.     end
  812.   end
  813.   #--------------------------------------------------------------------------
  814.   # ○ 待機メンバーの背景色を塗る
  815.   #--------------------------------------------------------------------------
  816.   def fill_stand_by_background
  817.     color = KGC::LargeParty::STAND_BY_COLOR
  818.     dy = STATUS_HEIGHT * $game_party.battle_members.size
  819.     dh = STATUS_HEIGHT * $game_party.stand_by_members.size
  820.     if dh > 0
  821.       self.contents.fill_rect(0, dy, self.width - 32, dh, color)
  822.     end
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ● カーソルの更新
  826.   #--------------------------------------------------------------------------
  827.   def update_cursor
  828.     if @index < 0               # カーソルなし
  829.       self.cursor_rect.empty
  830.     elsif @index < @item_max    # 通常
  831.       super
  832.     elsif @index >= 100         # 自分
  833.       self.cursor_rect.set(0, (@index - 100) * STATUS_HEIGHT,
  834.         contents.width, STATUS_HEIGHT)
  835.     else                        # 全体
  836.       self.cursor_rect.set(0, 0, contents.width, @item_max * STATUS_HEIGHT)
  837.     end
  838.   end
  839. end
  840.  
  841. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  842.  
  843. #==============================================================================
  844. # ■ Window_ShopStatus
  845. #==============================================================================
  846.  
  847. class Window_ShopStatus < Window_Base
  848.   #--------------------------------------------------------------------------
  849.   # ● ウィンドウ内容の作成
  850.   #--------------------------------------------------------------------------
  851.   def create_contents
  852.     self.contents.dispose
  853.     self.contents = Bitmap.new(width - 32,
  854.       WLH * ($game_party.members.size + 1) * 2)
  855.   end
  856. end
  857.  
  858. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  859.  
  860. #==============================================================================
  861. # ■ Window_BattleStatus
  862. #==============================================================================
  863.  
  864. class Window_BattleStatus < Window_Selectable
  865.   #--------------------------------------------------------------------------
  866.   # ● ウィンドウ内容の作成
  867.   #--------------------------------------------------------------------------
  868.   def create_contents
  869.     self.contents.dispose
  870.     self.contents = Bitmap.new(width - 32,
  871.       [WLH * $game_party.members.size, height - 32].max)
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # ● リフレッシュ
  875.   #--------------------------------------------------------------------------
  876.   alias refresh_KGC_LargeParty refresh
  877.   def refresh
  878.     create_contents
  879.  
  880.     refresh_KGC_LargeParty
  881.   end
  882. end
  883.  
  884. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  885.  
  886. #==============================================================================
  887. # □ Window_PartyFormCaption
  888. #------------------------------------------------------------------------------
  889. #  パーティ編成画面でウィンドウのキャプションを表示するウィンドウです。
  890. #==============================================================================
  891.  
  892. class Window_PartyFormCaption < Window_Base
  893.   #--------------------------------------------------------------------------
  894.   # ● オブジェクト初期化
  895.   #     caption : 表示するキャプション
  896.   #--------------------------------------------------------------------------
  897.   def initialize(caption = "")
  898.     super(0, 0, KGC::LargeParty::CAPTION_WINDOW_WIDTH, WLH + 32)
  899.     @caption = caption
  900.     refresh
  901.   end
  902.   #--------------------------------------------------------------------------
  903.   # ● リフレッシュ
  904.   #--------------------------------------------------------------------------
  905.   def refresh
  906.     self.contents.clear
  907.     self.contents.draw_text(0, 0, width - 32, WLH, @caption)
  908.   end
  909. end
  910.  
  911. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  912.  
  913. #==============================================================================
  914. # □ Window_PartyFormMember
  915. #------------------------------------------------------------------------------
  916. #  パーティ編成画面でメンバーを表示するウィンドウです。
  917. #==============================================================================
  918.  
  919. class Window_PartyFormMember < Window_Selectable
  920.   #--------------------------------------------------------------------------
  921.   # ○ 定数
  922.   #--------------------------------------------------------------------------
  923.   DRAW_SIZE = KGC::LargeParty::PARTY_FORM_CHARACTER_SIZE
  924.   #--------------------------------------------------------------------------
  925.   # ● 公開インスタンス変数
  926.   #--------------------------------------------------------------------------
  927.   attr_accessor :selected_index           # 選択済みインデックス
  928.   #--------------------------------------------------------------------------
  929.   # ● オブジェクト初期化
  930.   #     x       : ウィンドウの X 座標
  931.   #     y       : ウィンドウの Y 座標
  932.   #     width   : ウィンドウの幅
  933.   #     height  : ウィンドウの高さ
  934.   #     spacing : 横に項目が並ぶときの空白の幅
  935.   #--------------------------------------------------------------------------
  936.   def initialize(x, y, width, height, spacing = 8)
  937.     super(x, y, width, height, spacing)
  938.   end
  939.   #--------------------------------------------------------------------------
  940.   # ● ウィンドウ内容の作成
  941.   #--------------------------------------------------------------------------
  942.   def create_contents
  943.     self.contents.dispose
  944.     self.contents = Bitmap.new(width - 32,
  945.       [height - 32, row_max * DRAW_SIZE[1]].max)
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ● 先頭の行の取得
  949.   #--------------------------------------------------------------------------
  950.   def top_row
  951.     return self.oy / DRAW_SIZE[1]
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● 先頭の行の設定
  955.   #     row : 先頭に表示する行
  956.   #--------------------------------------------------------------------------
  957.   def top_row=(row)
  958.     super(row)
  959.     self.oy = self.oy / WLH * DRAW_SIZE[1]
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● 1 ページに表示できる行数の取得
  963.   #--------------------------------------------------------------------------
  964.   def page_row_max
  965.     return (self.height - 32) / DRAW_SIZE[1]
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ● 項目を描画する矩形の取得
  969.   #     index : 項目番号
  970.   #--------------------------------------------------------------------------
  971.   def item_rect(index)
  972.     rect = super(index)
  973.     rect.width = DRAW_SIZE[0]
  974.     rect.height = DRAW_SIZE[1]
  975.     rect.y = index / @column_max * DRAW_SIZE[1]
  976.     return rect
  977.   end
  978.   #--------------------------------------------------------------------------
  979.   # ○ 選択アクター取得
  980.   #--------------------------------------------------------------------------
  981.   def actor
  982.     return @actors[self.index]
  983.   end
  984.   #--------------------------------------------------------------------------
  985.   # ● リフレッシュ
  986.   #--------------------------------------------------------------------------
  987.   def refresh
  988.     self.contents.clear
  989.     restore_member_list
  990.     draw_member
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # ○ メンバーリスト修復
  994.   #--------------------------------------------------------------------------
  995.   def restore_member_list
  996.     # 継承先で定義
  997.   end
  998.   #--------------------------------------------------------------------------
  999.   # ○ メンバー描画
  1000.   #--------------------------------------------------------------------------
  1001.   def draw_member
  1002.     # 継承先で定義
  1003.   end
  1004.   #--------------------------------------------------------------------------
  1005.   # ○ 空欄アクター描画
  1006.   #     index : 項目番号
  1007.   #--------------------------------------------------------------------------
  1008.   def draw_empty_actor(index)
  1009.     # 継承先で定義
  1010.   end
  1011.   #--------------------------------------------------------------------------
  1012.   # ○ 固定キャラ背景描画
  1013.   #     index : 項目番号
  1014.   #--------------------------------------------------------------------------
  1015.   def draw_fixed_back(index)
  1016.     rect = item_rect(index)
  1017.     self.contents.fill_rect(rect, KGC::LargeParty::FIXED_COLOR)
  1018.   end
  1019.   #--------------------------------------------------------------------------
  1020.   # ○ 選択中キャラ背景描画
  1021.   #     index : 項目番号
  1022.   #--------------------------------------------------------------------------
  1023.   def draw_selected_back(index)
  1024.     rect = item_rect(index)
  1025.     self.contents.fill_rect(rect, KGC::LargeParty::SELECTED_COLOR)
  1026.   end
  1027. end
  1028.  
  1029. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1030.  
  1031. #==============================================================================
  1032. # □ Window_PartyFormBattleMember
  1033. #------------------------------------------------------------------------------
  1034. #  パーティ編成画面で戦闘メンバーを表示するウィンドウです。
  1035. #==============================================================================
  1036.  
  1037. class Window_PartyFormBattleMember < Window_PartyFormMember
  1038.   #--------------------------------------------------------------------------
  1039.   # ● 公開インスタンス変数
  1040.   #--------------------------------------------------------------------------
  1041.   attr_accessor :selected_index           # 選択済みインデックス
  1042.   #--------------------------------------------------------------------------
  1043.   # ● オブジェクト初期化
  1044.   #--------------------------------------------------------------------------
  1045.   def initialize
  1046.     super(0, 0, 64, DRAW_SIZE[1] + 32)
  1047.     column_width = DRAW_SIZE[0] + @spacing
  1048.     nw = [column_width * $game_party.max_battle_member_count + 32,
  1049.       Graphics.width].min
  1050.     self.width = nw
  1051.  
  1052.     @item_max = $game_party.max_battle_member_count
  1053.     @column_max = width / column_width
  1054.     @selected_index = nil
  1055.     create_contents
  1056.     refresh
  1057.     self.active = true
  1058.     self.index = 0
  1059.   end
  1060.   #--------------------------------------------------------------------------
  1061.   # ○ メンバーリスト修復
  1062.   #--------------------------------------------------------------------------
  1063.   def restore_member_list
  1064.     @actors = $game_party.battle_members
  1065.   end
  1066.   #--------------------------------------------------------------------------
  1067.   # ○ メンバー描画
  1068.   #--------------------------------------------------------------------------
  1069.   def draw_member
  1070.     @item_max.times { |i|
  1071.       actor = @actors[i]
  1072.       if actor == nil
  1073.         draw_empty_actor(i)
  1074.       else
  1075.         if i == @selected_index
  1076.           draw_selected_back(i)
  1077.         elsif $game_party.actor_fixed?(actor.id)
  1078.           draw_fixed_back(i)
  1079.         end
  1080.         rect = item_rect(i)
  1081.         draw_actor_graphic(actor,
  1082.           rect.x + DRAW_SIZE[0] / 2,
  1083.           rect.y + DRAW_SIZE[1] - 4)
  1084.       end
  1085.     }
  1086.   end
  1087.   #--------------------------------------------------------------------------
  1088.   # ○ 空欄アクター描画
  1089.   #     index : 項目番号
  1090.   #--------------------------------------------------------------------------
  1091.   def draw_empty_actor(index)
  1092.     rect = item_rect(index)
  1093.     self.contents.font.color = system_color
  1094.     self.contents.draw_text(rect, KGC::LargeParty::BATTLE_MEMBER_BLANK_TEXT, 1)
  1095.     self.contents.font.color = normal_color
  1096.   end
  1097. end
  1098.  
  1099. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1100.  
  1101. #==============================================================================
  1102. # □ Window_PartyFormAllMember
  1103. #------------------------------------------------------------------------------
  1104. #  パーティ編成画面で全メンバーを表示するウィンドウです。
  1105. #==============================================================================
  1106.  
  1107. class Window_PartyFormAllMember < Window_PartyFormMember
  1108.   #--------------------------------------------------------------------------
  1109.   # ● オブジェクト初期化
  1110.   #--------------------------------------------------------------------------
  1111.   def initialize
  1112.     super(0, 0, 64, 64)
  1113.     restore_member_list
  1114.     @item_max = $game_party.all_members.size
  1115.  
  1116.     # 各種サイズ計算
  1117.     column_width = DRAW_SIZE[0] + @spacing
  1118.     sw = [@item_max * column_width + 32, Graphics.width].min
  1119.     @column_max = (sw - 32) / column_width
  1120.     sh = ([@item_max - 1, 0].max / @column_max + 1) * DRAW_SIZE[1] + 32
  1121.     sh = [sh, DRAW_SIZE[1] * KGC::LargeParty::PARTY_MEMBER_WINDOW_ROW_MAX + 32].min
  1122.  
  1123.     # 座標・サイズ調整
  1124.     self.y += DRAW_SIZE[1] + 32
  1125.     self.width = sw
  1126.     self.height = sh
  1127.  
  1128.     create_contents
  1129.     refresh
  1130.     self.active = false
  1131.     self.index = 0
  1132.   end
  1133.   #--------------------------------------------------------------------------
  1134.   # ○ 選択しているアクターのインデックス取得
  1135.   #--------------------------------------------------------------------------
  1136.   def actor_index
  1137.     return @index_offset + self.index
  1138.   end
  1139.   #--------------------------------------------------------------------------
  1140.   # ○ メンバーリスト修復
  1141.   #--------------------------------------------------------------------------
  1142.   def restore_member_list
  1143.     if KGC::LargeParty::SHOW_BATTLE_MEMBER_IN_PARTY
  1144.       @actors = $game_party.all_members
  1145.       @index_offset = 0
  1146.     else
  1147.       @actors = $game_party.stand_by_members
  1148.       @index_offset = $game_party.battle_members.size
  1149.     end
  1150.   end
  1151.   #--------------------------------------------------------------------------
  1152.   # ○ メンバー描画
  1153.   #--------------------------------------------------------------------------
  1154.   def draw_member
  1155.     @item_max.times { |i|
  1156.       actor = @actors[i]
  1157.       if actor == nil
  1158.         draw_empty_actor(i)
  1159.         next
  1160.       end
  1161.  
  1162.       if $game_party.actor_fixed?(actor.id)
  1163.         draw_fixed_back(i)
  1164.       end
  1165.       rect = item_rect(i)
  1166.       opacity = ($game_party.battle_members.include?(actor) ? 96 : 255)
  1167.       draw_actor_graphic(actor,
  1168.         rect.x + DRAW_SIZE[0] / 2,
  1169.         rect.y + DRAW_SIZE[1] - 4,
  1170.         opacity)
  1171.     }
  1172.   end
  1173.   #--------------------------------------------------------------------------
  1174.   # ● アクターの歩行グラフィック描画
  1175.   #     actor   : アクター
  1176.   #     x       : 描画先 X 座標
  1177.   #     y       : 描画先 Y 座標
  1178.   #     opacity : 不透明度
  1179.   #--------------------------------------------------------------------------
  1180.   def draw_actor_graphic(actor, x, y, opacity = 255)
  1181.     draw_character(actor.character_name, actor.character_index, x, y, opacity)
  1182.   end
  1183.   #--------------------------------------------------------------------------
  1184.   # ● 歩行グラフィックの描画
  1185.   #     character_name  : 歩行グラフィック ファイル名
  1186.   #     character_index : 歩行グラフィック インデックス
  1187.   #     x               : 描画先 X 座標
  1188.   #     y               : 描画先 Y 座標
  1189.   #     opacity         : 不透明度
  1190.   #--------------------------------------------------------------------------
  1191.   def draw_character(character_name, character_index, x, y, opacity = 255)
  1192.     return if character_name == nil
  1193.     bitmap = Cache.character(character_name)
  1194.     sign = character_name[/^[\!\$]./]
  1195.     if sign != nil and sign.include?('$')
  1196.       cw = bitmap.width / 3
  1197.       ch = bitmap.height / 4
  1198.     else
  1199.       cw = bitmap.width / 12
  1200.       ch = bitmap.height / 8
  1201.     end
  1202.     n = character_index
  1203.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  1204.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, opacity)
  1205.   end
  1206.   #--------------------------------------------------------------------------
  1207.   # ○ 空欄アクター描画
  1208.   #     index : 項目番号
  1209.   #--------------------------------------------------------------------------
  1210.   def draw_empty_actor(index)
  1211.     rect = item_rect(index)
  1212.     self.contents.font.color = system_color
  1213.     self.contents.draw_text(rect, KGC::LargeParty::PARTY_MEMBER_BLANK_TEXT, 1)
  1214.     self.contents.font.color = normal_color
  1215.   end
  1216. end
  1217.  
  1218. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1219.  
  1220. #==============================================================================
  1221. # □ Window_PartyFormStatus
  1222. #------------------------------------------------------------------------------
  1223. #  パーティ編成画面でアクターのステータスを表示するウィンドウです。
  1224. #==============================================================================
  1225.  
  1226. class Window_PartyFormStatus < Window_Base
  1227.   #--------------------------------------------------------------------------
  1228.   # ● オブジェクト初期化
  1229.   #--------------------------------------------------------------------------
  1230.   def initialize
  1231.     super(0, 0, 384, 128)
  1232.     self.z = 1000
  1233.     [url=home.php?mod=space&uid=95897]@actor[/url] = nil
  1234.     refresh
  1235.   end
  1236.   #--------------------------------------------------------------------------
  1237.   # ○ アクター設定
  1238.   #--------------------------------------------------------------------------
  1239.   def set_actor(actor)
  1240.     if @actor != actor
  1241.       @actor = actor
  1242.       refresh
  1243.     end
  1244.   end
  1245.   #--------------------------------------------------------------------------
  1246.   # ● リフレッシュ
  1247.   #--------------------------------------------------------------------------
  1248.   def refresh
  1249.     self.contents.clear
  1250.     if @actor == nil
  1251.       return
  1252.     end
  1253.  
  1254.     draw_actor_face(@actor, 0, 0)
  1255.     dx = 104
  1256.     draw_actor_name(@actor, dx, 0)
  1257.     draw_actor_level(@actor, dx, WLH * 1)
  1258.     draw_actor_hp(@actor, dx, WLH * 2)
  1259.     draw_actor_mp(@actor, dx, WLH * 3)
  1260.     4.times { |i|
  1261.       draw_actor_parameter(@actor, dx + 128, WLH * i, i, 120)
  1262.     }
  1263.   end
  1264.   #--------------------------------------------------------------------------
  1265.   # ● 能力値の描画
  1266.   #     actor : アクター
  1267.   #     x     : 描画先 X 座標
  1268.   #     y     : 描画先 Y 座標
  1269.   #     type  : 能力値の種類 (0~3)
  1270.   #     width : 描画幅
  1271.   #--------------------------------------------------------------------------
  1272.   def draw_actor_parameter(actor, x, y, type, width = 156)
  1273.     case type
  1274.     when 0
  1275.       parameter_name = Vocab::atk
  1276.       parameter_value = actor.atk
  1277.     when 1
  1278.       parameter_name = Vocab::def
  1279.       parameter_value = actor.def
  1280.     when 2
  1281.       parameter_name = Vocab::spi
  1282.       parameter_value = actor.spi
  1283.     when 3
  1284.       parameter_name = Vocab::agi
  1285.       parameter_value = actor.agi
  1286.     end
  1287.     nw = width - 36
  1288.     self.contents.font.color = system_color
  1289.     self.contents.draw_text(x, y, nw, WLH, parameter_name)
  1290.     self.contents.font.color = normal_color
  1291.     self.contents.draw_text(x + nw, y, 36, WLH, parameter_value, 2)
  1292.   end
  1293. end
  1294.  
  1295. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1296.  
  1297. #==============================================================================
  1298. # □ Window_PartyFormControl
  1299. #------------------------------------------------------------------------------
  1300. #  パーティ編成画面で操作方法を表示するウィンドウです。
  1301. #==============================================================================
  1302.  
  1303. class Window_PartyFormControl < Window_Base
  1304.   #--------------------------------------------------------------------------
  1305.   # ○ 定数
  1306.   #--------------------------------------------------------------------------
  1307.   MODE_BATTLE_MEMBER = 0
  1308.   MODE_SHIFT_CHANGE  = 1
  1309.   MODE_PARTY_MEMBER  = 2
  1310.   #--------------------------------------------------------------------------
  1311.   # ● オブジェクト初期化
  1312.   #--------------------------------------------------------------------------
  1313.   def initialize
  1314.     super(0, 0, Graphics.width - 384, 128)
  1315.     self.z = 1000
  1316.     @mode = MODE_BATTLE_MEMBER
  1317.     refresh
  1318.   end
  1319.   #--------------------------------------------------------------------------
  1320.   # ○ モード変更
  1321.   #--------------------------------------------------------------------------
  1322.   def mode=(value)
  1323.     @mode = value
  1324.     refresh
  1325.   end
  1326.   #--------------------------------------------------------------------------
  1327.   # ● リフレッシュ
  1328.   #--------------------------------------------------------------------------
  1329.   def refresh
  1330.     self.contents.clear
  1331.     case @mode
  1332.     when MODE_BATTLE_MEMBER  # 戦闘メンバー
  1333.       buttons = [
  1334.         "A: 外す",
  1335.         "B: 終了",
  1336.         "C: 決定",
  1337.         "X: 並び替え"
  1338.       ]
  1339.     when MODE_SHIFT_CHANGE   # 並び替え
  1340.       buttons = [
  1341.         "B: キャンセル",
  1342.         "C: 決定",
  1343.         "X: 決定"
  1344.       ]
  1345.     when MODE_PARTY_MEMBER   # パーティメンバー
  1346.       buttons = [
  1347.         "B: キャンセル",
  1348.         "C: 決定"
  1349.       ]
  1350.     else
  1351.       return
  1352.     end
  1353.  
  1354.     buttons.each_with_index { |c, i|
  1355.       self.contents.draw_text(0, WLH * i, width - 32, WLH, c)
  1356.     }
  1357.   end
  1358. end
  1359.  
  1360. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1361.  
  1362. #==============================================================================
  1363. # ■ Scene_Title
  1364. #==============================================================================
  1365.  
  1366. class Scene_Title < Scene_Base
  1367.   #--------------------------------------------------------------------------
  1368.   # ● 各種ゲームオブジェクトの作成
  1369.   #--------------------------------------------------------------------------
  1370.   alias create_game_objects_KGC_LargeParty create_game_objects
  1371.   def create_game_objects
  1372.     create_game_objects_KGC_LargeParty
  1373.  
  1374.     if KGC::LargeParty::DEFAULT_PARTYFORM_ENABLED
  1375.       $game_switches[KGC::LargeParty::PARTYFORM_SWITCH] = true
  1376.       $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH] = true
  1377.     end
  1378.   end
  1379. end
  1380.  
  1381. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1382.  
  1383. #==============================================================================
  1384. # ■ Scene_Map
  1385. #==============================================================================
  1386.  
  1387. class Scene_Map < Scene_Base
  1388.   #--------------------------------------------------------------------------
  1389.   # ● 画面切り替えの実行
  1390.   #--------------------------------------------------------------------------
  1391.   alias update_scene_change_KGC_LargeParty update_scene_change
  1392.   def update_scene_change
  1393.     return if $game_player.moving?    # プレイヤーの移動中?
  1394.  
  1395.     if $game_temp.next_scene == :partyform
  1396.       call_partyform
  1397.       return
  1398.     end
  1399.  
  1400.     update_scene_change_KGC_LargeParty
  1401.   end
  1402.   #--------------------------------------------------------------------------
  1403.   # ○ パーティ編成画面への切り替え
  1404.   #--------------------------------------------------------------------------
  1405.   def call_partyform
  1406.     $game_temp.next_scene = nil
  1407.     $scene = Scene_PartyForm.new(0, Scene_PartyForm::HOST_MAP)
  1408.   end
  1409. end
  1410.  
  1411. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1412.  
  1413. #==============================================================================
  1414. # ■ Scene_Menu
  1415. #==============================================================================
  1416.  
  1417. class Scene_Menu < Scene_Base
  1418.   if KGC::LargeParty::USE_MENU_PARTYFORM_COMMAND
  1419.   #--------------------------------------------------------------------------
  1420.   # ● コマンドウィンドウの作成
  1421.   #--------------------------------------------------------------------------
  1422.   alias create_command_window_KGC_LargeParty create_command_window
  1423.   def create_command_window
  1424.     create_command_window_KGC_LargeParty
  1425.  
  1426.     return if $imported["CustomMenuCommand"]
  1427.  
  1428.     @__command_partyform_index =
  1429.       @command_window.add_command(Vocab.partyform)
  1430.     @command_window.draw_item(@__command_partyform_index,
  1431.       $game_party.partyform_enable?)
  1432.     if @command_window.oy > 0
  1433.       @command_window.oy -= Window_Base::WLH
  1434.     end
  1435.     @command_window.index = @menu_index
  1436.   end
  1437.   end
  1438.   #--------------------------------------------------------------------------
  1439.   # ● コマンド選択の更新
  1440.   #--------------------------------------------------------------------------
  1441.   alias update_command_selection_KGC_LargeParty update_command_selection
  1442.   def update_command_selection
  1443.     current_menu_index = @__command_partyform_index
  1444.     call_partyform_flag = false
  1445.  
  1446.     if Input.trigger?(Input::C)
  1447.       case @command_window.index
  1448.       when @__command_partyform_index  # パーティ編成
  1449.         call_partyform_flag = true
  1450.       end
  1451.     # パーティ編成ボタン押下
  1452.     elsif KGC::LargeParty::MENU_PARTYFORM_BUTTON != nil &&
  1453.         Input.trigger?(KGC::LargeParty::MENU_PARTYFORM_BUTTON)
  1454.       call_partyform_flag = true
  1455.       current_menu_index = @command_window.index if current_menu_index == nil
  1456.     end
  1457.  
  1458.     # パーティ編成画面に移行
  1459.     if call_partyform_flag
  1460.       if $game_party.members.size == 0 || !$game_party.partyform_enable?
  1461.         Sound.play_buzzer
  1462.         return
  1463.       end
  1464.       Sound.play_decision
  1465.       $scene = Scene_PartyForm.new(current_menu_index)
  1466.       return
  1467.     end
  1468.  
  1469.     update_command_selection_KGC_LargeParty
  1470.   end
  1471. end
  1472.  
  1473. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1474.  
  1475. #==============================================================================
  1476. # ■ Scene_Shop
  1477. #==============================================================================
  1478.  
  1479. unless $imported["HelpExtension"]
  1480. class Scene_Shop < Scene_Base
  1481.   #--------------------------------------------------------------------------
  1482.   # ● フレーム更新
  1483.   #--------------------------------------------------------------------------
  1484.   alias udpate_KGC_LargeParty update
  1485.   def update
  1486.     # スクロール判定
  1487.     if !@command_window.active &&
  1488.         KGC::LargeParty::SHOP_STATUS_SCROLL_BUTTON != nil &&
  1489.         Input.press?(KGC::LargeParty::SHOP_STATUS_SCROLL_BUTTON)
  1490.       super
  1491.       update_menu_background
  1492.       update_scroll_status
  1493.       return
  1494.     else
  1495.       @status_window.cursor_rect.empty
  1496.     end
  1497.  
  1498.     udpate_KGC_LargeParty
  1499.   end
  1500.   #--------------------------------------------------------------------------
  1501.   # ○ ステータスウィンドウのスクロール処理
  1502.   #--------------------------------------------------------------------------
  1503.   def update_scroll_status
  1504.     # ステータスウィンドウにカーソルを表示
  1505.     @status_window.cursor_rect.width = @status_window.contents.width
  1506.     @status_window.cursor_rect.height = @status_window.height - 32
  1507.     @status_window.update
  1508.  
  1509.     if Input.press?(Input::UP)
  1510.       @status_window.oy = [@status_window.oy - 4, 0].max
  1511.     elsif Input.press?(Input::DOWN)
  1512.       max_pos = [@status_window.contents.height -
  1513.         (@status_window.height - 32), 0].max
  1514.       @status_window.oy = [@status_window.oy + 4, max_pos].min
  1515.     end
  1516.   end
  1517. end
  1518. end
  1519.  
  1520. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1521.  
  1522. #==============================================================================
  1523. # □ Scene_PartyForm
  1524. #------------------------------------------------------------------------------
  1525. #  パーティ編成画面の処理を行うクラスです。
  1526. #==============================================================================
  1527.  
  1528. class Scene_PartyForm < Scene_Base
  1529.   #--------------------------------------------------------------------------
  1530.   # ○ 定数
  1531.   #--------------------------------------------------------------------------
  1532.   CAPTION_OFFSET = 40  # キャプションウィンドウの位置補正
  1533.   HOST_MENU   = 0      # 呼び出し元 : メニュー
  1534.   HOST_MAP    = 1      # 呼び出し元 : マップ
  1535.   HOST_BATTLE = 2      # 呼び出し元 : 戦闘
  1536.   #--------------------------------------------------------------------------
  1537.   # ● オブジェクト初期化
  1538.   #     menu_index : コマンドのカーソル初期位置
  1539.   #     host_scene : 呼び出し元 (0..メニュー  1..マップ  2..戦闘)
  1540.   #--------------------------------------------------------------------------
  1541.   def initialize(menu_index = 0, host_scene = HOST_MENU)
  1542.     @menu_index = menu_index
  1543.     @host_scene = host_scene
  1544.   end
  1545.   #--------------------------------------------------------------------------
  1546.   # ● 開始処理
  1547.   #--------------------------------------------------------------------------
  1548.   def start
  1549.     super
  1550.     create_menu_background
  1551.  
  1552.     create_windows
  1553.     create_confirm_window
  1554.     adjust_window_location
  1555.  
  1556.     # 編成前のパーティを保存
  1557.     @battle_actors = $game_party.battle_members.dup
  1558.     @party_actors  = $game_party.all_members.dup
  1559.   end
  1560.   #--------------------------------------------------------------------------
  1561.   # ○ ウィンドウの作成
  1562.   #--------------------------------------------------------------------------
  1563.   def create_windows
  1564.     # 編成用ウィンドウを作成
  1565.     @battle_member_window = Window_PartyFormBattleMember.new
  1566.     @party_member_window  = Window_PartyFormAllMember.new
  1567.     @status_window        = Window_PartyFormStatus.new
  1568.     @status_window.set_actor(@battle_member_window.actor)
  1569.  
  1570.     # その他のウィンドウを作成
  1571.     @battle_member_caption_window =
  1572.       Window_PartyFormCaption.new(KGC::LargeParty::BATTLE_MEMBER_CAPTION)
  1573.     @party_member_caption_window =
  1574.       Window_PartyFormCaption.new(KGC::LargeParty::PARTY_MEMBER_CAPTION)
  1575.     @control_window = Window_PartyFormControl.new
  1576.   end
  1577.   #--------------------------------------------------------------------------
  1578.   # ○ 確認ウィンドウの作成
  1579.   #--------------------------------------------------------------------------
  1580.   def create_confirm_window
  1581.     commands = KGC::LargeParty::CONFIRM_WINDOW_COMMANDS
  1582.     @confirm_window =
  1583.       Window_Command.new(KGC::LargeParty::CONFIRM_WINDOW_WIDTH, commands)
  1584.     @confirm_window.index    = 0
  1585.     @confirm_window.openness = 0
  1586.     @confirm_window.active   = false
  1587.   end
  1588.   #--------------------------------------------------------------------------
  1589.   # ○ ウィンドウの座標調整
  1590.   #--------------------------------------------------------------------------
  1591.   def adjust_window_location
  1592.     # 基準座標を計算
  1593.     base_x = [@battle_member_window.width, @party_member_window.width].max
  1594.     base_x = [(Graphics.width - base_x) / 2, 0].max
  1595.     base_y = @battle_member_window.height + @party_member_window.height +
  1596.       @status_window.height + CAPTION_OFFSET * 2
  1597.     base_y = [(Graphics.height - base_y) / 2, 0].max
  1598.     base_z = @menuback_sprite.z + 1000
  1599.  
  1600.     # 編成用ウィンドウの座標をセット
  1601.     @battle_member_window.x = base_x
  1602.     @battle_member_window.y = base_y + CAPTION_OFFSET
  1603.     @battle_member_window.z = base_z
  1604.     @party_member_window.x = base_x
  1605.     @party_member_window.y = @battle_member_window.y +
  1606.       @battle_member_window.height + CAPTION_OFFSET
  1607.     @party_member_window.z = base_z
  1608.     @status_window.x = 0
  1609.     @status_window.y = @party_member_window.y + @party_member_window.height
  1610.     @status_window.z = base_z
  1611.  
  1612.     # その他のウィンドウの座標をセット
  1613.     @battle_member_caption_window.x = [base_x - 16, 0].max
  1614.     @battle_member_caption_window.y = @battle_member_window.y - CAPTION_OFFSET
  1615.     @battle_member_caption_window.z = base_z + 500
  1616.     @party_member_caption_window.x = [base_x - 16, 0].max
  1617.     @party_member_caption_window.y = @party_member_window.y - CAPTION_OFFSET
  1618.     @party_member_caption_window.z = base_z + 500
  1619.     @control_window.x = @status_window.width
  1620.     @control_window.y = @status_window.y
  1621.     @control_window.z = base_z
  1622.  
  1623.     @confirm_window.x = (Graphics.width - @confirm_window.width) / 2
  1624.     @confirm_window.y = (Graphics.height - @confirm_window.height) / 2
  1625.     @confirm_window.z = base_z + 1000
  1626.   end
  1627.   #--------------------------------------------------------------------------
  1628.   # ● 終了処理
  1629.   #--------------------------------------------------------------------------
  1630.   def terminate
  1631.     super
  1632.     dispose_menu_background
  1633.     @battle_member_window.dispose
  1634.     @party_member_window.dispose
  1635.     @status_window.dispose
  1636.     @battle_member_caption_window.dispose
  1637.     @party_member_caption_window.dispose
  1638.     @control_window.dispose
  1639.     @confirm_window.dispose
  1640.   end
  1641.   #--------------------------------------------------------------------------
  1642.   # ● メニュー画面系の背景作成
  1643.   #--------------------------------------------------------------------------
  1644.   def create_menu_background
  1645.     super
  1646.     @menuback_sprite.z = 20000
  1647.   end
  1648.   #--------------------------------------------------------------------------
  1649.   # ● 元の画面へ戻る
  1650.   #--------------------------------------------------------------------------
  1651.   def return_scene
  1652.     case @host_scene
  1653.     when HOST_MENU
  1654.       $scene = Scene_Menu.new(@menu_index)
  1655.     when HOST_MAP
  1656.       $scene = Scene_Map.new
  1657.     when HOST_BATTLE
  1658.       $scene = Scene_Battle.new
  1659.     end
  1660.     $game_player.refresh
  1661.   end
  1662.   #--------------------------------------------------------------------------
  1663.   # ● フレーム更新
  1664.   #--------------------------------------------------------------------------
  1665.   def update
  1666.     super
  1667.     update_menu_background
  1668.     update_window
  1669.     if @battle_member_window.active
  1670.       update_battle_member
  1671.     elsif @party_member_window.active
  1672.       update_party_member
  1673.     elsif @confirm_window.active
  1674.       update_confirm
  1675.     end
  1676.   end
  1677.   #--------------------------------------------------------------------------
  1678.   # ○ ウィンドウ更新
  1679.   #--------------------------------------------------------------------------
  1680.   def update_window
  1681.     @battle_member_window.update
  1682.     @party_member_window.update
  1683.     @status_window.update
  1684.     @battle_member_caption_window.update
  1685.     @party_member_caption_window.update
  1686.     @control_window.update
  1687.     @confirm_window.update
  1688.   end
  1689.   #--------------------------------------------------------------------------
  1690.   # ○ ウィンドウ再描画
  1691.   #--------------------------------------------------------------------------
  1692.   def refresh_window
  1693.     @battle_member_window.refresh
  1694.     @party_member_window.refresh
  1695.   end
  1696.   #--------------------------------------------------------------------------
  1697.   # ○ フレーム更新 (戦闘メンバーウィンドウがアクティブの場合)
  1698.   #--------------------------------------------------------------------------
  1699.   def update_battle_member
  1700.     @status_window.set_actor(@battle_member_window.actor)
  1701.     if Input.trigger?(Input::A)
  1702.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1703.         actor = @battle_member_window.actor
  1704.         # アクターを外せない場合
  1705.         if actor == nil || $game_party.actor_fixed?(actor.id)
  1706.           Sound.play_buzzer
  1707.           return
  1708.         end
  1709.         # アクターを外す
  1710.         Sound.play_decision
  1711.         actors = $game_party.battle_members
  1712.         actors.delete_at(@battle_member_window.index)
  1713.         $game_party.set_battle_member(actors)
  1714.         refresh_window
  1715.       end
  1716.     elsif Input.trigger?(Input::B)
  1717.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1718.         # 確認ウィンドウに切り替え
  1719.         Sound.play_cancel
  1720.         show_confirm_window
  1721.       else                                            # 並び替え中
  1722.         # 並び替え解除
  1723.         Sound.play_cancel
  1724.         @battle_member_window.selected_index = nil
  1725.         @battle_member_window.refresh
  1726.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1727.       end
  1728.     elsif Input.trigger?(Input::C)
  1729.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1730.         actor = @battle_member_window.actor
  1731.         # アクターを外せない場合
  1732.         if actor != nil && $game_party.actor_fixed?(actor.id)
  1733.           Sound.play_buzzer
  1734.           return
  1735.         end
  1736.         # パーティメンバーウィンドウに切り替え
  1737.         Sound.play_decision
  1738.         @battle_member_window.active = false
  1739.         @party_member_window.active = true
  1740.         @control_window.mode = Window_PartyFormControl::MODE_PARTY_MEMBER
  1741.       else                                            # 並び替え中
  1742.         unless can_change_shift?(@battle_member_window.actor)
  1743.           Sound.play_buzzer
  1744.           return
  1745.         end
  1746.         # 並び替え実行
  1747.         Sound.play_decision
  1748.         index1 = @battle_member_window.selected_index
  1749.         index2 = @battle_member_window.index
  1750.         change_shift(index1, index2)
  1751.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1752.       end
  1753.     elsif Input.trigger?(Input::X)
  1754.       # 並び替え不可能な場合
  1755.       unless can_change_shift?(@battle_member_window.actor)
  1756.         Sound.play_buzzer
  1757.         return
  1758.       end
  1759.       if @battle_member_window.selected_index == nil  # 並び替え中でない
  1760.         # 並び替え開始
  1761.         Sound.play_decision
  1762.         @battle_member_window.selected_index = @battle_member_window.index
  1763.         @battle_member_window.refresh
  1764.         @control_window.mode = Window_PartyFormControl::MODE_SHIFT_CHANGE
  1765.       else                                            # 並び替え中
  1766.         # 並び替え実行
  1767.         Sound.play_decision
  1768.         index1 = @battle_member_window.selected_index
  1769.         index2 = @battle_member_window.index
  1770.         change_shift(index1, index2)
  1771.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1772.       end
  1773.     end
  1774.   end
  1775.   #--------------------------------------------------------------------------
  1776.   # ○ 並び替え可否判定
  1777.   #--------------------------------------------------------------------------
  1778.   def can_change_shift?(actor)
  1779.     # 選択したアクターが存在しない、または並び替え不能な場合
  1780.     if actor == nil ||
  1781.         (KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED &&
  1782.          $game_party.actor_fixed?(actor.id))
  1783.       return false
  1784.     end
  1785.     return true
  1786.   end
  1787.   #--------------------------------------------------------------------------
  1788.   # ○ 並び替え
  1789.   #--------------------------------------------------------------------------
  1790.   def change_shift(index1, index2)
  1791.     # 位置を入れ替え
  1792.     $game_party.change_shift(index1, index2)
  1793.     # 選択済みインデックスをクリア
  1794.     @battle_member_window.selected_index = nil
  1795.     refresh_window
  1796.   end
  1797.   #--------------------------------------------------------------------------
  1798.   # ○ フレーム更新 (パーティウィンドウがアクティブの場合)
  1799.   #--------------------------------------------------------------------------
  1800.   def update_party_member
  1801.     @status_window.set_actor(@party_member_window.actor)
  1802.     if Input.trigger?(Input::B)
  1803.       Sound.play_cancel
  1804.       # 戦闘メンバーウィンドウに切り替え
  1805.       @battle_member_window.active = true
  1806.       @party_member_window.active = false
  1807.         @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1808.     elsif Input.trigger?(Input::C)
  1809.       actor = @party_member_window.actor
  1810.       # アクターが戦闘メンバーに含まれる場合
  1811.       if $game_party.battle_members.include?(actor)
  1812.         Sound.play_buzzer
  1813.         return
  1814.       end
  1815.       # アクターを入れ替え
  1816.       Sound.play_decision
  1817.       actors = $game_party.all_members
  1818.       battle_actors = $game_party.battle_members
  1819.       if @battle_member_window.actor != nil
  1820.         actors[@party_member_window.actor_index] = @battle_member_window.actor
  1821.         actors[@battle_member_window.index] = actor
  1822.         $game_party.set_member(actors.compact)
  1823.       end
  1824.       battle_actors[@battle_member_window.index] = actor
  1825.       $game_party.set_battle_member(battle_actors.compact)
  1826.       refresh_window
  1827.       # 戦闘メンバーウィンドウに切り替え
  1828.       @battle_member_window.active = true
  1829.       @party_member_window.active = false
  1830.       @control_window.mode = Window_PartyFormControl::MODE_BATTLE_MEMBER
  1831.     end
  1832.   end
  1833.   #--------------------------------------------------------------------------
  1834.   # ○ フレーム更新 (確認ウィンドウがアクティブの場合)
  1835.   #--------------------------------------------------------------------------
  1836.   def update_confirm
  1837.     if Input.trigger?(Input::B)
  1838.       Sound.play_cancel
  1839.       hide_confirm_window
  1840.     elsif Input.trigger?(Input::C)
  1841.       case @confirm_window.index
  1842.       when 0  # 編成完了
  1843.         # パーティが無効の場合
  1844.         unless battle_member_valid?
  1845.           Sound.play_buzzer
  1846.           return
  1847.         end
  1848.         Sound.play_decision
  1849.         return_scene
  1850.       when 1  # 編成中断
  1851.         Sound.play_decision
  1852.         # パーティを編成前の状態に戻す
  1853.         $game_party.set_member(@party_actors)
  1854.         $game_party.set_battle_member(@battle_actors)
  1855.         return_scene
  1856.       when 2  # キャンセル
  1857.         Sound.play_cancel
  1858.         hide_confirm_window
  1859.       end
  1860.     end
  1861.   end
  1862.   #--------------------------------------------------------------------------
  1863.   # ○ 戦闘メンバー有効判定
  1864.   #--------------------------------------------------------------------------
  1865.   def battle_member_valid?
  1866.     return false if $game_party.battle_members.size == 0  # 戦闘メンバーが空
  1867.     $game_party.battle_members.each { |actor|
  1868.       return true if actor.exist?  # 生存者がいればOK
  1869.     }
  1870.     return false
  1871.   end
  1872.   #--------------------------------------------------------------------------
  1873.   # ○ 確認ウィンドウの表示
  1874.   #--------------------------------------------------------------------------
  1875.   def show_confirm_window
  1876.     if @battle_member_window.active
  1877.       @last_active_window = @battle_member_window
  1878.     else
  1879.       @last_active_window = @party_member_window
  1880.     end
  1881.     @battle_member_window.active = false
  1882.     @party_member_window.active = false
  1883.  
  1884.     @confirm_window.draw_item(0, battle_member_valid?)
  1885.     @confirm_window.open
  1886.     @confirm_window.active = true
  1887.   end
  1888.   #--------------------------------------------------------------------------
  1889.   # ○ 確認ウィンドウの非表示
  1890.   #--------------------------------------------------------------------------
  1891.   def hide_confirm_window
  1892.     @confirm_window.active = false
  1893.     @confirm_window.close
  1894.     @last_active_window.active = true
  1895.   end
  1896. end
  1897.  
  1898. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1899.  
  1900. #==============================================================================
  1901. # ■ Scene_Battle
  1902. #==============================================================================
  1903.  
  1904. class Scene_Battle < Scene_Base
  1905.   #--------------------------------------------------------------------------
  1906.   # ● メッセージ表示が終わるまでウェイト
  1907.   #--------------------------------------------------------------------------
  1908.   alias wait_for_message_KGC_LargeParty wait_for_message
  1909.   def wait_for_message
  1910.     return if @ignore_wait_for_message  # メッセージ終了までのウェイトを無視
  1911.  
  1912.     wait_for_message_KGC_LargeParty
  1913.   end
  1914.   #--------------------------------------------------------------------------
  1915.   # ● レベルアップの表示
  1916.   #--------------------------------------------------------------------------
  1917.   alias display_level_up_KGC_LargeParty display_level_up
  1918.   def display_level_up
  1919.     @ignore_wait_for_message = true
  1920.  
  1921.     display_level_up_KGC_LargeParty
  1922.  
  1923.     exp = $game_troop.exp_total * KGC::LargeParty::STAND_BY_EXP_RATE / 1000
  1924.     $game_party.stand_by_members.each { |actor|
  1925.       if actor.exist?
  1926.         actor.gain_exp(exp, KGC::LargeParty::SHOW_STAND_BY_LEVEL_UP)
  1927.       end
  1928.     }
  1929.     @ignore_wait_for_message = false
  1930.     wait_for_message
  1931.   end
  1932.   #--------------------------------------------------------------------------
  1933.   # ● パーティコマンド選択の開始
  1934.   #--------------------------------------------------------------------------
  1935.   alias start_party_command_selection_KGC_LargeParty start_party_command_selection
  1936.   def start_party_command_selection
  1937.     if $game_temp.in_battle
  1938.       @status_window.index = 0
  1939.     end
  1940.  
  1941.     start_party_command_selection_KGC_LargeParty
  1942.   end
  1943.  
  1944.   if KGC::LargeParty::USE_BATTLE_PARTYFORM
  1945.  
  1946.   #--------------------------------------------------------------------------
  1947.   # ● 情報表示ビューポートの作成
  1948.   #--------------------------------------------------------------------------
  1949.   alias create_info_viewport_KGC_LargeParty create_info_viewport
  1950.   def create_info_viewport
  1951.     create_info_viewport_KGC_LargeParty
  1952.  
  1953.     @__command_partyform_index =
  1954.       @party_command_window.add_command(Vocab.partyform_battle)
  1955.     @party_command_window.draw_item(@__command_partyform_index,
  1956.       $game_party.battle_partyform_enable?)
  1957.   end
  1958.   #--------------------------------------------------------------------------
  1959.   # ● パーティコマンド選択の更新
  1960.   #--------------------------------------------------------------------------
  1961.   alias update_party_command_selection_KGC_LargeParty update_party_command_selection
  1962.   def update_party_command_selection
  1963.     if Input.trigger?(Input::C)
  1964.       case @party_command_window.index
  1965.       when @__command_partyform_index  # パーティ編成
  1966.         unless $game_party.battle_partyform_enable?
  1967.           Sound.play_buzzer
  1968.           return
  1969.         end
  1970.         Sound.play_decision
  1971.         process_partyform
  1972.         return
  1973.       end
  1974.     end
  1975.  
  1976.     update_party_command_selection_KGC_LargeParty
  1977.   end
  1978.   #--------------------------------------------------------------------------
  1979.   # ○ パーティ編成の処理
  1980.   #--------------------------------------------------------------------------
  1981.   def process_partyform
  1982.     prev_party_command_active = @party_command_window.active
  1983.     @party_command_window.active = false
  1984.     Graphics.freeze
  1985.     snapshot_for_background
  1986.     $scene = Scene_PartyForm.new(0, Scene_PartyForm::HOST_BATTLE)
  1987.     $scene.main
  1988.     $scene = self
  1989.     @spriteset.update_actors
  1990.     @status_window.refresh
  1991.     @party_command_window.active = prev_party_command_active
  1992.     Window_Base.show_cursor_animation if $imported["CursorAnimation"]
  1993.     perform_transition
  1994.   end
  1995.   #--------------------------------------------------------------------------
  1996.   # ● 敗北の処理
  1997.   #--------------------------------------------------------------------------
  1998.   alias process_defeat_KGC_LargeParty process_defeat
  1999.   def process_defeat
  2000.     process_defeat_launch
  2001.  
  2002.     process_defeat_KGC_LargeParty if $game_party.all_dead?
  2003.   end
  2004.   #--------------------------------------------------------------------------
  2005.   # ○ 全滅時の入れ替え処理
  2006.   #--------------------------------------------------------------------------
  2007.   def process_defeat_launch
  2008.     while @spriteset.animation?
  2009.       update_basic
  2010.     end
  2011.  
  2012.     return unless KGC::LargeParty::ENABLE_DEFEAT_LAUNCH
  2013.     return unless $game_party.partyform_enable?
  2014.  
  2015.     exist = false
  2016.     $game_party.all_members.each { |actor| exist |= actor.exist? }
  2017.     return unless exist  # 生存者なし
  2018.  
  2019.     @info_viewport.visible  = false
  2020.     @message_window.visible = true
  2021.  
  2022.     # 戦闘可能者を出撃 (固定アクターは残す)
  2023.     $game_party.remove_all_battle_member
  2024.     max = $game_party.max_battle_member_count
  2025.     while ($game_party.battle_members.size < max)
  2026.       actor = $game_party.stand_by_members.find { |a| a.exist? }
  2027.       break if actor == nil
  2028.       $game_party.add_battle_member(actor.id)
  2029.       @status_window.refresh
  2030.       display_launch(actor)
  2031.     end
  2032.  
  2033.     @info_viewport.visible  = true
  2034.     @message_window.visible = false
  2035.     @message_window.clear
  2036.   end
  2037.   #--------------------------------------------------------------------------
  2038.   # ○ 出撃の表示
  2039.   #     target : 対象者 (アクター)
  2040.   #--------------------------------------------------------------------------
  2041.   def display_launch(target)
  2042.     text = sprintf(Vocab::DefeatLaunch, target.name)
  2043.     @message_window.add_instant_text(text)
  2044.     wait(40)
  2045.   end
  2046.  
  2047.   end  # <-- if KGC::LargeParty::USE_BATTLE_PARTYFORM
  2048. end

来自这个网站
可以使用这个脚本   

评分

参与人数 1星屑 +80 收起 理由
Luciffer + 80 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

送快递的水表员

梦石
10
星屑
4867
在线时间
3303 小时
注册时间
2012-6-27
帖子
7160

开拓者贵宾

3
发表于 2013-8-21 17:41:16 | 只看该作者
特定战斗的话战斗之前就先调离其他队员,战斗结束后再将调离的队员重新换回队伍,必要的话还可以调换顺序(通过队员的调离加入即可),加入队员时只要不勾选初始化就好了。

如果暗雷也是这样的话……{:2_276:}就略麻烦啊……(上面的方法就会被推翻
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
66 小时
注册时间
2011-8-12
帖子
14
4
 楼主| 发表于 2013-8-21 18:37:24 | 只看该作者
Password 发表于 2013-8-21 17:41
特定战斗的话战斗之前就先调离其他队员,战斗结束后再将调离的队员重新换回队伍,必要的话还可以调换顺序( ...

不是特定战斗= =是要所有战斗都是.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 20:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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