=begin RGSS3 ★ 距離によるセルフスイッチ自動切り替え ★ イベントのセルフスイッチをプレイヤーとの距離によって 自動的に切り替えます。 ● 使い方 ●======================================================== イベントの名前に以下の記述を行ってください。 SDS: A,B,C,Dにはそれぞれのセルフスイッチが切り替わるプレイヤーとの距離を 数値で設定します。 距離によるセルフスイッチ切り替えを行わないスイッチには 0 を設定してください。 -------------------------------------------------------------------- 各セルフスイッチの距離設定に2種類のオプションを付加することが可能です。 必要な場合は距離を示す数値の直後に以下のキーワードを付加してください。 -r => スイッチの切り替わり判定が逆になります。 設定距離より離れたらON, 近づいたらOFF。 -o => プレイヤーとの距離によりONには自動で切り替わりますが、    OFFには自動で切り替わらなくなります。 -------------------------------------------------------------------- 例) SDS:<0,3-o,6,8-o-r> セルフスイッチAに対しては何も行わない。 プレイヤーとの距離が3マス以内の場合、セルフスイッチBをON。 プレイヤーとの距離が3マスより大きい場合は何もしない。 プレイヤーとの距離が6マス以内の場合、セルフスイッチCをON。 プレイヤーとの距離が6マスより大きい場合、セルフスイッチCをOFF。 プレイヤーとの距離が8マス以内の場合は何もしない。 プレイヤーとの距離が8マスより大きい場合、セルフスイッチDをON。 ==================================================================== ver1.00 Last Update : 2012/06/16 06/16 : 新規 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end $rsi ||= {} $rsi["距離によるセルフスイッチ自動切り替え"] = true class RPG::Event def get_distance_switches_conf match = @name.scan(/SDS:<(.*)>/) result = [] if match.first match.first.first.split(",").each{|split_data| result << get_distance_switch_data(split_data) } end result end def get_distance_switch_data(split_data) option = 0 if split_data.include?('-r') option += 1 split_data.delete!('-r') end if split_data.include?('-o') option += 2 split_data.delete!('-o') end [split_data.to_i, option] end end class Game_Event < Game_Character SELF_KEY = ['A','B','C','D'] #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias _refresh_distance_switch refresh def refresh set_distance_switch unless @switch_distances _refresh_distance_switch end #-------------------------------------------------------------------------- # ● 距離によるスイッチ切り替え情報の初期化 #-------------------------------------------------------------------------- def set_distance_switch @switch_distances = @event.get_distance_switches_conf end #-------------------------------------------------------------------------- # ● プレイヤーからの距離を取得 #-------------------------------------------------------------------------- def distance_from_player distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias _update_distance_switch update def update update_switch unless @switch_distances.empty? _update_distance_switch end #-------------------------------------------------------------------------- # ● 距離によるスイッチ切り替え更新 #-------------------------------------------------------------------------- def update_switch distance = distance_from_player @switch_distances.each_with_index{|conf_data, index| unless conf_data[0].zero? case conf_data[1] when 0 result = distance <= conf_data[0] when 1 result = distance > conf_data[0] when 2 result = distance <= conf_data[0] next unless result when 3 result = distance > conf_data[0] next unless result end $game_self_switches[[@map_id, @event.id, SELF_KEY[index]]] = result end } end end