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

Project1

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

[已经过期] 求大神告知,这个随机地图脚本,怎么添加图块

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2016-2-21 15:19:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
这个是像这样设置了图块后,就会自动画地图了。
能教我怎么添加新的图块进去吗。我觉得装饰的花草太少了
也试过用行走图来装饰,不过行走图多了就降FPS
应该是@makedata.push([4,0,1,1,1])这里设置的才对。
不过完全看不懂这些数字什么意思

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

本版积分规则

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

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

GMT+8, 2024-9-22 15:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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