關於馴服狼的繁殖歸屬問題[]
關於關於馴服狼的繁殖歸屬問題,在遊戲中設定應該確實是在兩個玩家間隨機分配的。在英文wiki上的解釋是「最終會歸屬於年長的那隻馴服狼的主人」,這個可以證實是錯誤的。我最近注意到我身邊有許多玩家也發現了這個問題。
經過我的實際測試(JE-1.19.3)之後,發現在繁殖條件(狼的出生時間、馴服順序、餵養順序、餵養者)不變的情況下,兩隻馴服狼得出的結果一致,由此可知不同主人的馴服狼之間的繁殖並不能透過這些條件來控制。
在與巡查員Anterdc99討論的過程中,他提醒我還有距離上不同的情況。
我再次進行測試後發現他是正確的,測試方法是繁殖前將其中一個玩家傳送至Y=10000、XZ不變的位置,繁殖結果不顯示出隨機性。這裡可以得出結論:如果有一個玩家距離自己的狼過遠,那麼所繁殖出的幼狼必然是另一個玩家(測試過兩個主人都離狼過遠而讓第三個玩家餵養的情況。幼狼不會認第三者做主人的,甚至在它們的主人回來前不會進行繁殖)。
而後,IBuckeeet有了新的結論,他發現當餵食後兩狼已進入「求愛模式」時,一個玩家要是在繁殖成功之前令他的狼坐下,那麼繁殖出來的幼狼必將會跟隨另一個玩家。
我也再次進行了驗證發現確實如此。
此外,我發現當兩狼在水中時,如果一個玩家退出遊戲,繁殖結果也必然是還存在遊戲中的玩家的。而如果兩個玩家都已不在遊戲中,第三玩家嘗試繁殖後幼狼會隨機選擇原有的兩個玩家之一做為主人。
我還在基岩版(1.19.51)測試後,發現此上所有特性均與基岩版無關,在基岩版中無論什麼情況繁殖結果必然是在兩個玩家主人中隨機選擇一個的。
我發現有許多人對此有不同的意見,故在此發起討論。如果我這裡有什麼錯誤或者你有新的發現的話,歡迎在此討論~
--II Pixel Cube II(留言) 2022年12月30日 (五) 13:27 (UTC)II Pixel Cube II
- 這個問題其實要比表面上複雜的多,涉及到上一代MC生物AI的問題。接下來我會用代碼說明其原理(1.19.3,Mojang Mapping)。
- 首先先說一下繁殖的原理,生物AI的「BreedGoal」決定了生物的繁殖行為,此AI透過調用動物的「getBreedOffspring」方法建立繁殖出的生物,而這個繁殖出來的生物將跟隨目前正在調用此AI的生物的主人。也就是說,繁殖雙方誰先調用了BreedGoal,繁殖出來的動物就屬於誰的主人。
- 通常來說,調用方誰更優先是隨機的,但是在你上方說的幾種情況中,導致了繁殖生物AI出現了調用順序。
- 如果一個已馴服生物的主人離此生物距離過遠且沒有坐下,生物會嘗試向主人走動或傳送至主人。由於跟隨AI(「FollowOwnerGoal」)與BreedGoal同時占據生物的MOVE和LOOK控制,在這兩個AI中,生物只能選擇一個;又因為FollowOwnerGoal的優先級(6)優先於BreedGoal(7),所以生物會選擇嘗試跟隨主人,而不是去進行繁殖,AI被跟隨主人這個任務固定,所以此方不會主動去繁殖,相對應的另一方如果不受此限制,則可以先調用BreedGoal,因此解釋了「玩家距離自己的狼過遠,那麼所繁殖出的幼狼必然屬於另一個玩家」。這個東西的驗證你也已經做過了:如果主人不在身邊,在它們的主人回來前不會進行繁殖。
- 生物坐下也是類似的情況。由於生物坐下相當于禁用MOVE控制,所以也同時停用了BreedGoal,剩下的推理和上方相同。
- 最後的那個情況我暫時沒有找到什麼根據,應該也類似於上面的流程:生物的BreedGoal被停用或優先級較低,所以被另一方搶先調用。
- 總而言之這是個非常複雜的AI問題,情況太多了--Nickid2018(留言) 2022年12月30日 (五) 14:10 (UTC)
狼:我對主人的愛大過我對象,發情也攔不住(
- 感謝,一個專業的回答。
- 所以在大於BreedGoal優先級的行為選擇器被觸發時或BreedGoal被停用時都會影響生物的繁殖行為和繁殖結果。目前會影響BreedGoal和玩家相關的似乎也就「跟隨」和「坐下」這兩種情況了,也許...還有「受傷」?
- 最後情況我猜測和 FloatGoal(水面漂浮)有關,我對ai並不算太了解,但我想其他生物的繁殖應該也能參考這個思路來獲得可控的結果。
- --II Pixel Cube II(留言) 2022年12月30日 (五) 16:31 (UTC)
- 理論上來說只要優先於BreedGoal且占用MOVE或LOOK控制的AI都可能會對繁殖行為造成影響。在狼這個例子裡面,滿足這些條件的AI有:WolfPanicGoal、SitWhenOrderedToGoal、WolfAvoidEntityGoal、LeapAtTargetGoal、MeleeAttackGoal和FollowOwnerGoal,這其中只需要有一項AI滿足其執行條件並占用MOVE或LOOK控制,BreedGoal就不能發揮作用。而FloatGoal並不能阻止BreedGoal,它只占用JUMP控制,所以應該是因為其他AI導致了最後一種情況的發生。
- 其他生物的繁殖也大概遵循上述規律,但是由於MC中生物AI有兩種,所以對於使用另一種AI的生物上述判斷不適用,它們使用生物記憶-行為控制而不是Goal和Target--Nickid2018(留言) 2022年12月30日 (五) 16:56 (UTC)