Project1

标题: 为什么我用那个小地图的脚本时,存档再读档就会错误啊? [打印本页]

作者: 888000    时间: 2011-8-29 07:36
标题: 为什么我用那个小地图的脚本时,存档再读档就会错误啊?
就是从脚本库里找来的小地图脚本,要替换一堆自带脚本的那个……dsu_plus_rewardpost_czw


888000于2011-8-29 09:37补充以下内容:
[url]http://rpg.blue/thread-72764-1-1.html[/url]
好像是从这里下的……
存档,再读档……错误退出……


888000于2011-8-29 09:39补充以下内容:
http://bbs。66rpg。com/thread-72764-1-1.html(请把。改成.)
从这里下的……

存档再读档就错误


888000于2011-8-29 09:43补充以下内容:
就是从这个论坛上找的……
发生错误的是这个脚本的第97行
代码复制
  1. #==============================================================================
  2. # ■ Game_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图的类。包含卷动以及可以通行的判断功能。
  5. # 本类的实例请参考 $game_map 。
  6. #==============================================================================
  7.  
  8. class Game_Map
  9.   MAZE_SWITCH = 1
  10.   MAZE_SPRITE_OPACITY = 180
  11.   #--------------------------------------------------------------------------
  12.   # ● 定义实例变量
  13.   #--------------------------------------------------------------------------
  14.   attr_reader   :screen                   # 地图画面状态
  15.   attr_reader   :interpreter              # 地图事件用解释器
  16.   attr_reader   :display_x                # 显示 X 坐标 * 256
  17.   attr_reader   :display_y                # 显示 Y 坐标 * 256
  18.   attr_reader   :parallax_name            # 远景 文件名
  19.   attr_reader   :passages                 # 通行表
  20.   attr_reader   :events                   # 事件
  21.   attr_reader   :vehicles                 # 交通工具
  22.   attr_accessor :need_refresh             # 刷新要求标志
  23.   attr_accessor :map                      # 刷新要求标志
  24.   #--------------------------------------------------------------------------
  25.   # ● 初始化对象
  26.   #--------------------------------------------------------------------------
  27.   def initialize
  28.     @screen = Game_Screen.new
  29.     @interpreter = Game_Interpreter.new(0, true)
  30.     @map_id = 0
  31.     @display_x = 0
  32.     @display_y = 0
  33.     create_vehicles
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 设置
  37.   #     map_id : 地图 ID
  38.   #--------------------------------------------------------------------------
  39.   def setup(map_id)
  40.     @map_id = map_id
  41.     @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
  42.     setup_maze
  43.     # 临时写在这里
  44.     @display_x = 0
  45.     @display_y = 0
  46.     @passages = $data_system.passages
  47.     referesh_vehicles
  48.     setup_events
  49.     setup_scroll
  50.     setup_parallax   
  51.     @need_refresh = false
  52.   end
  53.  
  54.   def setup_maze
  55.     $game_maze6R_search[@map_id] = Table.new(width, height) if $game_maze6R_search[@map_id] == nil
  56.     $maze_sprite = nil if $map_sprite != nil
  57.     $maze_sprite = Sprite.new
  58.     $maze_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  59.     $maze_sprite.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(0, 0, 0))
  60.     $maze_sprite.z = 2000
  61.     $maze_sprite.zoom_x = 0.4
  62.     $maze_sprite.zoom_y = 0.4
  63.     $maze_sprite.opacity = MAZE_SPRITE_OPACITY
  64.     $maze_sprite.visible = $game_switches[MAZE_SWITCH]
  65.     $maze_sprite.update
  66.     @maze_rect_width = Graphics.width / width
  67.     @maze_rect_height = Graphics.height / height
  68.     $maze_player_sprite = nil if $maze_player_sprite != nil
  69.     $maze_player_sprite = Sprite.new
  70.     $maze_player_sprite.bitmap = Cache.system("Maze_Char_main")
  71.     $maze_player_sprite.z = 2002
  72.     $maze_player_sprite.ox = $maze_player_sprite.bitmap.width / 2
  73.     $maze_player_sprite.oy = $maze_player_sprite.bitmap.height
  74.     $maze_player_sprite.visible = $maze_sprite.visible
  75.     @refresh_maze_count == 0
  76.   end
  77.   #-----------------------------------------------------
  78.   # ☆ 刷新迷宫game数据,主要用于添加当前一屏幕内容
  79.   #-----------------------------------------------------
  80.   def refresh_maze_game
  81.     for x in 0..$game_map.width
  82.       for y in 0..$game_map.height
  83.         next if not in_range?(x, y)
  84.         $game_maze6R_search[@map_id][x, y] = 1 #unless $game_maze6R_search[@map_id][x, y]
  85.       end
  86.     end   
  87.   end
  88.  
  89.   #-----------------------------------------------------
  90.   # ☆ 刷新迷宫图片
  91.   #-----------------------------------------------------
  92.   def refresh_maze_sprite
  93.     for x in 0..$game_map.width
  94.       for y in 0..$game_map.height
  95.         if $game_maze6R_search[@map_id][x, y] == 1
  96.           bmpt = get_xy_bitmap(x, y)
  97.           $maze_sprite.bitmap.stretch_blt(Rect.new(@maze_rect_width * x, @maze_rect_height * y, @maze_rect_width, @maze_rect_height), bmpt, bmpt.rect)
  98.         end
  99.       end
  100.     end   
  101.     $maze_sprite.visible = $game_switches[MAZE_SWITCH]
  102.     $maze_player_sprite.x = ($game_player.x * @maze_rect_width) * $maze_sprite.zoom_x + $maze_sprite.x
  103.     $maze_player_sprite.y = ($game_player.y * @maze_rect_height) * $maze_sprite.zoom_y + $maze_sprite.y
  104.     $maze_player_sprite.zoom_x = $maze_sprite.zoom_x
  105.     $maze_player_sprite.zoom_y = $maze_sprite.zoom_y
  106.     $maze_player_sprite.visible = $maze_sprite.visible
  107.     $maze_sprite.update
  108.     $maze_player_sprite.update
  109.   end
  110.  
  111.   #-----------------------------------------------------
  112.   # ☆ 刷新迷宫地图的可视情况
  113.   #-----------------------------------------------------
  114.   def change_maze_visible(maze_visible = nil)
  115.     maze_visible = $game_switches[MAZE_SWITCH] if maze_visible == nil
  116.     $maze_sprite.visible = maze_visible
  117.     $maze_player_sprite.visible = maze_visible
  118.   end
  119.  
  120.   #-----------------------------------------------------
  121.   # ☆ 刷新迷宫game数据和图片,小幅度刷新
  122.   #-----------------------------------------------------
  123.   def refresh_maze_small   
  124.     screne_x = $game_map.display_x
  125.     screne_x -= 256
  126.     screne_y = $game_map.display_y
  127.     screne_y -= 256
  128.     screne_width = $game_map.display_x
  129.     screne_width += 8 * Graphics.width + 256
  130.     screne_height = $game_map.display_y
  131.     screne_height += 8 * Graphics.height + 256
  132.     xb = screne_x / 256
  133.     yb = screne_y / 256
  134.     xe = screne_width / 256
  135.     ye = screne_height / 256
  136.     if $maze_sprite == nil or $maze_sprite.disposed?
  137.       refresh_maze_sprite
  138.     end
  139.     for x in xb..xe # 0..$game_map.width
  140.       for y in yb..ye # 0..$game_map.height
  141.         next if not in_range?(x, y)
  142.         next if $game_maze6R_search[@map_id][x, y] == 1
  143.         $game_maze6R_search[@map_id][x, y] = 1
  144.         bmpt = get_xy_bitmap(x, y)
  145.         $maze_sprite.bitmap.stretch_blt(Rect.new(@maze_rect_width * x, @maze_rect_height * y, @maze_rect_width, @maze_rect_height), bmpt, bmpt.rect)
  146.       end
  147.     end
  148.     $maze_sprite.visible = $game_switches[MAZE_SWITCH]
  149.     $maze_player_sprite.x = ($game_player.x * @maze_rect_width) * $maze_sprite.zoom_x + $maze_sprite.x
  150.     $maze_player_sprite.y = ($game_player.y * @maze_rect_height) * $maze_sprite.zoom_y + $maze_sprite.y
  151.     $maze_player_sprite.visible = $maze_sprite.visible
  152.     $maze_sprite.update
  153.     $maze_player_sprite.update
  154.   end
  155.  
  156.   #-----------------------------------------------------
  157.   # ☆ 看某XY是否在屏幕显示范围内
  158.   #-----------------------------------------------------
  159.   def in_range?(inx, iny)
  160.     screne_x = $game_map.display_x
  161.     screne_x -= 256
  162.     screne_y = $game_map.display_y
  163.     screne_y -= 256
  164.     screne_width = $game_map.display_x
  165.     screne_width += 4608 # 8 * Graphics.width + 256
  166.     screne_height = $game_map.display_y
  167.     screne_height += 3584 # 8 * Graphics.height + 256
  168.     return false if inx * 256 <= screne_x
  169.     return false if inx * 256 >= screne_width
  170.     return false if iny * 256 <= screne_y
  171.     return false if iny * 256 >= screne_height
  172.     return true
  173.   end
  174.  
  175.   #-----------------------------------------------------
  176.   # ☆ 获得X,Y理论点的图像
  177.   #-----------------------------------------------------
  178.   def get_xy_bitmap(x, y)
  179.     bitmap = Bitmap.new(32, 32)
  180.     for i in [0] #, 1, 2]
  181.       id = @map.data[x, y, i]
  182.       tb = bmprect_id(id)
  183.       bitmap.blt(0, 0, tb[0], Rect.new(tb[1] * 32, tb[2] * 32, 32, 32)) if tb[0] != nil
  184.     end
  185.     return bitmap
  186.   end  
  187.  
  188.   #-----------------------------------------------------
  189.   # ☆ 根据ID获得Bitmap的rect
  190.   #-----------------------------------------------------
  191.   def bmprect_id(id)   
  192.     case id
  193.     when 0..255      
  194.       bitmap_rectxyb = get_where(id)
  195.       return [$map6r_bitmaps[5], bitmap_rectxyb[0], bitmap_rectxyb[1]]
  196.     when 256..511
  197.       bitmap_rectxyb = get_where(id - 256)
  198.       return [$map6r_bitmaps[6], bitmap_rectxyb[0], bitmap_rectxyb[1]]
  199.     when 512..767
  200.       bitmap_rectxyb = get_where(id - 512)
  201.       return [$map6r_bitmaps[7], bitmap_rectxyb[0], bitmap_rectxyb[1]]
  202.     when 768..1023
  203.       bitmap_rectxyb = get_where(id - 768)
  204.       return [$map6r_bitmaps[8], bitmap_rectxyb[0], bitmap_rectxyb[1]]
  205.     when 1536..1791
  206.       bitmap_rectxyb = get_where(id - 1536)
  207.       return [$map6r_bitmaps[4], bitmap_rectxyb[0], bitmap_rectxyb[1]]   
  208.     when 2048..8191 # 2048..2048 + 48 * 128 - 1   
  209.       bitmap_rectxyb = get_where(id)
  210.       return [bitmap_rectxyb[0], bitmap_rectxyb[1], bitmap_rectxyb[2]]  
  211.     end
  212.     return [nil, 0, 0]
  213.   end
  214.  
  215.   #-----------------------------------------------------
  216.   # ☆ 根据ID返回Bitmap的rect
  217.   #-----------------------------------------------------
  218.   def get_where(id)
  219.     case id
  220.     when 0..255
  221.       x = id % 8
  222.       y = id / 8
  223.       return [x, y]
  224.     when 2048..2767 # 2048..2048 + 48 * 15 - 1
  225.       tempid = (id - 2048) % 48 # 这个表示是48系列图中的第几个系列种
  226.       series_id = (id - 2048) / 48   # 这个表示是在图上素材分类的第几个
  227.       case series_id
  228.       when 0
  229.         return get_ofxoftdiyilei(tempid, 0, 0)
  230.       when 1
  231.         return get_ofxoftdiyilei(tempid, 0, 3)
  232.       when 2
  233.         return get_ofxoftdiyilei(tempid, 6, 0)
  234.       when 3
  235.         return get_ofxoftdiyilei(tempid, 6, 3)
  236.       when 4
  237.         return get_ofxoftdiyilei(tempid, 8, 0)
  238.       when 5
  239.         return get_ofxoftdiyilei(tempid, 8, 3)
  240.       when 6
  241.         return get_ofxoftdiyilei(tempid, 14, 0)
  242.       when 7
  243.         return get_ofxoftdiyilei(tempid, 14, 3)
  244.       when 8
  245.         return get_ofxoftdiyilei(tempid, 0, 6)
  246.       when 9
  247.         return get_ofxoftdiyilei(tempid, 0, 9)
  248.       when 10
  249.         return get_ofxoftdiyilei(tempid, 6, 6)
  250.       when 11
  251.         return get_ofxoftdiyilei(tempid, 6, 9)
  252.       when 12
  253.         return get_ofxoftdiyilei(tempid, 8, 6)
  254.       when 13
  255.         return get_ofxoftdiyilei(tempid, 8, 9)
  256.       when 14
  257.         return get_ofxoftdiyilei(tempid, 14, 6)
  258.       when 15
  259.         return get_ofxoftdiyilei(tempid, 14, 9)
  260.       end
  261.  
  262.     #-----------------------------------------------------------------
  263.     # 这个是A2素材的定义方式
  264.     #-----------------------------------------------------------------
  265.     when 2768..4351 #2048 + 48 * 15..2048 + 48 * 48 - 1
  266.       tempid = (id - 2048 - 48 * 16) % 48      # 这个表示是48系列图中的第几个系列种
  267.       series_id = (id - 2048 - 48 * 16) / 48   # 这个表示是在图上素材分类的第几个
  268.       ofx = (series_id % 8) * 2
  269.       ofy = (series_id / 8) * 3
  270.       return get_ofxoftdiyilei(tempid, ofx, ofy, 1)
  271.  
  272.     #-----------------------------------------------------------------
  273.     # 这个是A3素材的房顶方式,前半部分
  274.     #-----------------------------------------------------------------
  275.     when 4352..4735 #2048 + 48 * 48..2048 + 48 * 56 - 1
  276.       tempid = (id - 2048 - 48 * 48) % 48      # 这个表示是48系列图中的第几个系列种
  277.       series_id = (id - 2048 - 48 * 48) / 48   # 这个表示是在图上素材分类的第几个
  278.       ofx = (series_id % 8) * 2
  279.       ofy = 0
  280.       return get_ofxoftdierlei(tempid, ofx, ofy, 2)     
  281.     #-----------------------------------------------------------------
  282.     # 这个是A3素材的房顶方式,后半部分
  283.     #-----------------------------------------------------------------
  284.     when 5120..5503 #2048 + 48 * 64..2048 + 48 * 72 - 1
  285.       tempid = (id - 2048 - 48 * 64) % 48      # 这个表示是48系列图中的第几个系列种
  286.       series_id = (id - 2048 - 48 * 64) / 48   # 这个表示是在图上素材分类的第几个
  287.       ofx = (series_id % 8) * 2
  288.       ofy = 4
  289.       return get_ofxoftdierlei(tempid, ofx, ofy, 2)  
  290.     #-----------------------------------------------------------------
  291.     # 这个是A3素材的房屋体方式,前半部分
  292.     #-----------------------------------------------------------------
  293.     when 4736..5119 #2048 + 48 * 56..2048 + 48 * 64 - 1
  294.       tempid = (id - 2048 - 48 * 48) % 48      # 这个表示是48系列图中的第几个系列种
  295.       series_id = (id - 2048 - 48 * 48) / 48   # 这个表示是在图上素材分类的第几个
  296.       ofx = (series_id % 8) * 2
  297.       ofy = 0
  298.       return get_ofxoftdierlei(tempid, ofx, ofy, 2, 1)     
  299.     #-----------------------------------------------------------------
  300.     # 这个是A3素材的房屋体方式,后半部分
  301.     #-----------------------------------------------------------------
  302.     when 5504..5887#2048 + 48 * 72..2048 + 48 * 80 - 1
  303.       tempid = (id - 2048 - 48 * 64) % 48      # 这个表示是48系列图中的第几个系列种
  304.       series_id = (id - 2048 - 48 * 64) / 48   # 这个表示是在图上素材分类的第几个
  305.       ofx = (series_id % 8) * 2
  306.       ofy = 4
  307.       return get_ofxoftdierlei(tempid, ofx, ofy, 2, 1)   
  308.  
  309.  
  310.  
  311.  
  312.     #-----------------------------------------------------------------
  313.     # 这个是A4素材的房顶方式 1
  314.     #-----------------------------------------------------------------
  315.     when 5888..6271 #2048 + 48 * 80..2048 + 48 * 88 - 1
  316.       tempid = (id - 2048 - 48 * 80) % 48      
  317.       series_id = (id - 2048 - 48 * 80) / 48   
  318.       ofx = (series_id % 8) * 2
  319.       ofy = 0
  320.       return get_ofxoftdiyilei(tempid, ofx, ofy, 3)   
  321.     #-----------------------------------------------------------------
  322.     # 这个是A4素材的房顶方式 2
  323.     #-----------------------------------------------------------------
  324.     when 6656..7039 #2048 + 48 * 96..2048 + 48 * 104 - 1
  325.       tempid = (id - 2048 - 48 * 80) % 48      
  326.       series_id = (id - 2048 - 48 * 80) / 48   
  327.       ofx = (series_id % 8) * 2
  328.       ofy = 5
  329.       return get_ofxoftdiyilei(tempid, ofx, ofy, 3)   
  330.     #-----------------------------------------------------------------
  331.     # 这个是A4素材的房顶方式 3
  332.     #-----------------------------------------------------------------
  333.     when 7424..7807 #2048 + 48 * 112..2048 + 48 * 120 - 1
  334.       tempid = (id - 2048 - 48 * 80) % 48      
  335.       series_id = (id - 2048 - 48 * 80) / 48   
  336.       ofx = (series_id % 8) * 2
  337.       ofy = 10
  338.       return get_ofxoftdiyilei(tempid, ofx, ofy, 3)   
  339.  
  340.  
  341.  
  342.     #-----------------------------------------------------------------
  343.     # 这个是A4素材的墙壁方式 1
  344.     #-----------------------------------------------------------------
  345.     when 6272..6655 #2048 + 48 * 88..2048 + 48 * 96 - 1
  346.       tempid = (id - 2048 - 48 * 80) % 48      
  347.       series_id = (id - 2048 - 48 * 80) / 48   
  348.       ofx = (series_id % 8) * 2
  349.       ofy = 0
  350.       return get_ofxoftdierlei(tempid, ofx, ofy, 3, 2)   
  351.     #-----------------------------------------------------------------
  352.     # 这个是A4素材的墙壁方式 2
  353.     #-----------------------------------------------------------------
  354.     when 7040..7423 #2048 + 48 * 104..2048 + 48 * 112 - 1
  355.       tempid = (id - 2048 - 48 * 80) % 48      
  356.       series_id = (id - 2048 - 48 * 80) / 48   
  357.       ofx = (series_id % 8) * 2
  358.       ofy = 5
  359.       return get_ofxoftdierlei(tempid, ofx, ofy, 3, 2)  
  360.     #-----------------------------------------------------------------
  361.     # 这个是A4素材的墙壁方式 3
  362.     #-----------------------------------------------------------------
  363.     when 7808..8191 #2048 + 48 * 120..2048 + 48 * 128 - 1
  364.       tempid = (id - 2048 - 48 * 80) % 48      
  365.       series_id = (id - 2048 - 48 * 80) / 48   
  366.       ofx = (series_id % 8) * 2
  367.       ofy = 10
  368.       return get_ofxoftdierlei(tempid, ofx, ofy, 3, 2)  
  369.     end   
  370.   end
  371.  
  372.   #--------------------------------------------------------------------------
  373.   # ☆ 中间函数,用来返回某张图上的一个rect,特别针对A1
  374.   #--------------------------------------------------------------------------
  375.   def get_ofxoftdiyilei(tempid = 0, ofx = 0, ofy = 0, bmps = 0)
  376.     bmp = Bitmap.new(32, 32)
  377.     ta = diyitao(tempid)
  378.     ofx *= 32
  379.     ofy *= 32
  380.     bmp.blt(0,0,$map6r_bitmaps[bmps], Rect.new(ta[0][1]*16 + ofx, ta[0][0]*16 + ofy, 16, 16))
  381.     bmp.blt(16,0,$map6r_bitmaps[bmps], Rect.new(ta[1][1]*16 + ofx, ta[1][0]*16 + ofy, 16, 16))
  382.     bmp.blt(0,16,$map6r_bitmaps[bmps], Rect.new(ta[2][1]*16 + ofx, ta[2][0]*16 + ofy, 16, 16))
  383.     bmp.blt(16,16,$map6r_bitmaps[bmps], Rect.new(ta[3][1]*16 + ofx, ta[3][0]*16 + ofy, 16, 16))
  384.     return [bmp, 0, 0]
  385.   end
  386.  
  387.   #--------------------------------------------------------------------------
  388.   # ☆ 中间函数,用来返回某张图上的一个rect,针对A3
  389.   #--------------------------------------------------------------------------
  390.   def get_ofxoftdierlei(tempid = 0, ofx = 0, ofy = 0, bmps = 0, hx = 0)
  391.     bmp = Bitmap.new(32, 32)
  392.     ta = diertao(tempid) if hx == 0
  393.     ta = disantao(tempid) if hx == 1
  394.     ta = disitao(tempid) if hx == 2
  395.     ofx *= 32
  396.     ofy *= 32
  397.     bmp.blt(0,0,$map6r_bitmaps[bmps], Rect.new(ta[0][1]*16 + ofx, ta[0][0]*16 + ofy, 16, 16))
  398.     bmp.blt(16,0,$map6r_bitmaps[bmps], Rect.new(ta[1][1]*16 + ofx, ta[1][0]*16 + ofy, 16, 16))
  399.     bmp.blt(0,16,$map6r_bitmaps[bmps], Rect.new(ta[2][1]*16 + ofx, ta[2][0]*16 + ofy, 16, 16))
  400.     bmp.blt(16,16,$map6r_bitmaps[bmps], Rect.new(ta[3][1]*16 + ofx, ta[3][0]*16 + ofy, 16, 16))
  401.     return [bmp, 0, 0]
  402.   end
  403.  
  404.   #--------------------------------------------------------------------------
  405.   # ☆ 第二套结构代码,定义了素材A3的房顶部分
  406.   #--------------------------------------------------------------------------
  407.   def diertao(whattype = 0)
  408.     array = [
  409.     [[2,2],[2,1],[1,2],[1,1]],
  410.     [[2,0],[2,1],[1,0],[1,1]],
  411.     [[0,2],[0,1],[1,2],[1,1]],
  412.     [[0,0],[0,1],[1,0],[1,1]],
  413.     [[2,2],[2,3],[1,2],[1,3]],
  414.     [[2,0],[2,3],[1,0],[1,3]],
  415.     [[0,2],[0,3],[1,2],[1,3]],
  416.     [[0,0],[0,3],[1,0],[1,3]],
  417.     [[2,2],[2,1],[3,2],[3,1]],
  418.     [[2,0],[2,1],[3,0],[3,1]],
  419.     [[0,2],[0,1],[3,2],[3,1]],   
  420.     [[0,0],[0,1],[3,0],[3,1]],
  421.     [[2,2],[2,3],[3,2],[3,3]],
  422.     [[2,0],[2,3],[3,0],[3,3]],
  423.     [[0,2],[0,3],[3,2],[3,3]],
  424.     [[0,0],[0,3],[3,0],[3,3]],
  425.     [[0,0],[0,0],[0,0],[0,0]],
  426.     ]
  427.     return array[whattype] if array[whattype] != nil
  428.     return [[0,0],[0,0],[0,0],[0,0]]
  429.   end
  430.  
  431.   #--------------------------------------------------------------------------
  432.   # ☆ 第二套结构代码,定义了素材A4的墙壁部分
  433.   #--------------------------------------------------------------------------
  434.   def disitao(whattype = 0)
  435.     array = [
  436.     [[8,2],[8,1],[7,2],[7,1]],
  437.     [[8,0],[8,1],[7,0],[7,1]],
  438.     [[6,2],[6,1],[7,2],[7,1]],
  439.     [[6,0],[6,1],[7,2],[7,1]],
  440.     [[8,2],[8,3],[7,2],[7,3]],
  441.     [[8,0],[8,3],[7,0],[7,3]],
  442.     [[6,2],[6,3],[7,2],[7,3]],
  443.     [[6,2],[6,3],[7,0],[7,3]],
  444.     [[8,2],[8,1],[9,2],[9,1]],
  445.     [[8,0],[8,1],[9,0],[9,1]],
  446.     [[6,2],[6,1],[9,2],[9,1]],   
  447.     [[6,0],[6,1],[9,0],[9,1]],
  448.     [[8,2],[8,3],[9,2],[9,3]],
  449.     [[8,0],[8,3],[9,0],[9,3]],
  450.     [[6,2],[6,3],[9,2],[9,3]],
  451.     [[6,0],[6,3],[9,0],[9,3]],
  452.     [[6,0],[6,0],[6,0],[6,0]], # 填满48个
  453.     ]
  454.     return array[whattype] if array[whattype] != nil
  455.     return [[6,0],[6,0],[6,0],[6,0]]
  456.   end
  457.  
  458.   #--------------------------------------------------------------------------
  459.   # ☆ 第三套结构代码,定义了素材A3的房屋部分
  460.   #--------------------------------------------------------------------------
  461.   def disantao(whattype = 0)
  462.     array = [
  463.     [[6,2],[6,1],[5,2],[5,1]],
  464.     [[6,0],[6,1],[5,0],[5,1]],
  465.     [[4,2],[4,1],[5,2],[5,1]],
  466.     [[4,0],[4,1],[5,2],[5,1]],
  467.     [[6,2],[6,3],[5,2],[5,3]],
  468.     [[6,0],[6,3],[5,0],[5,3]],
  469.     [[4,2],[4,3],[5,2],[5,3]],
  470.     [[4,2],[4,3],[5,0],[5,3]],
  471.     [[6,2],[6,1],[7,2],[7,1]],
  472.     [[6,0],[6,1],[7,0],[7,1]],
  473.     [[4,2],[4,1],[7,2],[7,1]],   
  474.     [[4,0],[4,1],[7,0],[7,1]],
  475.     [[6,2],[6,3],[7,2],[7,3]],
  476.     [[6,0],[6,3],[7,0],[7,3]],
  477.     [[4,2],[4,3],[7,2],[7,3]],
  478.     [[4,0],[4,3],[7,0],[7,3]],
  479.     [[4,0],[4,0],[4,0],[4,0]], # 填满48个
  480.     ]
  481.     return array[whattype] if array[whattype] != nil
  482.     return [[4,0],[4,0],[4,0],[4,0]]
  483.   end# 房屋部分
  484.  
  485.  
  486.   #--------------------------------------------------------------------
  487.   # ★ 第一套结构数组,这个用于定义A1里面的自动元件构成。写得晕死了
  488.   #--------------------------------------------------------------------
  489.   def diyitao(whattype = 0)
  490.     array = [
  491.     [[4,2],[4,1],[3,2],[3,1]],
  492.     [[0,2],[4,1],[3,2],[3,1]],
  493.     [[4,2],[0,3],[3,2],[3,1]],
  494.     [[0,2],[0,3],[3,2],[3,1]],
  495.     [[4,2],[4,1],[3,2],[1,3]],
  496.     [[0,2],[4,1],[3,2],[1,3]],
  497.     [[4,2],[0,3],[3,2],[1,3]],
  498.     [[0,2],[0,3],[3,2],[1,3]],
  499.     [[4,2],[4,1],[1,2],[3,1]],
  500.     [[0,2],[4,1],[1,2],[3,1]],   
  501.     [[4,2],[0,3],[1,2],[3,1]],
  502.     [[0,2],[0,3],[1,2],[3,1]],
  503.     [[4,2],[4,1],[1,2],[1,3]],
  504.     [[0,2],[4,1],[1,2],[1,3]],
  505.     [[4,2],[0,3],[1,2],[1,3]],
  506.     [[0,2],[0,3],[1,2],[1,3]],   
  507.     [[4,0],[4,1],[3,0],[3,1]],
  508.     [[4,0],[0,3],[3,0],[3,1]],
  509.     [[4,0],[4,1],[3,0],[1,3]],
  510.     [[4,0],[0,3],[3,0],[1,3]],   
  511.     [[2,2],[2,1],[3,2],[3,1]],
  512.     [[2,2],[2,1],[3,2],[1,3]],
  513.     [[2,2],[2,1],[1,2],[3,1]],
  514.     [[2,2],[2,1],[1,2],[1,3]],
  515.     [[4,2],[4,3],[3,2],[3,3]],
  516.     [[4,2],[4,3],[1,2],[3,3]],
  517.     [[0,2],[4,3],[3,2],[3,3]],
  518.     [[0,2],[4,3],[1,2],[3,3]],
  519.     [[4,2],[4,1],[5,2],[5,1]],
  520.     [[0,2],[4,1],[5,2],[5,1]],
  521.     [[4,2],[0,3],[5,2],[5,1]],
  522.     [[0,2],[0,3],[5,2],[5,1]],
  523.     [[4,0],[4,3],[3,0],[3,3]],
  524.     [[2,2],[2,1],[5,2],[5,1]],
  525.     [[2,0],[2,1],[3,0],[3,1]], #34
  526.     [[2,0],[2,1],[3,0],[1,3]],  
  527.     [[2,2],[2,3],[3,2],[3,3]],
  528.     [[2,2],[2,3],[1,2],[3,3]],
  529.     [[4,2],[4,3],[5,2],[5,3]],
  530.     [[0,2],[4,3],[5,2],[5,3]],
  531.     [[4,0],[4,1],[5,0],[5,1]],
  532.     [[4,0],[0,3],[5,0],[5,1]],
  533.     [[2,0],[2,3],[3,0],[3,3]],
  534.     [[2,0],[2,1],[5,0],[5,1]],
  535.     [[4,0],[4,3],[5,0],[5,3]],
  536.     [[2,2],[2,3],[5,2],[5,3]],
  537.     [[2,0],[2,3],[5,0],[5,3]],
  538.     [[0,0],[0,1],[1,0],[1,1]]
  539.     ]
  540.     return array[whattype]
  541.   end
  542.  
  543.  
  544.  
  545.  
  546.   #--------------------------------------------------------------------------
  547.   # ● 生成交通工具
  548.   #--------------------------------------------------------------------------
  549.   def create_vehicles
  550.     @vehicles = []
  551.     @vehicles[0] = Game_Vehicle.new(0)    # 小型船
  552.     @vehicles[1] = Game_Vehicle.new(1)    # 大型船
  553.     @vehicles[2] = Game_Vehicle.new(2)    # 飛行船
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 刷新交通工具
  557.   #--------------------------------------------------------------------------
  558.   def referesh_vehicles
  559.     for vehicle in @vehicles
  560.       vehicle.refresh
  561.     end
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # ● 获取小型船
  565.   #--------------------------------------------------------------------------
  566.   def boat
  567.     return @vehicles[0]
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 获取大型船
  571.   #--------------------------------------------------------------------------
  572.   def ship
  573.     return @vehicles[1]
  574.   end
  575.   #--------------------------------------------------------------------------
  576.   # ● 获取飞行船
  577.   #--------------------------------------------------------------------------
  578.   def airship
  579.     return @vehicles[2]
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ● 设置事件
  583.   #--------------------------------------------------------------------------
  584.   def setup_events
  585.     @events = {}          # 地图事件
  586.     for i in @map.events.keys
  587.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  588.     end
  589.     @common_events = {}   # 公共事件
  590.     for i in 1...$data_common_events.size
  591.       @common_events[i] = Game_CommonEvent.new(i)
  592.     end
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● 设置滚动
  596.   #--------------------------------------------------------------------------
  597.   def setup_scroll
  598.     @scroll_direction = 2
  599.     @scroll_rest = 0
  600.     @scroll_speed = 4
  601.     @margin_x = (width - 17) * 256 / 2      # 画面不显示的地方宽 / 2
  602.     @margin_y = (height - 13) * 256 / 2     # 画面不显示的地方高 / 2
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● 设置远景
  606.   #--------------------------------------------------------------------------
  607.   def setup_parallax
  608.     @parallax_name = @map.parallax_name
  609.     @parallax_loop_x = @map.parallax_loop_x
  610.     @parallax_loop_y = @map.parallax_loop_y
  611.     @parallax_sx = @map.parallax_sx
  612.     @parallax_sy = @map.parallax_sy
  613.     @parallax_x = 0
  614.     @parallax_y = 0
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 设置显示位置
  618.   #     x : 新显示 X 坐标 (*256)
  619.   #     y : 新显示 Y 坐标 (*256)
  620.   #--------------------------------------------------------------------------
  621.   def set_display_pos(x, y)
  622.     @display_x = (x + @map.width * 256) % (@map.width * 256)
  623.     @display_y = (y + @map.height * 256) % (@map.height * 256)
  624.     @parallax_x = x
  625.     @parallax_y = y
  626.     refresh_maze_game
  627.     refresh_maze_sprite
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 计算远景显示 X 坐标
  631.   #     bitmap : 远景位图
  632.   #--------------------------------------------------------------------------
  633.   def calc_parallax_x(bitmap)
  634.     if bitmap == nil
  635.       return 0
  636.     elsif @parallax_loop_x
  637.       return @parallax_x / 16
  638.     elsif loop_horizontal?
  639.       return 0
  640.     else
  641.       w1 = bitmap.width - 544
  642.       w2 = @map.width * 32 - 544
  643.       if w1 <= 0 or w2 <= 0
  644.         return 0
  645.       else
  646.         return @parallax_x * w1 / w2 / 8
  647.       end
  648.     end
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ● 计算远景显示 Y 坐标
  652.   #     bitmap : 远景位图
  653.   #--------------------------------------------------------------------------
  654.   def calc_parallax_y(bitmap)
  655.     if bitmap == nil
  656.       return 0
  657.     elsif @parallax_loop_y
  658.       return @parallax_y / 16
  659.     elsif loop_vertical?
  660.       return 0
  661.     else
  662.       h1 = bitmap.height - 416
  663.       h2 = @map.height * 32 - 416
  664.       if h1 <= 0 or h2 <= 0
  665.         return 0
  666.       else
  667.         return @parallax_y * h1 / h2 / 8
  668.       end
  669.     end
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 获取地图 ID
  673.   #--------------------------------------------------------------------------
  674.   def map_id
  675.     return @map_id
  676.   end
  677.   #--------------------------------------------------------------------------
  678.   # ● 获取宽度
  679.   #--------------------------------------------------------------------------
  680.   def width
  681.     return @map.width
  682.   end
  683.   #--------------------------------------------------------------------------
  684.   # ● 获取高度
  685.   #--------------------------------------------------------------------------
  686.   def height
  687.     return @map.height
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # ● 横方向循环吗?
  691.   #--------------------------------------------------------------------------
  692.   def loop_horizontal?
  693.     return (@map.scroll_type == 2 or @map.scroll_type == 3)
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 纵方向循环吗?
  697.   #--------------------------------------------------------------------------
  698.   def loop_vertical?
  699.     return (@map.scroll_type == 1 or @map.scroll_type == 3)
  700.   end
  701.   #--------------------------------------------------------------------------
  702.   # ● 获取跑动与否?
  703.   #--------------------------------------------------------------------------
  704.   def disable_dash?
  705.     return @map.disable_dashing
  706.   end
  707.   #--------------------------------------------------------------------------
  708.   # ● 获取遇敌列表
  709.   #--------------------------------------------------------------------------
  710.   def encounter_list
  711.     return @map.encounter_list
  712.   end
  713.   #--------------------------------------------------------------------------
  714.   # ● 获取遇敌步数
  715.   #--------------------------------------------------------------------------
  716.   def encounter_step
  717.     return @map.encounter_step
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ● 获取地图数据
  721.   #--------------------------------------------------------------------------
  722.   def data
  723.     return @map.data
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ● 计算扣除显示坐标的 X 坐标
  727.   #     x : X 坐标
  728.   #--------------------------------------------------------------------------
  729.   def adjust_x(x)
  730.     if loop_horizontal? and x < @display_x - @margin_x
  731.       return x - @display_x + @map.width * 256
  732.     else
  733.       return x - @display_x
  734.     end
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● 计算扣除显示坐标的 Y 坐标
  738.   #     y : Y 坐标
  739.   #--------------------------------------------------------------------------
  740.   def adjust_y(y)
  741.     if loop_vertical? and y < @display_y - @margin_y
  742.       return y - @display_y + @map.height * 256
  743.     else
  744.       return y - @display_y
  745.     end
  746.   end
  747.   #--------------------------------------------------------------------------
  748.   # ● 计算循环修正后的 X 坐标
  749.   #     x : X 坐标
  750.   #--------------------------------------------------------------------------
  751.   def round_x(x)
  752.     if loop_horizontal?
  753.       return (x + width) % width
  754.     else
  755.       return x
  756.     end
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   # ● 计算循环修正后的 Y坐标
  760.   #     y : Y 坐标
  761.   #--------------------------------------------------------------------------
  762.   def round_y(y)
  763.     if loop_vertical?
  764.       return (y + height) % height
  765.     else
  766.       return y
  767.     end
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ● 计算特定方向移动 1 マス X 坐标
  771.   #     x         : X 坐标
  772.   #     direction : 方向 (2,4,6,8)
  773.   #--------------------------------------------------------------------------
  774.   def x_with_direction(x, direction)
  775.     return round_x(x + (direction == 6 ? 1 : direction == 4 ? -1 : 0))
  776.   end
  777.   #--------------------------------------------------------------------------
  778.   # ● 计算特定方向移动 1 マス Y 坐标
  779.   #     y         : Y 坐标
  780.   #     direction : 方向 (2,4,6,8)
  781.   #--------------------------------------------------------------------------
  782.   def y_with_direction(y, direction)
  783.     return round_y(y + (direction == 2 ? 1 : direction == 8 ? -1 : 0))
  784.   end
  785.   #--------------------------------------------------------------------------
  786.   # ● 获取指定坐标存在的事件排列
  787.   #     x : X 坐标
  788.   #     y : Y 坐标
  789.   #--------------------------------------------------------------------------
  790.   def events_xy(x, y)
  791.     result = []
  792.     for event in $game_map.events.values
  793.       result.push(event) if event.pos?(x, y)
  794.     end
  795.     return result
  796.   end
  797.   #--------------------------------------------------------------------------
  798.   # ● BGM / BGS 自动切换
  799.   #--------------------------------------------------------------------------
  800.   def autoplay
  801.     @map.bgm.play if @map.autoplay_bgm
  802.     @map.bgs.play if @map.autoplay_bgs
  803.   end
  804.   #--------------------------------------------------------------------------
  805.   # ● 刷新
  806.   #--------------------------------------------------------------------------
  807.   def refresh
  808.     if @map_id > 0
  809.       for event in @events.values
  810.         event.refresh
  811.       end
  812.       for common_event in @common_events.values
  813.         common_event.refresh
  814.       end
  815.     end
  816.     refresh_mg_tansuo
  817.     @need_refresh = false
  818.   end
  819.   #--------------------------------------------------------------------------
  820.   # ● 迷宫探索系统
  821.   #--------------------------------------------------------------------------
  822.   def refresh_mg_tansuo
  823.  
  824.   end  
  825.   #--------------------------------------------------------------------------
  826.   # ● 向下滚动
  827.   #     distance : 滚动距离
  828.   #--------------------------------------------------------------------------
  829.   def scroll_down(distance)
  830.     if loop_vertical?
  831.       @display_y += distance
  832.       @display_y %= @map.height * 256
  833.       @parallax_y += distance
  834.     else
  835.       last_y = @display_y
  836.       @display_y = [@display_y + distance, (height - 13) * 256].min
  837.       @parallax_y += @display_y - last_y
  838.     end
  839.   end
  840.   #--------------------------------------------------------------------------
  841.   # ● 向左滚动
  842.   #     distance : 滚动距离
  843.   #--------------------------------------------------------------------------
  844.   def scroll_left(distance)
  845.     if loop_horizontal?
  846.       @display_x += @map.width * 256 - distance
  847.       @display_x %= @map.width * 256
  848.       @parallax_x -= distance
  849.     else
  850.       last_x = @display_x
  851.       @display_x = [@display_x - distance, 0].max
  852.       @parallax_x += @display_x - last_x
  853.     end
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # ● 向右滚动
  857.   #     distance : 滚动距离
  858.   #--------------------------------------------------------------------------
  859.   def scroll_right(distance)
  860.     if loop_horizontal?
  861.       @display_x += distance
  862.       @display_x %= @map.width * 256
  863.       @parallax_x += distance
  864.     else
  865.       last_x = @display_x
  866.       @display_x = [@display_x + distance, (width - 17) * 256].min
  867.       @parallax_x += @display_x - last_x
  868.     end
  869.   end
  870.   #--------------------------------------------------------------------------
  871.   # ● 向上滚动
  872.   #     distance : 滚动距离
  873.   #--------------------------------------------------------------------------
  874.   def scroll_up(distance)
  875.     if loop_vertical?
  876.       @display_y += @map.height * 256 - distance
  877.       @display_y %= @map.height * 256
  878.       @parallax_y -= distance
  879.     else
  880.       last_y = @display_y
  881.       @display_y = [@display_y - distance, 0].max
  882.       @parallax_y += @display_y - last_y
  883.     end
  884.   end
  885.   #--------------------------------------------------------------------------
  886.   # ● 有效坐标判定
  887.   #     x          : X 坐标
  888.   #     y          : Y 坐标
  889.   #--------------------------------------------------------------------------
  890.   def valid?(x, y)
  891.     return (x >= 0 and x < width and y >= 0 and y < height)
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ● 可以通行判定
  895.   #     x    : X 坐标
  896.   #     y    : Y 坐标  
  897.   #     flag : 检查通行禁止数据 (通常 0x01、交通工具的情况下变更)
  898.   #--------------------------------------------------------------------------
  899.   def passable?(x, y, flag = 0x01)
  900.     for event in events_xy(x, y)            # 检查坐标相同的事件
  901.       next if event.tile_id == 0            # 地图没有图块的情况下
  902.       next if event.priority_type > 0       # 不是[通常形式下]
  903.       next if event.through                 # 穿透状态
  904.       pass = @passages[event.tile_id]       # 获取通行属性
  905.       next if pass & 0x10 == 0x10           # [☆] : 不影响通行
  906.       return true if pass & flag == 0x00    # [○] : 可通行
  907.       return false if pass & flag == flag   # [×] : 不可通行
  908.     end
  909.     for i in [2, 1, 0]                      # 从层按从上到下的顺序调查循环
  910.       tile_id = @map.data[x, y, i]          # 获取元件 ID
  911.       return false if tile_id == nil        # 取得元件 ID 失败 : 不能通行
  912.       pass = @passages[tile_id]             # 获取通行属性
  913.       next if pass & 0x10 == 0x10           # [☆] : 不影响通行
  914.       return true if pass & flag == 0x00    # [○] : 可通行
  915.       return false if pass & flag == flag   # [×] : 不可通行
  916.     end
  917.     return false                            # 通行不可
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # ● 小型船通行判定
  921.   #     x : X 坐标
  922.   #     y : Y 坐标
  923.   #--------------------------------------------------------------------------
  924.   def boat_passable?(x, y)
  925.     return passable?(x, y, 0x02)
  926.   end
  927.   #--------------------------------------------------------------------------
  928.   # ● 大型船通行判定
  929.   #     x : X 坐标
  930.   #     y : Y 坐标
  931.   #--------------------------------------------------------------------------
  932.   def ship_passable?(x, y)
  933.     return passable?(x, y, 0x04)
  934.   end
  935.   #--------------------------------------------------------------------------
  936.   # ● 飞行船着陆可能判定
  937.   #     x : X 坐标
  938.   #     y : Y 坐标
  939.   #--------------------------------------------------------------------------
  940.   def airship_land_ok?(x, y)
  941.     return passable?(x, y, 0x08)
  942.   end
  943.   #--------------------------------------------------------------------------
  944.   # ● 茂密判定
  945.   #     x : X 坐标
  946.   #     y : Y 坐标
  947.   #--------------------------------------------------------------------------
  948.   def bush?(x, y)
  949.     return false unless valid?(x, y)
  950.     return @passages[@map.data[x, y, 1]] & 0x40 == 0x40
  951.   end
  952.   #--------------------------------------------------------------------------
  953.   # ● 反击判定
  954.   #     x : X 坐标
  955.   #     y : Y 坐标
  956.   #--------------------------------------------------------------------------
  957.   def counter?(x, y)
  958.     return false unless valid?(x, y)
  959.     return @passages[@map.data[x, y, 0]] & 0x80 == 0x80
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● 滚动开始
  963.   #     direction : 滚动方向
  964.   #     distance  : 滚动距离
  965.   #     speed     : 滚动速度
  966.   #--------------------------------------------------------------------------
  967.   def start_scroll(direction, distance, speed)
  968.     @scroll_direction = direction
  969.     @scroll_rest = distance * 256
  970.     @scroll_speed = speed
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ● 滚动中中判定
  974.   #--------------------------------------------------------------------------
  975.   def scrolling?
  976.     return @scroll_rest > 0
  977.   end
  978.   #--------------------------------------------------------------------------
  979.   # ● 画面刷新
  980.   #--------------------------------------------------------------------------
  981.   def update
  982.     refresh if $game_map.need_refresh
  983.     update_scroll
  984.     update_events
  985.     update_vehicles
  986.     update_parallax
  987.     update_maze
  988.     @screen.update
  989.   end
  990.   #--------------------------------------------------------------------------
  991.   # ● 刷新迷宫,每20帧刷一次
  992.   #--------------------------------------------------------------------------
  993.   def update_maze   
  994.     @refresh_maze_count = 0 if @refresh_maze_count == nil
  995.     if @refresh_maze_count == 0
  996.       refresh_maze_small
  997.       @refresh_maze_count = 20
  998.     else
  999.       @refresh_maze_count -= 1
  1000.     end
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ● 滚动刷新
  1004.   #--------------------------------------------------------------------------
  1005.   def update_scroll
  1006.     if @scroll_rest > 0                 # 滚动中的情况下
  1007.       distance = 2 ** @scroll_speed     # 滚动速度变化为地图坐标系的距离
  1008.       case @scroll_direction
  1009.       when 2  # 下
  1010.         scroll_down(distance)
  1011.       when 4  # 左
  1012.         scroll_left(distance)
  1013.       when 6  # 右
  1014.         scroll_right(distance)
  1015.       when 8  # 上
  1016.         scroll_up(distance)
  1017.       end
  1018.       @scroll_rest -= distance          # 滚动距离的减法运算
  1019.     end
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 刷新事件
  1023.   #--------------------------------------------------------------------------
  1024.   def update_events
  1025.     for event in @events.values
  1026.       event.update
  1027.     end
  1028.     for common_event in @common_events.values
  1029.       common_event.update
  1030.     end
  1031.   end
  1032.   #--------------------------------------------------------------------------
  1033.   # ● 刷新交通工具
  1034.   #--------------------------------------------------------------------------
  1035.   def update_vehicles
  1036.     for vehicle in @vehicles
  1037.       vehicle.update
  1038.     end
  1039.   end
  1040.   #--------------------------------------------------------------------------
  1041.   # ● 刷新远景
  1042.   #--------------------------------------------------------------------------
  1043.   def update_parallax
  1044.     @parallax_x += @parallax_sx * 4 if @parallax_loop_x
  1045.     @parallax_y += @parallax_sy * 4 if @parallax_loop_y
  1046.   end
  1047. end

作者: Sonic1997    时间: 2011-8-29 10:33
是这个吗?
  1. #===============================================================
  2. # ● [VX] ?迷你地图 ? □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ? by Woratana [原作者]
  6. # ? 用于 RPG Maker VX  
  7. # ? 最近更新: 09/09/2008
  8. # ? 版本: 1.1 Beta
  9. #--------------------------------------------------------------
  10. # ? 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. # 精灵使者更新:请在注释的第一行写入关键字,关键字可以在下面添加。
  13. #--------------------------------------------------------------

  14. module MiniMap
  15.   #===========================================================================
  16.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  17.   #---------------------------------------------------------------------------
  18.   SWITCH_NO_MINIMAP = 120 #  打开这个开关的话就不显示迷你地图
  19.    
  20.   MAP_RECT = [400, 20, 96, 96] # 迷你地图的大小和位置
  21.   # [X, Y, Width, Height]
  22.   # 你可以用调用脚本的方法任意改变他:
  23.   # $game_system.minimap = [X, Y, Width, Height]

  24.   MAP_Z = 0 # 迷你地图的Z轴
  25.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  26.   GRID_SIZE = 8 # 引导大小,建议数值大于3.
  27.   
  28.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 0, 255) # 色彩设定
  29.   # Color.new(Red, Green, Blue, Opacity)
  30.   MINIMAP_BORDER_SIZE = 3
  31.   
  32.   FOREGROUND_COLOR = Color.new(255, 255, 255, 255) # 可通过物颜色
  33.   BACKGROUND_COLOR = Color.new(0, 0, 0, 100) # 不可通过物颜色

  34.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  35.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 角色颜色
  36.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  37.   EVENT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 特殊事件颜色
  38.   
  39.   PLAYER_COLOR = Color.new(0, 0, 255, 255) # 角色颜色设定
  40.   #---------------------------------------------------------------------------

  41.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  42.   #===============================================================
  43.   # * 设置关键字和颜色
  44.   #---------------------------------------------------------------
  45.   # ** 例如:
  46.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  47.   #-------------------------------------------------------------
  48.   # * 'keyword': 你想放到公共事件里来显示的颜色
  49.   # ** 标记: 'keyword' 是很关键的!
  50.   # * Color.new(...): 你需要的颜色
  51.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  52.   #-------------------------------------------------------------
  53.   OBJECT_COLOR['npc'] = Color.new(0,255,255,255)
  54.   OBJECT_COLOR['treasure'] = Color.new(255,255,0,255)
  55.   OBJECT_COLOR['enemy'] = Color.new(255,0,0,255)
  56.   OBJECT_COLOR['merchant'] = Color.new(255,150,0,255)
  57.   OBJECT_COLOR['teleport'] = Color.new(255,0,255,255)
  58.   OBJECT_COLOR['rest'] = Color.new(0,255,0,255)
  59.   OBJECT_COLOR['door'] = Color.new(128,128,128,255)
  60.   #===========================================================================
  61.   # * [说明] 标签:
  62.   #---------------------------------------------------------------------------
  63.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  64.   # TAG_EVENT的关键字和OBJECT_COLOR关键字要对应。
  65.   #-----------------------------------------------------------------------
  66.   TAG_NO_MINIMAP = '[NOMAP]'
  67.   TAG_EVENT = ["npc","enemy","treasure","merchant","teleport","rest"]
  68.   #---------------------------------------------------------------------------
  69.   # NPC 非主角控制人物 enemy敌人 treasure宝物 merchant商人 teleport传送 door门
  70.   # REST   休息
  71.   #---------------------------------------------------------------------------
  72.   # [END] 迷你地图脚本设置部分
  73.   #===========================================================================
  74.   
  75.   def self.refresh
  76.     if $scene.is_a?(Scene_Map)
  77.       $scene.spriteset.minimap.refresh
  78.     end
  79.   end
  80.   
  81.   def self.update_object
  82.     if $scene.is_a?(Scene_Map)
  83.       $scene.spriteset.minimap.update_object_list
  84.     end
  85.   end
  86. end

  87. #==============================================================================
  88. # ■ RPG::MapInfo
  89. #==============================================================================
  90. class RPG::MapInfo
  91.   def name
  92.     return @name.gsub(/\[.*\]/) { }
  93.   end

  94.   def original_name
  95.     return @name
  96.   end

  97.   def show_minimap?
  98.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  99.   end
  100. end
  101. #==============================================================================
  102. # ■ Game_System
  103. #==============================================================================
  104. class Game_System
  105.   attr_accessor :minimap
  106.   alias wora_minimap_gamsys_ini initialize
  107.   
  108.   def initialize
  109.     wora_minimap_gamsys_ini
  110.     @minimap = MiniMap::MAP_RECT
  111.   end
  112.   
  113.   def show_minimap
  114.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  115.   end
  116. end
  117. #==============================================================================
  118. # ■ Game_Map
  119. #==============================================================================
  120. class Game_Map
  121.   alias wora_minimap_gammap_setup setup
  122.   def setup(map_id)
  123.     wora_minimap_gammap_setup(map_id)
  124.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  125.     @map_info = @db_info[map_id]
  126.   end
  127.   
  128.   def show_minimap?
  129.     return @map_info.show_minimap?
  130.   end
  131. end
  132. #==============================================================================
  133. # ■ Game_Event
  134. #==============================================================================
  135. class Game_Event < Game_Character
  136.   def mm_comment?(comment, return_comment = false )
  137.     if [email protected]?
  138.       for i in [email protected] - 1
  139.         next if @list[i].code != 108
  140.         if comment.include?(@list[i].parameters[0])
  141.           return @list[i].parameters[0] if return_comment
  142.           return true
  143.         end
  144.       end
  145.     end
  146.     return '' if return_comment
  147.     return false
  148.   end
  149. end

  150. #==============================================================================
  151. # ■ Game_MiniMap
  152. #------------------------------------------------------------------------------
  153. class Game_MiniMap
  154.   def initialize(tilemap)
  155.     @tilemap = tilemap
  156.     refresh
  157.   end

  158.   def dispose
  159.     @border.bitmap.dispose
  160.     @border.dispose
  161.     @map_sprite.bitmap.dispose
  162.     @map_sprite.dispose
  163.     @object_sprite.bitmap.dispose
  164.     @object_sprite.dispose
  165.     @position_sprite.bitmap.dispose
  166.     @position_sprite.dispose
  167.   end

  168.   def visible
  169.     return @map_sprite.visible
  170.   end

  171.   def visible=(value)
  172.     @map_sprite.visible = value
  173.     @object_sprite.visible = value
  174.     @position_sprite.visible = value
  175.     @border.visible = value
  176.   end

  177.   def refresh
  178.     @mmr = $game_system.minimap
  179.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  180.     grid_size = [MiniMap::GRID_SIZE, 1].max

  181.     @x = 0
  182.     @y = 0
  183.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  184.     @border = Sprite.new
  185.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  186.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  187.     b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  188.     b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  189.     @border.bitmap = Bitmap.new(b_width, b_height)
  190.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  191.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  192.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  193.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  194.    
  195.     @map_sprite = Sprite.new
  196.     @map_sprite.x = map_rect.x
  197.     @map_sprite.y = map_rect.y
  198.     @map_sprite.z = MiniMap::MAP_Z
  199.     bitmap_width = $game_map.width * grid_size + map_rect.width
  200.     bitmap_height = $game_map.height * grid_size + map_rect.height
  201.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  202.     @map_sprite.src_rect = map_rect

  203.     @object_sprite = Sprite.new
  204.     @object_sprite.x = map_rect.x
  205.     @object_sprite.y = map_rect.y
  206.     @object_sprite.z = MiniMap::MAP_Z + 1
  207.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  208.     @object_sprite.src_rect = map_rect

  209.     @position_sprite = Sprite_Base.new
  210.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  211.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  212.     @position_sprite.z = MiniMap::MAP_Z + 2
  213.    
  214.     bitmap = Bitmap.new(grid_size, grid_size)
  215.     # Player's Outline
  216.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  217.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  218.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  219.         bitmap.rect.height - 2)
  220.       bitmap.clear_rect(brect)
  221.     else
  222.       brect = bitmap.rect
  223.     end
  224.    
  225.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  226.     @position_sprite.bitmap = bitmap

  227.     draw_map
  228.     update_object_list
  229.     draw_object
  230.     update_position
  231.   end

  232.   def draw_map
  233.     bitmap = @map_sprite.bitmap
  234.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  235.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  236.     grid_size = [MiniMap::GRID_SIZE, 1].max
  237.    
  238.     $game_map.width.times do |i|
  239.       $game_map.height.times do |j|
  240.         if !$game_map.passable?(i, j)
  241.           next
  242.         end
  243.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  244.           map_rect.height / 2 + grid_size * j,
  245.           grid_size, grid_size)
  246.         if grid_size >= 3
  247.           if !$game_map.passable?(i, j)
  248.             rect.height -= 1
  249.             rect.x += 1
  250.             rect.width -= 1
  251.             rect.width -= 1
  252.             rect.y += 1
  253.             rect.height -= 1
  254.           end
  255.         end
  256.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  257.       end
  258.     end
  259.   end

  260.     def update_object_list
  261.     @object_list = {}
  262.     $game_map.events.values.each do |e|
  263.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  264.       if comment != ''
  265.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  266.         type = comment
  267.         @object_list[type] = [] if @object_list[type].nil?
  268.         @object_list[type] << e
  269.       end
  270.     end
  271.   end

  272.   def draw_object
  273.     bitmap = @object_sprite.bitmap
  274.     bitmap.clear
  275.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  276.     grid_size = [MiniMap::GRID_SIZE, 1].max
  277.     rect = Rect.new(0, 0, grid_size, grid_size)
  278.     mw = map_rect.width / 2
  279.     mh = map_rect.height / 2

  280.     @object_list.each do |key, events|
  281.       color = MiniMap::OBJECT_COLOR[key]
  282.       next if events.nil? or color.nil?
  283.       events.each do |obj|
  284.         #if !obj.character_name.empty?
  285.           rect.x = mw + obj.real_x * grid_size / 256
  286.           rect.y = mh + obj.real_y * grid_size / 256
  287.           # Event's Outline
  288.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  289.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  290.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  291.             rect.height - 2)
  292.             bitmap.clear_rect(brect)
  293.           else
  294.             brect = bitmap.rect
  295.           end
  296.           bitmap.fill_rect(brect, color)
  297.         #end
  298.       end
  299.     end
  300.   end

  301.   def update
  302.     if @mmr != $game_system.minimap
  303.       dispose
  304.       refresh
  305.     end
  306.     update_object_list
  307.     draw_object
  308.     update_position
  309.     if @map_sprite.visible
  310.       @map_sprite.update
  311.       @object_sprite.update
  312.       @position_sprite.update
  313.     end
  314.   end

  315.   def update_position
  316.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  317.     grid_size = [MiniMap::GRID_SIZE, 1].max
  318.     sx = $game_player.real_x * grid_size / 256
  319.     sy = $game_player.real_y * grid_size / 256
  320.     @map_sprite.src_rect.x = sx
  321.     @map_sprite.src_rect.y = sy
  322.     @object_sprite.src_rect.x = sx
  323.     @object_sprite.src_rect.y = sy
  324.   end
  325. end
  326. #==============================================================================
  327. # ■ Spriteset_Map
  328. #------------------------------------------------------------------------------
  329. class Spriteset_Map
  330.   attr_reader :minimap
  331.   alias wora_minimap_sprsetmap_ini initialize
  332.   alias wora_minimap_sprsetmap_dis dispose
  333.   alias wora_minimap_sprsetmap_upd update
  334.   
  335.   def initialize
  336.     wora_minimap_sprsetmap_ini
  337.     if $game_map.show_minimap?
  338.       @minimap = Game_MiniMap.new(@tilemap)
  339.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  340.       @minimap.visible = $game_system.show_minimap
  341.     end
  342.   end
  343.   
  344.   def dispose
  345.     @minimap.dispose if [email protected]?
  346.     wora_minimap_sprsetmap_dis
  347.   end

  348.   def update
  349.     if [email protected]?
  350.       if $game_system.show_minimap
  351.         @minimap.visible = true
  352.         @minimap.update_object_list
  353.         @minimap.update
  354.       else
  355.         @minimap.visible = false
  356.       end
  357.     end
  358.     wora_minimap_sprsetmap_upd
  359.   end
  360. end
  361. #==============================================================================
  362. # ■ Scene_Map
  363. #------------------------------------------------------------------------------
  364. class Scene_Map < Scene_Base
  365.   attr_reader :spriteset
  366. end
复制代码
不知道什么原因,反正新开一个就没事了。
作者: 888000    时间: 2011-8-29 11:15
Sonic1997 发表于 2011-8-29 10:33
是这个吗?不知道什么原因,反正新开一个就没事了。

不是……
http://rpg.blue/thread-72764-1-1.html的……迷宫探索系统
作者: Sonic1997    时间: 2011-8-29 11:25
888000 发表于 2011-8-29 11:15
不是……
是http://rpg.blue/thread-72764-1-1.html的……迷宫探索系统

你已经把所有★的脚本放入游戏了吗?
作者: 888000    时间: 2011-8-29 12:05
Sonic1997 发表于 2011-8-29 11:25
你已经把所有★的脚本放入游戏了吗?

是的,而且就算是范例,也是读档再存档就错误


888000于2011-8-29 12:06补充以下内容:
然道是我rmvx版本太老?1.01的。
你们有没有问题啊?
作者: Sonic1997    时间: 2011-8-29 14:45
我用的是1.00没问题,再说,范例里是可以读档的啊,我试过!
作者: 888000    时间: 2011-8-29 16:26
Sonic1997 发表于 2011-8-29 14:45
我用的是1.00没问题,再说,范例里是可以读档的啊,我试过!

是我rm有问题?

作者: 昔日辉煌灬    时间: 2011-8-29 16:43
6大的哪个有许多默认的脚本被改了还是有SF的吧6大的太麻烦
不过在传统RPG里有个小地图  不好╮(╯▽╰)╭




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1