| 赞 | 168 |
| VIP | |
| 好人卡 | |
| 积分 | 229 |
| 经验 | |
| 最后登录 | 2025-4-1 |
| 在线时间 | 8598 小时 |
- 梦石
- 0
- 星屑
- 22879
- 在线时间
- 8598 小时
- 注册时间
- 2011-12-31
- 回帖
- 3270
|
发表于 2015-6-5 18:46:19
|
显示全部楼层
http://blueredzone.com/script/vxace/vxace_movableregion.html
書式
==移動制限:%region%==
例:リージョン60のみ移動可能
==移動制限:60==
例:リージョン30と60のみ移動可能
==移動制限:30+60==
例:リージョン60は移動不可
==移動制限:0-60==
例:リージョン30と60は移動不可
==移動制限:0-30-60==
また,上記の設定では「移動ルートの設定」での強制移動に対する制限はありません.
強制移動に対する制限は次の記述で行います.
==!移動制限:%region%==
自律移動と強制移動の両方で同一の制限をかける場合は同じ%region%の注釈を以下のように記述する必要があります.
==移動制限:%region%==
==!移動制限:%region%==
パーティーの行動制限
パーティーに対する移動制限はこのスクリプト内の詳細設定にて行います.
それぞれの設定項目について%regon%部分のみを文字列で指定します.
PARTY_MOVABLE_REGION_WALK
歩行時自律移動のリージョンです
PARTY_MOVABLE_REGION_BOAT
小型船時自律移動のリージョンです
PARTY_MOVABLE_REGION_SHIP
大型船時自律移動のリージョンです
PARTY_MOVABLE_REGION_AIRSHIP
飛行船時自律移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_WALK
歩行時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_BOAT
小型船時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_SHIP
大型船時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_AIRSHIP
飛行船時強制移動のリージョンです
キャラクター移動制限[pre lang="ruby"]
#==============================================================================
# ■ BMSP キャラクター移動制限[MOVABLEREGION] Ver1.00 2012/10/29
#------------------------------------------------------------------------------
# キャラのランダム移動の行動範囲を制限します.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# マップ上のキャラの行動範囲をリージョンで制限できます.
# ランダム移動の範囲制限や見えない通路,
# 乗り物の移動制限を自由に設定することが可能です.
#
# 位置:特に指定はありません
#
# ■使用方法
# スクリプトに丸ごと貼り付けていただければ使用できます.
#
# * マップの設定
# マップには移動不可または移動範囲に設定したい部分に
# 任意のIDのリージョンを設定します.
#
# * イベントの移動制限
# イベントの移動制限はイベントの各ページごとに設定します.
# イベントのページの実行内容に以下のフォーマットの注釈を追加します.
# ==移動制限:%region%==
# %region%は次の2パターンのどちらかで記述します.
# 1,移動可能に設定したいリージョンIDを"+"で連結する
# 2,移動不可に設定したいリージョンIDを先頭に"0"を付けて"-"で連結する
# イメージとしては最初はすべて移動不可で,移動可能にするリージョンを"+"か"-"で
# 増減していきます.このとき,"0"はすべてのリージョンを表します.
#
# 例:リージョン60のみ移動可能
# ==移動制限:60==
# 例:リージョン30と60のみ移動可能
# ==移動制限:30+60==
# 例:リージョン60は移動不可
# ==移動制限:0-60==
# 例:リージョン30と60は移動不可
# ==移動制限:0-30-60==
#
# また,上記の設定では「移動ルートの設定」での強制移動に対する制限はありません.
# 強制移動に対する制限は次の記述で行います.
# ==!移動制限:%region%==
# 自律移動と強制移動の両方で同一の制限をかける場合は同じ%region%の注釈を
# ==移動制限:%region%==
# ==!移動制限:%region%==
# と記述する必要があります.
#
# * パーティーの移動制限
# パーティーに対する移動制限はこのスクリプト内の詳細設定にて行います.
# それぞれについて%regon%部分のみを文字列で指定します.
# ・PARTY_MOVABLE_REGION_WALK:歩行時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_BOAT:小型船時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_SHIP:大型船時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_AIRSHIP:飛行船時自律移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_WALK:歩行時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_BOAT:小型船時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_SHIP:大型船時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_AIRSHIP:飛行船時強制移動のリージョンです
#
# ■注意
# このスクリプトでは
# 「Game_Event」「Game_Player」
# のメソッドを改変しています.
# ■情報
# このスクリプトはgentlawkによって作られたものです.
# 利用規約はhttp://blueredzone.comをご覧ください.
#------------------------------------------------------------------------------
module BMSP
@@includes ||= {}
@@includes[:MovableRegion] = 1.00
module MovableRegion
#▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
#詳細設定
PARTY_MOVABLE_REGION_WALK = "0"
PARTY_MOVABLE_REGION_BOAT = "0"
PARTY_MOVABLE_REGION_SHIP = "0"
PARTY_MOVABLE_REGION_AIRSHIP = "0"
PARTY_FORCE_MOVABLE_REGION_WALK = "0"
PARTY_FORCE_MOVABLE_REGION_BOAT = "0"
PARTY_FORCE_MOVABLE_REGION_SHIP = "0"
PARTY_FORCE_MOVABLE_REGION_AIRSHIP = "0"
#▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
EXT = /[+-][0-9]+/o
MATCH = /==移動制限:([0-9]+)(.*)==/o
MATCH2 = /==!移動制限:([0-9]+)(.*)==/o
#--------------------------------------------------------------------------
# ● 正規表現とのマッチ
#--------------------------------------------------------------------------
def self.match(str,force = false)
match = force ? MATCH2 : MATCH
if match =~ str
base = $1.to_i
adds = []
subs = []
$2.scan(EXT) do |ext|
ext = ext.to_i
ext > 0 ? adds.push(ext) : subs.push(-ext)
end
return base,adds,subs
end
return nil
end
end
end
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias bmsp_movableregion_initialize initialize
def initialize(map_id, event)
@bmsp_movable_region = {}
@bmsp_force_movable_region = {}
bmsp_movableregion_initialize(map_id, event)
end
#--------------------------------------------------------------------------
# ● 通行可能判定
# d : 方向(2,4,6,8)
#--------------------------------------------------------------------------
def passable?(x, y, d)
return false unless super
x2 = $game_map.round_x_with_direction(x, d)
y2 = $game_map.round_y_with_direction(y, d)
return false unless bmsp_movableregion_check_movable_region(x2,y2,@move_route_forcing)
return true
end
#--------------------------------------------------------------------------
# ● 現在のイベントページから移動制限を設定
#--------------------------------------------------------------------------
def bmsp_movableregion_set_movable_region
list = @list.select{|event| event.code == 108}
region = nil
force_region = nil
list.each do |event|
unless region
reg = BMSP::MovableRegion.match(event.parameters.first,false)
(region = reg; next) if reg
end
unless force_region
reg = BMSP::MovableRegion.match(event.parameters.first,true)
(force_region = reg; next) if reg
end
break if region && force_region
end
# キャッシュ
@bmsp_movable_region[@page] = region ? region : []
@bmsp_force_movable_region[@page] = force_region ? force_region : []
end
#--------------------------------------------------------------------------
# ● 通行可能なリージョンか判定
#--------------------------------------------------------------------------
def bmsp_movableregion_check_movable_region(x,y,force)
return true if debug_through?
bmsp_movableregion_set_movable_region unless @bmsp_movable_region[@page]
region = force ? @bmsp_force_movable_region[@page] : @bmsp_movable_region[@page]
return true if region.empty?
base, adds, subs = region
if base == 0
return !subs.include?($game_map.region_id(x,y))
else
return (adds + [base]).include?($game_map.region_id(x,y))
end
end
end
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias bmsp_movableregion_initialize initialize
def initialize
bmsp_movableregion_initialize
bmsp_movableregion_set_movable_region
end
#--------------------------------------------------------------------------
# ● 通行可能判定
# d : 方向(2,4,6,8)
#--------------------------------------------------------------------------
def passable?(x, y, d)
return false unless super
x2 = $game_map.round_x_with_direction(x, d)
y2 = $game_map.round_y_with_direction(y, d)
return false unless bmsp_movableregion_check_movable_region(x2,y2,@move_route_forcing,@vehicle_type)
return true
end
#--------------------------------------------------------------------------
# ● 詳細設定から移動制限を設定
#--------------------------------------------------------------------------
def bmsp_movableregion_set_movable_region
@bmsp_movable_region = {}
@bmsp_force_movable_region = {}
[:walk,:boat,:ship,:airship].each do |type|
upcase = type.to_s.upcase
[false,true].each do |force|
str = BMSP::MovableRegion.module_eval{
const_get("PARTY_#{force ? "FORCE_" : ""}MOVABLE_REGION_#{upcase}")
}
str = "==#{force ? "!" : ""}移動制限:#{str}=="
reg = BMSP::MovableRegion.match(str,force)
if force
@bmsp_force_movable_region[type] = reg ? reg : []
else
@bmsp_movable_region[type] = reg ? reg : []
end
end
end
end
#--------------------------------------------------------------------------
# ● 通行可能なリージョンか判定
#--------------------------------------------------------------------------
def bmsp_movableregion_check_movable_region(x,y,force,type)
return true if debug_through?
region = force ? @bmsp_force_movable_region[type] : @bmsp_movable_region[type]
return true if region.empty?
base, adds, subs = region
if base == 0
return !subs.include?($game_map.region_id(x,y))
else
return (adds + [base]).include?($game_map.region_id(x,y))
end
end
end
[/pre]
|
|