=begin
RGSS3
★ 距離によるセルフスイッチ自動切り替え ★
イベントのセルフスイッチをプレイヤーとの距離によって
自動的に切り替えます。
● 使い方 ●========================================================
イベントの名前に以下の記述を行ってください。
SDS:<A,B,C,D>
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 : 新規
ろかん [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
=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