| 赞 | 4  | 
 
| VIP | 71 | 
 
| 好人卡 | 22 | 
 
| 积分 | 7 | 
 
| 经验 | 32145 | 
 
| 最后登录 | 2013-8-9 | 
 
| 在线时间 | 184 小时 | 
 
 
 
 
 
Lv2.观梦者 天仙 
	- 梦石
 - 0 
 
        - 星屑
 - 680 
 
        - 在线时间
 - 184 小时
 
        - 注册时间
 - 2008-4-15
 
        - 帖子
 - 5023
 
 
  
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
脚本更新: 
 * 2009/1/31 
  - 功能增加:事件页通行度判定 
 * 2009/2/2 
  - 功能增加:自动元件 □ 通行度设定 
  - 功能增加:桥元件通行判定 
  - 脚本更新:添加了大量默认图块元件的通行度 
 * 2009/2/5 
  - 错误修复:「设置移动路线」会无效的BUG已修复 
  - 脚本更新:把 □ 通行度设定为 -0b1111 
 * 2009/2/12 
  - 功能增加:无法通行处不能触发事件 
  - 功能增加:加入草木繁茂处、柜台属性的判定跟设定 
  - 功能增加:通行度等资料存进文件中,设定好了就不会变(除非用编辑器) 
  - 脚本整合:加入地形标记的设定和判定 
  - 脚本更新:放出编辑器  
 
设置说明: 
在 
@map_id_passage_X = {} 
这段之中设定, X 代表图块名(A~E) 
 
格示为:  通行度设定 => [图块ID] 
 
通行度设定为: 0b下左右上 
0 代表不可通行 
1 代表可通行 
例如: 
0b1001 表示上下可通行,左右不可通行 
0b0110 表示左右可通行,上下不可通行 
 
在事件的内容中用注释可以设定不同事件页的通行度 
设定方式与上面一样 
没有设定的以「穿透」判断通行度(也就是没有四方通行的判定) 
详细看范例内设定 
 
 
自动元件 □ 通行度设定方法 
在编辑器(也就是VX中)的通行设定为 ○ 
然後在脚本中的通行设定为 -0b1111 
那麽就会判定为 □ 
 
桥元件通行判定 
通行设定为「上下通行」或「左右通行」的判定为桥元件 
桥元件并列的时候可以互相通行 
详细见范例  
脚本中已经设定好 B 图块第3行的全部桥的通行度 
 
第一次运行的时候先把「设定部分」的 
「$重设四方通行文件」 跟 「$重设地形标记文件」 改成 true 
就会在 Data 文件夹里面自动生成通行、地形标记等等...的文件 
 
范例尚未更新 
范例:按我下载 
 
 
设定部分: 
 
- class Game_Map
 
 -   
 
 -   $重设四方通行文件 = false
 
 -   
 
 -   def reset_map_files
 
 -     #--------------------------------------------------------------------------
 
 -     # ★ A 图块元件通行设定
 
 -     #--------------------------------------------------------------------------
 
 -     map_id_passage_A_preset = {
 
 -       0b1011 => [],      # 左方不可通行
 
 -       0b1110 => [],      # 上方不可通行
 
 -       0b1101 => [],      # 右方不可通行
 
 -       0b0111 => [],      # 下方不可通行
 
  
-       0b1001 => [134, 135, 142, 143] + (193..208).to_a,      # 上下通行
 
 -       0b0110 => [],      # 左右通行
 
 -       0b1010 => [],      # 右下通行
 
 -       0b1100 => [],      # 左下通行
 
 -       0b0101 => [],      # 左上通行
 
 -       0b0011 => [],      # 右上通行
 
  
-       0b1000 => [],      # 下方可以通行
 
 -       0b0010 => [],      # 右方可以通行
 
 -       0b0001 => [],      # 上方可以通行
 
 -       0b0100 => [],      # 左方可以通行
 
  
-       0b0000 => [],      # 全部不可通行
 
 -       0b1111 => [],      # 全部可以通行
 
 -       
 
 -       # 设定墙壁上方通行度为 □      
 
 -       -0b1111 => ((81..88).to_a + (97..104).to_a + (113..120).to_a),
 
 -       # 编辑器中设定为不可通行
 
 -       -100 => [],
 
 -     }
 
  
-     #--------------------------------------------------------------------------
 
 -     # ★ B 图块元件通行设定
 
 -     #--------------------------------------------------------------------------
 
 -     map_id_passage_B_preset = {
 
 -       0b1011 => [],      # 左方不可通行
 
 -       0b1110 => [],      # 上方不可通行
 
 -       0b1101 => [],      # 右方不可通行
 
 -       0b0111 => [],      # 下方不可通行
 
  
-       # 上下通行
 
 -       0b1001 => [17, 18, 20, 22, 142, 143, 223, 239],
 
 -       # 左右通行
 
 -       0b0110 => [16, 19, 21, 23, 215, 231],
 
 -       
 
 -       0b1010 => [],      # 右下通行
 
 -       0b1100 => [],      # 左下通行
 
 -       0b0101 => [],      # 左上通行
 
 -       0b0011 => [],      # 右上通行
 
  
-       0b1000 => [],      # 下方可以通行
 
 -       0b0010 => [],      # 右方可以通行
 
 -       0b0001 => [],      # 上方可以通行
 
 -       0b0100 => [],      # 左方可以通行
 
  
-       0b0000 => [],      # 全部不可通行
 
 -       0b1111 => [],      # 全部可以通行
 
 -       
 
 -       # 编辑器中设定为不可通行
 
 -       -100 => [1],
 
 -     }
 
 -     
 
 -     #--------------------------------------------------------------------------
 
 -     # ★ C 图块元件通行设定
 
 -     #--------------------------------------------------------------------------
 
 -     map_id_passage_C_preset = {
 
 -       0b1011 => [],      # 左方不可通行
 
 -       0b1110 => [],      # 上方不可通行
 
 -       0b1101 => [],      # 右方不可通行
 
 -       0b0111 => [],      # 下方不可通行
 
  
-       0b1001 => [4, 5, 6, 7, 12, 13, 14, 15],      # 上下通行
 
 -       0b0110 => [],      # 左右通行
 
 -       0b1010 => [],      # 右下通行
 
 -       0b1100 => [],      # 左下通行
 
 -       0b0101 => [],      # 左上通行
 
 -       0b0011 => [],      # 右上通行
 
  
-       0b1000 => [],                 # 下方可以通行
 
 -       0b0010 => [1, 3, 8, 10],      # 右方可以通行
 
 -       0b0001 => [28, 29, 30, 23],   # 上方可以通行
 
 -       0b0100 => [0, 2, 9, 11],      # 左方可以通行
 
  
-       0b0000 => [],      # 全部不可通行
 
 -       0b1111 => [],      # 全部可以通行
 
 -       
 
 -       # 编辑器中设定为不可通行
 
 -       -100 => [],
 
 -     }
 
 -     
 
 -     #--------------------------------------------------------------------------
 
 -     # ★ D 图块元件通行设定
 
 -     #--------------------------------------------------------------------------
 
 -     map_id_passage_D_preset = {
 
 -       0b1011 => [],      # 左方不可通行
 
 -       0b1110 => [],      # 上方不可通行
 
 -       0b1101 => [],      # 右方不可通行
 
 -       0b0111 => (8..11).to_a + (88..92).to_a,      # 下方不可通行
 
  
-       0b1001 => [],      # 上下通行
 
 -       0b0110 => [],      # 左右通行
 
 -       0b1010 => [],      # 右下通行
 
 -       0b1100 => [],      # 左下通行
 
 -       0b0101 => [],      # 左上通行
 
 -       0b0011 => [],      # 右上通行
 
  
-       0b1000 => [],      # 下方可以通行
 
 -       0b0010 => [],      # 右方可以通行
 
 -       0b0001 => [],      # 上方可以通行
 
 -       0b0100 => [],      # 左方可以通行
 
  
-       0b0000 => [],      # 全部不可通行
 
 -       0b1111 => [],      # 全部可以通行
 
 -       
 
 -       # 编辑器中设定为不可通行
 
 -       -100 => [],
 
 -     }
 
 -     
 
 -     #--------------------------------------------------------------------------
 
 -     # ★ E 图块元件通行设定
 
 -     #--------------------------------------------------------------------------
 
 -     map_id_passage_E_preset = {
 
 -       0b1011 => [],      # 左方不可通行
 
 -       0b1110 => [],      # 上方不可通行
 
 -       0b1101 => [],      # 右方不可通行
 
 -       0b0111 => [],      # 下方不可通行
 
  
-       0b1001 => [],      # 上下通行
 
 -       0b0110 => [],      # 左右通行
 
 -       0b1010 => [],      # 右下通行
 
 -       0b1100 => [],      # 左下通行
 
 -       0b0101 => [],      # 左上通行
 
 -       0b0011 => [],      # 右上通行
 
  
-       0b1000 => [],      # 下方可以通行
 
 -       0b0010 => [],      # 右方可以通行
 
 -       0b0001 => [],      # 上方可以通行
 
 -       0b0100 => [],      # 左方可以通行
 
  
-       0b0000 => [],      # 全部不可通行
 
 -       0b1111 => [],      # 全部可以通行
 
 -       
 
 -       # 编辑器中设定为不可通行
 
 -       -100 => [],
 
 -     }
 
 -     
 
 -     #--------------------------------------------------------------------------
 
 -     # ★ 自动元件通行设定(不可更改)
 
 -     #--------------------------------------------------------------------------
 
 -     map_autotile_passage_preset = {
 
 -       0b1011 => [0, 1, 2, 3],      # 左方不可通行
 
 -       0b1110 => [4, 5, 6, 7],      # 上方不可通行
 
 -       0b1101 => [8, 9, 10, 11],    # 右方不可通行
 
 -       0b0111 => [12, 13, 14, 15],  # 下方不可通行
 
  
-       0b1001 => [16],              # 上下通行
 
 -       0b0110 => [17],              # 左右通行
 
 -       0b1010 => [18, 19],          # 右下通行
 
 -       0b1100 => [20, 21],          # 左下通行
 
 -       0b0101 => [22, 23],          # 左上通行
 
 -       0b0011 => [24, 25],          # 右上通行
 
  
-       0b1000 => [26],              # 下方可以通行
 
 -       0b0010 => [27],              # 右方可以通行
 
 -       0b0001 => [28],              # 上方可以通行
 
 -       0b0100 => [29],              # 左方可以通行
 
  
-       0b0000 => [30],              # 全部不可通行
 
 -       0b1111 => (32..47).to_a      # 全部可以通行
 
 -     }
 
 -     
 
 -     map_counter_tiles_preset = [[],
 
 -     # A图块
 
 -     [], 
 
 -     # B图块
 
 -     [],
 
 -     # C图块
 
 -     [342, 343]+(350..356).to_a, 
 
 -     # D图块
 
 -     [], 
 
 -     # E图块
 
 -     []
 
 -     ]
 
 -     
 
 -     map_bush_tiles_preset = [[], 
 
 -     # A图块
 
 -     [], 
 
 -     # B图块
 
 -     [100, 101, 102, 103], 
 
 -     # C图块
 
 -     [],
 
 -     # D图块
 
 -     [], 
 
 -     # E图块
 
 -     []
 
 -     ]
 
 -     
 
 -     for set in 1..5
 
 -       for id in 0..256
 
 -         if set == 1
 
 -           tid = get_true_id(id)
 
 -           pass = @passages[tid]                # 获取通行属性
 
 -         else
 
 -           pass = @passages[id]                 # 获取通行属性
 
 -         end
 
 -         if pass & 0x01 == 0x01   # x: 不可通行
 
 -           tile = [nil, "A", "B", "C", "D", "E"]
 
 -           temp_set = eval("map_id_passage_#{tile[set]}_preset")
 
 -           temp_set[-100].push(id) 
 
 -         end
 
 -         if pass & 0x40 == 0x40
 
 -           map_bush_tiles_preset[set].push(id)
 
 -         end
 
 -         if pass & 0x80 == 0x80
 
 -           map_counter_tiles_preset[set].push(id)
 
 -         end
 
 -       end
 
 -     end
 
 -     passage_all_maps_blah = [map_id_passage_A_preset, map_id_passage_B_preset, 
 
 -     map_id_passage_C_preset, map_id_passage_D_preset, map_id_passage_E_preset,
 
 -     map_autotile_passage_preset]
 
 -     save_data(passage_all_maps_blah, "Data/Passage.rvdata")
 
 -     save_data(map_bush_tiles_preset, "Data/Bush.rvdata") 
 
 -     save_data(map_counter_tiles_preset, "Data/Counter.rvdata") 
 
  
-     p ("重设四方通行文件完毕")
 
 -   end
 
 -   def get_true_id(id)
 
 -     if id > 128
 
 -       return id +1407
 
 -     else
 
 -       return (id*48) + 2000
 
 -     end
 
 -   end
 
 -   def above?(id)
 
 -     return @passages[id] & 0x10 == 0x10
 
 -   end
 
 - end
 
 - class Game_Character
 
 -   $重设地形标记文件 = false
 
 -   @map_tile_tag_A = {
 
 -     0 => [], 
 
 -     1 => [], 
 
 -     2 => [], 
 
 -     3 => [], 
 
 -     4 => [], 
 
 -     5 => [], 
 
 -     6 => [], 
 
 -     7 => []
 
 -   }
 
 -   @map_tile_tag_B = {
 
 -     0 => [], 
 
 -     1 => [], 
 
 -     2 => [], 
 
 -     3 => [], 
 
 -     4 => [], 
 
 -     5 => [], 
 
 -     6 => [], 
 
 -     7 => []
 
 -   }
 
 -   @map_tile_tag_C = {
 
 -     0 => [], 
 
 -     1 => [], 
 
 -     2 => [], 
 
 -     3 => [], 
 
 -     4 => [], 
 
 -     5 => [], 
 
 -     6 => [], 
 
 -     7 => []
 
 -   }
 
 -   @map_tile_tag_D = {
 
 -     0 => [], 
 
 -     1 => [], 
 
 -     2 => [], 
 
 -     3 => [], 
 
 -     4 => [], 
 
 -     5 => [], 
 
 -     6 => [], 
 
 -     7 => []
 
 -   }
 
 -   @map_tile_tag_E = {
 
 -     0 => [], 
 
 -     1 => [], 
 
 -     2 => [], 
 
 -     3 => [], 
 
 -     4 => [], 
 
 -     5 => [], 
 
 -     6 => [], 
 
 -     7 => []
 
 -   }
 
 -   tile_tag = [@map_tile_tag_A, @map_tile_tag_B, 
 
 -   @map_tile_tag_C, @map_tile_tag_D, @map_tile_tag_E]
 
 -   if $重设地形标记文件
 
 -     save_data(tile_tag, "Data/TerrainTags.rvdata")
 
 -     p ("重设地形标记文件完毕")
 
 -     exit
 
 -   end
 
 - end
 
  复制代码 
 
四方通行部分: 
 
- class Game_Map
 
 -   alias setup_4_passage setup
 
 -   def setup(map_id)
 
 -     setup_4_passage(map_id)
 
 -     reset_map_files if $重设四方通行文件
 
 -     loaded_passages = load_data("Data/Passage.rvdata") 
 
 -     @map_id_passage_A = loaded_passages[0]
 
 -     @map_id_passage_B = loaded_passages[1]
 
 -     @map_id_passage_C = loaded_passages[2]
 
 -     @map_id_passage_D = loaded_passages[3]
 
 -     @map_id_passage_E = loaded_passages[4]
 
 -     @map_autotile_passage = loaded_passages[5]
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 获取ID
 
 -   #--------------------------------------------------------------------------
 
 -   def get_tile_id(x, y)
 
 -     a = data[x, y, 0]-2000
 
 -     map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
 
 -     map_tile_id_1 = (data[x, y, 1]-2000) / 48
 
 -     map_tile_id_2 = (data[x, y, 2])
 
 -          
 
 -     map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
 
 -     map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
 
 -     map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E
 
 -     
 
 -     # 图块 ID 矫正
 
 -     map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
 
 -     unless @events.nil?
 
 -       for event in @events.values
 
 -         if event.pos?(x, y) and event.tile_id > 0
 
 -           # 若是事件使用地图元件,使用该地图元件的ID
 
 -           map_tile_id_2 = event.tile_id
 
 -         end
 
 -       end
 
 -     end
 
 -     # 返回 [底层ID, 上层ID]
 
 -     return [map_tile_id_0, map_tile_id_2]
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 根据通行设定获取通行度
 
 -   #     value : 数值
 
 -   #     pas   : 通行度哈希表
 
 -   #--------------------------------------------------------------------------
 
 -   def get_passage(value, pas)
 
 -     for i in pas.keys
 
 -       # 找到通行度就返回
 
 -       return i if pas[i].include?(value)
 
 -     end
 
 -     # 找不到设定即返回“全部可以通行”
 
 -     return 0b1111
 
 -   end
 
 -   def set_passage(id, value, pas)
 
 -     return if value > 15 or value < 0
 
 -     for i in pas.keys
 
 -       pas[i].delete(id) if pas.include?(id)
 
 -       pas[i].push(id) if i == value
 
 -     end
 
 -   end
 
 -   def autotile?(x, y)
 
 -     return get_tile_id(x,y)[0] < 129
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 四方向通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   def passable_dir?(x, y, d)
 
 -     # 通行判定优先度:
 
 -     #   事件内设定 > 事件元件 > B层 > A层
 
 -     
 
 -     return false unless passable?(x, y, 0x01)
 
 -     id = get_tile_id(x,y)
 
 -     case id[1]
 
 -     when 0
 
 -       # 获取图块A部分的通行度
 
 -       passage = get_passage(id[0], @map_id_passage_A) if ( (1..256) === id[0])
 
 -       # 是自动元件且通行设定为 □
 
 -       if autotile?(x, y) and passage == -0b1111
 
 -         a = data[x, y, 0]
 
 -         passage = get_passage(a%48, @map_autotile_passage)
 
 -       end
 
 -     when 1..255
 
 -       # 获取图块B部分的通行度
 
 -       passage = get_passage(id[1], @map_id_passage_B)
 
 -     when 256..511
 
 -       # 获取图块C部分的通行度
 
 -       passage = get_passage(id[1]-256, @map_id_passage_C)
 
 -     when 512..767
 
 -       # 获取图块D部分的通行度
 
 -       passage = get_passage(id[1]-512, @map_id_passage_D)
 
 -     when 768..1023
 
 -       # 获取图块E部分的通行度
 
 -       passage = get_passage(id[1]-768, @map_id_passage_E)
 
 -     end
 
 -     # 获取事件内的通行设定
 
 -     e = $game_map.events_xy(x, y)
 
 -     unless e.empty?
 
 -       e.size.times{ |i|
 
 -         # 一获取通行设定就跳出循环
 
 -         if e[i].passage
 
 -           passage = e[i].passage
 
 -           break
 
 -         end
 
 -       }
 
 -     end
 
 -     # 判断桥的通行
 
 -     passage = passable_bridge(id[1], x, y, d, passage) if bridge?(passage)
 
 -     return (passage[(d/2)-1] == 1)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 桥元件通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   def passable_bridge(id, x, y, d, pas)
 
 -     # 不是桥元件就直接返回原通行度
 
 -     return pas unless bridge?(pas)
 
 -     # 是自动元件的情况返回原通行度
 
 -     return pas if autotile?(x, y) and get_tile_id(x,y)[1] == 0
 
 -     case d
 
 -     when 2; temp_id = get_tile_id(x,y-1)      
 
 -     when 4; temp_id = get_tile_id(x+1,y)
 
 -     when 6; temp_id = get_tile_id(x-1,y)
 
 -     when 8; temp_id = get_tile_id(x,y+1)
 
 -     end
 
 -     return 0b1111 if temp_id.include?(id)
 
 -     return pas
 
 -   end
 
 -   def bridge?(pas)
 
 -     return (pas == 0b1001 or pas == 0b0110)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 判断草木繁茂处
 
 -   #     x : X 坐标
 
 -   #     y : Y 坐标
 
 -   #--------------------------------------------------------------------------
 
 -   alias pass_4_direction_bush? bush?
 
 -   def bush?(x, y)
 
 -     return false unless valid?(x, y)
 
 -     id = get_tile_id(x, y)
 
 -     map_bush_tiles = load_data("Data/Bush.rvdata") 
 
 -     case id[1]
 
 -     when 0
 
 -       return true if map_bush_tiles[1].include?(id[0])
 
 -     when 1...1023
 
 -       return true if map_bush_tiles[id[1]/256+2].include?(id[1])
 
 -     end
 
 -     pass_4_direction_bush?(x, y)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 判断柜台属性
 
 -   #     x : X 坐标
 
 -   #     y : Y 坐标
 
 -   #--------------------------------------------------------------------------
 
 -   alias pass_4_direction_counter? counter?
 
 -   def counter?(x, y)
 
 -     return false unless valid?(x, y)
 
 -     id = get_tile_id(x, y)
 
 -     map_counter_tiles = load_data("Data/Counter.rvdata") 
 
 -     case id[1]
 
 -     when 0
 
 -       return true if map_counter_tiles[1].include?(id[0])
 
 -     when 1...1023
 
 -       return true if map_counter_tiles[id[1]/256+2].include?(id[1])
 
 -     end
 
 -     pass_4_direction_counter?(x, y)
 
 -   end
 
 - end
 
  
- class Game_Character
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   def map_passable?(x, y, d=@move_direction)
 
 -     return (map_passable_here?(x, y) and map_passable_there?(x, y, d))
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 本地通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   def map_passable_here?(x, y, d=@move_direction)
 
 -     return $game_map.passable_dir?(x, y, d)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 前方通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   def map_passable_there?(x, y, d_o)
 
 -     d = 10 - d_o             # 反向判断
 
 -     # 修正座标
 
 -     case d
 
 -     when 2; y += 1
 
 -     when 4; x -= 1
 
 -     when 6; x += 1
 
 -     when 8; y -= 1
 
 -     end
 
 -     x = $game_map.round_x(x) # 横向循环校正
 
 -     y = $game_map.round_y(y) # 纵向循环校正
 
 -     return $game_map.passable_dir?(x, y, d)
 
 -   end
 
 -   alias passage_4_dir_move_down move_down
 
 -   def move_down(turn_ok = true)
 
 -     @move_direction = 2
 
 -     passage_4_dir_move_down(turn_ok)
 
 -   end
 
 -   alias passage_4_dir_move_left move_left
 
 -   def move_left(turn_ok = true)
 
 -     @move_direction = 4
 
 -     passage_4_dir_move_left(turn_ok)
 
 -   end
 
 -   alias passage_4_dir_move_right move_right
 
 -   def move_right(turn_ok = true)
 
 -     @move_direction = 6
 
 -     passage_4_dir_move_right(turn_ok)
 
 -   end
 
 -   alias passage_4_dir_move_up move_up
 
 -   def move_up(turn_ok = true)
 
 -     @move_direction = 8
 
 -     passage_4_dir_move_up(turn_ok)
 
 -   end
 
 - end
 
 - class Game_Event < Game_Character
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 接触事件启动判定
 
 -   #--------------------------------------------------------------------------
 
 -   alias passage_4_dir_check_event_trigger_touch check_event_trigger_touch
 
 -   def check_event_trigger_touch(x, y)
 
 -     return false if !map_passable?(x, y)
 
 -     passage_4_check_event_trigger_touch(x, y)
 
 -   end
 
 -   def passage
 
 -     return false if @list[0].code != 108 # 第一个指令不是“注释”时返回 false
 
 -     pas = @list[0].parameters[0]
 
 -     return false if pas !~ /0b\d{4}/     # 如果不是设定通行度就返回 false
 
 -     return pas.to_i(2)
 
 -   end
 
 - end
 
 - class Game_Player < Game_Character
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 判断前方事件是否被触发
 
 -   #--------------------------------------------------------------------------
 
 -   alias passage_4_dir_check_event_trigger_there check_event_trigger_there
 
 -   def check_event_trigger_there(triggers)
 
 -     return false if !map_passable?(@x, @y)
 
 -     passage_4_dir_check_event_trigger_there(triggers)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 判断接触事件是否被触发
 
 -   #--------------------------------------------------------------------------
 
 -   alias passage_4_dir_check_event_trigger_touch check_event_trigger_touch
 
 -   def check_event_trigger_touch(x, y) 
 
 -   return false if !map_passable?(x, y)
 
 -     passage_4_dir_check_event_trigger_touch(x, y)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 通行判断
 
 -   #--------------------------------------------------------------------------
 
 -   alias passage_4_dir_map_passable? map_passable?
 
 -   def map_passable?(x, y)
 
 -     # 在交通工具中的话,使用默认脚本
 
 -     in_vehicle? ? passage_4_dir_map_passable?(x, y) : super
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 判断行走通行度
 
 -   #--------------------------------------------------------------------------
 
 -   def can_walk?(x, y)
 
 -     last_vehicle_type = @vehicle_type   # 移除交通工具类型
 
 -     @vehicle_type = -1                  # 暂时设置为行走
 
 -     result = passage_4_dir_map_passable?(x, y) # 判断是否可以通行
 
 -     @vehicle_type = last_vehicle_type   # 回复交通工具类型
 
 -     return result
 
 -   end
 
 - end
 
  复制代码 
 
地形标记部分 
- class Game_Character
 
 -   alias terrain_tag_ini initialize
 
 -   def initialize
 
 -     terrain_tag_ini
 
 -     loaded_passages = load_data("Data/TerrainTags.rvdata") 
 
 -     @map_tile_tag_A = loaded_passages[0]
 
 -     @map_tile_tag_B = loaded_passages[1]
 
 -     @map_tile_tag_C = loaded_passages[2]
 
 -     @map_tile_tag_D = loaded_passages[3]
 
 -     @map_tile_tag_E = loaded_passages[4]
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 获取地形标志
 
 -   #--------------------------------------------------------------------------
 
 -   def terrain_tag    
 
 -     # 计算图块ID数值
 
 -     a = $game_map.data[@x, @y, 0]-2000
 
 -     map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
 
 -     map_tile_id_1 = ($game_map.data[@x, @y, 1]-2000) / 48
 
 -     map_tile_id_2 = ($game_map.data[@x, @y, 2])
 
 -          
 
 -     map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
 
 -     map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
 
 -     map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E
 
 -     
 
 -     # 图块 ID 矫正
 
 -     map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
 
 -     for event in $game_map.events.values
 
 -       if event.pos?(@x, @y) and event.tile_id > 0
 
 -         map_tile_id_2 = event.tile_id
 
 -       end
 
 -     end
 
 -     
 
 -     $map_tile_id_2 = map_tile_id_2
 
 -     
 
 -     case map_tile_id_2
 
 -     when 0
 
 -       # 获取图块A部分的地形标志
 
 -       return get_tag(map_tile_id_0, @map_tile_tag_A) if ( (1..256) === map_tile_id_0)
 
 -       return @map_tile_tag_A[map_tile_id_0] if ( (1..256) === map_tile_id_0)
 
 -     when 1..255
 
 -       # 获取图块B部分的地形标志
 
 -       return get_tag(map_tile_id_2, @map_tile_tag_B)
 
 -       return @map_tile_tag_B[map_tile_id_2]
 
 -     when 256..511
 
 -       # 获取图块C部分的地形标志
 
 -       return get_tag(map_tile_id_2, @map_tile_tag_C)
 
 -       return @map_tile_tag_C[map_tile_id_2-256]
 
 -     when 511..767
 
 -       # 获取图块D部分的地形标志
 
 -       return get_tag(map_tile_id_2, @map_tile_tag_D)
 
 -       return @map_tile_tag_D[map_tile_id_2-512]
 
 -     when 768..1023
 
 -       # 获取图块E部分的地形标志
 
 -       return get_tag(map_tile_id_2, @map_tile_tag_E)
 
 -       return @map_tile_tag_E[map_tile_id_2-768]
 
 -     else 
 
 -       # 黑屏区未定义(尚未规划任何)图块区域  回传0
 
 -       return 0
 
 -     end
 
 -   end
 
 -   def get_tag(id, tag_table)
 
 -     for i in tag_table.keys
 
 -       # 找到通行度就返回
 
 -       return i if tag_table[i].include?(id)
 
 -     end
 
 -     # 找不到设定即返回 0
 
 -     return 0
 
 -   end
 
 -   def set_tag(id, value, tag_table)
 
 -     return if value > 7 or value < 0
 
 -     for i in tag_table.keys
 
 -       tag_table[i].delete(id) if tag_table.include?(id)
 
 -       tag_table[i].push(id) if i == value
 
 -     end
 
 -   end
 
 - end
 
  复制代码 |   
 
 
 
 |