#============================================================================== # ■ RGSS3 マルチセレクトシステム Ver1.02 by 星潟 #============================================================================== # 本来、アイテム選択で選択できるのは「だいじな物」だけですが # その他にアイテム(だいじな物ではない物)、武器、防具、 # そして、アクター(全員・パーティ内・パーティ外それぞれ選択可能)に対する # 選択が可能になります。 # 挙動は「だいじな物」と同じく、選択した物のIDで分岐し # 何もない場合やキャンセル時には0を格納します。 # また、一度実行した後はこのスクリプトによる設定2つは初期化されます。 #============================================================================== # ★使用例 # イベントコマンド「アイテム選択」の直前に # イベントコマンドのスクリプトで記入。 #------------------------------------------------------------------------------ # $game_temp.multi_select_all = true # # アイテム選択で本来選択出来ない物も選択可能になります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 1 # # アイテム選択が通常のアイテム(だいじな物でないアイテム)選択となります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 2 # # アイテム選択が武器選択となります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 3 # # アイテム選択が防具選択となります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 4 # # アイテム選択が表示可能な全アクター選択となります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 5 # # アイテム選択が表示可能なパーティにいるアクター選択となります。 #------------------------------------------------------------------------------ # $game_temp.multi_select_type = 6 # # アイテム選択が表示可能なパーティにいないアクター選択となります。 #============================================================================== # Ver1.01 # 全て選択可能にする為の処理を追加しました。 # Ver1.02 # F12キーを押した後、このスクリプトの動作時に稀にエラーになる不具合を修正。 #============================================================================== module MULTI_SELECT #空のハッシュを準備。 AS = {} #アクターを選択する際に、各アクターの表示フラグとなるスイッチを指定します。 #例. #AS[1] = 11 #この場合、アクターID1はスイッチID11がONの時 #アクター選択時に表示されます。 AS[1] = 11 AS[2] = 12 AS[3] = 13 AS[4] = 14 AS[5] = 15 AS[6] = 16 AS[7] = 17 AS[8] = 18 AS[9] = 19 AS[10] = 20 end class Game_Temp attr_accessor :multi_select_type attr_accessor :multi_select_all end class Window_KeyItem < Window_ItemList #-------------------------------------------------------------------------- # 項目の描画 #-------------------------------------------------------------------------- alias draw_item_multi_select draw_item unless $! def draw_item(index) #選択タイプがアクターでない場合は本来の処理を実行。 if @multi_select_type < 4 draw_item_multi_select(index) else #アクターを取得。 actor = @data[index] #アクターが存在する場合 if actor #矩形を取得し、幅を少し削る。 rect = item_rect(index) rect.width -= 4 #アクターの名前を描写。 draw_actor_name(actor, rect.x, rect.y) end end end #-------------------------------------------------------------------------- # アイテムをリストに含めるかどうか #-------------------------------------------------------------------------- alias include_multi_select? include? unless $! def include?(item) #カテゴリがアクターの場合はtrue。 return true if @category == :actor #本来処理を実行。 include_multi_select?(item) end #-------------------------------------------------------------------------- # アイテムリストの作成 #-------------------------------------------------------------------------- alias make_item_list_multi_select make_item_list unless $! def make_item_list #選択タイプを取得。 @multi_select_type = $game_temp.multi_select_type ? $game_temp.multi_select_type.to_i : 0 #選択タイプに応じて、カテゴリを設定。 case @multi_select_type when 1 @category = :item when 2 @category = :weapon when 3 @category = :armor when 4..6 @category = :actor end #カテゴリがアクターでない場合は本来の処理を実行。 if @category != :actor make_item_list_multi_select else #選択可能アクターの配列を取得。 @data = $game_party.selectable_actors end end #-------------------------------------------------------------------------- # アイテムを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias enable_multi_select? enable? unless $! def enable?(item) #カテゴリがアクターでない場合は本来の処理を実行。 #アクターの場合はtrueを返す。 return true if $game_temp.multi_select_all @category != :actor ? enable_multi_select?(item) : true end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # 選択可能アクター #-------------------------------------------------------------------------- def selectable_actors #空の配列を用意 array = [] #アクターデータ別に判定。 $data_actors.each {|actor| #アクターが存在しない場合は飛ばす。 next unless actor #アクター表示フラグが設定されていない場合は飛ばす。 next unless MULTI_SELECT::AS[actor.id] #アクター表示フラグとなるスイッチがONでない場合は飛ばす。 next unless $game_switches[MULTI_SELECT::AS[actor.id]] #選択タイプが4の場合は無条件で加える。 #5の場合はパーティ内の場合、6の場合はパーティ外の場合に加える。 case $game_temp.multi_select_type when 5;next if !$game_party.members.include?($game_actors[actor.id]) when 6;next if $game_party.members.include?($game_actors[actor.id]) end array.push($game_actors[actor.id]) } #配列を返す。 array end end class Game_Interpreter #-------------------------------------------------------------------------- # アイテム選択の処理 #-------------------------------------------------------------------------- alias command_104_multi_select command_104 def command_104 #本来の処理を実行。 command_104_multi_select #関連処理を初期化。 $game_temp.multi_select_type = nil $game_temp.multi_select_all = nil end end