赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 1 |
经验 | 5446 |
最后登录 | 2014-4-7 |
在线时间 | 154 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 74
- 在线时间
- 154 小时
- 注册时间
- 2012-10-7
- 帖子
- 45
|
本帖最后由 uuiio797 于 2012-11-28 12:51 编辑
以下是地图区域穿透脚本,LS说的用事件也行。
脚本用法:
先复制脚本到你的工程。
如果要让该图块在人物头上并且穿过就在该图块区域添上区域号码1。
添上区域号码2就表示该区域不能通过。
添上3的话就表示该区域是秘密通道。
脚本来源:http://forums.rpgmakerweb.com/in ... -in-depth-maps-v20/
#××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××=××× # In-Depth Maps v2.0 # FenixFyreX # RPG Maker VxAce #××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # This script allows the player to define two regions: # overhead ceilings, and blocking tiles. # When the system finds the overhead ceilings region on top of a tile, it will # move that tile to the highest layer in the tilemap, and put the tile above # that tile (y - 1) in it's place on the 'ground', this allows the player to pass # underneath the tile. # To turn the system OFF, simply turn the switch defined below ON. To turn it # on, flip the switch OFF. This allows the user to traverse the 'ceilings' when # on top of them, but go behind them when on the ground. # #××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× module Fyx module MapDepth # This is the switch to turn ON to turn the overhead system OFF. # Remember, all switches are OFF by default, so the system is ON at startup. Switch = 1 # Does the script turn on the switch automatically when each map loads? AutoSwitch = true # This is the region defining tiles that need to be above the player. Overhead_Region = 1 # This is the region defining tiles that need to be unpassable no matter # what. Block_Region = 2 # This is the region to use when defining 'secret passages'. This region # ensures that the tiles below it are ALWAYS above and passable. Secret_Region = 3 # This is the user defined fall-back for when the system can't obtain a # tile to place under overhead tiles. Default_Ground_Tile = 2816 end end #××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # Don't edit below unless you know what it means. #××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× class Game_Map alias setup_no_ceilings setup def setup(*a,&bl) setup_no_ceilings(*a,&bl) if Fyx::MapDepth::AutoSwitch $game_switches[ohead_switch] = false end @old_tileset_flags = tileset.flags @ohead_switch = ohead_sys_is_on? define_ceilings if ohead_sys_is_on? end def ohead_sys_is_on? return false if $game_switches[ohead_switch] return true end def ohead_switch Fyx::MapDepth::Switch end def ohead_region Fyx::MapDepth::Overhead_Region end def block_region Fyx::MapDepth::Block_Region end def secret_region Fyx::MapDepth::Secret_Region end def default_ground_tile Fyx::MapDepth::Default_Ground_Tile end def ceiling_ground_tile(x,y) return valid?(x,y-1) ? $game_map.data[x,y-1,0] : default_ground_tile end alias passable_no_ceilings? passable? def passable?(*a,&bl) if ohead_sys_is_on? return false if ceiling_block?(*a,&bl) end passable_no_ceilings?(*a,&bl) end def ceiling?(x,y) region_id(x,y) == ohead_region end def secret_passage?(x,y) region_id(x,y) == secret_region end def ceiling_block?(*a,&bl) x,y = *a[0...2] region_id(x,y) == block_region end def get_ceil_xys(clear=false) @ceilings = [] @ceiling_blocks = [] @pass_ceilings = [] if clear @map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id)) tileset.flags = @old_tileset_flags return nil end height.times do |y| width.times do |x| @ceilings << [x,y] if ceiling?(x,y) @pass_ceilings << [x,y] if secret_passage?(x,y) @ceiling_blocks << [x,y] if ceiling_block?(x,y) end end end def define_ceilings get_ceil_xys @ceilings.each do |x,y| tid = $game_map.data[x,y,0] tileset.flags[tid] = 0x10 $game_map.data[x,y,2] = tid $game_map.data[x,y,0] = ceiling_ground_tile(x,y) end @pass_ceilings.each do |x,y| tid = $game_map.data[x,y,0] tileset.flags[tid] = 0x10 $game_map.data[x,y,2] = tid $game_map.data[x,y,0] = default_ground_tile end end alias update_no_ceilings update def update(*a,&bl) if @ohead_switch != ohead_sys_is_on? @ohead_switch = ohead_sys_is_on? if ohead_sys_is_on? define_ceilings else get_ceil_xys(true) end end update_no_ceilings(*a,&bl) end end #××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× # ×END OF SCRIPT× #×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
#××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××=×××
# In-Depth Maps v2.0
# FenixFyreX
# RPG Maker VxAce
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# This script allows the player to define two regions:
# overhead ceilings, and blocking tiles.
# When the system finds the overhead ceilings region on top of a tile, it will
# move that tile to the highest layer in the tilemap, and put the tile above
# that tile (y - 1) in it's place on the 'ground', this allows the player to pass
# underneath the tile.
# To turn the system OFF, simply turn the switch defined below ON. To turn it
# on, flip the switch OFF. This allows the user to traverse the 'ceilings' when
# on top of them, but go behind them when on the ground.
#
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
module Fyx
module MapDepth
# This is the switch to turn ON to turn the overhead system OFF.
# Remember, all switches are OFF by default, so the system is ON at startup.
Switch = 1
# Does the script turn on the switch automatically when each map loads?
AutoSwitch = true
# This is the region defining tiles that need to be above the player.
Overhead_Region = 1
# This is the region defining tiles that need to be unpassable no matter
# what.
Block_Region = 2
# This is the region to use when defining 'secret passages'. This region
# ensures that the tiles below it are ALWAYS above and passable.
Secret_Region = 3
# This is the user defined fall-back for when the system can't obtain a
# tile to place under overhead tiles.
Default_Ground_Tile = 2816
end
end
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# Don't edit below unless you know what it means.
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
class Game_Map
alias setup_no_ceilings setup
def setup(*a,&bl)
setup_no_ceilings(*a,&bl)
if Fyx::MapDepth::AutoSwitch
$game_switches[ohead_switch] = false
end
@old_tileset_flags = tileset.flags
@ohead_switch = ohead_sys_is_on?
define_ceilings if ohead_sys_is_on?
end
def ohead_sys_is_on?
return false if $game_switches[ohead_switch]
return true
end
def ohead_switch
Fyx::MapDepth::Switch
end
def ohead_region
Fyx::MapDepth::Overhead_Region
end
def block_region
Fyx::MapDepth::Block_Region
end
def secret_region
Fyx::MapDepth::Secret_Region
end
def default_ground_tile
Fyx::MapDepth::Default_Ground_Tile
end
def ceiling_ground_tile(x,y)
return valid?(x,y-1) ? $game_map.data[x,y-1,0] : default_ground_tile
end
alias passable_no_ceilings? passable?
def passable?(*a,&bl)
if ohead_sys_is_on?
return false if ceiling_block?(*a,&bl)
end
passable_no_ceilings?(*a,&bl)
end
def ceiling?(x,y)
region_id(x,y) == ohead_region
end
def secret_passage?(x,y)
region_id(x,y) == secret_region
end
def ceiling_block?(*a,&bl)
x,y = *a[0...2]
region_id(x,y) == block_region
end
def get_ceil_xys(clear=false)
@ceilings = []
@ceiling_blocks = []
@pass_ceilings = []
if clear
@map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
tileset.flags = @old_tileset_flags
return nil
end
height.times do |y|
width.times do |x|
@ceilings << [x,y] if ceiling?(x,y)
@pass_ceilings << [x,y] if secret_passage?(x,y)
@ceiling_blocks << [x,y] if ceiling_block?(x,y)
end
end
end
def define_ceilings
get_ceil_xys
@ceilings.each do |x,y|
tid = $game_map.data[x,y,0]
tileset.flags[tid] = 0x10
$game_map.data[x,y,2] = tid
$game_map.data[x,y,0] = ceiling_ground_tile(x,y)
end
@pass_ceilings.each do |x,y|
tid = $game_map.data[x,y,0]
tileset.flags[tid] = 0x10
$game_map.data[x,y,2] = tid
$game_map.data[x,y,0] = default_ground_tile
end
end
alias update_no_ceilings update
def update(*a,&bl)
if @ohead_switch != ohead_sys_is_on?
@ohead_switch = ohead_sys_is_on?
if ohead_sys_is_on?
define_ceilings
else
get_ceil_xys(true)
end
end
update_no_ceilings(*a,&bl)
end
end
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# ×END OF SCRIPT×
#×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
|
评分
-
查看全部评分
|