缺氧吧 关注:164,508贴子:2,140,429

【测试】树鼠的种植逻辑判定方式

只看楼主收藏回复

一楼直接放内容:
看到大家都对树鼠种植(白嫖)感兴趣,特别是在种植逻辑上。因为内容比较庞杂,再三思索之后还是想开一个新帖,这样子可以让大家看得清楚一点。
P.S. 原测试帖在这里:https://tieba.baidu.com/p/6179529837?pn=1
在文件解码之后我找到了树鼠种植相关的代码:
private int plantDetectionRadius = 6; //植物检查半径为6
private int maxPlantsInRadius = 2; //在半径内最大的植物数量为2
代码内容比较长,总之其中包含了两个比较重要的function:
- bool CheckValidPlotCell(PlantableSeed seed, int plant_cell) //检查可以种植的格子
- int CountNearbyPlants(int cell, int radius) //检索范围内植物数量
也就是说树鼠种植的逻辑是(1)先定位种子;(2)在树鼠的路径上寻找可以种植用的格子;(3)检查格子周围的植物数量,以格子所在的土块为原点的坐标系上,与原点距离上只能出现2株其他的植物,如果出现3株或者以上,则不被纳入树鼠可种植范围内。(而在在原测试里,是以植物被种下之后会随机对周围格子施加“不可种植DEBUFF”作为前提来思考是错误的。)
※ 坐标系的代码:
int x = 0;
int y = 0;
Grid.PosToXY(Grid.CellToPos(cell), out x, out y);
int num1 = radius * 2;
int x_bottomLeft = x - radius;
int y_bottomLeft = y - radius;
可以看出是曼哈顿距离。
接下来一步一步用图示解析:
图一:判定范围图示

图二:第二株植物

图三:第三株植物

图四:第四株植物

图五:第五株植物

图六:第六株植物

图七:第七株植物

图八:第八株植物

图九:第九株植物(图9截图比较晚,所以其实和图10是同一张)

图十:第十株植物

在在图9的时候种植范围内出现了三个植物,但是树鼠还是种下去了,原因是树鼠是根据行走的路径(选中树鼠单位是会出现一条白线)来检查格子是否可以种植,图8的树鼠还没在金格子种下植物时,图9的树鼠已经确定好了种植的路线,这种意外情况基本上发生在两个树鼠行动时间相差特别短而且选中的种植格子又特别靠近的时候。类似的情况比如说图10。图10的金格子上已经有了一株植物,但是另外一只树鼠还是叼着种子来这个格子种子,结果就是种植重复,种子掉落。这个严格意义上是代码的问题,这也是为什么之前我测试推断种植逻辑的时候会如此困难。
小结:用树鼠白嫖真的是一件很心累的事情,大家还是乖乖地听Klei的话好好做自然保护区吧,四株植物横向种植岂不是随随便便www
如果有遗漏或者有错误的地方希望能补充或者指正,谢谢
特别感谢@烁蓝@十里天X 的建议~~


IP属地:浙江1楼2019-07-14 12:52回复
    二楼备用


    IP属地:浙江2楼2019-07-14 12:52
    收起回复
      如果对代码有兴趣的小伙伴可以去文件里找:
      \Steam\steamapps\common\OxygenNotIncluded\OxygenNotIncluded_Data\Managed\Assembly-CSharp.dll
      然后将文件解码后,找PlantableCellQuery.cs文件,里面包含了种植逻辑的代码


      IP属地:浙江3楼2019-07-14 12:56
      收起回复
        请问,是“其他”植物?种子不一样,是不是可以种下。就是混种。


        IP属地:宁夏来自Android客户端5楼2019-07-14 13:09
        收起回复
          隔一格种一个是可行的。


          IP属地:北京来自Android客户端7楼2019-07-14 13:24
          回复

            这样会更简单粗暴
            隔二种一就刚刚好


            IP属地:广东8楼2019-07-14 13:31
            收起回复
              既然一定是111----111----111,中间的4格,要好好规划一下。比如氧气蕨+发电机。


              IP属地:宁夏来自Android客户端9楼2019-07-14 13:32
              回复
                @十里天X 中间有一格会断开


                IP属地:浙江10楼2019-07-14 13:39
                回复
                  这皮皮搞出一堆白嫖科技呢


                  IP属地:广东12楼2019-07-14 13:57
                  收起回复
                    加精加精加精加精


                    IP属地:上海13楼2019-07-14 14:02
                    收起回复
                      你这个中国结怎么搞的


                      IP属地:福建来自Android客户端16楼2019-07-14 14:28
                      收起回复
                        拓展一下,现在可以种得整齐紧密的办法有隔4种3法,隔2种1法:
                        - 乔木树比较特殊,虽然它判定时横向占地一格(1*2),但是它会向两侧长出枝丫,如果和其他植物或者建筑,土块重叠枝丫就无法生长,所以它的横向占地按理应是三格(3*3),所以特别推荐用隔2种1,而不适合用隔4种3。
                        ※特别注意:
                        - 因为树鼠的逻辑判定,用这两种办法种植时一定要保证单方向按顺序种植,否则会有断开的现象!!!
                        - 而且上下方6格内也不能有种植植物的土块!!!


                        IP属地:浙江17楼2019-07-14 14:44
                        收起回复
                          别白嫖了 来吃皮皮煎蛋吧


                          IP属地:广东18楼2019-07-14 14:46
                          收起回复