コード: 全て選択
#=========================================================
# ■アクター選択用 選択肢作成スクリプト
# 作成 KPoal
# ver 1.00 2017/10/26
# ver 1.01 11/09
#=========================================================
#
# 条件を満たすアクターのみで選択肢を作り、
# 選択されたアクターのIDを変数に格納する事ができます。
#
# ver1.01 ゲーム中でアクターの名前変更をした場合に
# setup_choices_Actorでは変更が反映されないバグを修正
#=========================================================
=begin
使用する場合、イベントコマンドの「スクリプト」で
以下の例の様に書き込んで下さい。
例)
----------------------------------------
message="アクターを選んでください"
$game_message.add(message)
$game_temp.ACw="state?(10)"
setup_choices_Party(1)
wait_for_message
----------------------------------------
「アクターを選んでください」のメッセージを下に表示しつつ、
パーティにいる全てのアクターで
ステート10番になっている者のみで選択肢を作る場合
・基本選択肢
setup_choices_Actor(1) : 全てのアクター
setup_choices_Party(1) : パーティにいる全てのアクター
setup_choices_Alive(1) : パーティにいる生存アクター
setup_choices_Dead(1) : パーティにいる死亡アクター
キャンセル不可にする場合、括弧の中の数字を0にします。
・条件式記入例
$game_temp.ACw
="state?(10)" :ステート10番になっている
="skill_learn?($data_skills[12])" :スキル12番を覚えている
="armors.include?($data_armors[13])" :防具ID13番を装備している
="!state?(14) && atk>=100" :ステート14番になっておらず、かつ攻撃力100以上
=end
# 選択したアクターのアクターIDを取得する変数番号を入れて下さい。
COICEAC_VID = 30
#================================================================
#以下、変更不要
#================================================================
class Game_Temp
attr_accessor :choiseActor
attr_accessor :whatchoice
attr_accessor :ACw
end
class Game_BattlerBase
def script_AC_what?
if $game_temp.ACw == ""
return true
else
return eval($game_temp.ACw)
end
end
end
class Game_Unit
#--------------------------------------------------------------------------
# ● 全アクターの取得
#--------------------------------------------------------------------------
def actors_AC_plus
$data_actors.select {|member| member && $game_actors[member.id].script_AC_what? }
end
#--------------------------------------------------------------------------
# ● メンバーの取得
#--------------------------------------------------------------------------
def members_AC_plus
members.select {|member| $game_actors[member.id].script_AC_what? }
end
#--------------------------------------------------------------------------
# ● 生存しているメンバーの配列取得
#--------------------------------------------------------------------------
def alive_members_AC_plus
members.select {|member| member.alive? && $game_actors[member.id].script_AC_what? }
end
#--------------------------------------------------------------------------
# ● 戦闘不能のメンバーの配列取得
#--------------------------------------------------------------------------
def dead_members_AC_plus
members.select {|member| member.dead? && $game_actors[member.id].script_AC_what? }
end
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 選択肢のセットアップ(全アクター)
#--------------------------------------------------------------------------
def setup_choices_Actor(param)
$game_party.actors_AC_plus.each {|s| $game_message.choices.push($game_actors[s.id].name) }
$game_message.choice_cancel_type = param
$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
$game_temp.choiseActor=true
$game_temp.whatchoice=1
end
#--------------------------------------------------------------------------
# ● 選択肢のセットアップ(パーティメンバー)
#--------------------------------------------------------------------------
def setup_choices_Party(param)
$game_party.members_AC_plus.each {|s| $game_message.choices.push(s.name) }
$game_message.choice_cancel_type = param
$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
$game_temp.choiseActor=true
$game_temp.whatchoice=2
end
#--------------------------------------------------------------------------
# ● 選択肢のセットアップ(パーティの生存メンバー)
#--------------------------------------------------------------------------
def setup_choices_Alive(param)
$game_party.alive_members_AC_plus.each {|s| $game_message.choices.push(s.name) }
$game_message.choice_cancel_type = param
$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
$game_temp.choiseActor=true
$game_temp.whatchoice=3
end
#--------------------------------------------------------------------------
# ● 選択肢のセットアップ(パーティの戦闘不能メンバー)
#--------------------------------------------------------------------------
def setup_choices_Dead(param)
$game_party.dead_members.each {|s| $game_message.choices.push(s.name) }
$game_message.choice_cancel_type = param
$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
$game_temp.choiseActor=true
$game_temp.whatchoice=4
end
end
class Window_ChoiceList < Window_Command
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_for_actorchoice initialize
def initialize(message_window)
$game_temp.ACw="true"
initialize_for_actorchoice(message_window)
end
#--------------------------------------------------------------------------
# ● 決定ハンドラの呼び出し
#--------------------------------------------------------------------------
alias call_ok_handler_for_actorcoice call_ok_handler
def call_ok_handler
case $game_temp.whatchoice
when 1; $game_variables[COICEAC_VID]=$game_party.actors_AC_plus[index].id
when 2; $game_variables[COICEAC_VID]=$game_party.members_AC_plus[index].id
when 3; $game_variables[COICEAC_VID]=$game_party.alive_members_AC_plus[index].id
when 4; $game_variables[COICEAC_VID]=$game_party.dead_members[index].id
end
$game_temp.choiseActor=false
$game_temp.whatchoice=0
$game_temp.ACw="true"
call_ok_handler_for_actorcoice
end
#--------------------------------------------------------------------------
# ● キャンセルハンドラの呼び出し
#--------------------------------------------------------------------------
alias call_cancel_handler_for_actorcoice call_cancel_handler
def call_cancel_handler
$game_variables[COICEAC_VID]=0 if $game_temp.choiseActor
$game_temp.choiseActor=false
$game_temp.whatchoice=0
$game_temp.ACw="true"
call_cancel_handler_for_actorcoice
end
end




ツクールwebフォーラムの方で先に投稿していました、
条件を満たすアクターのみで選択肢を作り、
選択されたアクターのアクターIDを変数に取得するスクリプト(VXAce版)です。
MV版も同様に投稿しましたが、
選択肢の最大数が4つしかない分こちらの方が需要は高めかと。