Re: [问题] 关于MC的运作原理问题与地图升版

楼主: Gwaewluin (神无月 孝臣)   2021-02-04 19:57:35
※ 引述《overdoingism (做过头主义)》之铭言:
: 首先感谢上面几篇前辈的回答。
: 最近看到1.17要发布了,依照过去玩过的Terraria的经验是,
: 大改版后要重新产生地图,才会有新的要素,
: 不过稍微理解了MC后,
: 他的原理似乎是靠单一种子值,即时产生所有的世界,
: 可能是利用杂凑函数之类的方式(我猜),
: 再转换成各种地形,
: 然后只记录下人为的变动,
: 这样一来即使是更新版本,
: 新的要素还是会在地图上出现,
: 只要该砖没有被人工建设过的话。
: 请问我的理解是对的吗?
: 也就是说如果我以1.16开服,
: 理论上未来可以无痛升级到1.17这样?
: 除非有增加像终界这么大幅度的改版?
: 请指教~感谢 m(_ _)m
: ----
: 顺便一问,paper服务器会比spigot更好吗?
: 比起性能我更重视相容性、长期维护性这样....
关于麦块的地图是这样运作的
既然提到terraria的话也可以用terraria来说明一下
terraria是在创地图时就已经建立好一个完整的地图档
但是当terraria升版本加入新的地形要素时
新的地形要素会没有办法进入原有的地图档之中
需要重新再建立一张地图档来套用有新的地形要素的生成规则
这样新建立的地图档内才会出现新的地形要素
举例来说
terraria在1.3版时追加了大理石与花岗石的生态系
但是直接于1.3版游戏中打开1.2版就建立的地图是没办法看到这两个新生态系的
需要在1.3版内重新建立一个新地图才会生成这两个新生态系
不过新怪这种无关地图生成的新要素
仍是可以直接出现在用新版本的游戏所开启的旧地图档之中
而麦块则是这样运作的(其实机制是相同的)
麦块的地图大小在理论上是6000万公尺x6000万公尺(比地球表面积还大就是)
这样庞大的资料量不可能像terraria那样直接建立一个完整的地图加载游戏中
没有电脑可以承受这么庞大的资料量的加载
所以麦块使用的是一个叫做chunk的机制
将地图档切割成16x16格(垂直方向是全部包含)为单位的一个chunk
然后游戏只会加载玩家所在附近个几个chunk而已(范围可以调整)
反正玩家只会与他附近的地图资料来游戏
远离玩家太远的地图资料不就没有必要加载吗
所以就是这样只加载玩家附近的几个chunk
当玩家离开已经加载的chunk有一定的距离时
这些chunk就会被卸载而"冻结"
至于chunk内所储存的地图档资料
是在chunk要加载时才会生成
所以如果有一个位于世界边缘的chunk不曾有玩家接近的话
这个chunk的地图档将永远不会生成
如果有一个chunk在某日有玩家接近时
这个chunk就会套用当下游戏版本的地图生成规则来将地图档资料生出来
已经存在的地图档资料既然已经产生
当然就不会再套用地图生成规则去再次生成地图档资料了
因此若是一个chunk套用旧游戏版本的地图生成规则将地图档资料生出来后
在游戏版本提升后再次加载该chunk的话也没办法再次生成地图档资料一次
也就是这个chunk内已经没有办法出现新游戏版本追加的新的地图要素了
没有办法使用新游戏版本的地图生成规则的话
新的地图要素将没有办法在chunk内生成
但是与地图要素无关的新怪之类的要素则仍是可以在已经生成的chunk内出现
对于管理一张麦块的地图来说
便是不要没事就乱跑让一堆chunk套用现在的地图生成规则来产生地图档
游戏更新版本后一定能在这张地图内出现新的地图要素
只是需要移动到在之前版本中还没生出地图档资料的chunk才行
虽然说游戏地图有6000万x6000万公尺那么大
应该是不用担心找不到在之前版本中还没生出地图档资料的chunk
因为没事就乱跑使得附近的chunk全部生成当下版本的地图档资料
使得需要长距离移动才能到达在之前版本中还没生出地图档资料的chunk也是很令人烦躁的
所以有些管理员会用指令设定世界边缘来禁止有人随便探索
而且通常这些地方走过一次后就再也不会再接近了
等到游戏版本提升后再将世界边缘变大
让玩家可以去探索能生成新的地图要素的那些chunk
另一个方法是既然大部分探索过的chunk都是走过去一次后就不会再接近了
那么把这些chunk的地图档资料都砍掉不就好了
把chunk的地图档资料都删除后
等游戏提升版本后不就是能生成有新的地图要素的地图档了吗
所以可以试试看这一个工具
https://github.com/Querz/mcaselector
mcaselector是一个简单的地图档编辑工具
可以看到目前地图档到底已经建立到怎样的规模
把网页往下拉就能看到载点
同时还有许多使用教学可以看(程式内也可选繁中接口)
用mcaselector加载自己的地图后(就算是mod环境的地图也能加载)
就能够自行选择要删除那些chunk或region(32x32个chunk是一个region)
把那些在主要活动区外面而且几乎不会在靠近的chunk或region都砍掉
等游戏提升版本后就能在那里生成新的地图要素了
而且这样还有帮地图档瘦身的效果
那些根本没有人去的chunk为何要留在地图档中占空间呢
作者: anderwei (Ander)   2021-02-04 20:04:00
推解说,话说现在升版本还是会造成地形断层吗?很久没有让地图升版本号了,几乎都是直接开一张新的玩
楼主: Gwaewluin (神无月 孝臣)   2021-02-04 20:15:00
还是有看过,在日本还称作版本之壁或版本墙壁
作者: overdoingism (做过头主义)   2021-02-04 20:18:00
感谢解说,这样看来区域限制与管理工具都是有必要的尤其是在这可能不久就要改版的时刻
作者: HMKRL (HMKRL)   2021-02-04 20:31:00
我自己把1.15升上1.16时就把地狱砍了一半
作者: twosheep0603 (两羊)   2021-02-04 20:36:00
地狱更新升版本的确很让人头痛 毕竟地狱比较小XD
作者: overdoingism (做过头主义)   2021-02-04 21:41:00
请问下,那能重置整个地狱吗?把相关mca删除就好?
作者: LPH66 (-6.2598534e+18f)   2021-02-04 22:48:00
真的要全部砍掉重来的话, 把 DIM-1 资料夹整个砍掉(注意是有 - 的那一个, 没有的 DIM1 是终界)这样之后进去时就会当成你从来没来过地狱全部重新生成
作者: Roundb (PoEisGood)   2021-02-04 23:11:00
6000万公尺这部分是不是错了每一点座标是1公尺?
作者: LPH66 (-6.2598534e+18f)   2021-02-04 23:20:00
是喔, 麦块的每个方块都是一公尺立方
作者: edwin96017 (闲(  ̄ c ̄)y▂ξ)   2021-02-04 23:24:00
重生成的地狱 堡垒那些都还会同位置?会生成不同形式的建筑吗?
楼主: Gwaewluin (神无月 孝臣)   2021-02-04 23:48:00
理论上是地狱要塞的生成位置是固定的,所以有finder可以用,但地狱要塞的生成逻辑在1.16版时换过了,所以如果在1.15把地狱存盘砍掉,1.16重新生成的地狱要塞会在不同的地方生成,因此用地狱要塞的finder也要选择版本
作者: siriusu (かがみは俺の嫁。)   2021-02-05 00:08:00
推分享最近从 1.9 一口气升到 1.16 老家直接变成断层 T^T
作者: alanqq0624 (fallere725)   2021-02-05 03:56:00
作者: nick5487 (nick5487)   2021-02-05 06:01:00
如果你是用spigot或paper开你的地狱会是一个world_nether资料夹,直接砍掉让他重新产生就好
作者: Kenqr (function(){})()   2021-02-05 10:22:00
原来有这么好用的工具 感谢分享
作者: Severine (赛非茵)   2021-02-08 09:07:00
推工具
作者: john0601 (皮皮皮皮屁)   2021-02-11 12:55:00
其实三个维度都是一样大,不过地狱会去的地方比较小XD

Links booklink

Contact Us: admin [ a t ] ucptt.com