饥荒联机吧 关注:165,694贴子:2,755,415

关于兽群, 牛羊的分群逻辑与生娃逻辑解读

只看楼主收藏回复

刚看到个帖子: https://tieba.baidu.com/p/8930710067
感觉有点惊讶,电羊工厂玩法人档一个的情况下「兽群」概念还没有在贴吧达成共识,更有 8 级以上的用户的错误知识在前排,感觉会对新人造成一些误导,遂有此文,后续楼层用代码举证言论。
老规矩,百度翻译镇楼。


IP属地:湖南1楼2024-03-14 14:07回复
    因为有牛铃可以带牛离开世界,所以分群比羊更简单,不需要摧毁「兽群」后上下线,因为离开世界会导致脱离「兽群」。驯服后也是脱离「兽群」,退化后与下面的上线后逻辑一致。
    上线后<没有「群」的牛或者羊>以及退化的牛与直接刷出来的牛羊,会给自己刷一个「群」 , 但是这个时候还没有和该「群」 绑定。
    如果附近有其他 「群」, 「群」 会开始周围 20 个墙距<没有 「群」 的牛或者羊>,如果找到了就纳入到自己的「成员」中。
    有两个情况,其他 「群」 找到这个<无 「群」 牛羊>了,这时候<无 「群」 牛羊>刷的<新 「群」> 会因为没有「成员」销毁,分群失败,这也是电羊工厂要求紫宝石传送阵要有间隔的原因; 而另一个情况是新 「群」扫描逻辑先执行,找到这个<无 「群」 牛羊>,成功绑定,此时分群成功。
    所以分群只需要绑定牛铃铛拉远,离开牛群,下线,上线,就多一个群了。上下地洞也是一样。
    检查你有没有成功分群的方法:
    分之前获取当前牛群数 : c_announce(c_countprefabs("beefaloherd"))
    分后再看看有没有 +1 : c_announce(c_countprefabs("beefaloherd"))
    其他群同理
    至于拉远生孩子可以分群,是因为生孩子要的时间太久,期间上下线导致的错误归因。
    反例就是拉远后解除牛铃绑定,无论生多少,都还是原群成员。
    另外
    牛是会合群的,两个牛群距离 20 个墙内,两群数量不大于 12 且其中一群总数小于 4 就会合成一个群。羊不存在合群。
    再,牛和羊的繁殖逻辑整体基本相同,除了牛多一个繁殖后的「认妈」动作
    参考:
    components/herd.lua
    prefabs/beefaloherd.lua
    prefabs/lightinggoatherd.lua


    IP属地:湖南2楼2024-03-14 14:08
    回复
      2025-10-12 04:16:56
      广告
      不感兴趣
      开通SVIP免广告
      1


      IP属地:江西来自iPhone客户端3楼2024-03-14 14:09
      回复
        新的牛会给自己刷一个「群」是 herdmember 这个组件控制
        牛羊都有这个组件




        herdmember 会在初始化后刷新一个对应「群」


        IP属地:湖南4楼2024-03-14 14:12
        回复
          前排学习


          IP属地:江苏来自Android客户端5楼2024-03-14 14:17
          回复
            快马加编


            IP属地:福建来自Android客户端6楼2024-03-14 14:18
            回复
              已有群对附近成员的「归纳」:

              可以看到兽群会一直循环,每次循环开始先收纳周边的拥有 herdmember 的存活成员。
              当兽群未满时会通过 addMember 将找到的成员收纳到自群。


              IP属地:湖南7楼2024-03-14 14:20
              回复
                道理我都懂,但你能不能直接教我怎么做,才能把牛羊分群,我是真不想看代码


                IP属地:江苏来自Android客户端8楼2024-03-14 14:26
                收起回复
                  2025-10-12 04:10:56
                  广告
                  不感兴趣
                  开通SVIP免广告
                  20 个墙距

                  关于牛的合群
                  兽群 herd 有一个标志: nomerging, 默认是 false.
                  如果该值为 true 则不会合群,可以看到,只有羊设置成了 true

                  合群的具体逻辑如下:

                  画红线的是目标群小于 4 ,且两群成员和小于等于 12
                  可以看到下面的 v:Remove , 被合的群从此消失。


                  IP属地:湖南9楼2024-03-14 14:27
                  回复
                    牛羊的生娃逻辑
                    生娃是通过 periodicspawner 控制, periodicspawner 会将新生单位传送到巢穴位置,但是牛会跟着妈是被 beefaloherd 控制的。
                    牛的:

                    羊的:

                    可以看到,牛多了一个获取 parent 逻辑,periodicspawner 传送之后,新生牛会被传送到 parent 位置。
                    而 parent 的具体获取如下:

                    只要没有骑手,未被完全驯化,就可以被选择。
                    而 paris 遍历顺序是不确定的,而且 lua 语言未规定 pairs 遍历规范,所以同一个群哪怕没成员变更的情况下,顺序也是不可控的。
                    简单来讲可以认为随机。


                    IP属地:湖南10楼2024-03-14 14:40
                    回复
                      字词老登喵


                      IP属地:广东来自Android客户端11楼2024-03-14 14:41
                      收起回复
                        支持


                        IP属地:河南来自Android客户端12楼2024-03-14 14:42
                        收起回复

                          补一下二楼


                          IP属地:湖南13楼2024-03-14 14:42
                          收起回复
                            现在电羊分群还是卡船传送沉船摧毁原羊群点小退吗


                            IP属地:上海来自Android客户端14楼2024-03-14 15:01
                            收起回复
                              2025-10-12 04:04:56
                              广告
                              不感兴趣
                              开通SVIP免广告
                              看了下,应该没了,需要补充问。


                              IP属地:湖南来自Android客户端15楼2024-03-14 15:02
                              回复