设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1718|回复: 1
打印 上一主题 下一主题

[已经解决] RPGXP有没自动生成迷宫这个功能的?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
153 小时
注册时间
2010-12-18
帖子
167
跳转到指定楼层
1
发表于 2012-3-26 22:15:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
XP有没自动生成迷宫功能的?
我只知道VX有这个功能
现在画迷宫画到我连自己姓什么名什么都忘记了。


‘‘──mo88于2012-3-26 22:20补充以下内容

#
#     随机地图生成脚本 v0.80   by tonbi  也就是迷宫
#
#     汉化修改 66RPG bbschat(2006.1.2)
#
#     随机地图自动生成脚本。
#
#     ●使用方法   
#
#     首先,设定随机地图名称
#
#     地图名称请按照「XXXXX,随机,YYY,ZZZ」的样式来命名。
#     XXXXX 地图名,随便起自己喜欢的名字。
#     YYY   随机类型编号,参考样例。
#     ZZZ   障碍物数量,参考样例。
#
#     接下来,参考样例在地图上按照一定的规则画上地图元件
#     画的时候注意一下层。参考样例把地图元件画在对应的层上。
#
#     最后设定以下事件
#
#     中继点设定方法:
#     事件名称为「XXXXX,中继点」或事件执行内容的第一行加上「◆注释 : 中继点」。
#
#     随机地图将按照中继点事件产生随机道路,并按照事件ID顺序依次通过数个中继点
#    (当然肯定不是直线通过)
#     一般请在地图的两端设定中继点事件。
#     两个中继点之间请保留适当空间,少于5个地图元件的话就没有墙壁了。
#     不过就算没有中继点,也能生成随机地图。
#     增加中继点会减少墙壁的数量,所以不要太多,有几个中继点就可以了。
#     通常按照三角形的方位来设置3个中继点。
#
#     中继点以外的事件如果没有特别指定将随机放置在地图的道路上。
#
#     固定事件设定方法:
#     事件名称为「XXXXX,固定」或事件执行内容的第一行加上「◆注释 : 固定」。
#     
#     该事件将被放置在离该事件位置最近的道路上。
#
#     完全固定事件设定方法:
#     事件名称为「XXXXX,完全固定」或事件执行内容的第一行加上「◆注释 : 完全固定」
#
#     该事件位置将保持不变。
#     自动执行和并行处理的事件或者希望放在地图边缘方便查找的事件可以使用完全固定。
#
#     墙壁事件设定方法:
#     事件执行内容的第一行为「◆注释 : 壁设置」
#     该事件将随机出现在地图的墙壁上。
#     门,火把之类的事件专用。注释形式类似「壁设置,1」这样,后面要跟一个数字,
#     数字为了保证可以添加类似于[横幅]这样的事件。(横幅1元件为0,3个元件为1。)
#     这样的话就可以使用一些较大的事件了。
#
#     墙壁固定事件设定方法:
#     事件页第一行为「◆注释 : 壁设置固定」
#     这是同时具有上述固定事件和墙壁事件两个性质的事件。
#     也就是放置在离该事件位置最近的墙壁上的事件。
#     如果使用「壁设置固定,1」这种形式,也可以使用较大的事件。
#
#     还有使用之前请按照自己的需要设定下面的参数。

#========================================================================

#========================================================================
#★Clipping距离指定(搞不懂什么意思的话就不要改。)
class Game_Character
  
  DRAWRANGEX = 1920     # 地图角色的Sprite更新距离
  DRAWRANGEY = 1664     # 使用较大CharChip?时请适当增加。
                        # 指定的是X:15 Y:13乘128的数值。
                        # 上面是X坐标(横)下面是Y坐标(纵)。
end
                     
#========================================================================
#========================================================================
#★是否保存。(并不准备使用随机地图、只是为了节约制作时间。)
# 保存下来的地图可以复制到其他地方以节省制作时间。

class Game_Map
  
  AUTO_MAP_SAVE = false    # 是否保存为地图ID:999。
                          # true 保存 false 不保存
                          
                          # 游戏做完发布后请设定为false。
                          
end
                        

#-------------------------------------------------------------------
# ●Game_Temp
#--------------------------------------------------------------------

class Game_Temp
  alias initialize_tonbi1 initialize
  def initialize
    initialize_tonbi1
    $onscreen = []                        # Sprite是否画面内标志
  end
end


#--------------------------------------------------------------------------
# ● Game_Character
#--------------------------------------------------------------------------

class Game_Character
  #--------------------------------------------------------------------------
  # ● 更新
  #--------------------------------------------------------------------------
  alias update_tonbi1 update
  def update
   
    # 画面上的位置
    sx = @real_x - $game_map.display_x - 1280
    sy = @real_y - $game_map.display_y - 960
    # 画面位置的绝对值
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy-3 : -sy
      
    # 纵横坐标超出 DRAWRANGE 元件的情况下
    if abs_sx > DRAWRANGEX or abs_sy > DRAWRANGEY
      # Sprite不更新
      $onscreen[@id]=false
    else
      # Sprite更新
      $onscreen[@id]=true
    end
   
    update_tonbi1
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  attr_accessor :character_sprites
  def initialize
   
    $onscreen = []
    # 生成显示端口
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
   
    # 生成元件地图
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities

    # 生成远景平面
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
   
    # 生成雾平面
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
   
    #########################################################★改变
    # 角色活动块
    # 将Party和Event区分开。
    @character_sprites = []
    @party_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites[i]=sprite
      $onscreen[i] = true
    end
    @party_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    #########################################################
   
    # 生成天气
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    # 释放元件地图
    @tilemap.tileset.dispose
    for i in 0..6
      @tilemap.autotiles[i].dispose
    end
    @tilemap.dispose
    # 释放远景平面
    @panorama.dispose
    # 释放雾平面
    @fog.dispose
    ############################################################★改变
    # 释放角色活动块
    # nil 的话不释放
    for i in @character_sprites
      if i != nil
        i.dispose
      end
    end
    for i in @party_sprites
      if i != nil
        i.dispose
      end
    end
    ############################################################
    # 释放天候
    @weather.dispose
    # 释放图片
    for sprite in @picture_sprites
      sprite.dispose
    end
    # 释放计时器块
    @timer_sprite.dispose
    # 释放显示端口
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 远景与现在的情况有差异发情况下
    if @panorama_name != $game_map.panorama_name or
       @panorama_hue != $game_map.panorama_hue
      @panorama_name = $game_map.panorama_name
      @panorama_hue = $game_map.panorama_hue
      if @panorama.bitmap != nil
        @panorama.bitmap.dispose
        @panorama.bitmap = nil
      end
      if @panorama_name != ""
        @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
      end
      Graphics.frame_reset
    end
    # 雾与现在的情况有差异的情况下
    if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
      @fog_name = $game_map.fog_name
      @fog_hue = $game_map.fog_hue
      if @fog.bitmap != nil
        @fog.bitmap.dispose
        @fog.bitmap = nil
      end
      if @fog_name != ""
        @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
      end
      Graphics.frame_reset
    end
    # 刷新元件地图
    @tilemap.ox = $game_map.display_x / 4
    @tilemap.oy = $game_map.display_y / 4
    @tilemap.update
    # 刷新远景平面
    @panorama.ox = $game_map.display_x / 8
    @panorama.oy = $game_map.display_y / 8
    # 刷新雾平面
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
    @fog.tone = $game_map.fog_tone
   
    #####################################################★改变
    # 刷新角色活动块
    # 画面外的角色活动块不更新
    for i in $game_map.events.keys
      if $onscreen[i]
        @character_sprites[i].update
      end
    end
    # 玩家角色更新
    for i in @party_sprites
      i.update
    end
   
    #####################################################
  
    # 刷新天候图形
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = $game_map.display_x / 4
    @weather.oy = $game_map.display_y / 4
    @weather.update
    # 刷新图片
    for sprite in @picture_sprites
      sprite.update
    end
    # 刷新计时器块
    @timer_sprite.update
    # 设置画面的色调与震动位置
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # 设置画面的闪烁色
    @viewport3.color = $game_screen.flash_color
    # 刷新显示端口
    @viewport1.update
    @viewport3.update
  end
end


#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ● 设置
  #     map_id : 地图 ID
  #--------------------------------------------------------------------------
  def setup(map_id)
    # 地图 ID 记录到 @map_id
    @map_id = map_id
    # 地图文件装载后、设置到 @map
    @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
    # 定义实例变量设置地图元件信息
    tileset = $data_tilesets[@map.tileset_id]
    @tileset_name = tileset.tileset_name
    @autotile_names = tileset.autotile_names
    @panorama_name = tileset.panorama_name
    @panorama_hue = tileset.panorama_hue
    @fog_name = tileset.fog_name
    @fog_hue = tileset.fog_hue
    @fog_opacity = tileset.fog_opacity
    @fog_blend_type = tileset.fog_blend_type
    @fog_zoom = tileset.fog_zoom
    @fog_sx = tileset.fog_sx
    @fog_sy = tileset.fog_sy
    @battleback_name = tileset.battleback_name
    @passages = tileset.passages
    @priorities = tileset.priorities
    @terrain_tags = tileset.terrain_tags
    # 初始化显示坐标
    @display_x = 0
    @display_y = 0
   
    check_special_map #★检查随机地图
   
    # 清除刷新要求标志
    @need_refresh = false
    # 设置地图事件数据
    @events = {}
    for i in @map.events.keys
      @events[i] = Game_Event.new(@map_id, @map.events[i])
    end
    # 设置公共事件数据
    @common_events = {}
    for i in 1...$data_common_events.size
      @common_events[i] = Game_CommonEvent.new(i)
    end
    # 初始化雾的各种信息
    @fog_ox = 0
    @fog_oy = 0
    @fog_tone = Tone.new(0, 0, 0, 0)
    @fog_tone_target = Tone.new(0, 0, 0, 0)
    @fog_tone_duration = 0
    @fog_opacity_duration = 0
    @fog_opacity_target = 0
    # 初始化滚动信息
    @scroll_direction = 2
    @scroll_rest = 0
    @scroll_speed = 4
  end
  
  #--------------------------------------------------------------------------
  # ● 紧接读入地图之后的处理
  #--------------------------------------------------------------------------
  def check_special_map
    # 取得地图名称
    mapinfo  = load_data("Data/MapInfos.rxdata")
   
    # 地图名称包含“随机”的场合
    if mapinfo[@map_id].subname == "随机"
      if mapinfo[@map_id].subname(3)=="" or mapinfo[@map_id].subname(3) == nil
        p3 = 0
      else
        p3 = mapinfo[@map_id].subname(3).to_i
      end
      if mapinfo[@map_id].subname(4)=="false"
        p4 = false
      end
      
      make_random_map(2,mapinfo[@map_id].subname(2).to_i,p3,p4)
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 生成随机地图
  #     wall = 墙壁的高 >> 现在无效
  #     type = 墙壁制作类型 >> 0以外没制作(汗 指定方法也未定) (<-- bbschat注:汗~原来日本人也会用汗)
  #     thoughplayer = 玩家在中继点中包含吗?
  #     connect = 中继点的连接方法 >> true=连续 false=2个各自独立
  #
  #     ※所有参数全部省略   可以使用下面的例子
  #     ex. make_random_map(2,0,,true)
  #--------------------------------------------------------------------------
  def make_random_map(wall = 2, type = 0, objcnt = 0, connect = true)
   
    # 非法参数处理
    wall = 0 if wall == nil
    type = 0 if type == nil
    objcnt = 0 if objcnt == nil
    unless objcnt.is_a?(Numeric)
      objcnt = 0
    end
    if objcnt < 0
      objcnt = 0
    end
    connect = true if connect != false
   
    # 高度数据表
    @heightdata = Table.new(@map.width,@map.height)
    # 地形数据表
    @maskdata = Table.new(@map.width,@map.height)
    # 事件数据表
    @oneventdata = Table.new(@map.width,@map.height)
    # 遮照设定数组
    @masksetting = []
    # 制作方法数组
    @makedata = []
   
    # 演算方法初始化
    @targettype=0
    @chgtype=0
   
    time = -1
    # 数据初始化
    for i in [email][email protected][/email]
      for j in [email][email protected][/email]
        time += 1
        if time%2000 == 0
          Graphics.update
        end
        @heightdata[i,j] = 0
        @maskdata[i,j] = 0
      end
    end
    for i in 0...100
      @masksetting[i] = true
    end
   
    # 取得中继点情报
    needposx = []
    needposy = []
    # 增加中继点事件
    for i in @map.events.keys.sort
      time += 1
      if time%200 == 0
        Graphics.update
      end
      if event_settype(i) == 1
        if connect == true
          needposx.push(@map.events[i].x)
          needposy.push(@map.events[i].y)
          needposx.push(@map.events[i].x)
          needposy.push(@map.events[i].y)
        else
          needposx.push(@map.events[i].x)
          needposy.push(@map.events[i].y)
        end
      end
    end
    if connect == true
      needposx.shift
      needposy.shift
    end
    loop do
      if needposx.size <= 2
        needposx.push(rand(@map.width))
        needposy.push(rand(@map.height))
      else
        break
      end
    end
   
    # 这里设定制作方法数组
    case type
    when 0
      # 类型0 >> 2层自然类型
      @makedata.push([0,1,0])
      @makedata.push([5,1])
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,0,-15,4,0])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,0,needposx[i*2],needposy[i*2]])
        @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
      end
      
      @makedata.push([4,0,1,1,1])
      @makedata.push([4,0,1,1,1])
      @makedata.push([4,1,1,1,1])
      
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,0])
      @makedata.push([2,1,2])
      @makedata.push([5,1])
    when 1
      # 类型1 >> 2层人工类型
      @makedata.push([0,1,0])
      @makedata.push([5,1])
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,0,-6,4,1,10])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,0,needposx[i*2],needposy[i*2]])
        @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
      end
      
      @makedata.push([4,0,2,3,1])
      @makedata.push([4,1,2,2,1])
      @makedata.push([4,0,1,1,1])
      
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,0])
      @makedata.push([2,1,2])
      @makedata.push([5,1])
    when 2
      # 类型2 >> 2层自然凸类型
      @makedata.push([0,1,0])
      @makedata.push([5,1])
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,0,-15,4,0])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,0,needposx[i*2],needposy[i*2]])
        @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
      end
      
      @makedata.push([4,0,2,2,1])
      @makedata.push([4,1,1,1,1])
      
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,0])
      @makedata.push([2,1,2])
      @makedata.push([5,-1])
    when 3
      # 类型3 >> 2层人工凸类型
      @makedata.push([0,1,0])
      @makedata.push([5,1])
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,0,-15,4,1,10])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,0,needposx[i*2],needposy[i*2]])
        @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
      end
      
      @makedata.push([4,0,2,2,1])
      @makedata.push([4,1,1,1,1])
      
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,0])
      @makedata.push([2,1,2])
      @makedata.push([5,-1])
    when 4
      # 类型4 >> 2层自然类型 之一
      # 地形[0:洞 1:地面 2:墙壁]
      
      # 基本设定
      @makedata.push([0,1,0])
      @makedata.push([5,0])
      # 放置墙
      @makedata.push([1,0,0,-1,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,0,-1,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,-1,0,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,0,-1,0,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([4,2,2,2,1])
      # 随机放置洞
      for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
        @makedata.push([1,3,3,8,8])
        @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
      end
      # 生成周围的墙
      @makedata.push([7,2])
      @makedata.push([4,2,1,1,1])
      # 生成道路
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,1,-8,4,0,5])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,1,needposx[i*2],needposy[i*2]])
        @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
      end
      # 扩张处理
      @makedata.push([4,1,1,1,1])
      @makedata.push([4,1,0,1,1])
      @makedata.push([2,0,0])
      @makedata.push([4,1,1,0,1])
      @makedata.push([2,-1,1])
      @makedata.push([4,2,1,1,1])
      # 高度设定
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,-1])
      @makedata.push([2,1,2])
      @makedata.push([5,0])
      @makedata.push([2,2,2])
      @makedata.push([5,1])
      
    when 5
      # 类型5 >> 2层人工类型 之一
      # 地形[0:洞 1:地面 2:墙壁]
      
      # 基本设定
      @makedata.push([0,1,0])
      @makedata.push([5,0])
      # 放置墙
      @makedata.push([1,0,0,-1,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,0,-1,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,-1,0,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,0,-1,0,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([4,2,2,2,1])
      # 随机放置洞
      for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
        @makedata.push([1,3,3,8,8])
        @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
      end
      # 生成周围的墙
      @makedata.push([7,2])
      @makedata.push([4,2,1,1,1])
      # 生成道路
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,1,-8,4,1,5])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,1,needposx[i*2],needposy[i*2]])
        @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
      end
      # 扩张处理
      @makedata.push([4,1,1,1,1])
      @makedata.push([4,1,0,1,1])
      @makedata.push([2,0,0])
      @makedata.push([4,1,1,0,1])
      @makedata.push([2,-1,1])
      @makedata.push([4,2,1,1,1])
      # 高度设定
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,-1])
      @makedata.push([2,1,2])
      @makedata.push([5,0])
      @makedata.push([2,2,2])
      @makedata.push([5,1])
      
      
      
    when 6
      # 类型6 >> 2层自然类型 之二
      # 地形[0:洞 1:地面 2:墙壁]
      
      # 基本设定
      @makedata.push([0,1,0])
      @makedata.push([5,0])
      # 放置墙
      @makedata.push([1,0,0,-1,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,0,-1,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,-1,0,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,0,-1,0,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([4,2,2,2,1])
      # 随机放置洞
      for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
        @makedata.push([1,1,1,3,3])
        @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
      end
      # 洞扩大
      @makedata.push([4,0,2,2,0])
      @makedata.push([4,0,1,2,1])
      # 生成周围的墙
      @makedata.push([7,2])
      @makedata.push([4,2,1,1,1])
      # 生成道路
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,1,-15,4,0,5])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,1,needposx[i*2],needposy[i*2]])
        @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
      end
      # 扩张处理
      @makedata.push([4,1,1,1,1])
      @makedata.push([4,1,0,1,1])
      @makedata.push([2,0,0])
      @makedata.push([4,1,1,0,1])
      @makedata.push([2,-1,1])
      @makedata.push([4,2,1,1,1])
      # 高度设定
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,-1])
      @makedata.push([2,1,2])
      @makedata.push([5,0])
      @makedata.push([2,2,2])
      @makedata.push([5,1])
      
    when 7
      # 类型7 >> 2层人工类型 之二
      # 地形[0:洞 1:地面 2:墙壁]
      
      # 基本设定
      @makedata.push([0,1,0])
      @makedata.push([5,0])
      # 放置墙
      @makedata.push([1,0,0,-1,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,0,-1,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,-1,-1,0,-1])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([1,0,-1,0,0])
      @makedata.push([3,2,-6,1,0])
      @makedata.push([4,2,2,2,1])
      # 随机放置洞
      for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
        @makedata.push([1,1,1,3,3])
        @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
      end
      # 洞扩大
      @makedata.push([4,0,2,2,0])
      @makedata.push([4,0,1,2,1])
      # 生成周围的墙
      @makedata.push([7,2])
      @makedata.push([4,2,1,1,1])
      # 生成道路
      for i in 0...(needposx.size/2)
        @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
        @makedata.push([3,1,-15,4,1,5])
        @makedata.push([1,1,1,1,1])
        @makedata.push([6,1,needposx[i*2],needposy[i*2]])
        @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
      end
      # 扩张处理
      @makedata.push([4,1,1,1,1])
      @makedata.push([4,1,0,1,1])
      @makedata.push([2,0,0])
      @makedata.push([4,1,1,0,1])
      @makedata.push([2,-1,1])
      @makedata.push([4,2,1,1,1])
      # 高度设定
      @makedata.push([0,0,0])
      @makedata.push([2,0,2])
      @makedata.push([5,-1])
      @makedata.push([2,1,2])
      @makedata.push([5,0])
      @makedata.push([2,2,2])
      @makedata.push([5,1])
    end
   
   
    # 实际制作
    for make_stat in @makedata
      time += 1
      if time%2 == 0
        Graphics.update
      end
      case make_stat[0]
      when 0    # 对象变化   (p1[0=高度 1=地形], p2[0=代入 1=加算])
        rndmap_chtarget(make_stat[1],make_stat[2])
      when 1    # 参数设定   (minx, miny, maxz, maxy)
        rndmap_setstat(make_stat[1],make_stat[2],make_stat[3],make_stat[4])
      when 2    # 遮照变化 (p1[-1:全部], p2[ 0=false 1=true 2=onlytrue])
        rndmap_chmask(make_stat[1],make_stat[2])
      when 3    # 生成道路     (值,中继点数,边缘确保,类型)
        rndmap_mkroad(make_stat[1],make_stat[2],make_stat[3],make_stat[4],make_stat[5])
      when 4    # 扩张       (对象,纵幅,横幅,类型)
        rndmap_plus(make_stat[1],make_stat[2],make_stat[3],make_stat[4])
      when 5    # 全变化     (值)
        rndmap_allchg(make_stat[1])
      when 6    # 指定点     (值,位置X,位置Y)
        rndmap_putpos(make_stat[1],make_stat[2],make_stat[3])
      when 7    # 周围       (值)
        rndmap_edge(make_stat[1])
      end
    end
   
    # 取得使用地图元件
    @tilesetting = Table.new(3,40,3)
    for i in [0,1,2]
      for k in 0...40
        for j in [0,1,2]
          @tilesetting[j,k,i] = @map.data[j,k,i]
        end
      end
    end
   
    # 补正
    time = 0
    for k in [email][email protected][/email]
      for j in [email][email protected][/email]
        time += 1
        # 定期画面更新
        if time%500 == 0
          Graphics.update
        end
        # 墙下的地图元件要是洞的话,地面变更
        if @heightdata[j,k] == 1
          if @heightdata[j,k+1]==-1
            @heightdata[j,k+1] = 0
            if @heightdata[j,k+2]==-1 and
              @heightdata[j,k+3] == 0
              @heightdata[j,k+2] = 0
            end
          end
        end
        
      end
    end
   
   
   
    # 生成地面 之一 >> 暂且全面铺上
    time = 0
    for k in [email][email protected][/email]
      for j in [email][email protected][/email]
        time += 1
        # 定期画面更新
        if time%500 == 0
          Graphics.update
        end
        if @heightdata[j,k] == 0
          if @heightdata[j,k+1] == -1 or
            @heightdata[j,k-1] == -1 or
            @heightdata[j+1,k] == -1 or
            @heightdata[j-1,k] == -1
            set_mapdata2(j,k,0,8)
          else
            set_mapdata2(j,k,0,0)
          end
        elsif @heightdata[j,k] == 1
          if @heightdata[j,k+1] == -1 or
            @heightdata[j,k-1] == -1 or
            @heightdata[j+1,k] == -1 or
            @heightdata[j-1,k] == -1
            set_mapdata2(j,k,0,8)
          elsif @heightdata[j,k+1] == 0 or
            @heightdata[j,k-1] == 0 or
            @heightdata[j+1,k] == 0 or
            @heightdata[j-1,k] == 0
            set_mapdata2(j,k,0,0)
          else
            set_mapdata2(j,k,1,4)
          end
        else
          set_mapdata2(j,k,0,8)
        end
      end
    end
    # 生成地面 之二 >> 生成洞
    time = 0
    for k in [email][email protected][/email]
      for j in [email][email protected][/email]
        time += 1
        # 定期画面更新
        if time%500 == 0
          Graphics.update
        end
        if @heightdata[j,k] == 0
          if @heightdata[j,k+1] == -1
            # 下面是洞------------------
            if @heightdata[j-1,k] == -1
              # 左边也是洞
              for i in [0,1,2]
                set_mapdata(j,k+i,0,13+i,1)
              end
            elsif @heightdata[j+1,k] == -1
              # 右边也是洞
              for i in [0,1,2]
                set_mapdata(j,k+i,2,13+i,1)
              end
            else
              # 两边是地面
              for i in [0,1,2]
                set_mapdata(j,k+i,1,13+i,1)
              end
            end
          elsif @heightdata[j,k-1] == -1
            # 上面是洞------------------
            if @heightdata[j-1,k] == -1 or
            (@heightdata[j-1,k] == 1 and
            @heightdata[j-1,k-1] == -1)
              # 左边也是洞
              set_mapdata(j,k,0,11,2)
            elsif @heightdata[j+1,k] == -1 or
            (@heightdata[j+1,k] == 1 and
            @heightdata[j+1,k-1] == -1)
              # 右边也是洞
              set_mapdata(j,k,2,11,2)
            else
              # 两边是地面
              set_mapdata(j,k,1,11,2)
            end
          elsif @heightdata[j-1,k] == -1 or
            (@heightdata[j-1,k] == 1 and
            @heightdata[j-1,k-1] == -1)
            # 左边是洞------------------
            set_mapdata(j,k,0,12,1)
          elsif @heightdata[j+1,k] == -1 or
            (@heightdata[j+1,k] == 1 and
            @heightdata[j+1,k-1] == -1)
            # 右边是洞------------------
            set_mapdata(j,k,2,12,1)
          elsif @heightdata[j-1,k-1] == -1
            # 左上面是洞------------------
            set_mapdata(j,k,0,9,1)
          elsif @heightdata[j-1,k+1] == -1
            # 左下面是洞------------------
            set_mapdata(j,k,0,10,1)
          elsif @heightdata[j+1,k-1] == -1
            # 右上面是洞------------------
            set_mapdata(j,k,1,9,1)
          elsif @heightdata[j+1,k+1] == -1
            # 右下面是洞------------------
            set_mapdata(j,k,1,10,1)
          end
        end
        if @heightdata[j,k] == 1 and
          @heightdata[j,k-1] != -1
         
          if @heightdata[j,k+1] == -1
            # 下面是洞------------------
            if @heightdata[j-1,k] == -1
              # 左边也是洞
              for i in [0,1,2]
            #    set_mapdata(j,k+i,0,13+i,1)
              end
            elsif @heightdata[j+1,k] == -1
              # 右边也是洞
              for i in [0,1,2]
            #    set_mapdata(j,k+i,2,13+i,1)
              end
            else
              # 两边是地面
              for i in [0,1,2]
            #    set_mapdata(j,k+i,1,13+i,1)
              end
            end
          elsif @heightdata[j,k-1] == -1
            # 上面是洞------------------
            if @heightdata[j-1,k] == -1
              # 左边也是洞
              set_mapdata(j,k,0,11,2)
            elsif @heightdata[j+1,k] == -1
              # 右边也是洞
              set_mapdata(j,k,2,11,2)
            else
              # 两边是地面
              set_mapdata(j,k,1,11,2)
            end
          elsif @heightdata[j-1,k] == -1
            # 左边是洞------------------
            set_mapdata(j,k,0,12,1)
          elsif @heightdata[j+1,k] == -1
            # 右边是洞------------------
            set_mapdata(j,k,2,12,1)
          elsif @heightdata[j-1,k-1] == -1
            # 左上面是洞------------------
            set_mapdata(j,k,0,9,1)
          elsif @heightdata[j-1,k+1] == -1
            # 左下面是洞------------------
            set_mapdata(j,k,0,10,1)
          elsif @heightdata[j+1,k-1] == -1
            # 右上面是洞------------------
            set_mapdata(j,k,1,9,1)
          elsif @heightdata[j+1,k+1] == -1
            # 右下面是洞------------------
            set_mapdata(j,k,1,10,1)
          end
        end
      end
    end
    # 生成地面 之三 >> 生成墙壁
    time = 0
    for k in [email][email protected][/email]
      for j in [email][email protected][/email]
        time += 1
        # 定期画面更新
        if time%500 == 0
          Graphics.update
        end
        if @heightdata[j,k] == 1
          if @heightdata[j,k+1] == 0 or
            @heightdata[j,k+1] == -1
            # 下面是洞------------------
            if @heightdata[j-1,k] == 0 or
              @heightdata[j-1,k] == -1
              # 左边也是洞
              set_mapdata(j,k+0,0,5+0,5)
              set_mapdata(j,k+1,0,5+1,5)
              set_mapdata(j,k+2,0,5+2,4)
              if @heightdata[j,k+3] != 0 and
                @heightdata[j,k+2] != 1 and
                (@heightdata[j,k+2] != 0 or @heightdata[j-1,k+2] != 0)
                set_mapdata(j,k+2,0,16,5)
                for i in [0,1]
                  set_mapdata(j,k+3+i,0,14+i,1)
                  if @heightdata[j,k+3+i] != -1
                    break
                  end
                end
              end
            elsif @heightdata[j+1,k] == 0 or
              @heightdata[j+1,k] == -1
              # 右边也是洞
              set_mapdata(j,k+0,2,5+0,5)
              set_mapdata(j,k+1,2,5+1,5)
              set_mapdata(j,k+2,2,5+2,4)
              if @heightdata[j,k+3] != 0 and
                @heightdata[j,k+2] != 1 and
                (@heightdata[j,k+2] != 0 or @heightdata[j+1,k+2] != 0)
                set_mapdata(j,k+2,2,16,5)
                for i in [0,1]
                  set_mapdata(j,k+3+i,2,14+i,1)
                  if @heightdata[j,k+3+i] != -1
                    break
                  end
                end
              end
            else
              # 两边是地面
              set_mapdata(j,k+0,1,5+0,5)
              set_mapdata(j,k+1,1,5+1,5)
              set_mapdata(j,k+2,1,5+2,4)
              if @heightdata[j,k+3] != 0 and
                 @heightdata[j,k+2] != 1
                set_mapdata(j,k+2,1,16,5)
                for i in [0,1]
                  set_mapdata(j,k+3+i,1,14+i,1)
                  if @heightdata[j,k+3+i] != -1
                    break
                  end
                end
              end
            end
          elsif @heightdata[j,k-1] == 0 or
              @heightdata[j,k-1] == -1
            # 上面是洞------------------
            if @heightdata[j-1,k] == 0 or
              @heightdata[j-1,k] == -1
              # 左边也是洞
              set_mapdata(j,k,0,3,4)
            elsif @heightdata[j+1,k] == 0 or
              @heightdata[j+1,k] == -1
              # 右边也是洞
              set_mapdata(j,k,2,3,4)
            else
              # 两边是地面
              set_mapdata(j,k,1,3,4)
            end
          elsif @heightdata[j-1,k] == 0 or
              @heightdata[j-1,k] == -1
            # 左边是洞------------------
            set_mapdata(j,k,0,4,4)
          elsif @heightdata[j+1,k] == 0 or
              @heightdata[j+1,k] == -1
            # 右边是洞------------------
            set_mapdata(j,k,2,4,4)
          elsif @heightdata[j-1,k-1] == 0 or
              @heightdata[j-1,k-1] == -1
            # 左上面是洞------------------
            set_mapdata(j,k,0,1,4)
          elsif @heightdata[j-1,k+1] == 0 or
              @heightdata[j-1,k+1] == -1
            # 左下面是洞------------------
            set_mapdata(j,k,0,2,4)
          elsif @heightdata[j+1,k-1] == 0 or
              @heightdata[j+1,k-1] == -1
            # 右上面是洞------------------
            set_mapdata(j,k,1,1,4)
          elsif @heightdata[j+1,k+1] == 0 or
              @heightdata[j+1,k+1] == -1
            # 右下面是洞------------------
            set_mapdata(j,k,1,2,4)
          end
        end
      end
    end
   
    # 调整玩家位置
    playerpos_reset($game_temp.player_new_x,$game_temp.player_new_y)
    @oneventdata[$game_temp.player_new_x,$game_temp.player_new_y] = 1
   
    time = 0
    for i in @map.events.keys.sort
      time += 1
      if time%100 == 0
        Graphics.update
      end
      # 事件设置类型>>完全固定(最优先)
      case event_settype(i)
      when 3
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
      end
    end
    for i in @map.events.keys.sort
      time += 1
      if time%100 == 0
        Graphics.update
      end
      # 事件设置类型>>中继点
      case event_settype(i)
      when 1
        set_defeventpos(i,@map.events[i].x,@map.events[i].y)
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
      end
    end
    # 调整事件位置
    for i in @map.events.keys.sort
      time += 1
      if time%100 == 0
        Graphics.update
      end
      j = event_settype(i)
      case j
      when 0  # 随机
        set_defeventpos(i,rand(@map.width-4)+2,rand(@map.width-4)+2)
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
      when 2  # 固定
        set_defeventpos(i,@map.events[i].x,@map.events[i].y)
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
      when 100..199  # 壁设置
        set_defeventpos_wall(i,rand(@map.width-4)+2,rand(@map.width-4)+2,j-100)
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
        @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1
        for k in 1..(j-100)
          @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1
          @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1
          @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1
          @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1
        end
      when 200..299  # 壁设置固定
        set_defeventpos_wall(i,@map.events[i].x,@map.events[i].y,j-200)
        @oneventdata[@map.events[i].x,@map.events[i].y] = 1
        @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1
        for k in 1..(j-200)
          @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1
          @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1
          @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1
          @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1
        end
      end
    end
   
    # 放置障碍
    for i in 0...(rand(objcnt)+objcnt/2)
      time += 1
      if time%500 == 0
        Graphics.update
      end
      j = rand(@map.width)
      k = rand(@map.width)
      case rand(10)
      when 0..4
        if standable_newtile?(1,0)
          if standable?(j,k)
            set_mapdata(j,k,1,0,6)
          end
        else
          if standable2?(j,k)
            set_mapdata(j,k,1,0,6)
          end
        end
      when 5..7
        if standable_newtile?(2,0)
          if standable?(j,k)
            set_mapdata(j,k,2,0,6)
          end
        else
          if standable2?(j,k)
            set_mapdata(j,k,2,0,6)
          end
        end
      when 8..9
        if standable2?(j,k)
          if @map.data[j,k-1,2]==0 and
            (@map.data[j,k,1]==0 or @map.data[j,k,2]==0)
            set_mapdata(j,k,2,2,4)    # 4>6?
            set_mapdata(j,k-1,2,1,4)  # 4>2?
          end
        end
      end
    end
   
   
    # 释放变量的内容
    @heightdata.resize(0,0)
    @maskdata.resize(0,0)
    @oneventdata.resize(0,0)
    @masksetting.clear
    @makedata.clear
    @tilesetting.resize(0,0,0)
   
    if AUTO_MAP_SAVE
      # 保存机能
      save_data(@map,sprintf("Data/Map%03d.rxdata", 999))
      maplist  = load_data("Data/MapInfos.rxdata")
      
      mapinfo = RPG::MapInfo.new
      mapinfo.name = sprintf("随机自动保存(%s)", maplist[@map_id].name)
      mapinfo.parent_id = 0
      mapinfo.order = 999
      mapinfo.expanded = true
      mapinfo.scroll_x = 0
      mapinfo.scroll_y = 0
      
      maplist[999]=mapinfo
      save_data(maplist,"Data/MapInfos.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 获得事件的位置类型
  #--------------------------------------------------------------------------
  def event_settype(i)
    if @map.events[i].subname == "中继点"
      return 1
    end
    if @map.events[i].subname == "固定"
      return 2
    end
    if @map.events[i].subname == "完全固定"
      return 3
    end
    for j in 0..1000
      if @map.events[i].pages[0].list[j].code != 108
        break
      end
      # 注释中有中继点
      if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "中继点"
        return 1
      end
      # 注释中有完全固定
      if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "完全固定"
        return 3
      end
      # 注释中有固定
      if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "固定"
        return 2
      end
      # 注释中有壁设置
      if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "壁设置"
        if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil
          return 100
        else
          k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1]
          k = k.to_i
          return 100+k
        end
      end
      # 注释中有壁设置固定
      if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "壁设置固定"
        if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil
          return 200
        else
          k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1]
          k = k.to_i
          return 200+k
        end
      end
    end
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 指定位置附近设置事件
  #--------------------------------------------------------------------------
  def set_defeventpos(id,x,y)
    if standable2?(x,y)
      @map.events[id].x=x
      @map.events[id].y=y
      return
    end
    for i in 1..([@map.width,@map.height].max)
      if standable2?(x,y+i)
        @map.events[id].x=x
        @map.events[id].y=y+i
        return
      end
      for j in 1..i
        if standable2?(x-j,y+i)
          @map.events[id].x=x-j
          @map.events[id].y=y+i
          return
        end
        if standable2?(x+j,y+i)
          @map.events[id].x=x+j
          @map.events[id].y=y+i
          return
        end
        if standable2?(x-j,y-i)
          @map.events[id].x=x-j
          @map.events[id].y=y-i
          return
        end
        if standable2?(x+j,y-i)
          @map.events[id].x=x+j
          @map.events[id].y=y-i
          return
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定位置附近的墙壁上设置事件
  #     p4  幅度
  #--------------------------------------------------------------------------
  def set_defeventpos_wall(id,x,y,p4)
    if standable3?(x,y,p4)
      @map.events[id].x=x
      @map.events[id].y=y
      return
    end
    for i in 1..([@map.width,@map.height].max)
      if standable3?(x,y+i,p4)
        @map.events[id].x=x
        @map.events[id].y=y+i
        return
      end
      for j in 1..i
        if standable3?(x-j,y+i,p4)
          @map.events[id].x=x-j
          @map.events[id].y=y+i
          return
        end
        if standable3?(x+j,y+i,p4)
          @map.events[id].x=x+j
          @map.events[id].y=y+i
          return
        end
        if standable3?(x-j,y-i,p4)
          @map.events[id].x=x-j
          @map.events[id].y=y-i
          return
        end
        if standable3?(x+j,y-i,p4)
          @map.events[id].x=x+j
          @map.events[id].y=y-i
          return
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定位置附近设置玩家
  #--------------------------------------------------------------------------
  def playerpos_reset(x,y)
    if standable?(x,y)
      $game_temp.player_new_x=x
      $game_temp.player_new_y=y
      return
    end
    for i in 1..([@map.width,@map.height].max)
      if standable?(x,y+i)
        $game_temp.player_new_x=x
        $game_temp.player_new_y=y+i
        return
      end
      for j in 0..i
        if standable?(x-j,y+i)
          $game_temp.player_new_x=x-j
          $game_temp.player_new_y=y+i
          return
        end
        if standable?(x+j,y+i)
          $game_temp.player_new_x=x+j
          $game_temp.player_new_y=y+i
          return
        end
        if standable?(x-j,y-i)
          $game_temp.player_new_x=x-j
          $game_temp.player_new_y=y-i
          return
        end
        if standable?(x+j,y-i)
          $game_temp.player_new_x=x+j
          $game_temp.player_new_y=y-i
          return
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 自己能通过吗?(障碍物元件)
  #     p1,p2 位置X,Y
  #--------------------------------------------------------------------------
  def standable_newtile?(p1,p2)
    for i in [2, 1, 0]
      tile_id = @tilesetting[p1, p2, i]
      if tile_id == nil
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        return false
      elsif @priorities[tile_id] == 0
        return true
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 在指定位置站立吗?
  #     p1,p2 位置X,Y
  #--------------------------------------------------------------------------
  def standable?(p1,p2)
    if @heightdata[p1,p2] != 0
      return false
    end
    if @oneventdata[p1,p2] ==1
      return false
    end
    for i in [2, 1, 0]
      tile_id = @map.data[p1, p2, i]
      if tile_id == nil
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        return false
      elsif @priorities[tile_id] == 0
        return true
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 放置在指定位置没问题吗?(考虑周围的事件)
  #     p1,p2 位置X,Y
  #--------------------------------------------------------------------------
  def standable2?(p1,p2)
    # 站立位置判断
    unless standable?(p1,p2)
      return false
    end
    # 周围事件检查(能否前往尽头?)
    # 去掉能到纵吗
    if standable?(p1+1,p2-1) == false or
      standable?(p1+1,p2) == false or
      standable?(p1+1,p2+1) == false
      if standable?(p1-1,p2-1) == false or
        standable?(p1-1,p2) == false or
        standable?(p1-1,p2+1) == false
        # 去掉根本不能到纵的时候忽视
        if standable?(p1,p2-1) == true and
          standable?(p1,p2+1) == true
          return false
        end
      end
    end
    # 去掉能到横吗
    if standable?(p1+1,p2+1) == false or
      standable?(p1,p2+1) == false or
      standable?(p1-1,p2+1) == false
      if standable?(p1+1,p2-1) == false or
        standable?(p1,p2-1) == false or
        standable?(p1-1,p2-1) == false
        # 去掉根本不能到横的时候忽视
        if standable?(p1-1,p2) == true and
          standable?(p1+1,p2) == true
          return false
        end
      end
    end
    if standable?(p1,p2-1) == false and
      (standable?(p1-1,p2+1) == false or
      standable?(p1,p2+1) == false or
      standable?(p1+1,p2+1) == false)
      return false
    end
    if standable?(p1,p2+1) == false and
      (standable?(p1-1,p2-1) == false or
      standable?(p1+1,p2-1) == false or
      standable?(p1+1,p2-1) == false)
      return false
    end
    if standable?(p1-1,p2) == false and
      (standable?(p1+1,p2-1) == false or
      standable?(p1+1,p2) == false or
      standable?(p1+1,p2+1) == false)
      return false
    end
    if standable?(p1+1,p2) == false and
      (standable?(p1-1,p2-1) == false or
      standable?(p1-1,p2) == false or
      standable?(p1-1,p2+1) == false)
      return false
    end
      
    return true
  end
  #--------------------------------------------------------------------------
  # ● 放置在指定位置没问题吗?(墙壁版)
  #     p1,p2 位置X,Y
  #     p3   幅度
  #--------------------------------------------------------------------------
  def standable3?(p1,p2,p3)
    # 站立位置判断
    unless standable?(p1,p2+1)
      return false
    end
    # 位置判断
    if @oneventdata[p1,p2] == 1 or
      @oneventdata[p1,p2-1] == 1 or
      @heightdata[p1,p2-2] != 1 or
      @heightdata[p1,p2-1] == 1 or
      @heightdata[p1,p2+1] != 0
      return false
    end
    for i in 1...p3+1
      if@heightdata[p1+i,p2-2] != 1 or
        @heightdata[p1+i,p2-1] == 1 or
        @heightdata[p1+i,p2+1] != 0
        return false
      end
      if@heightdata[p1-i,p2-2] != 1 or
        @heightdata[p1-i,p2-1] == 1 or
        @heightdata[p1-i,p2+1] != 0
        return false
      end
    end
    for i in 1...p3+1
      if @oneventdata[p1+i,p2] == 1 or
        @oneventdata[p1+i,p2-1] == 1
        return false
      end
      if @oneventdata[p1-i,p2] == 1 or
        @oneventdata[p1-i,p2-1] == 1
        return false
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 地图元件信息变化
  #     p1,p2 起首处位置X,Y
  #     p3,p4 原参照位置X,Y
  #     p5  插入方法 0:通常 1:下一层 2:上一层 3:从下面 4:从上面 5:两边
  #--------------------------------------------------------------------------
  def set_mapdata(p1,p2,p3,p4,p5 = 0)
    unless self.valid?(p1, p2)
      return
    end
    if @tilesetting[p3,p4,0] != 0 # 0层普通放置
      @map.data[p1,p2,0] = @tilesetting[p3,p4,0]
    end
    case p5
    when 0 # 通常
      if @tilesetting[p3,p4,1] != 0
        @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
      end
      if @tilesetting[p3,p4,2] != 0
        @map.data[p1,p2,2] = @tilesetting[p3,p4,2]
      end
    when 1 # 放在下面
      if @tilesetting[p3,p4,1] != 0
        @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
      end
    when 2 # 放在上面
      if @tilesetting[p3,p4,1] != 0
        @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
      end
    when 3 # 从下面放置
      if @tilesetting[p3,p4,1] != 0
        if @map.data[p1,p2,1] != 0
          @map.data[p1,p2,2] = @map.data[p1,p2,1]
        end
        @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
      end
    when 4 # 从上面放置
      if @tilesetting[p3,p4,1] != 0
        if @map.data[p1,p2,2] != 0
          @map.data[p1,p2,1] = @map.data[p1,p2,2]
        end
        @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
      end
    when 5 # 从两边放置
      if @tilesetting[p3,p4,1] != 0
        @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
      end
      if @tilesetting[p3,p4,1] != 0
        @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
      end
    when 6 # 能放置就放置
      if @map.data[p1,p2,1] == 0
        @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
      elsif @map.data[p1,p2,2] == 0
        @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 地图元件信息变化2 >>没有范围外判断等
  #     p1,p2 起首处位置X,Y
  #     p3,p4 原参照位置X,Y
  #--------------------------------------------------------------------------
  def set_mapdata2(p1,p2,p3,p4)
    @map.data[p1,p2,0] = @tilesetting[p3,p4,0]
    @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
    @map.data[p1,p2,2] = @tilesetting[p3,p4,2]
  end
  #--------------------------------------------------------------------------
  # ● 指定位置信息变化
  #     p1,p2 位置X,Y
  #     p3    值
  #--------------------------------------------------------------------------
  def set_height(p1,p2,p3)
    return if p1<0
    return if p1>[email protected]
    return if p2<0
    return if p2>[email protected]
    @heightdata[p1,p2]=p3
  end
  #--------------------------------------------------------------------------
  # ● 指定位置信息变化
  #     p1,p2 位置X,Y
  #     p3    值
  #--------------------------------------------------------------------------
  def set_grounddata(p1,p2,p3)
    return if p1<0
    return if p1>[email protected]
    return if p2<0
    return if p2>[email protected]
    if @masksetting[@maskdata[p1,p2]] == true
      if @targettype==0
        if @chgtype==0
          @heightdata[p1,p2]=p3
        elsif @chgtype==1
          @heightdata[p1,p2]+=p3
        end
      elsif @targettype==1
        if @chgtype==0
          @maskdata[p1,p2]=p3
        elsif @chgtype==1
          @maskdata[p1,p2]+=p3
        end
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 指定计算方法
  #     p1 对象 >> =0:高度 =1:地形  (現在、高度0=地面 1=墙壁
  #     p2 方法 >> =0:代入 =1:加算      地形只是遮照判断使用
  #--------------------------------------------------------------------------
  def rndmap_chtarget(p1,p2)
    @targettype=p1
    @chgtype=p2
  end
  #--------------------------------------------------------------------------
  # ● 设定其他注释使用的值
  #     p1,p2 最小 X,Y
  #     p3,p4 最大 X,Y  设定制作道路的开始点,结束点等的时候使用
  #--------------------------------------------------------------------------
  def rndmap_setstat(p1,p2,p3,p4)
    @minx=p1
    @miny=p2
    @maxx=p3
    @maxy=p4
  end
  #--------------------------------------------------------------------------
  # ● 设定地形遮照
  #     p1 = 对象地形  (-1= 全部)
  #     p2 = 变更值    (0= 禁止改写  1= 可以改写  2= 只有那个地形可以)
  #--------------------------------------------------------------------------
  def rndmap_chmask(p1,p2)
    if p1>=0
      if p2==0
        @masksetting[p1]=false
      elsif p2 == 1
        @masksetting[p1]=true
      elsif p2 == 2
        for i in 0...100
          @masksetting[i]=false
        end
        @masksetting[p1]=true
      end
    end
    if p1==-1
      if p2==0
        for i in 0...100
          @masksetting[i]=false
        end
      else   
        for i in 0...100
          @masksetting[i]=true
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 2点之间生成道路
  #     起点、终点在rndmap_setstat里设定
  #     p1 = 改写值
  #     p2 = 途中点数(减的话以地图大小40*40为基准相对变化)
  #     p3 = 确保边缘的宽度
  #     p4 = 途中点连接方法 (0=直线连接  1=直角线(?)连接)
  #     p5 = 无视中继点的距离
  #--------------------------------------------------------------------------
  def rndmap_mkroad(p1,p2,p3,p4,p5 = 5)
    p5 = 5 if p5 == nil
   
    localdata = Table.new(@map.width,@map.height)
    aposx = []
    aposy = []
    aflag = []
    for i in [email][email protected][/email]
      for j in [email][email protected][/email]
        localdata[i,j] = 0
      end
    end
   
    if p2<0
      p2=(p2*-1)*@map.width*@map.height/40/40
    end
    aposx[0]=@minx
    aposy[0]=@miny
    aposx[1]=@maxx
    aposy[1]=@maxy

    if aposx[0]<0
      aposx[0][email protected]+aposx[0]
    end
    if (aposx[0]>=1000) and (aposx[0]<=1100)
      aposx[0][email protected]*(aposx[0]-1000)/100
    end

    if aposy[0]<0
      aposy[0][email protected]+aposy[0]
    end
    if (aposy[0]>=1000) and (aposy[0]<=1100)
      aposy[0][email protected]*(aposy[0]-1000)/100
    end


    if aposx[1]<0
      aposx[1][email protected]+aposx[1]
    end
    if (aposx[1]>=1000) and (aposx[1]<=1100)
      aposx[1][email protected]*(aposx[1]-1000)/100
    end


    if aposy[1]<0
      aposy[1][email protected]+aposy[1]
    end
    if (aposy[1]>=1000) and (aposy[1]<=1100)
      aposy[1][email protected]*(aposy[1]-1000)/100
    end

    if p4==0 or p4==1 or p4==2
      if p4 == 2
        i4 = rand(2)
      end
      aflag[0] = true
      aflag[1] = false
      for i in 2...(p2+2)
        aposx[i] = rand(@map.width-p3*2) + p3
        aposy[i] = rand(@map.height-p3*2) + p3
        aflag[i] = false
      end
      i3=0
      i1=aposx[i3]
      i2=aposy[i3]
      
      localdata[i1,i2] = 1
      
      for i in 0...p2+2
        i7=5000000
        for j in 0...p2+2
          if aflag[j] == false
            i4 = aposx[j]-i1
            i4=i4*-1 if i4 < 0
            i5 = aposy[j]-i2
            i5=i5*-1 if i5 < 0
            if (i4**2+i5**2) <=(p5**2) and j != 1
              aflag[j] = true
            elsif i7 > (i4**2+i5**2)
              i7=(i4**2+i5**2)
              i6=j
            end
          end
        end
        #  起点ID:i3   终点ID:i6
        if p4==0
          if aposx[i3] > aposx[i6]
            i8 = aposx[i3]
            i9 = aposy[i3]
            i10 = aposx[i6]
            i11 = aposy[i6]
          else
            i8 = aposx[i6]
            i9 = aposy[i6]
            i10 = aposx[i3]
            i11 = aposy[i3]
          end
          if i8!=i10
            for i in 0..(i8-i10)
              localdata[i+i10,(i9-i11)*i/(i8-i10)+i11] = 1
            end
          end
          if aposy[i3] > aposy[i6]
            i8 = aposx[i3]
            i9 = aposy[i3]
            i10 = aposx[i6]
            i11 = aposy[i6]
          else
            i8 = aposx[i6]
            i9 = aposy[i6]
            i10 = aposx[i3]
            i11 = aposy[i3]
          end
          if i9!=i11
            for i in 0..(i9-i11)
              localdata[(i8-i10)*i/(i9-i11)+i10,i+i11] = 1
            end
          end
        end
        if p4==1
          i4 = rand(2)
          if i4==0
            for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max)
              localdata[i+[aposx[i3],aposx[i6]].min,aposy[i3]] = 1
            end
            for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max)
              localdata[aposx[i6],i+[aposy[i3],aposy[i6]].min] = 1
            end
          else
            for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max)
              localdata[i+[aposx[i3],aposx[i6]].min,aposy[i6]] = 1
            end
            for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max)
              localdata[aposx[i3],i+[aposy[i3],aposy[i6]].min] = 1
            end
          end
        end
        i3=i6
        i1=aposx[i3]
        i2=aposy[i3]
        aflag[i3]=true
        if i3==1
          break
        end
      end
    end
    for i in [email][email protected][/email]
      for j in [email][email protected][/email]
        if localdata[i,j] == 1
          set_grounddata(i,j,p1)
        end
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 对象扩张
  #     p1       对象
  #     p2,p3    扩张幅度X,Y
  #     p4       扩张方法 (0=十字  1=四角)
  #--------------------------------------------------------------------------
  def rndmap_plus(p1,p2,p3,p4)
    localdata = Table.new(@map.width,@map.height)
    for i in [email][email protected][/email]
      for j in [email][email protected][/email]
        if @targettype==0
          localdata[i,j] = @heightdata[i,j]
        elsif @targettype==1
          localdata[i,j] = @maskdata[i,j]
        end
      end
    end
    if p4 == 0
      for i in [email][email protected][/email]
        for j in [email][email protected][/email]
          if p1==localdata[i,j]
            for k in 1..p2
              set_grounddata(i+k,j,p1)
              set_grounddata(i-k,j,p1)
            end
            for k in 1..p3
              set_grounddata(i,j+k,p1)
              set_grounddata(i,j-k,p1)
            end
          end
        end
      end
    elsif p4 == 1
      for i in [email][email protected][/email]
        for j in [email][email protected][/email]
          if p1==localdata[i,j]
            for k in (i-p2)..(i+p2)
              for l in (j-p3)..(j+p3)
                set_grounddata(k,l,p1)
              end
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 全部设定
  #     p1       值
  #--------------------------------------------------------------------------
  def rndmap_allchg(p1)
    for i in [email][email protected][/email]
      for j in [email][email protected][/email]
        set_grounddata(i,j,p1)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定点
  #     p1       值
  #     p2,p3    位置X,Y
  #--------------------------------------------------------------------------
  def rndmap_putpos(p1,p2,p3)
    i = rand(@maxx-@minx+1)+@minx
    j = rand(@maxy-@miny+1)+@miny
    for k in (p2-i)..(p2+i)
      for l in (p3-j)..(p3+j)
        set_grounddata(k,l,p1)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 周围
  #     p1       值
  #--------------------------------------------------------------------------
  def rndmap_edge(p1)
    for i in [email][email protected][/email]
      set_grounddata(i,0,p1)
      set_grounddata(i,@map.height-1,p1)
    end
    for i in [email][email protected][/email]
      set_grounddata(0,i,p1)
      set_grounddata(@map.width-1,i,p1)
    end
  end
end


#==============================================================================
# □ RPG::MapInfo >>用subname取得 “,”后面的文字
#==============================================================================
module RPG
  class MapInfo
    def name
      name = @name.split(/,/)[0]
      return name != nil ? name : '
    end
    def name=(str)
      str2 = @name[/^[^,]*(,.*)/, 1]
      @name = str2 != nil ? str + str2 : str
    end
    def subname(i = 1)
      name = @name.split(/,/)[i]
      return name != nil ? name : ""
    end
  end
end

#==============================================================================
# □ RPG::Event >>用subname取得 “,”后面的文字
#==============================================================================
module RPG
  class Event
    def name
      name = @name.split(/,/)[0]
      return name != nil ? name : '
    end
    def name=(str)
      str2 = @name[/^[^,]*(,.*)/, 1]
      @name = str2 != nil ? str + str2 : str
    end
    def subname(i = 1)
      name = @name.split(/,/)[i]
      return name != nil ? name : ""
    end
  end
end


’’


‘‘──mo88于2012-3-26 22:20补充以下内容

代码复制
  1. #
  2. #     随机地图生成脚本 v0.80   by tonbi  也就是迷宫
  3. #
  4. #     汉化修改 66RPG bbschat(2006.1.2)
  5. #
  6. #     随机地图自动生成脚本。
  7. #
  8. #     ●使用方法   
  9. #
  10. #     首先,设定随机地图名称
  11. #
  12. #     地图名称请按照「XXXXX,随机,YYY,ZZZ」的样式来命名。
  13. #     XXXXX 地图名,随便起自己喜欢的名字。
  14. #     YYY   随机类型编号,参考样例。
  15. #     ZZZ   障碍物数量,参考样例。
  16. #
  17. #     接下来,参考样例在地图上按照一定的规则画上地图元件
  18. #     画的时候注意一下层。参考样例把地图元件画在对应的层上。
  19. #
  20. #     最后设定以下事件
  21. #
  22. #     中继点设定方法:
  23. #     事件名称为「XXXXX,中继点」或事件执行内容的第一行加上「◆注释 : 中继点」。
  24. #
  25. #     随机地图将按照中继点事件产生随机道路,并按照事件ID顺序依次通过数个中继点
  26. #    (当然肯定不是直线通过)
  27. #     一般请在地图的两端设定中继点事件。
  28. #     两个中继点之间请保留适当空间,少于5个地图元件的话就没有墙壁了。
  29. #     不过就算没有中继点,也能生成随机地图。
  30. #     增加中继点会减少墙壁的数量,所以不要太多,有几个中继点就可以了。
  31. #     通常按照三角形的方位来设置3个中继点。
  32. #
  33. #     中继点以外的事件如果没有特别指定将随机放置在地图的道路上。
  34. #
  35. #     固定事件设定方法:
  36. #     事件名称为「XXXXX,固定」或事件执行内容的第一行加上「◆注释 : 固定」。
  37. #     
  38. #     该事件将被放置在离该事件位置最近的道路上。
  39. #
  40. #     完全固定事件设定方法:
  41. #     事件名称为「XXXXX,完全固定」或事件执行内容的第一行加上「◆注释 : 完全固定」
  42. #
  43. #     该事件位置将保持不变。
  44. #     自动执行和并行处理的事件或者希望放在地图边缘方便查找的事件可以使用完全固定。
  45. #
  46. #     墙壁事件设定方法:
  47. #     事件执行内容的第一行为「◆注释 : 壁设置」
  48. #     该事件将随机出现在地图的墙壁上。
  49. #     门,火把之类的事件专用。注释形式类似「壁设置,1」这样,后面要跟一个数字,
  50. #     数字为了保证可以添加类似于[横幅]这样的事件。(横幅1元件为0,3个元件为1。)
  51. #     这样的话就可以使用一些较大的事件了。
  52. #
  53. #     墙壁固定事件设定方法:
  54. #     事件页第一行为「◆注释 : 壁设置固定」
  55. #     这是同时具有上述固定事件和墙壁事件两个性质的事件。
  56. #     也就是放置在离该事件位置最近的墙壁上的事件。
  57. #     如果使用「壁设置固定,1」这种形式,也可以使用较大的事件。
  58. #
  59. #     还有使用之前请按照自己的需要设定下面的参数。
  60.  
  61. #========================================================================
  62.  
  63. #========================================================================
  64. #★Clipping距离指定(搞不懂什么意思的话就不要改。)
  65. class Game_Character
  66.  
  67.   DRAWRANGEX = 1920     # 地图角色的Sprite更新距离
  68.   DRAWRANGEY = 1664     # 使用较大CharChip?时请适当增加。
  69.                         # 指定的是X:15 Y:13乘128的数值。
  70.                         # 上面是X坐标(横)下面是Y坐标(纵)。
  71. end
  72.  
  73. #========================================================================
  74. #========================================================================
  75. #★是否保存。(并不准备使用随机地图、只是为了节约制作时间。)
  76. # 保存下来的地图可以复制到其他地方以节省制作时间。
  77.  
  78. class Game_Map
  79.  
  80.   AUTO_MAP_SAVE = false    # 是否保存为地图ID:999。
  81.                           # true 保存 false 不保存
  82.  
  83.                           # 游戏做完发布后请设定为false。
  84.  
  85. end
  86.  
  87.  
  88. #-------------------------------------------------------------------
  89. # ●Game_Temp
  90. #--------------------------------------------------------------------
  91.  
  92. class Game_Temp
  93.   alias initialize_tonbi1 initialize
  94.   def initialize
  95.     initialize_tonbi1
  96.     $onscreen = []                        # Sprite是否画面内标志
  97.   end
  98. end
  99.  
  100.  
  101. #--------------------------------------------------------------------------
  102. # ● Game_Character
  103. #--------------------------------------------------------------------------
  104.  
  105. class Game_Character
  106.   #--------------------------------------------------------------------------
  107.   # ● 更新
  108.   #--------------------------------------------------------------------------
  109.   alias update_tonbi1 update
  110.   def update
  111.  
  112.     # 画面上的位置
  113.     sx = @real_x - $game_map.display_x - 1280
  114.     sy = @real_y - $game_map.display_y - 960
  115.     # 画面位置的绝对值
  116.     abs_sx = sx > 0 ? sx : -sx
  117.     abs_sy = sy > 0 ? sy-3 : -sy
  118.  
  119.     # 纵横坐标超出 DRAWRANGE 元件的情况下
  120.     if abs_sx > DRAWRANGEX or abs_sy > DRAWRANGEY
  121.       # Sprite不更新
  122.       $onscreen[@id]=false
  123.     else
  124.       # Sprite更新
  125.       $onscreen[@id]=true
  126.     end
  127.  
  128.     update_tonbi1
  129.   end
  130. end
  131.  
  132. class Spriteset_Map
  133.   #--------------------------------------------------------------------------
  134.   # ● 初始化对像
  135.   #--------------------------------------------------------------------------
  136.   attr_accessor :character_sprites
  137.   def initialize
  138.  
  139.     $onscreen = []
  140.     # 生成显示端口
  141.     @viewport1 = Viewport.new(0, 0, 640, 480)
  142.     @viewport2 = Viewport.new(0, 0, 640, 480)
  143.     @viewport3 = Viewport.new(0, 0, 640, 480)
  144.     @viewport2.z = 200
  145.     @viewport3.z = 5000
  146.  
  147.     # 生成元件地图
  148.     @tilemap = Tilemap.new(@viewport1)
  149.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  150.     for i in 0..6
  151.       autotile_name = $game_map.autotile_names[i]
  152.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  153.     end
  154.     @tilemap.map_data = $game_map.data
  155.     @tilemap.priorities = $game_map.priorities
  156.  
  157.     # 生成远景平面
  158.     @panorama = Plane.new(@viewport1)
  159.     @panorama.z = -1000
  160.  
  161.     # 生成雾平面
  162.     @fog = Plane.new(@viewport1)
  163.     @fog.z = 3000
  164.  
  165.     #########################################################★改变
  166.     # 角色活动块
  167.     # 将Party和Event区分开。
  168.     @character_sprites = []
  169.     @party_sprites = []
  170.     for i in $game_map.events.keys.sort
  171.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  172.       @character_sprites[i]=sprite
  173.       $onscreen[i] = true
  174.     end
  175.     @party_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  176.     #########################################################
  177.  
  178.     # 生成天气
  179.     @weather = RPG::Weather.new(@viewport1)
  180.     # 生成图片
  181.     @picture_sprites = []
  182.     for i in 1..50
  183.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  184.         $game_screen.pictures[i]))
  185.     end
  186.     # 生成计时器块
  187.     @timer_sprite = Sprite_Timer.new
  188.     # 刷新画面
  189.     update
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 释放
  193.   #--------------------------------------------------------------------------
  194.   def dispose
  195.     # 释放元件地图
  196.     @tilemap.tileset.dispose
  197.     for i in 0..6
  198.       @tilemap.autotiles[i].dispose
  199.     end
  200.     @tilemap.dispose
  201.     # 释放远景平面
  202.     @panorama.dispose
  203.     # 释放雾平面
  204.     @fog.dispose
  205.     ############################################################★改变
  206.     # 释放角色活动块
  207.     # nil 的话不释放
  208.     for i in @character_sprites
  209.       if i != nil
  210.         i.dispose
  211.       end
  212.     end
  213.     for i in @party_sprites
  214.       if i != nil
  215.         i.dispose
  216.       end
  217.     end
  218.     ############################################################
  219.     # 释放天候
  220.     @weather.dispose
  221.     # 释放图片
  222.     for sprite in @picture_sprites
  223.       sprite.dispose
  224.     end
  225.     # 释放计时器块
  226.     @timer_sprite.dispose
  227.     # 释放显示端口
  228.     @viewport1.dispose
  229.     @viewport2.dispose
  230.     @viewport3.dispose
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 刷新画面
  234.   #--------------------------------------------------------------------------
  235.   def update
  236.     # 远景与现在的情况有差异发情况下
  237.     if @panorama_name != $game_map.panorama_name or
  238.        @panorama_hue != $game_map.panorama_hue
  239.       @panorama_name = $game_map.panorama_name
  240.       @panorama_hue = $game_map.panorama_hue
  241.       if @panorama.bitmap != nil
  242.         @panorama.bitmap.dispose
  243.         @panorama.bitmap = nil
  244.       end
  245.       if @panorama_name != ""
  246.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  247.       end
  248.       Graphics.frame_reset
  249.     end
  250.     # 雾与现在的情况有差异的情况下
  251.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  252.       @fog_name = $game_map.fog_name
  253.       @fog_hue = $game_map.fog_hue
  254.       if @fog.bitmap != nil
  255.         @fog.bitmap.dispose
  256.         @fog.bitmap = nil
  257.       end
  258.       if @fog_name != ""
  259.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  260.       end
  261.       Graphics.frame_reset
  262.     end
  263.     # 刷新元件地图
  264.     @tilemap.ox = $game_map.display_x / 4
  265.     @tilemap.oy = $game_map.display_y / 4
  266.     @tilemap.update
  267.     # 刷新远景平面
  268.     @panorama.ox = $game_map.display_x / 8
  269.     @panorama.oy = $game_map.display_y / 8
  270.     # 刷新雾平面
  271.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  272.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  273.     @fog.opacity = $game_map.fog_opacity
  274.     @fog.blend_type = $game_map.fog_blend_type
  275.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  276.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  277.     @fog.tone = $game_map.fog_tone
  278.  
  279.     #####################################################★改变
  280.     # 刷新角色活动块
  281.     # 画面外的角色活动块不更新
  282.     for i in $game_map.events.keys
  283.       if $onscreen[i]
  284.         @character_sprites[i].update
  285.       end
  286.     end
  287.     # 玩家角色更新
  288.     for i in @party_sprites
  289.       i.update
  290.     end
  291.  
  292.     #####################################################
  293.  
  294.     # 刷新天候图形
  295.     @weather.type = $game_screen.weather_type
  296.     @weather.max = $game_screen.weather_max
  297.     @weather.ox = $game_map.display_x / 4
  298.     @weather.oy = $game_map.display_y / 4
  299.     @weather.update
  300.     # 刷新图片
  301.     for sprite in @picture_sprites
  302.       sprite.update
  303.     end
  304.     # 刷新计时器块
  305.     @timer_sprite.update
  306.     # 设置画面的色调与震动位置
  307.     @viewport1.tone = $game_screen.tone
  308.     @viewport1.ox = $game_screen.shake
  309.     # 设置画面的闪烁色
  310.     @viewport3.color = $game_screen.flash_color
  311.     # 刷新显示端口
  312.     @viewport1.update
  313.     @viewport3.update
  314.   end
  315. end
  316.  
  317.  
  318. #==============================================================================
  319. # ■ Game_Map
  320. #==============================================================================
  321. class Game_Map
  322.   #--------------------------------------------------------------------------
  323.   # ● 设置
  324.   #     map_id : 地图 ID
  325.   #--------------------------------------------------------------------------
  326.   def setup(map_id)
  327.     # 地图 ID 记录到 @map_id
  328.     @map_id = map_id
  329.     # 地图文件装载后、设置到 @map
  330.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  331.     # 定义实例变量设置地图元件信息
  332.     tileset = $data_tilesets[@map.tileset_id]
  333.     @tileset_name = tileset.tileset_name
  334.     @autotile_names = tileset.autotile_names
  335.     @panorama_name = tileset.panorama_name
  336.     @panorama_hue = tileset.panorama_hue
  337.     @fog_name = tileset.fog_name
  338.     @fog_hue = tileset.fog_hue
  339.     @fog_opacity = tileset.fog_opacity
  340.     @fog_blend_type = tileset.fog_blend_type
  341.     @fog_zoom = tileset.fog_zoom
  342.     @fog_sx = tileset.fog_sx
  343.     @fog_sy = tileset.fog_sy
  344.     @battleback_name = tileset.battleback_name
  345.     @passages = tileset.passages
  346.     @priorities = tileset.priorities
  347.     @terrain_tags = tileset.terrain_tags
  348.     # 初始化显示坐标
  349.     @display_x = 0
  350.     @display_y = 0
  351.  
  352.     check_special_map #★检查随机地图
  353.  
  354.     # 清除刷新要求标志
  355.     @need_refresh = false
  356.     # 设置地图事件数据
  357.     @events = {}
  358.     for i in @map.events.keys
  359.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  360.     end
  361.     # 设置公共事件数据
  362.     @common_events = {}
  363.     for i in 1...$data_common_events.size
  364.       @common_events[i] = Game_CommonEvent.new(i)
  365.     end
  366.     # 初始化雾的各种信息
  367.     @fog_ox = 0
  368.     @fog_oy = 0
  369.     @fog_tone = Tone.new(0, 0, 0, 0)
  370.     @fog_tone_target = Tone.new(0, 0, 0, 0)
  371.     @fog_tone_duration = 0
  372.     @fog_opacity_duration = 0
  373.     @fog_opacity_target = 0
  374.     # 初始化滚动信息
  375.     @scroll_direction = 2
  376.     @scroll_rest = 0
  377.     @scroll_speed = 4
  378.   end
  379.  
  380.   #--------------------------------------------------------------------------
  381.   # ● 紧接读入地图之后的处理
  382.   #--------------------------------------------------------------------------
  383.   def check_special_map
  384.     # 取得地图名称
  385.     mapinfo  = load_data("Data/MapInfos.rxdata")
  386.  
  387.     # 地图名称包含“随机”的场合
  388.     if mapinfo[@map_id].subname == "随机"
  389.       if mapinfo[@map_id].subname(3)=="" or mapinfo[@map_id].subname(3) == nil
  390.         p3 = 0
  391.       else
  392.         p3 = mapinfo[@map_id].subname(3).to_i
  393.       end
  394.       if mapinfo[@map_id].subname(4)=="false"
  395.         p4 = false
  396.       end
  397.  
  398.       make_random_map(2,mapinfo[@map_id].subname(2).to_i,p3,p4)
  399.     end
  400.   end
  401.  
  402.   #--------------------------------------------------------------------------
  403.   # ● 生成随机地图
  404.   #     wall = 墙壁的高 >> 现在无效
  405.   #     type = 墙壁制作类型 >> 0以外没制作(汗 指定方法也未定) (<-- bbschat注:汗~原来日本人也会用汗)
  406.   #     thoughplayer = 玩家在中继点中包含吗?
  407.   #     connect = 中继点的连接方法 >> true=连续 false=2个各自独立
  408.   #
  409.   #     ※所有参数全部省略   可以使用下面的例子
  410.   #     ex. make_random_map(2,0,,true)
  411.   #--------------------------------------------------------------------------
  412.   def make_random_map(wall = 2, type = 0, objcnt = 0, connect = true)
  413.  
  414.     # 非法参数处理
  415.     wall = 0 if wall == nil
  416.     type = 0 if type == nil
  417.     objcnt = 0 if objcnt == nil
  418.     unless objcnt.is_a?(Numeric)
  419.       objcnt = 0
  420.     end
  421.     if objcnt < 0
  422.       objcnt = 0
  423.     end
  424.     connect = true if connect != false
  425.  
  426.     # 高度数据表
  427.     @heightdata = Table.new(@map.width,@map.height)
  428.     # 地形数据表
  429.     @maskdata = Table.new(@map.width,@map.height)
  430.     # 事件数据表
  431.     @oneventdata = Table.new(@map.width,@map.height)
  432.     # 遮照设定数组
  433.     @masksetting = []
  434.     # 制作方法数组
  435.     @makedata = []
  436.  
  437.     # 演算方法初始化
  438.     @targettype=0
  439.     @chgtype=0
  440.  
  441.     time = -1
  442.     # 数据初始化
  443.     for i in [email protected]
  444.       for j in [email protected]
  445.         time += 1
  446.         if time%2000 == 0
  447.           Graphics.update
  448.         end
  449.         @heightdata[i,j] = 0
  450.         @maskdata[i,j] = 0
  451.       end
  452.     end
  453.     for i in 0...100
  454.       @masksetting[i] = true
  455.     end
  456.  
  457.     # 取得中继点情报
  458.     needposx = []
  459.     needposy = []
  460.     # 增加中继点事件
  461.     for i in @map.events.keys.sort
  462.       time += 1
  463.       if time%200 == 0
  464.         Graphics.update
  465.       end
  466.       if event_settype(i) == 1
  467.         if connect == true
  468.           needposx.push(@map.events[i].x)
  469.           needposy.push(@map.events[i].y)
  470.           needposx.push(@map.events[i].x)
  471.           needposy.push(@map.events[i].y)
  472.         else
  473.           needposx.push(@map.events[i].x)
  474.           needposy.push(@map.events[i].y)
  475.         end
  476.       end
  477.     end
  478.     if connect == true
  479.       needposx.shift
  480.       needposy.shift
  481.     end
  482.     loop do
  483.       if needposx.size <= 2
  484.         needposx.push(rand(@map.width))
  485.         needposy.push(rand(@map.height))
  486.       else
  487.         break
  488.       end
  489.     end
  490.  
  491.     # 这里设定制作方法数组
  492.     case type
  493.     when 0
  494.       # 类型0 >> 2层自然类型
  495.       @makedata.push([0,1,0])
  496.       @makedata.push([5,1])
  497.       for i in 0...(needposx.size/2)
  498.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  499.         @makedata.push([3,0,-15,4,0])
  500.         @makedata.push([1,1,1,1,1])
  501.         @makedata.push([6,0,needposx[i*2],needposy[i*2]])
  502.         @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
  503.       end
  504.  
  505.       @makedata.push([4,0,1,1,1])
  506.       @makedata.push([4,0,1,1,1])
  507.       @makedata.push([4,1,1,1,1])
  508.  
  509.       @makedata.push([0,0,0])
  510.       @makedata.push([2,0,2])
  511.       @makedata.push([5,0])
  512.       @makedata.push([2,1,2])
  513.       @makedata.push([5,1])
  514.     when 1
  515.       # 类型1 >> 2层人工类型
  516.       @makedata.push([0,1,0])
  517.       @makedata.push([5,1])
  518.       for i in 0...(needposx.size/2)
  519.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  520.         @makedata.push([3,0,-6,4,1,10])
  521.         @makedata.push([1,1,1,1,1])
  522.         @makedata.push([6,0,needposx[i*2],needposy[i*2]])
  523.         @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
  524.       end
  525.  
  526.       @makedata.push([4,0,2,3,1])
  527.       @makedata.push([4,1,2,2,1])
  528.       @makedata.push([4,0,1,1,1])
  529.  
  530.       @makedata.push([0,0,0])
  531.       @makedata.push([2,0,2])
  532.       @makedata.push([5,0])
  533.       @makedata.push([2,1,2])
  534.       @makedata.push([5,1])
  535.     when 2
  536.       # 类型2 >> 2层自然凸类型
  537.       @makedata.push([0,1,0])
  538.       @makedata.push([5,1])
  539.       for i in 0...(needposx.size/2)
  540.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  541.         @makedata.push([3,0,-15,4,0])
  542.         @makedata.push([1,1,1,1,1])
  543.         @makedata.push([6,0,needposx[i*2],needposy[i*2]])
  544.         @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
  545.       end
  546.  
  547.       @makedata.push([4,0,2,2,1])
  548.       @makedata.push([4,1,1,1,1])
  549.  
  550.       @makedata.push([0,0,0])
  551.       @makedata.push([2,0,2])
  552.       @makedata.push([5,0])
  553.       @makedata.push([2,1,2])
  554.       @makedata.push([5,-1])
  555.     when 3
  556.       # 类型3 >> 2层人工凸类型
  557.       @makedata.push([0,1,0])
  558.       @makedata.push([5,1])
  559.       for i in 0...(needposx.size/2)
  560.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  561.         @makedata.push([3,0,-15,4,1,10])
  562.         @makedata.push([1,1,1,1,1])
  563.         @makedata.push([6,0,needposx[i*2],needposy[i*2]])
  564.         @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]])
  565.       end
  566.  
  567.       @makedata.push([4,0,2,2,1])
  568.       @makedata.push([4,1,1,1,1])
  569.  
  570.       @makedata.push([0,0,0])
  571.       @makedata.push([2,0,2])
  572.       @makedata.push([5,0])
  573.       @makedata.push([2,1,2])
  574.       @makedata.push([5,-1])
  575.     when 4
  576.       # 类型4 >> 2层自然类型 之一
  577.       # 地形[0:洞 1:地面 2:墙壁]
  578.  
  579.       # 基本设定
  580.       @makedata.push([0,1,0])
  581.       @makedata.push([5,0])
  582.       # 放置墙
  583.       @makedata.push([1,0,0,-1,0])
  584.       @makedata.push([3,2,-6,1,0])
  585.       @makedata.push([1,-1,0,-1,-1])
  586.       @makedata.push([3,2,-6,1,0])
  587.       @makedata.push([1,-1,-1,0,-1])
  588.       @makedata.push([3,2,-6,1,0])
  589.       @makedata.push([1,0,-1,0,0])
  590.       @makedata.push([3,2,-6,1,0])
  591.       @makedata.push([4,2,2,2,1])
  592.       # 随机放置洞
  593.       for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
  594.         @makedata.push([1,3,3,8,8])
  595.         @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
  596.       end
  597.       # 生成周围的墙
  598.       @makedata.push([7,2])
  599.       @makedata.push([4,2,1,1,1])
  600.       # 生成道路
  601.       for i in 0...(needposx.size/2)
  602.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  603.         @makedata.push([3,1,-8,4,0,5])
  604.         @makedata.push([1,1,1,1,1])
  605.         @makedata.push([6,1,needposx[i*2],needposy[i*2]])
  606.         @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
  607.       end
  608.       # 扩张处理
  609.       @makedata.push([4,1,1,1,1])
  610.       @makedata.push([4,1,0,1,1])
  611.       @makedata.push([2,0,0])
  612.       @makedata.push([4,1,1,0,1])
  613.       @makedata.push([2,-1,1])
  614.       @makedata.push([4,2,1,1,1])
  615.       # 高度设定
  616.       @makedata.push([0,0,0])
  617.       @makedata.push([2,0,2])
  618.       @makedata.push([5,-1])
  619.       @makedata.push([2,1,2])
  620.       @makedata.push([5,0])
  621.       @makedata.push([2,2,2])
  622.       @makedata.push([5,1])
  623.  
  624.     when 5
  625.       # 类型5 >> 2层人工类型 之一
  626.       # 地形[0:洞 1:地面 2:墙壁]
  627.  
  628.       # 基本设定
  629.       @makedata.push([0,1,0])
  630.       @makedata.push([5,0])
  631.       # 放置墙
  632.       @makedata.push([1,0,0,-1,0])
  633.       @makedata.push([3,2,-6,1,0])
  634.       @makedata.push([1,-1,0,-1,-1])
  635.       @makedata.push([3,2,-6,1,0])
  636.       @makedata.push([1,-1,-1,0,-1])
  637.       @makedata.push([3,2,-6,1,0])
  638.       @makedata.push([1,0,-1,0,0])
  639.       @makedata.push([3,2,-6,1,0])
  640.       @makedata.push([4,2,2,2,1])
  641.       # 随机放置洞
  642.       for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
  643.         @makedata.push([1,3,3,8,8])
  644.         @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
  645.       end
  646.       # 生成周围的墙
  647.       @makedata.push([7,2])
  648.       @makedata.push([4,2,1,1,1])
  649.       # 生成道路
  650.       for i in 0...(needposx.size/2)
  651.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  652.         @makedata.push([3,1,-8,4,1,5])
  653.         @makedata.push([1,1,1,1,1])
  654.         @makedata.push([6,1,needposx[i*2],needposy[i*2]])
  655.         @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
  656.       end
  657.       # 扩张处理
  658.       @makedata.push([4,1,1,1,1])
  659.       @makedata.push([4,1,0,1,1])
  660.       @makedata.push([2,0,0])
  661.       @makedata.push([4,1,1,0,1])
  662.       @makedata.push([2,-1,1])
  663.       @makedata.push([4,2,1,1,1])
  664.       # 高度设定
  665.       @makedata.push([0,0,0])
  666.       @makedata.push([2,0,2])
  667.       @makedata.push([5,-1])
  668.       @makedata.push([2,1,2])
  669.       @makedata.push([5,0])
  670.       @makedata.push([2,2,2])
  671.       @makedata.push([5,1])
  672.  
  673.  
  674.  
  675.     when 6
  676.       # 类型6 >> 2层自然类型 之二
  677.       # 地形[0:洞 1:地面 2:墙壁]
  678.  
  679.       # 基本设定
  680.       @makedata.push([0,1,0])
  681.       @makedata.push([5,0])
  682.       # 放置墙
  683.       @makedata.push([1,0,0,-1,0])
  684.       @makedata.push([3,2,-6,1,0])
  685.       @makedata.push([1,-1,0,-1,-1])
  686.       @makedata.push([3,2,-6,1,0])
  687.       @makedata.push([1,-1,-1,0,-1])
  688.       @makedata.push([3,2,-6,1,0])
  689.       @makedata.push([1,0,-1,0,0])
  690.       @makedata.push([3,2,-6,1,0])
  691.       @makedata.push([4,2,2,2,1])
  692.       # 随机放置洞
  693.       for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
  694.         @makedata.push([1,1,1,3,3])
  695.         @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
  696.       end
  697.       # 洞扩大
  698.       @makedata.push([4,0,2,2,0])
  699.       @makedata.push([4,0,1,2,1])
  700.       # 生成周围的墙
  701.       @makedata.push([7,2])
  702.       @makedata.push([4,2,1,1,1])
  703.       # 生成道路
  704.       for i in 0...(needposx.size/2)
  705.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  706.         @makedata.push([3,1,-15,4,0,5])
  707.         @makedata.push([1,1,1,1,1])
  708.         @makedata.push([6,1,needposx[i*2],needposy[i*2]])
  709.         @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
  710.       end
  711.       # 扩张处理
  712.       @makedata.push([4,1,1,1,1])
  713.       @makedata.push([4,1,0,1,1])
  714.       @makedata.push([2,0,0])
  715.       @makedata.push([4,1,1,0,1])
  716.       @makedata.push([2,-1,1])
  717.       @makedata.push([4,2,1,1,1])
  718.       # 高度设定
  719.       @makedata.push([0,0,0])
  720.       @makedata.push([2,0,2])
  721.       @makedata.push([5,-1])
  722.       @makedata.push([2,1,2])
  723.       @makedata.push([5,0])
  724.       @makedata.push([2,2,2])
  725.       @makedata.push([5,1])
  726.  
  727.     when 7
  728.       # 类型7 >> 2层人工类型 之二
  729.       # 地形[0:洞 1:地面 2:墙壁]
  730.  
  731.       # 基本设定
  732.       @makedata.push([0,1,0])
  733.       @makedata.push([5,0])
  734.       # 放置墙
  735.       @makedata.push([1,0,0,-1,0])
  736.       @makedata.push([3,2,-6,1,0])
  737.       @makedata.push([1,-1,0,-1,-1])
  738.       @makedata.push([3,2,-6,1,0])
  739.       @makedata.push([1,-1,-1,0,-1])
  740.       @makedata.push([3,2,-6,1,0])
  741.       @makedata.push([1,0,-1,0,0])
  742.       @makedata.push([3,2,-6,1,0])
  743.       @makedata.push([4,2,2,2,1])
  744.       # 随机放置洞
  745.       for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40))
  746.         @makedata.push([1,1,1,3,3])
  747.         @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5])
  748.       end
  749.       # 洞扩大
  750.       @makedata.push([4,0,2,2,0])
  751.       @makedata.push([4,0,1,2,1])
  752.       # 生成周围的墙
  753.       @makedata.push([7,2])
  754.       @makedata.push([4,2,1,1,1])
  755.       # 生成道路
  756.       for i in 0...(needposx.size/2)
  757.         @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]])
  758.         @makedata.push([3,1,-15,4,1,5])
  759.         @makedata.push([1,1,1,1,1])
  760.         @makedata.push([6,1,needposx[i*2],needposy[i*2]])
  761.         @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]])
  762.       end
  763.       # 扩张处理
  764.       @makedata.push([4,1,1,1,1])
  765.       @makedata.push([4,1,0,1,1])
  766.       @makedata.push([2,0,0])
  767.       @makedata.push([4,1,1,0,1])
  768.       @makedata.push([2,-1,1])
  769.       @makedata.push([4,2,1,1,1])
  770.       # 高度设定
  771.       @makedata.push([0,0,0])
  772.       @makedata.push([2,0,2])
  773.       @makedata.push([5,-1])
  774.       @makedata.push([2,1,2])
  775.       @makedata.push([5,0])
  776.       @makedata.push([2,2,2])
  777.       @makedata.push([5,1])
  778.     end
  779.  
  780.  
  781.     # 实际制作
  782.     for make_stat in @makedata
  783.       time += 1
  784.       if time%2 == 0
  785.         Graphics.update
  786.       end
  787.       case make_stat[0]
  788.       when 0    # 对象变化   (p1[0=高度 1=地形], p2[0=代入 1=加算])
  789.         rndmap_chtarget(make_stat[1],make_stat[2])
  790.       when 1    # 参数设定   (minx, miny, maxz, maxy)
  791.         rndmap_setstat(make_stat[1],make_stat[2],make_stat[3],make_stat[4])
  792.       when 2    # 遮照变化 (p1[-1:全部], p2[ 0=false 1=true 2=onlytrue])
  793.         rndmap_chmask(make_stat[1],make_stat[2])
  794.       when 3    # 生成道路     (值,中继点数,边缘确保,类型)
  795.         rndmap_mkroad(make_stat[1],make_stat[2],make_stat[3],make_stat[4],make_stat[5])
  796.       when 4    # 扩张       (对象,纵幅,横幅,类型)
  797.         rndmap_plus(make_stat[1],make_stat[2],make_stat[3],make_stat[4])
  798.       when 5    # 全变化     (值)
  799.         rndmap_allchg(make_stat[1])
  800.       when 6    # 指定点     (值,位置X,位置Y)
  801.         rndmap_putpos(make_stat[1],make_stat[2],make_stat[3])
  802.       when 7    # 周围       (值)
  803.         rndmap_edge(make_stat[1])
  804.       end
  805.     end
  806.  
  807.     # 取得使用地图元件
  808.     @tilesetting = Table.new(3,40,3)
  809.     for i in [0,1,2]
  810.       for k in 0...40
  811.         for j in [0,1,2]
  812.           @tilesetting[j,k,i] = @map.data[j,k,i]
  813.         end
  814.       end
  815.     end
  816.  
  817.     # 补正
  818.     time = 0
  819.     for k in [email protected]
  820.       for j in [email protected]
  821.         time += 1
  822.         # 定期画面更新
  823.         if time%500 == 0
  824.           Graphics.update
  825.         end
  826.         # 墙下的地图元件要是洞的话,地面变更
  827.         if @heightdata[j,k] == 1
  828.           if @heightdata[j,k+1]==-1
  829.             @heightdata[j,k+1] = 0
  830.             if @heightdata[j,k+2]==-1 and
  831.               @heightdata[j,k+3] == 0
  832.               @heightdata[j,k+2] = 0
  833.             end
  834.           end
  835.         end
  836.  
  837.       end
  838.     end
  839.  
  840.  
  841.  
  842.     # 生成地面 之一 >> 暂且全面铺上
  843.     time = 0
  844.     for k in [email protected]
  845.       for j in [email protected]
  846.         time += 1
  847.         # 定期画面更新
  848.         if time%500 == 0
  849.           Graphics.update
  850.         end
  851.         if @heightdata[j,k] == 0
  852.           if @heightdata[j,k+1] == -1 or
  853.             @heightdata[j,k-1] == -1 or
  854.             @heightdata[j+1,k] == -1 or
  855.             @heightdata[j-1,k] == -1
  856.             set_mapdata2(j,k,0,8)
  857.           else
  858.             set_mapdata2(j,k,0,0)
  859.           end
  860.         elsif @heightdata[j,k] == 1
  861.           if @heightdata[j,k+1] == -1 or
  862.             @heightdata[j,k-1] == -1 or
  863.             @heightdata[j+1,k] == -1 or
  864.             @heightdata[j-1,k] == -1
  865.             set_mapdata2(j,k,0,8)
  866.           elsif @heightdata[j,k+1] == 0 or
  867.             @heightdata[j,k-1] == 0 or
  868.             @heightdata[j+1,k] == 0 or
  869.             @heightdata[j-1,k] == 0
  870.             set_mapdata2(j,k,0,0)
  871.           else
  872.             set_mapdata2(j,k,1,4)
  873.           end
  874.         else
  875.           set_mapdata2(j,k,0,8)
  876.         end
  877.       end
  878.     end
  879.     # 生成地面 之二 >> 生成洞
  880.     time = 0
  881.     for k in [email protected]
  882.       for j in [email protected]
  883.         time += 1
  884.         # 定期画面更新
  885.         if time%500 == 0
  886.           Graphics.update
  887.         end
  888.         if @heightdata[j,k] == 0
  889.           if @heightdata[j,k+1] == -1
  890.             # 下面是洞------------------
  891.             if @heightdata[j-1,k] == -1
  892.               # 左边也是洞
  893.               for i in [0,1,2]
  894.                 set_mapdata(j,k+i,0,13+i,1)
  895.               end
  896.             elsif @heightdata[j+1,k] == -1
  897.               # 右边也是洞
  898.               for i in [0,1,2]
  899.                 set_mapdata(j,k+i,2,13+i,1)
  900.               end
  901.             else
  902.               # 两边是地面
  903.               for i in [0,1,2]
  904.                 set_mapdata(j,k+i,1,13+i,1)
  905.               end
  906.             end
  907.           elsif @heightdata[j,k-1] == -1
  908.             # 上面是洞------------------
  909.             if @heightdata[j-1,k] == -1 or
  910.             (@heightdata[j-1,k] == 1 and
  911.             @heightdata[j-1,k-1] == -1)
  912.               # 左边也是洞
  913.               set_mapdata(j,k,0,11,2)
  914.             elsif @heightdata[j+1,k] == -1 or
  915.             (@heightdata[j+1,k] == 1 and
  916.             @heightdata[j+1,k-1] == -1)
  917.               # 右边也是洞
  918.               set_mapdata(j,k,2,11,2)
  919.             else
  920.               # 两边是地面
  921.               set_mapdata(j,k,1,11,2)
  922.             end
  923.           elsif @heightdata[j-1,k] == -1 or
  924.             (@heightdata[j-1,k] == 1 and
  925.             @heightdata[j-1,k-1] == -1)
  926.             # 左边是洞------------------
  927.             set_mapdata(j,k,0,12,1)
  928.           elsif @heightdata[j+1,k] == -1 or
  929.             (@heightdata[j+1,k] == 1 and
  930.             @heightdata[j+1,k-1] == -1)
  931.             # 右边是洞------------------
  932.             set_mapdata(j,k,2,12,1)
  933.           elsif @heightdata[j-1,k-1] == -1
  934.             # 左上面是洞------------------
  935.             set_mapdata(j,k,0,9,1)
  936.           elsif @heightdata[j-1,k+1] == -1
  937.             # 左下面是洞------------------
  938.             set_mapdata(j,k,0,10,1)
  939.           elsif @heightdata[j+1,k-1] == -1
  940.             # 右上面是洞------------------
  941.             set_mapdata(j,k,1,9,1)
  942.           elsif @heightdata[j+1,k+1] == -1
  943.             # 右下面是洞------------------
  944.             set_mapdata(j,k,1,10,1)
  945.           end
  946.         end
  947.         if @heightdata[j,k] == 1 and
  948.           @heightdata[j,k-1] != -1
  949.  
  950.           if @heightdata[j,k+1] == -1
  951.             # 下面是洞------------------
  952.             if @heightdata[j-1,k] == -1
  953.               # 左边也是洞
  954.               for i in [0,1,2]
  955.             #    set_mapdata(j,k+i,0,13+i,1)
  956.               end
  957.             elsif @heightdata[j+1,k] == -1
  958.               # 右边也是洞
  959.               for i in [0,1,2]
  960.             #    set_mapdata(j,k+i,2,13+i,1)
  961.               end
  962.             else
  963.               # 两边是地面
  964.               for i in [0,1,2]
  965.             #    set_mapdata(j,k+i,1,13+i,1)
  966.               end
  967.             end
  968.           elsif @heightdata[j,k-1] == -1
  969.             # 上面是洞------------------
  970.             if @heightdata[j-1,k] == -1
  971.               # 左边也是洞
  972.               set_mapdata(j,k,0,11,2)
  973.             elsif @heightdata[j+1,k] == -1
  974.               # 右边也是洞
  975.               set_mapdata(j,k,2,11,2)
  976.             else
  977.               # 两边是地面
  978.               set_mapdata(j,k,1,11,2)
  979.             end
  980.           elsif @heightdata[j-1,k] == -1
  981.             # 左边是洞------------------
  982.             set_mapdata(j,k,0,12,1)
  983.           elsif @heightdata[j+1,k] == -1
  984.             # 右边是洞------------------
  985.             set_mapdata(j,k,2,12,1)
  986.           elsif @heightdata[j-1,k-1] == -1
  987.             # 左上面是洞------------------
  988.             set_mapdata(j,k,0,9,1)
  989.           elsif @heightdata[j-1,k+1] == -1
  990.             # 左下面是洞------------------
  991.             set_mapdata(j,k,0,10,1)
  992.           elsif @heightdata[j+1,k-1] == -1
  993.             # 右上面是洞------------------
  994.             set_mapdata(j,k,1,9,1)
  995.           elsif @heightdata[j+1,k+1] == -1
  996.             # 右下面是洞------------------
  997.             set_mapdata(j,k,1,10,1)
  998.           end
  999.         end
  1000.       end
  1001.     end
  1002.     # 生成地面 之三 >> 生成墙壁
  1003.     time = 0
  1004.     for k in [email protected]
  1005.       for j in [email protected]
  1006.         time += 1
  1007.         # 定期画面更新
  1008.         if time%500 == 0
  1009.           Graphics.update
  1010.         end
  1011.         if @heightdata[j,k] == 1
  1012.           if @heightdata[j,k+1] == 0 or
  1013.             @heightdata[j,k+1] == -1
  1014.             # 下面是洞------------------
  1015.             if @heightdata[j-1,k] == 0 or
  1016.               @heightdata[j-1,k] == -1
  1017.               # 左边也是洞
  1018.               set_mapdata(j,k+0,0,5+0,5)
  1019.               set_mapdata(j,k+1,0,5+1,5)
  1020.               set_mapdata(j,k+2,0,5+2,4)
  1021.               if @heightdata[j,k+3] != 0 and
  1022.                 @heightdata[j,k+2] != 1 and
  1023.                 (@heightdata[j,k+2] != 0 or @heightdata[j-1,k+2] != 0)
  1024.                 set_mapdata(j,k+2,0,16,5)
  1025.                 for i in [0,1]
  1026.                   set_mapdata(j,k+3+i,0,14+i,1)
  1027.                   if @heightdata[j,k+3+i] != -1
  1028.                     break
  1029.                   end
  1030.                 end
  1031.               end
  1032.             elsif @heightdata[j+1,k] == 0 or
  1033.               @heightdata[j+1,k] == -1
  1034.               # 右边也是洞
  1035.               set_mapdata(j,k+0,2,5+0,5)
  1036.               set_mapdata(j,k+1,2,5+1,5)
  1037.               set_mapdata(j,k+2,2,5+2,4)
  1038.               if @heightdata[j,k+3] != 0 and
  1039.                 @heightdata[j,k+2] != 1 and
  1040.                 (@heightdata[j,k+2] != 0 or @heightdata[j+1,k+2] != 0)
  1041.                 set_mapdata(j,k+2,2,16,5)
  1042.                 for i in [0,1]
  1043.                   set_mapdata(j,k+3+i,2,14+i,1)
  1044.                   if @heightdata[j,k+3+i] != -1
  1045.                     break
  1046.                   end
  1047.                 end
  1048.               end
  1049.             else
  1050.               # 两边是地面
  1051.               set_mapdata(j,k+0,1,5+0,5)
  1052.               set_mapdata(j,k+1,1,5+1,5)
  1053.               set_mapdata(j,k+2,1,5+2,4)
  1054.               if @heightdata[j,k+3] != 0 and
  1055.                  @heightdata[j,k+2] != 1
  1056.                 set_mapdata(j,k+2,1,16,5)
  1057.                 for i in [0,1]
  1058.                   set_mapdata(j,k+3+i,1,14+i,1)
  1059.                   if @heightdata[j,k+3+i] != -1
  1060.                     break
  1061.                   end
  1062.                 end
  1063.               end
  1064.             end
  1065.           elsif @heightdata[j,k-1] == 0 or
  1066.               @heightdata[j,k-1] == -1
  1067.             # 上面是洞------------------
  1068.             if @heightdata[j-1,k] == 0 or
  1069.               @heightdata[j-1,k] == -1
  1070.               # 左边也是洞
  1071.               set_mapdata(j,k,0,3,4)
  1072.             elsif @heightdata[j+1,k] == 0 or
  1073.               @heightdata[j+1,k] == -1
  1074.               # 右边也是洞
  1075.               set_mapdata(j,k,2,3,4)
  1076.             else
  1077.               # 两边是地面
  1078.               set_mapdata(j,k,1,3,4)
  1079.             end
  1080.           elsif @heightdata[j-1,k] == 0 or
  1081.               @heightdata[j-1,k] == -1
  1082.             # 左边是洞------------------
  1083.             set_mapdata(j,k,0,4,4)
  1084.           elsif @heightdata[j+1,k] == 0 or
  1085.               @heightdata[j+1,k] == -1
  1086.             # 右边是洞------------------
  1087.             set_mapdata(j,k,2,4,4)
  1088.           elsif @heightdata[j-1,k-1] == 0 or
  1089.               @heightdata[j-1,k-1] == -1
  1090.             # 左上面是洞------------------
  1091.             set_mapdata(j,k,0,1,4)
  1092.           elsif @heightdata[j-1,k+1] == 0 or
  1093.               @heightdata[j-1,k+1] == -1
  1094.             # 左下面是洞------------------
  1095.             set_mapdata(j,k,0,2,4)
  1096.           elsif @heightdata[j+1,k-1] == 0 or
  1097.               @heightdata[j+1,k-1] == -1
  1098.             # 右上面是洞------------------
  1099.             set_mapdata(j,k,1,1,4)
  1100.           elsif @heightdata[j+1,k+1] == 0 or
  1101.               @heightdata[j+1,k+1] == -1
  1102.             # 右下面是洞------------------
  1103.             set_mapdata(j,k,1,2,4)
  1104.           end
  1105.         end
  1106.       end
  1107.     end
  1108.  
  1109.     # 调整玩家位置
  1110.     playerpos_reset($game_temp.player_new_x,$game_temp.player_new_y)
  1111.     @oneventdata[$game_temp.player_new_x,$game_temp.player_new_y] = 1
  1112.  
  1113.     time = 0
  1114.     for i in @map.events.keys.sort
  1115.       time += 1
  1116.       if time%100 == 0
  1117.         Graphics.update
  1118.       end
  1119.       # 事件设置类型>>完全固定(最优先)
  1120.       case event_settype(i)
  1121.       when 3
  1122.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1123.       end
  1124.     end
  1125.     for i in @map.events.keys.sort
  1126.       time += 1
  1127.       if time%100 == 0
  1128.         Graphics.update
  1129.       end
  1130.       # 事件设置类型>>中继点
  1131.       case event_settype(i)
  1132.       when 1
  1133.         set_defeventpos(i,@map.events[i].x,@map.events[i].y)
  1134.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1135.       end
  1136.     end
  1137.     # 调整事件位置
  1138.     for i in @map.events.keys.sort
  1139.       time += 1
  1140.       if time%100 == 0
  1141.         Graphics.update
  1142.       end
  1143.       j = event_settype(i)
  1144.       case j
  1145.       when 0  # 随机
  1146.         set_defeventpos(i,rand(@map.width-4)+2,rand(@map.width-4)+2)
  1147.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1148.       when 2  # 固定
  1149.         set_defeventpos(i,@map.events[i].x,@map.events[i].y)
  1150.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1151.       when 100..199  # 壁设置
  1152.         set_defeventpos_wall(i,rand(@map.width-4)+2,rand(@map.width-4)+2,j-100)
  1153.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1154.         @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1
  1155.         for k in 1..(j-100)
  1156.           @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1
  1157.           @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1
  1158.           @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1
  1159.           @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1
  1160.         end
  1161.       when 200..299  # 壁设置固定
  1162.         set_defeventpos_wall(i,@map.events[i].x,@map.events[i].y,j-200)
  1163.         @oneventdata[@map.events[i].x,@map.events[i].y] = 1
  1164.         @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1
  1165.         for k in 1..(j-200)
  1166.           @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1
  1167.           @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1
  1168.           @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1
  1169.           @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1
  1170.         end
  1171.       end
  1172.     end
  1173.  
  1174.     # 放置障碍
  1175.     for i in 0...(rand(objcnt)+objcnt/2)
  1176.       time += 1
  1177.       if time%500 == 0
  1178.         Graphics.update
  1179.       end
  1180.       j = rand(@map.width)
  1181.       k = rand(@map.width)
  1182.       case rand(10)
  1183.       when 0..4
  1184.         if standable_newtile?(1,0)
  1185.           if standable?(j,k)
  1186.             set_mapdata(j,k,1,0,6)
  1187.           end
  1188.         else
  1189.           if standable2?(j,k)
  1190.             set_mapdata(j,k,1,0,6)
  1191.           end
  1192.         end
  1193.       when 5..7
  1194.         if standable_newtile?(2,0)
  1195.           if standable?(j,k)
  1196.             set_mapdata(j,k,2,0,6)
  1197.           end
  1198.         else
  1199.           if standable2?(j,k)
  1200.             set_mapdata(j,k,2,0,6)
  1201.           end
  1202.         end
  1203.       when 8..9
  1204.         if standable2?(j,k)
  1205.           if @map.data[j,k-1,2]==0 and
  1206.             (@map.data[j,k,1]==0 or @map.data[j,k,2]==0)
  1207.             set_mapdata(j,k,2,2,4)    # 4>6?
  1208.             set_mapdata(j,k-1,2,1,4)  # 4>2?
  1209.           end
  1210.         end
  1211.       end
  1212.     end
  1213.  
  1214.  
  1215.     # 释放变量的内容
  1216.     @heightdata.resize(0,0)
  1217.     @maskdata.resize(0,0)
  1218.     @oneventdata.resize(0,0)
  1219.     @masksetting.clear
  1220.     @makedata.clear
  1221.     @tilesetting.resize(0,0,0)
  1222.  
  1223.     if AUTO_MAP_SAVE
  1224.       # 保存机能
  1225.       save_data(@map,sprintf("Data/Map%03d.rxdata", 999))
  1226.       maplist  = load_data("Data/MapInfos.rxdata")
  1227.  
  1228.       mapinfo = RPG::MapInfo.new
  1229.       mapinfo.name = sprintf("随机自动保存(%s)", maplist[@map_id].name)
  1230.       mapinfo.parent_id = 0
  1231.       mapinfo.order = 999
  1232.       mapinfo.expanded = true
  1233.       mapinfo.scroll_x = 0
  1234.       mapinfo.scroll_y = 0
  1235.  
  1236.       maplist[999]=mapinfo
  1237.       save_data(maplist,"Data/MapInfos.rxdata")
  1238.     end
  1239.   end
  1240.   #--------------------------------------------------------------------------
  1241.   # ● 获得事件的位置类型
  1242.   #--------------------------------------------------------------------------
  1243.   def event_settype(i)
  1244.     if @map.events[i].subname == "中继点"
  1245.       return 1
  1246.     end
  1247.     if @map.events[i].subname == "固定"
  1248.       return 2
  1249.     end
  1250.     if @map.events[i].subname == "完全固定"
  1251.       return 3
  1252.     end
  1253.     for j in 0..1000
  1254.       if @map.events[i].pages[0].list[j].code != 108
  1255.         break
  1256.       end
  1257.       # 注释中有中继点
  1258.       if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "中继点"
  1259.         return 1
  1260.       end
  1261.       # 注释中有完全固定
  1262.       if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "完全固定"
  1263.         return 3
  1264.       end
  1265.       # 注释中有固定
  1266.       if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "固定"
  1267.         return 2
  1268.       end
  1269.       # 注释中有壁设置
  1270.       if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "壁设置"
  1271.         if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil
  1272.           return 100
  1273.         else
  1274.           k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1]
  1275.           k = k.to_i
  1276.           return 100+k
  1277.         end
  1278.       end
  1279.       # 注释中有壁设置固定
  1280.       if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "壁设置固定"
  1281.         if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil
  1282.           return 200
  1283.         else
  1284.           k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1]
  1285.           k = k.to_i
  1286.           return 200+k
  1287.         end
  1288.       end
  1289.     end
  1290.     return 0
  1291.   end
  1292.   #--------------------------------------------------------------------------
  1293.   # ● 指定位置附近设置事件
  1294.   #--------------------------------------------------------------------------
  1295.   def set_defeventpos(id,x,y)
  1296.     if standable2?(x,y)
  1297.       @map.events[id].x=x
  1298.       @map.events[id].y=y
  1299.       return
  1300.     end
  1301.     for i in 1..([@map.width,@map.height].max)
  1302.       if standable2?(x,y+i)
  1303.         @map.events[id].x=x
  1304.         @map.events[id].y=y+i
  1305.         return
  1306.       end
  1307.       for j in 1..i
  1308.         if standable2?(x-j,y+i)
  1309.           @map.events[id].x=x-j
  1310.           @map.events[id].y=y+i
  1311.           return
  1312.         end
  1313.         if standable2?(x+j,y+i)
  1314.           @map.events[id].x=x+j
  1315.           @map.events[id].y=y+i
  1316.           return
  1317.         end
  1318.         if standable2?(x-j,y-i)
  1319.           @map.events[id].x=x-j
  1320.           @map.events[id].y=y-i
  1321.           return
  1322.         end
  1323.         if standable2?(x+j,y-i)
  1324.           @map.events[id].x=x+j
  1325.           @map.events[id].y=y-i
  1326.           return
  1327.         end
  1328.       end
  1329.     end
  1330.   end
  1331.   #--------------------------------------------------------------------------
  1332.   # ● 指定位置附近的墙壁上设置事件
  1333.   #     p4  幅度
  1334.   #--------------------------------------------------------------------------
  1335.   def set_defeventpos_wall(id,x,y,p4)
  1336.     if standable3?(x,y,p4)
  1337.       @map.events[id].x=x
  1338.       @map.events[id].y=y
  1339.       return
  1340.     end
  1341.     for i in 1..([@map.width,@map.height].max)
  1342.       if standable3?(x,y+i,p4)
  1343.         @map.events[id].x=x
  1344.         @map.events[id].y=y+i
  1345.         return
  1346.       end
  1347.       for j in 1..i
  1348.         if standable3?(x-j,y+i,p4)
  1349.           @map.events[id].x=x-j
  1350.           @map.events[id].y=y+i
  1351.           return
  1352.         end
  1353.         if standable3?(x+j,y+i,p4)
  1354.           @map.events[id].x=x+j
  1355.           @map.events[id].y=y+i
  1356.           return
  1357.         end
  1358.         if standable3?(x-j,y-i,p4)
  1359.           @map.events[id].x=x-j
  1360.           @map.events[id].y=y-i
  1361.           return
  1362.         end
  1363.         if standable3?(x+j,y-i,p4)
  1364.           @map.events[id].x=x+j
  1365.           @map.events[id].y=y-i
  1366.           return
  1367.         end
  1368.       end
  1369.     end
  1370.   end
  1371.   #--------------------------------------------------------------------------
  1372.   # ● 指定位置附近设置玩家
  1373.   #--------------------------------------------------------------------------
  1374.   def playerpos_reset(x,y)
  1375.     if standable?(x,y)
  1376.       $game_temp.player_new_x=x
  1377.       $game_temp.player_new_y=y
  1378.       return
  1379.     end
  1380.     for i in 1..([@map.width,@map.height].max)
  1381.       if standable?(x,y+i)
  1382.         $game_temp.player_new_x=x
  1383.         $game_temp.player_new_y=y+i
  1384.         return
  1385.       end
  1386.       for j in 0..i
  1387.         if standable?(x-j,y+i)
  1388.           $game_temp.player_new_x=x-j
  1389.           $game_temp.player_new_y=y+i
  1390.           return
  1391.         end
  1392.         if standable?(x+j,y+i)
  1393.           $game_temp.player_new_x=x+j
  1394.           $game_temp.player_new_y=y+i
  1395.           return
  1396.         end
  1397.         if standable?(x-j,y-i)
  1398.           $game_temp.player_new_x=x-j
  1399.           $game_temp.player_new_y=y-i
  1400.           return
  1401.         end
  1402.         if standable?(x+j,y-i)
  1403.           $game_temp.player_new_x=x+j
  1404.           $game_temp.player_new_y=y-i
  1405.           return
  1406.         end
  1407.       end
  1408.     end
  1409.   end
  1410.   #--------------------------------------------------------------------------
  1411.   # ● 自己能通过吗?(障碍物元件)
  1412.   #     p1,p2 位置X,Y
  1413.   #--------------------------------------------------------------------------
  1414.   def standable_newtile?(p1,p2)
  1415.     for i in [2, 1, 0]
  1416.       tile_id = @tilesetting[p1, p2, i]
  1417.       if tile_id == nil
  1418.         return false
  1419.       elsif @passages[tile_id] & 0x0f == 0x0f
  1420.         return false
  1421.       elsif @priorities[tile_id] == 0
  1422.         return true
  1423.       end
  1424.     end
  1425.     return true
  1426.   end
  1427.   #--------------------------------------------------------------------------
  1428.   # ● 在指定位置站立吗?
  1429.   #     p1,p2 位置X,Y
  1430.   #--------------------------------------------------------------------------
  1431.   def standable?(p1,p2)
  1432.     if @heightdata[p1,p2] != 0
  1433.       return false
  1434.     end
  1435.     if @oneventdata[p1,p2] ==1
  1436.       return false
  1437.     end
  1438.     for i in [2, 1, 0]
  1439.       tile_id = @map.data[p1, p2, i]
  1440.       if tile_id == nil
  1441.         return false
  1442.       elsif @passages[tile_id] & 0x0f == 0x0f
  1443.         return false
  1444.       elsif @priorities[tile_id] == 0
  1445.         return true
  1446.       end
  1447.     end
  1448.     return true
  1449.   end
  1450.   #--------------------------------------------------------------------------
  1451.   # ● 放置在指定位置没问题吗?(考虑周围的事件)
  1452.   #     p1,p2 位置X,Y
  1453.   #--------------------------------------------------------------------------
  1454.   def standable2?(p1,p2)
  1455.     # 站立位置判断
  1456.     unless standable?(p1,p2)
  1457.       return false
  1458.     end
  1459.     # 周围事件检查(能否前往尽头?)
  1460.     # 去掉能到纵吗
  1461.     if standable?(p1+1,p2-1) == false or
  1462.       standable?(p1+1,p2) == false or
  1463.       standable?(p1+1,p2+1) == false
  1464.       if standable?(p1-1,p2-1) == false or
  1465.         standable?(p1-1,p2) == false or
  1466.         standable?(p1-1,p2+1) == false
  1467.         # 去掉根本不能到纵的时候忽视
  1468.         if standable?(p1,p2-1) == true and
  1469.           standable?(p1,p2+1) == true
  1470.           return false
  1471.         end
  1472.       end
  1473.     end
  1474.     # 去掉能到横吗
  1475.     if standable?(p1+1,p2+1) == false or
  1476.       standable?(p1,p2+1) == false or
  1477.       standable?(p1-1,p2+1) == false
  1478.       if standable?(p1+1,p2-1) == false or
  1479.         standable?(p1,p2-1) == false or
  1480.         standable?(p1-1,p2-1) == false
  1481.         # 去掉根本不能到横的时候忽视
  1482.         if standable?(p1-1,p2) == true and
  1483.           standable?(p1+1,p2) == true
  1484.           return false
  1485.         end
  1486.       end
  1487.     end
  1488.     if standable?(p1,p2-1) == false and
  1489.       (standable?(p1-1,p2+1) == false or
  1490.       standable?(p1,p2+1) == false or
  1491.       standable?(p1+1,p2+1) == false)
  1492.       return false
  1493.     end
  1494.     if standable?(p1,p2+1) == false and
  1495.       (standable?(p1-1,p2-1) == false or
  1496.       standable?(p1+1,p2-1) == false or
  1497.       standable?(p1+1,p2-1) == false)
  1498.       return false
  1499.     end
  1500.     if standable?(p1-1,p2) == false and
  1501.       (standable?(p1+1,p2-1) == false or
  1502.       standable?(p1+1,p2) == false or
  1503.       standable?(p1+1,p2+1) == false)
  1504.       return false
  1505.     end
  1506.     if standable?(p1+1,p2) == false and
  1507.       (standable?(p1-1,p2-1) == false or
  1508.       standable?(p1-1,p2) == false or
  1509.       standable?(p1-1,p2+1) == false)
  1510.       return false
  1511.     end
  1512.  
  1513.     return true
  1514.   end
  1515.   #--------------------------------------------------------------------------
  1516.   # ● 放置在指定位置没问题吗?(墙壁版)
  1517.   #     p1,p2 位置X,Y
  1518.   #     p3   幅度
  1519.   #--------------------------------------------------------------------------
  1520.   def standable3?(p1,p2,p3)
  1521.     # 站立位置判断
  1522.     unless standable?(p1,p2+1)
  1523.       return false
  1524.     end
  1525.     # 位置判断
  1526.     if @oneventdata[p1,p2] == 1 or
  1527.       @oneventdata[p1,p2-1] == 1 or
  1528.       @heightdata[p1,p2-2] != 1 or
  1529.       @heightdata[p1,p2-1] == 1 or
  1530.       @heightdata[p1,p2+1] != 0
  1531.       return false
  1532.     end
  1533.     for i in 1...p3+1
  1534.       if@heightdata[p1+i,p2-2] != 1 or
  1535.         @heightdata[p1+i,p2-1] == 1 or
  1536.         @heightdata[p1+i,p2+1] != 0
  1537.         return false
  1538.       end
  1539.       if@heightdata[p1-i,p2-2] != 1 or
  1540.         @heightdata[p1-i,p2-1] == 1 or
  1541.         @heightdata[p1-i,p2+1] != 0
  1542.         return false
  1543.       end
  1544.     end
  1545.     for i in 1...p3+1
  1546.       if @oneventdata[p1+i,p2] == 1 or
  1547.         @oneventdata[p1+i,p2-1] == 1
  1548.         return false
  1549.       end
  1550.       if @oneventdata[p1-i,p2] == 1 or
  1551.         @oneventdata[p1-i,p2-1] == 1
  1552.         return false
  1553.       end
  1554.     end
  1555.     return true
  1556.   end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 地图元件信息变化
  1559.   #     p1,p2 起首处位置X,Y
  1560.   #     p3,p4 原参照位置X,Y
  1561.   #     p5  插入方法 0:通常 1:下一层 2:上一层 3:从下面 4:从上面 5:两边
  1562.   #--------------------------------------------------------------------------
  1563.   def set_mapdata(p1,p2,p3,p4,p5 = 0)
  1564.     unless self.valid?(p1, p2)
  1565.       return
  1566.     end
  1567.     if @tilesetting[p3,p4,0] != 0 # 0层普通放置
  1568.       @map.data[p1,p2,0] = @tilesetting[p3,p4,0]
  1569.     end
  1570.     case p5
  1571.     when 0 # 通常
  1572.       if @tilesetting[p3,p4,1] != 0
  1573.         @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1574.       end
  1575.       if @tilesetting[p3,p4,2] != 0
  1576.         @map.data[p1,p2,2] = @tilesetting[p3,p4,2]
  1577.       end
  1578.     when 1 # 放在下面
  1579.       if @tilesetting[p3,p4,1] != 0
  1580.         @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1581.       end
  1582.     when 2 # 放在上面
  1583.       if @tilesetting[p3,p4,1] != 0
  1584.         @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
  1585.       end
  1586.     when 3 # 从下面放置
  1587.       if @tilesetting[p3,p4,1] != 0
  1588.         if @map.data[p1,p2,1] != 0
  1589.           @map.data[p1,p2,2] = @map.data[p1,p2,1]
  1590.         end
  1591.         @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1592.       end
  1593.     when 4 # 从上面放置
  1594.       if @tilesetting[p3,p4,1] != 0
  1595.         if @map.data[p1,p2,2] != 0
  1596.           @map.data[p1,p2,1] = @map.data[p1,p2,2]
  1597.         end
  1598.         @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
  1599.       end
  1600.     when 5 # 从两边放置
  1601.       if @tilesetting[p3,p4,1] != 0
  1602.         @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1603.       end
  1604.       if @tilesetting[p3,p4,1] != 0
  1605.         @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
  1606.       end
  1607.     when 6 # 能放置就放置
  1608.       if @map.data[p1,p2,1] == 0
  1609.         @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1610.       elsif @map.data[p1,p2,2] == 0
  1611.         @map.data[p1,p2,2] = @tilesetting[p3,p4,1]
  1612.       end
  1613.     end
  1614.   end
  1615.   #--------------------------------------------------------------------------
  1616.   # ● 地图元件信息变化2 >>没有范围外判断等
  1617.   #     p1,p2 起首处位置X,Y
  1618.   #     p3,p4 原参照位置X,Y
  1619.   #--------------------------------------------------------------------------
  1620.   def set_mapdata2(p1,p2,p3,p4)
  1621.     @map.data[p1,p2,0] = @tilesetting[p3,p4,0]
  1622.     @map.data[p1,p2,1] = @tilesetting[p3,p4,1]
  1623.     @map.data[p1,p2,2] = @tilesetting[p3,p4,2]
  1624.   end
  1625.   #--------------------------------------------------------------------------
  1626.   # ● 指定位置信息变化
  1627.   #     p1,p2 位置X,Y
  1628.   #     p3    值
  1629.   #--------------------------------------------------------------------------
  1630.   def set_height(p1,p2,p3)
  1631.     return if p1<0
  1632.     return if p1>[email protected]
  1633.     return if p2<0
  1634.     return if p2>[email protected]
  1635.     @heightdata[p1,p2]=p3
  1636.   end
  1637.   #--------------------------------------------------------------------------
  1638.   # ● 指定位置信息变化
  1639.   #     p1,p2 位置X,Y
  1640.   #     p3    值
  1641.   #--------------------------------------------------------------------------
  1642.   def set_grounddata(p1,p2,p3)
  1643.     return if p1<0
  1644.     return if p1>[email protected]
  1645.     return if p2<0
  1646.     return if p2>[email protected]
  1647.     if @masksetting[@maskdata[p1,p2]] == true
  1648.       if @targettype==0
  1649.         if @chgtype==0
  1650.           @heightdata[p1,p2]=p3
  1651.         elsif @chgtype==1
  1652.           @heightdata[p1,p2]+=p3
  1653.         end
  1654.       elsif @targettype==1
  1655.         if @chgtype==0
  1656.           @maskdata[p1,p2]=p3
  1657.         elsif @chgtype==1
  1658.           @maskdata[p1,p2]+=p3
  1659.         end
  1660.       end
  1661.     end
  1662.   end
  1663.  
  1664.   #--------------------------------------------------------------------------
  1665.   # ● 指定计算方法
  1666.   #     p1 对象 >> =0:高度 =1:地形  (現在、高度0=地面 1=墙壁
  1667.   #     p2 方法 >> =0:代入 =1:加算      地形只是遮照判断使用
  1668.   #--------------------------------------------------------------------------
  1669.   def rndmap_chtarget(p1,p2)
  1670.     @targettype=p1
  1671.     @chgtype=p2
  1672.   end
  1673.   #--------------------------------------------------------------------------
  1674.   # ● 设定其他注释使用的值
  1675.   #     p1,p2 最小 X,Y
  1676.   #     p3,p4 最大 X,Y  设定制作道路的开始点,结束点等的时候使用
  1677.   #--------------------------------------------------------------------------
  1678.   def rndmap_setstat(p1,p2,p3,p4)
  1679.     @minx=p1
  1680.     @miny=p2
  1681.     @maxx=p3
  1682.     @maxy=p4
  1683.   end
  1684.   #--------------------------------------------------------------------------
  1685.   # ● 设定地形遮照
  1686.   #     p1 = 对象地形  (-1= 全部)
  1687.   #     p2 = 变更值    (0= 禁止改写  1= 可以改写  2= 只有那个地形可以)
  1688.   #--------------------------------------------------------------------------
  1689.   def rndmap_chmask(p1,p2)
  1690.     if p1>=0
  1691.       if p2==0
  1692.         @masksetting[p1]=false
  1693.       elsif p2 == 1
  1694.         @masksetting[p1]=true
  1695.       elsif p2 == 2
  1696.         for i in 0...100
  1697.           @masksetting[i]=false
  1698.         end
  1699.         @masksetting[p1]=true
  1700.       end
  1701.     end
  1702.     if p1==-1
  1703.       if p2==0
  1704.         for i in 0...100
  1705.           @masksetting[i]=false
  1706.         end
  1707.       else   
  1708.         for i in 0...100
  1709.           @masksetting[i]=true
  1710.         end
  1711.       end
  1712.     end
  1713.   end
  1714.   #--------------------------------------------------------------------------
  1715.   # ● 2点之间生成道路
  1716.   #     起点、终点在rndmap_setstat里设定
  1717.   #     p1 = 改写值
  1718.   #     p2 = 途中点数(减的话以地图大小40*40为基准相对变化)
  1719.   #     p3 = 确保边缘的宽度
  1720.   #     p4 = 途中点连接方法 (0=直线连接  1=直角线(?)连接)
  1721.   #     p5 = 无视中继点的距离
  1722.   #--------------------------------------------------------------------------
  1723.   def rndmap_mkroad(p1,p2,p3,p4,p5 = 5)
  1724.     p5 = 5 if p5 == nil
  1725.  
  1726.     localdata = Table.new(@map.width,@map.height)
  1727.     aposx = []
  1728.     aposy = []
  1729.     aflag = []
  1730.     for i in [email protected]
  1731.       for j in [email protected]
  1732.         localdata[i,j] = 0
  1733.       end
  1734.     end
  1735.  
  1736.     if p2<0
  1737.       p2=(p2*-1)*@map.width*@map.height/40/40
  1738.     end
  1739.     aposx[0]=@minx
  1740.     aposy[0]=@miny
  1741.     aposx[1]=@maxx
  1742.     aposy[1]=@maxy
  1743.  
  1744.     if aposx[0]<0
  1745.       aposx[0][email protected]+aposx[0]
  1746.     end
  1747.     if (aposx[0]>=1000) and (aposx[0]<=1100)
  1748.       aposx[0][email protected]*(aposx[0]-1000)/100
  1749.     end
  1750.  
  1751.     if aposy[0]<0
  1752.       aposy[0][email protected]+aposy[0]
  1753.     end
  1754.     if (aposy[0]>=1000) and (aposy[0]<=1100)
  1755.       aposy[0][email protected]*(aposy[0]-1000)/100
  1756.     end
  1757.  
  1758.  
  1759.     if aposx[1]<0
  1760.       aposx[1][email protected]+aposx[1]
  1761.     end
  1762.     if (aposx[1]>=1000) and (aposx[1]<=1100)
  1763.       aposx[1][email protected]*(aposx[1]-1000)/100
  1764.     end
  1765.  
  1766.  
  1767.     if aposy[1]<0
  1768.       aposy[1][email protected]+aposy[1]
  1769.     end
  1770.     if (aposy[1]>=1000) and (aposy[1]<=1100)
  1771.       aposy[1][email protected]*(aposy[1]-1000)/100
  1772.     end
  1773.  
  1774.     if p4==0 or p4==1 or p4==2
  1775.       if p4 == 2
  1776.         i4 = rand(2)
  1777.       end
  1778.       aflag[0] = true
  1779.       aflag[1] = false
  1780.       for i in 2...(p2+2)
  1781.         aposx[i] = rand(@map.width-p3*2) + p3
  1782.         aposy[i] = rand(@map.height-p3*2) + p3
  1783.         aflag[i] = false
  1784.       end
  1785.       i3=0
  1786.       i1=aposx[i3]
  1787.       i2=aposy[i3]
  1788.  
  1789.       localdata[i1,i2] = 1
  1790.  
  1791.       for i in 0...p2+2
  1792.         i7=5000000
  1793.         for j in 0...p2+2
  1794.           if aflag[j] == false
  1795.             i4 = aposx[j]-i1
  1796.             i4=i4*-1 if i4 < 0
  1797.             i5 = aposy[j]-i2
  1798.             i5=i5*-1 if i5 < 0
  1799.             if (i4**2+i5**2) <=(p5**2) and j != 1
  1800.               aflag[j] = true
  1801.             elsif i7 > (i4**2+i5**2)
  1802.               i7=(i4**2+i5**2)
  1803.               i6=j
  1804.             end
  1805.           end
  1806.         end
  1807.         #  起点ID:i3   终点ID:i6
  1808.         if p4==0
  1809.           if aposx[i3] > aposx[i6]
  1810.             i8 = aposx[i3]
  1811.             i9 = aposy[i3]
  1812.             i10 = aposx[i6]
  1813.             i11 = aposy[i6]
  1814.           else
  1815.             i8 = aposx[i6]
  1816.             i9 = aposy[i6]
  1817.             i10 = aposx[i3]
  1818.             i11 = aposy[i3]
  1819.           end
  1820.           if i8!=i10
  1821.             for i in 0..(i8-i10)
  1822.               localdata[i+i10,(i9-i11)*i/(i8-i10)+i11] = 1
  1823.             end
  1824.           end
  1825.           if aposy[i3] > aposy[i6]
  1826.             i8 = aposx[i3]
  1827.             i9 = aposy[i3]
  1828.             i10 = aposx[i6]
  1829.             i11 = aposy[i6]
  1830.           else
  1831.             i8 = aposx[i6]
  1832.             i9 = aposy[i6]
  1833.             i10 = aposx[i3]
  1834.             i11 = aposy[i3]
  1835.           end
  1836.           if i9!=i11
  1837.             for i in 0..(i9-i11)
  1838.               localdata[(i8-i10)*i/(i9-i11)+i10,i+i11] = 1
  1839.             end
  1840.           end
  1841.         end
  1842.         if p4==1
  1843.           i4 = rand(2)
  1844.           if i4==0
  1845.             for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max)
  1846.               localdata[i+[aposx[i3],aposx[i6]].min,aposy[i3]] = 1
  1847.             end
  1848.             for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max)
  1849.               localdata[aposx[i6],i+[aposy[i3],aposy[i6]].min] = 1
  1850.             end
  1851.           else
  1852.             for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max)
  1853.               localdata[i+[aposx[i3],aposx[i6]].min,aposy[i6]] = 1
  1854.             end
  1855.             for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max)
  1856.               localdata[aposx[i3],i+[aposy[i3],aposy[i6]].min] = 1
  1857.             end
  1858.           end
  1859.         end
  1860.         i3=i6
  1861.         i1=aposx[i3]
  1862.         i2=aposy[i3]
  1863.         aflag[i3]=true
  1864.         if i3==1
  1865.           break
  1866.         end
  1867.       end
  1868.     end
  1869.     for i in [email protected]
  1870.       for j in [email protected]
  1871.         if localdata[i,j] == 1
  1872.           set_grounddata(i,j,p1)
  1873.         end
  1874.       end
  1875.     end
  1876.   end
  1877.  
  1878.   #--------------------------------------------------------------------------
  1879.   # ● 对象扩张
  1880.   #     p1       对象
  1881.   #     p2,p3    扩张幅度X,Y
  1882.   #     p4       扩张方法 (0=十字  1=四角)
  1883.   #--------------------------------------------------------------------------
  1884.   def rndmap_plus(p1,p2,p3,p4)
  1885.     localdata = Table.new(@map.width,@map.height)
  1886.     for i in [email protected]
  1887.       for j in [email protected]
  1888.         if @targettype==0
  1889.           localdata[i,j] = @heightdata[i,j]
  1890.         elsif @targettype==1
  1891.           localdata[i,j] = @maskdata[i,j]
  1892.         end
  1893.       end
  1894.     end
  1895.     if p4 == 0
  1896.       for i in [email protected]
  1897.         for j in [email protected]
  1898.           if p1==localdata[i,j]
  1899.             for k in 1..p2
  1900.               set_grounddata(i+k,j,p1)
  1901.               set_grounddata(i-k,j,p1)
  1902.             end
  1903.             for k in 1..p3
  1904.               set_grounddata(i,j+k,p1)
  1905.               set_grounddata(i,j-k,p1)
  1906.             end
  1907.           end
  1908.         end
  1909.       end
  1910.     elsif p4 == 1
  1911.       for i in [email protected]
  1912.         for j in [email protected]
  1913.           if p1==localdata[i,j]
  1914.             for k in (i-p2)..(i+p2)
  1915.               for l in (j-p3)..(j+p3)
  1916.                 set_grounddata(k,l,p1)
  1917.               end
  1918.             end
  1919.           end
  1920.         end
  1921.       end
  1922.     end
  1923.   end
  1924.   #--------------------------------------------------------------------------
  1925.   # ● 全部设定
  1926.   #     p1       值
  1927.   #--------------------------------------------------------------------------
  1928.   def rndmap_allchg(p1)
  1929.     for i in [email protected]
  1930.       for j in [email protected]
  1931.         set_grounddata(i,j,p1)
  1932.       end
  1933.     end
  1934.   end
  1935.   #--------------------------------------------------------------------------
  1936.   # ● 指定点
  1937.   #     p1       值
  1938.   #     p2,p3    位置X,Y
  1939.   #--------------------------------------------------------------------------
  1940.   def rndmap_putpos(p1,p2,p3)
  1941.     i = rand(@maxx-@minx+1)+@minx
  1942.     j = rand(@maxy-@miny+1)+@miny
  1943.     for k in (p2-i)..(p2+i)
  1944.       for l in (p3-j)..(p3+j)
  1945.         set_grounddata(k,l,p1)
  1946.       end
  1947.     end
  1948.   end
  1949.   #--------------------------------------------------------------------------
  1950.   # ● 周围
  1951.   #     p1       值
  1952.   #--------------------------------------------------------------------------
  1953.   def rndmap_edge(p1)
  1954.     for i in [email protected]
  1955.       set_grounddata(i,0,p1)
  1956.       set_grounddata(i,@map.height-1,p1)
  1957.     end
  1958.     for i in [email protected]
  1959.       set_grounddata(0,i,p1)
  1960.       set_grounddata(@map.width-1,i,p1)
  1961.     end
  1962.   end
  1963. end
  1964.  
  1965.  
  1966. #==============================================================================
  1967. # □ RPG::MapInfo >>用subname取得 “,”后面的文字
  1968. #==============================================================================
  1969. module RPG
  1970.   class MapInfo
  1971.     def name
  1972.       name = @name.split(/,/)[0]
  1973.       return name != nil ? name : ''
  1974.     end
  1975.     def name=(str)
  1976.       str2 = @name[/^[^,]*(,.*)/, 1]
  1977.       @name = str2 != nil ? str + str2 : str
  1978.     end
  1979.     def subname(i = 1)
  1980.       name = @name.split(/,/)[i]
  1981.       return name != nil ? name : ""
  1982.     end
  1983.   end
  1984. end
  1985.  
  1986. #==============================================================================
  1987. # □ RPG::Event >>用subname取得 “,”后面的文字
  1988. #==============================================================================
  1989. module RPG
  1990.   class Event
  1991.     def name
  1992.       name = @name.split(/,/)[0]
  1993.       return name != nil ? name : ''
  1994.     end
  1995.     def name=(str)
  1996.       str2 = @name[/^[^,]*(,.*)/, 1]
  1997.       @name = str2 != nil ? str + str2 : str
  1998.     end
  1999.     def subname(i = 1)
  2000.       name = @name.split(/,/)[i]
  2001.       return name != nil ? name : ""
  2002.     end
  2003.   end
  2004. end

’’

点评

= =但有这种脚本,可以尝试搜索。  发表于 2012-3-26 22:15
无  发表于 2012-3-26 22:15
第一个游戏《神马传说》完成度:
策划:★★★★★★★★★★ 100%
素材:★★★★★★★★★★ 100%
脚本:★★★★★★★★★★ 100%
数据库:★★★★★★★★★★ 100%
剧情:★★★★★★★★★★ 100%
BUG修复:★★★★★★★★★★ 100%

Lv3.寻梦者

永久的旅行者

梦石
1
星屑
110
在线时间
404 小时
注册时间
2006-12-13
帖子
3091

开拓者贵宾第3届短篇游戏大赛主流游戏组季军第5届短篇游戏比赛季军

2
发表于 2012-3-27 12:29:32 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 02:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表