| 赞 | 4 |
| VIP | |
| 好人卡 | |
| 积分 | 6 |
| 经验 | |
| 最后登录 | 2018-4-23 |
| 在线时间 | 830 小时 |
- 梦石
- 0
- 星屑
- 644
- 在线时间
- 830 小时
- 注册时间
- 2016-7-24
- 回帖
- 644

|
发表于 2017-2-14 18:08:57
|
显示全部楼层
兩個腳本一起用www
[pre lang="ruby"]=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 : 新規
ろかん 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
[/pre]
[pre lang="ruby"]#==============================================================================
# ■ RGSS3 距離によるセルフスイッチ自動切り替え拡張
# 向いている方向へも依存 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# 指定したイベントに対し、向いている方向依存で
# 強制的に視界外として判定するようにします。
#==============================================================================
# ★設定例(イベントの名前に記入)
#------------------------------------------------------------------------------
# <SBD:0,3>
#------------------------------------------------------------------------------
# 向いている方向に依存したセルフスイッチ自動切り替えの対象となります。
# また、横方向への反応に対しては特に補正を行いません。
# 縦方向へは3タイル分まで切り替え判定を行います。
#------------------------------------------------------------------------------
# <SBD:1,4>
#------------------------------------------------------------------------------
# 向いている方向に依存したセルフスイッチ自動切り替えの対象となります。
# また、1タイル分横方向に対して補正を行います。
# 縦方向へは4タイル分まで判定を行います。
# (真横にいる場合には反応させたい時等に有効)
#------------------------------------------------------------------------------
# <SBD:-1,6>
#------------------------------------------------------------------------------
# 向いている方向に依存したセルフスイッチ自動切り替えの対象となります。
# また、横方向への反応に対して-1の補正を行います。
# 縦方向へは6タイル分まで判定を行います。
#------------------------------------------------------------------------------
# <SBD:-2,8>
#------------------------------------------------------------------------------
# 向いている方向に依存したセルフスイッチ自動切り替えの対象となります。
# また、横方向への反応に対して-2の補正を行います。
# 縦方向へは8タイル分まで判定を行います。
# (目の前にいるプレイヤーもスルーします。高台にいる敵等向け?)
#==============================================================================
module S_B_D
#視界判定を有効にする場合のキーワードを設定。
N = "SBD"
#視界範囲外判定の場合のプレイヤーからの距離を設定。
#通常ありえない値を入力。(800×800マップでも1600離れる事はあり得ない)
D = 1600
end
class RPG::Event
#--------------------------------------------------------------------------
# 視界判定フラグの取得
#--------------------------------------------------------------------------
def get_d_by_d
/<#{S_B_D::N}[::](\S+),(\S+)>/ =~ @name ? [$1.to_i,$2.to_i] : false
end
end
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# 距離によるスイッチ切り替え情報の初期化
#--------------------------------------------------------------------------
alias set_distance_switch_ex set_distance_switch
def set_distance_switch
set_distance_switch_ex
@sd_by_d = @event.get_d_by_d
end
#--------------------------------------------------------------------------
# プレイヤーからの距離を取得
#--------------------------------------------------------------------------
alias distance_from_player_extra distance_from_player
def distance_from_player
flag = false
if @sd_by_d
case self.direction
when 2;flag = (($game_player.y < self.y or distance_x_from($game_player.x).abs > distance_y_from($game_player.y).abs + @sd_by_d[0]) or distance_y_from($game_player.y).abs > @sd_by_d[1])
when 4;flag = (($game_player.x > self.x or distance_x_from($game_player.x).abs + @sd_by_d[0] < distance_y_from($game_player.y).abs) or distance_x_from($game_player.x).abs > @sd_by_d[1])
when 6;flag = (($game_player.x < self.x or distance_x_from($game_player.x).abs + @sd_by_d[0] < distance_y_from($game_player.y).abs) or distance_x_from($game_player.x).abs > @sd_by_d[1])
when 8;flag = (($game_player.y > self.y or distance_x_from($game_player.x).abs > distance_y_from($game_player.y).abs + @sd_by_d[0]) or distance_y_from($game_player.y).abs > @sd_by_d[1])
end
end
flag ? S_B_D::D : distance_from_player_extra
end
end[/pre] |
评分
-
查看全部评分
|