Project1

标题: [RMMV插件] krz_map_create 随机地图生成插件 [打印本页]

作者: KRZOKUHD    时间: 2019-1-4 23:02
标题: [RMMV插件] krz_map_create 随机地图生成插件
本帖最后由 KRZOKUHD 于 2022-9-13 07:46 编辑

[attach]353620[/attach]
突然想到这个老插件没更新

具体说明:
* 嘛,这个开玩笑一般的随机地图设置,滑稽
* 这个采用了最简单的等图块长宽拼接,附带了权重设定,事件复制,图块强制等功能
* 指令:krz.setupcreatemap();初始化读取模板信息。因为读取需要一小段时间所以需要手动读取一次
*       krz.startcreatemap(x,y,mapId);   分别为创建的目标地图的 x,y,mapId
*       krz.restrictmap(x,y,mapId);      强制设定某一坐标的模板,分别为x,y,模板id
*       (此处的x,y为模板坐标,比如四个模板组合的 1,0 的模板坐标,0,0坐标为1号模板
*                                                 2,3
*
*       krz.loadcreatemap(mapId);         如果目标地图没有预加载,在setupcreatemap
*                                         之前使用并且加一点任意啥的等待,比如对话。
*
*    这里的是指的地图编号,不是模板编号   各个方向的连通通道相当于小键盘:7     8   
*       krz.mazecreate = function(x, y, x_start, y_start, x_end, y_end, road1,road2
*     9    4     5     6     1    2     3      垂直   水平   上单    右单    下单  
* ,road3,road4,road5,road6,road7,road8,road9,road10,road11, road100, road20, road30
* , road40, start_room, end_room, rate)
*   左单      开始房间   结束房间 随机(在设置迷宫时有几率转化为随机房间,建议0)
*       krz.mazecreate2用法同上,会生成更复杂的迷宫。
*
*  
*krz.mazecreate(x, y, x_start, y_start, x_end, y_end, road1,road2,road3,road4,road5,road6,road7,road8,road9,road10,road11, road100, road20, road30, road40, start_room, end_room, rate)
*
  road1 road2 road3          ┌ ┬ ┐
  road4 road5 road6 ==>  ├ ┼ ┤
  road7 road8 road9          └ ┴ ┘

road10:|   road11:——

         road100
road40    ┼       road20
         road30

记得,在生成之前,一定要krz.setupcreatemap();krz.loadcreatemap(X);(X为生成目标地图)
krz.mazecreate结束后开始 krz.startcreatemap
*
*
* 注意:一般只用于一个工程一类模板(比如模板全是20*20的,图块全是2),如果有多个不同种
*  比如一种模板是20*20 另一种是10*10 则不能同时用于随机地图生成(他们无法拼接在一块,
*   就是最后的rate必须是0并且krz.mazecreate时他的x y 算上模板大小一定要>=生成地图大小。
*   比如krz.mazecreate(9, 9,.....)模板是10*10的,krz.startcreatemap则必须<=100
*
*   对了krz.mazecreate(x,y ... ... 是从0开始,所以比如(4,4,0,0,4,4... ...
*   生成5*5(模板),初始地点左上角,终点右下角。
*
*
*
* 新增功能:如果 , road1,使用,'2|3|4',则在使用时根据权重随机使用其中一个模板
* 目前对所有的迷宫创造都有效。
*
* 关于权重:在地图备注里写下一个数字即可,如果是0则不会出现在随机模板里但可以强制图块
* 来使它出现。
* 由于这个是简易的随机地图,所以暂不支持不同规格的模板设置,所以所有模板设为一个长宽
*
* 现在可以设置创造的目标地图的背景音乐战斗背景等,就直接在那个地图设置就行了
*
* 在目标地图,$gameSelfSwitches.clearmap();即可清除所有事件的独立开关已达到事件
* 重置。
*
*正常情况下,除了起点和终点,其他的房间均不会出现有路通道另一个房间的墙壁上,
*只要保证'1|2|3'这些替换模板均为一个方向,并且后面的rate=0.0。由于范例用的是四方向
*可通行模板所以会出现进入墙壁的情况。
*由于起点终点需要设置上下楼梯(例如),所以插件内指定为四方向可通行,如果需要解决或者
*修改起点终点的通行问题(比如从四方向改成二方向通行),在764~768行附近修改
*(krz.mg[y_start][x_start][1]=1与krz.mg[y_end][x_end][1]=1,修改1为0则不可通行,1234为各个方向)。
*推荐配合yep的区域限制进入来制作墙壁,也可以不做墙壁用这个作为隐形墙壁来使用,
*也能每个模板均为四方向可通行地形加指定通道被某物阻挡来完成。(需要自己来设置)
*
*
*范例:
*krz.PreloadedMaps[218] = null; ///218号为迷宫地图id
*krz.mazecreate3(Math.min(4+$gameVariables._data[70],15),Math.min(4+$gameVariables._data[70],15),0,0,4+$gameVariables._data[70],4+$gameVariables._data[70],148,147,146 ,208,150,149,211,210,209, 212,213,217,215,216,214,148,219,242,0.0,0.35);
*  ///根据变量70来设计迷宫大小
*krz.restrictmap(0,0,148);///强制初始点为148号模板
*krz.loadMapData(218);///加载218号迷宫地图防止报错
*  事件等待60帧,防止加载还没结束
*krz.startcreatemap(50+10*$gameVariables._data[70],50+10*$gameVariables._data[70],218)///生成迷宫并储存在data文件夹下
*
* =============================================================================
* ============================================================================
* Changelog
* ============================================================================
*
Version 0.30:
- 修改部分说明。


Version 0.295:
- 为循环加入了safe防止死循环。

Version 0.29:
- 起点终点附近房间自动打开。

Version 0.28:
- 增加了房间式的迷宫。

Version 0.25:
- 修复多个不同规格模板时出现的bug。

Version 0.235:
- 现在可以按照目标图块的图块设定来设置图块,并且优化了说明。

Version 0.23:
- 修复endroom的小bug。

Version 0.22:
- 新增一个清除地图事件独立开关功能。

Version 0.20:
- 可以指定模板ID

Version 0.18:
- 现在可以对同一类型路面随机模板了(迷宫创造功能)

Version 0.17:
- 完成两种迷宫创造

Version 0.15:
- 完成迷宫创造

Version 0.10:
- 完成主体的随机图块





额外说明:
迷宫生成中第一个效果一般般,会有明显的一条通路(如果图块数量够大)
第二个属于更加自然复杂正常的迷宫生成


7┌8┬9┐
4├5┼6┤
1└2┴3┘

                        这个指的是通道方向,相当于小键盘:7     8     9    4     5     6     1    2     3      垂直   水平   上单    右单    下单    左单
krz.mazecreate2(x, y, x_start, y_start, x_end, y_end, road1,road2,road3,road4,road5,road6,road7,road8,road9,road10,road11, road100, road20, road30, road40, start_room, end_room, rate)

最后一个rate不建议使用,因为有可能让迷宫无法走通,但是可以通过强制图块设定来让他绝对有一个通路

上文中提到的'1|2|3'可以让,比如都是水平一条路,有三种可能的模板,比如第一条是啥也没有,第二条有个怪挡路,第三个路上可能有宝箱






关于 范例:

新建工程,将范例文件放入替换
范例中,上头的老头点一下生成迷宫,再点一下进入迷宫(如果当时编辑器打开的需要重启(不保存)再打开才能看见迷宫)
上面的鬼魂是第一种迷宫生成,右侧的事第二种迷宫生成



注意:
模板必须是同一大小,迷宫生成是从0~x开始计算的大小,所以左上角是0,0 ,xy的大小比如实际5*5,输入4,4(这个指的模板的数量)
需要注意大小,尽量生成的迷宫不要大于编辑器限制。
如果迷宫生成要求地图过大,可能会卡住几秒钟,这是正常的,如果半分钟不动就是死循环了。
由于本插件是群员要求,目前自己用不上所以这好几个月应该不更新,除非有bug。


第二种更适合迷宫制造,第一种会有大部分道路随机而非迷宫路线设置,直接随机创造则全随机

关于范例:老头是创建迷宫,右侧为第二种迷宫设计,上为第一种迷宫设计。
一般是右侧点一下再点一下老头,也可以放在一起使用。



对于问到的用法,可以设置三张地图,一张初始地图,两张迷宫用地图(模板另算)
初始地图加载下一张迷宫地图,终点模板内放置一个事件:加载下一张地图并且前往起点




新增范例:218为目标迷宫,此事件放在218号地图内
$gameSelfSwitches.clearmap();
krz.setupcreatemap();
$gameMap.clearshops()
krz.PreloadedMaps[218] = null;
krz.loadMapData(218);
krz.mazecreate3(Math.min(4+$gameVariables._data[70],15),Math.min(4+$gameVariables._data[70],15),0,0,Math.min(4+$gameVariables._data[70],15),Math.min(4+$gameVariables._data[70],15),148,147,146 ,208,150,149,211,210,209, 212,213,217,215,216,214,148,219,242,0.0,0.25);
krz.restrictmap(0,0,148);
最后那个0.25是为了让迷宫不止有一条路,大小是根据变量70来的

清理事件以防没删干净
$gameMap._events = []
if($gameSystem._events) $gameSystem._events[$gameMap._mapId] = []
具体看下面截图
结束后进入一个小房间缓冲一下,然后再进218新生成的地图





图片演示:

QQ截图20190104224638.jpg (103.76 KB, 下载次数: 139)

QQ截图20190104224638.jpg

QQ截图20220913074157.png (131.83 KB, 下载次数: 81)

QQ截图20220913074157.png

QQ截图20220913074358.png (42.25 KB, 下载次数: 72)

QQ截图20220913074358.png

krz_map_create范例,把这些东西放在新建的工程里替换 - 副本.zip

562.74 KB, 下载次数: 181

2020年4月8日10:34:54

krz_map_create.rar

7.97 KB, 下载次数: 40

0.3版本


作者: j296196585    时间: 2019-1-6 03:59
没有下载链接
作者: 寂静的夜里    时间: 2019-2-18 15:35
本帖最后由 寂静的夜里 于 2019-2-18 16:06 编辑

挺牛逼的啊
希望LZ能继续开发该插件~
krz.mazecreate(15,15,0,0,15,15,6,4,8,10,12,5,7,3,9,18,19,14,15,16,11,12,12,0.0);
能请问作者这括号里面的内容是什么意思?帮助没看明白
作者: if216    时间: 2019-2-18 17:03
没细看代码,确认是可以创造地表的。只是有两个问题:
1.没有出口,怎么去下一张地图?
2.有的图生成的很小,也可能是把路堵死了,因此看到的只有地图的一部分。
期待楼主继续更新
作者: KRZOKUHD    时间: 2019-2-18 19:46
寂静的夜里 发表于 2019-2-18 15:35
挺牛逼的啊
希望LZ能继续开发该插件~
krz.mazecreate(15,15,0,0,15,15,6,4,8,10,12,5,7,3,9,18,19,14,15,16 ...

这种意思,比如7就是左上的样子

QQ图片20190218193611.png (24.93 KB, 下载次数: 101)

QQ图片20190218193611.png

作者: KRZOKUHD    时间: 2019-2-18 19:48
if216 发表于 2019-2-18 17:03
没细看代码,确认是可以创造地表的。只是有两个问题:
1.没有出口,怎么去下一张地图?
2.有的图生成的很小 ...

这个是可以在编辑器不保存,重新打开后查看地图的,右侧的会更好的生成迷宫,最后一项rate设为0即可
作者: kuaile412    时间: 2019-4-12 15:23
和老头对话后显示 typeError
Cannot read property 'data' of null
这是怎么回事
我按照您说的新建然后覆盖了
作者: xuyaoai2    时间: 2020-9-16 19:11
你好,看到你改有其他脚本,发在奶牛关上?我在奶牛关没有找到你,希望获取你改的其他脚本。望学习与使用
作者: KRZOKUHD    时间: 2020-9-16 20:18
xuyaoai2 发表于 2020-9-16 19:11
你好,看到你改有其他脚本,发在奶牛关上?我在奶牛关没有找到你,希望获取你改的其他脚本。望学习与使用 ...

都在奶牛群里,目录在奶牛论坛但是奶牛论坛炸了
作者: KRZOKUHD    时间: 2022-9-13 10:23
最近看到有人要随机地图插件,想起来p1上没更新,更新一下




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