アクターを選ぶための選択肢(VXAce版)

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
アバター
KPoal
記事: 6
登録日時: 2017年10月14日(土) 13:10

アクターを選ぶための選択肢(VXAce版)

投稿記事by KPoal » 2017年11月24日(金) 13:11

コード: 全て選択


#=========================================================
# ■アクター選択用 選択肢作成スクリプト
#  作成 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つしかない分こちらの方が需要は高めかと。

“Ace:スクリプト素材(RGSS3)” へ戻る