#============================================================================== # ■ RGSS3 エンカウント条件 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # ランダムエンカウント時、敵グループに対してエンカウント条件を付けます。 # 条件を満たさない敵グループはエンカウント対象から除外されます。 #------------------------------------------------------------------------------ # ★設定方法(全てマップのメモ欄を使用します) #------------------------------------------------------------------------------ # ☆スイッチID10がONの場合に敵グループID1のエンカウントを有効にする場合 # # <エンカウント条件:1,$game_switches[10]> #------------------------------------------------------------------------------ # ☆スイッチID15がOFFの場合に敵グループID2のエンカウントを有効にする場合 # # <エンカウント条件:2,!$game_switches[15]> #------------------------------------------------------------------------------ # ☆変数ID20が10以上の場合に敵グループID3のエンカウントを有効にする場合 # # <エンカウント条件:3,$game_variables[20]>=10> #------------------------------------------------------------------------------ # ☆変数ID25が30の場合に敵グループID4のエンカウントを有効にする場合 # # <エンカウント条件:4,$game_variables[20]==30> #------------------------------------------------------------------------------ # ☆徒歩ではない場合に敵グループID5のエンカウントを有効にする場合 # # <エンカウント条件:5,!$game_player.normal_walk?> #------------------------------------------------------------------------------ # evalを用いた判定の為、工夫すれば上記以外の様々な要素でも判定できます。 #------------------------------------------------------------------------------ # Ver1.01 致命的不具合と説明文を修正しました。 #============================================================================== module ENCOUNT_CONDITION #エンカウント条件リスト設定用のキーワードを指定します。 WORD = "エンカウント条件" end class Game_Map #-------------------------------------------------------------------------- # エンカウントリストの取得 #-------------------------------------------------------------------------- alias encounter_list_conditions encounter_list def encounter_list #エンカウントリストを取得し、複製する。 data = encounter_list_conditions.clone #真のエンカウントリスト用の配列を作成する。 true_data = [] #複製したエンカウントリストをそれぞれ条件リストで判別し #条件が設定されていないか、条件を満たした物のみ配列に加える。 data.each {|d| next if @map.encount_seal_troop_ids[d.troop_id] != nil && !eval(@map.encount_seal_troop_ids[d.troop_id]) true_data.push(d) } #真のエンカウントリストを返す。 true_data end end class RPG::Map #-------------------------------------------------------------------------- # エンカウント条件リストの取得 #-------------------------------------------------------------------------- def encount_seal_troop_ids #キャッシュがあればキャッシュを返す。 return @encount_seal_troop_ids if @encount_seal_troop_ids != nil #エンカウント条件リストのハッシュを生成。 @encount_seal_troop_ids = {} #マップのメモ欄からデータを取得。 self.note.each_line {|l| data = l.scan(/<#{ENCOUNT_CONDITION::WORD}[::](\S+),(\S+)>/).flatten #データが存在する場合のみ条件リストに加える。 @encount_seal_troop_ids[data[0].to_i] = data[1].to_s if data != nil && data.size == 2 } #エンカウント条件リストを返す。 @encount_seal_troop_ids end end