パーティーメンバーカスタム


パーティーメンバーの一時退避、初期化、復元が出来ます ※シナリオが複数あってシナリオごとにパーティーメンバーが違うってな場合に便利・・・かも?。 変更点 2008:02:05 ・パーティー1つ分しか保存できなかったのを一応2つ分まで拡張 ・ニューゲームを選ぶとエラー落ちするバグを修正 2008:04:10 ・配列を使うことによりスクリプトを削減 ・パーティーのメンバー数や退避スロットをカスタマイズポイントにて変更可能に 2008:04:19 ・セーブ/ロードできない場合の判定を改良 2008:07:01 ・パーティーメンバー初期化の不具合を修正。 (おかしいなぁ・・・以前は出なかった気がするんだけどなぁ・・・) 2009:03:28 ・テスト用のダイアログ表示部分の削除忘れを修正 2010:07:17 ・インタープリターに関数を追加することで、呼び出し関数名を省略化 2011:12:23 ・ひとつのパーティーの最大アクター数の制限を解除(VX Ace用) 2012:08:11 ・VX Ace用スクリプトになっていたバグを修正
#==============================================================================
# ■ パーティーメンバーの退避&復帰 By 貪藻矢射妥←
#------------------------------------------------------------------------------
#  パーティーメンバーの一時退避、初期化、復元が出来ます
#  シナリオが複数あってシナリオごとにパーティーメンバーが違うってな場合に
#  便利かも。
#  
#  現行パーティーの一時退避&初期化は
#  party_save(n)
#  (この後別のパーティーを参入させてください。)
#  
#  パーティーを元に戻すには
#  party_return(n)
#  
#  を使用してください。
#  
#  ※注意!
#  party_save(n)を続けざまに2回実行すると当然の如く現行メンバーが
#  全員消失してしまうので注意してください。
#  
#==============================================================================
# 更新っぽいもの
# 2008:02:05
# ・パーティー1つ分しか保存できなかったのを一応2つ分まで拡張
# ・ニューゲームを選ぶとエラー落ちするバグを修正
# 
# 2008:04:10
# ・配列を使うことによりスクリプトを削減
# ・パーティーのメンバー数や退避スロットをカスタマイズポイントにて変更可能に
# 
# 2008:04:19
# ・セーブ/ロードできない場合の判定を改良
# 
# 2008:07:01
# ・パーティーメンバー初期化の不具合を修正。
#  (おかしいなぁ・・・以前は出なかった気がするんだけどなぁ・・・)
# 
# 2009:03:28
# ・テスト用のダイアログ表示部分の削除忘れを修正
# 
# 2010:07:17
# ・インタープリターに関数を追加することで、呼び出し関数名を省略化
# 
# 2011:12:23
# ・ひとつのパーティーの最大アクター数の制限を解除
#
# 2012:08:11
# ・VX Ace用スクリプトになっていたバグを修正

module PSL
  # パーティーメンバーを退避するデータスロットの最大数
  SAVEMAX  = 10
  # エラーメッセージ
  ERR_MSG_001 = "%sできません"
  ERR_MSG_002 = "パーティー%s箇所が不正です。"
end

class Game_Party
  include PSL
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :save_actors
  
  #--------------------------------------------------------------------------
  # ● 現行パーティーの一時退避&初期化
  #--------------------------------------------------------------------------
  def party_save(n)
    if n < 0 || n > SAVEMAX
      p sprintf(ERR_MSG_001, "セーブ")
    else
      party_save_root(n)
      party_init
    end
  end
  
  #--------------------------------------------------------------------------
  # ● パーティーを元に戻す
  #--------------------------------------------------------------------------
  def party_return(n)
    if n < 0 || n > SAVEMAX
      p sprintf(ERR_MSG_001, "ロード")
    else
      party_init
      party_return_root(n)
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 退避先パーティーの初期化
  #--------------------------------------------------------------------------
  def party_initialize(n)
    if @save_actors == nil
      @save_actors = Array.new(SAVEMAX + 1)
      @save_actors[0] = false
    end
    
    @save_actors[n] = []
  end
  
  #--------------------------------------------------------------------------
  # ● 現行パーティーの保存
  #--------------------------------------------------------------------------
  def party_save_root(n)
    party_initialize(n)
    
    tmp_array = []
    
    for i in 1..$game_party.actors.size
      tmp_array[i - 1] = $game_party.actors[i - 1].id
    end
    @save_actors[n] = tmp_array
  end
  
  #--------------------------------------------------------------------------
  # ● 現行パーティーの初期化
  #--------------------------------------------------------------------------
  def party_init
    for i in 0...$data_actors.size
      if $data_actors[i] != nil && @actors.include?($game_actors[i])
        remove_actor(i)
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 現行パーティーの復元
  #--------------------------------------------------------------------------
  def party_return_root(n)
    for i in 0...@save_actors[n].size
      add_actor(@save_actors[n][i])
    end
  end
end

class Interpreter
  #--------------------------------------------------------------------------
  # ● 現行パーティーの一時退避&初期化
  #--------------------------------------------------------------------------
  def party_save(n)
    if n.is_a?(Numeric)
      $game_party.party_save(n)
    else
      p sprintf(ERR_MSG_002, "セーブ")
    end
  end
  #--------------------------------------------------------------------------
  # ● パーティーを元に戻す
  #--------------------------------------------------------------------------
  def party_return(n)
    if n.is_a?(Numeric)
      $game_party.party_return(n)
    else
      p sprintf(ERR_MSG_002, "ロード")
    end
  end
end
party_save(1〜SAVEMAX) で現行パーティーを一時退避したのちに別パーティーを設定してください。 戻す場合は party_return(1〜SAVEMAX) で元に戻ります。 また、薄緑色の部分でデータをセーブする最大の領域を設定することが可能です。 (0番目の領域は予備フラグとして使用) ※注意! party_save(n)を続けざまに2回実行すると当然の如く現行メンバーが全員消失してしまうので注意してください。

戻る