#==============================================================================
# ■ パーティーメンバーの退避&復帰 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
|