看板 Minecraft 關於我們 聯絡資訊
之前看板上也有說明如何生怪的文章 文章代碼(AID): #1GExqq6U (Minecraft) [ptt.cc] [閒聊] 暗房生怪 或是參考Wiki: http://www.minecraftwiki.net/wiki/Spawn 這一篇主要是要說明: [1]怪物如何消失 /* 因為這最好說明 */ [2]哪些氣候會生成哪些生物 /* 先把生成條件說一說大家比較關心 */ [3]各種生物生成條件 /* 因為如何生成並不是最重要 */ [4]系統如何隨機生成生物 /* 如果你想知道詳細是如何生成 */ [5]地圖在產生時候生成生物 /* 再繼續看下去因為很枯燥? */ /*[6]生怪磚生成生物 ['n']<ssssSSSS *Boom* */ /* 這個跟3D空間有關 建議參考http://www.nicovideo.jp/watch/sm16687934 */ /* 記得要帶入生成條件 */ 這篇只說明如何生成,並不說明生成之後是生成怎樣的東西(不同顏色羊之類) 資料來源 net.minecraft.* /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ [1]怪物如何消失 首先先把會不會消失的生物列出來如下: 會消失的 不會消失 Monster 怪物 Animal 動物(牛 羊 豬 雞 香菇牛) Bat 蝙蝠 Golem 魔像(雪人 鐵魔像) Squid 烏賊 Villager 村民 Ocelot 豹猫 Cat 貓 AngryWolf 生氣的狼 Wolf 野生或馴服的狼 撿過裝備的(凋零)骷髏或是殭屍(豬人) [這樣才能回收裝備] 另外Dragon、Witcher這兩隻Boss是在討論範圍外 因為他們的消失函式並不會讓他們消失 Bug:Witcher在和平模式會消失,1.4.3有修正 消失演算法 尋找最接近的玩家 (1)距離>128 && 生物能消失 生物消失 (2)壽命>600tick(30秒) && 距離>32 && 1/800機率 && 生物能消失 生物消失 (3)距離<32 壽命=0 結論(好像跟上面差不多) 距離 0~32 32~128 128~ 結果 不會消失 存活30秒後 馬上消失 有機會消失 /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ [2]哪些氣候會生成哪些生物 生物生成清單分成四種 生成上限參數 特性 Monster 怪物 75 敵對 //計算時不含Dragon Creature 動物 15 友善、動物 //包含Ocelot Ambient 環境 15 友善 //蝙蝠 WaterCreature 水生動物 5 友善 //烏賊 生成上限 = 參數 * 所有玩家為中心17x17的chunk數總和 / 256 實際上會生怪的chunk是玩家為中心15x15的chunk 動物因為地圖創造的時候也會生成外加不消失,基本都是超出上限 Golem和Villager不在計算範圍內,也不會隨機生成 接下來列出不同氣候的生成清單 [生成權重]生物名稱(生成隻數) 不過生成隻數只有在地圖創造時同時生成動物的時候才會使用到 其他如怪物、烏賊、蝙蝠並不會使用到 隨機生成 除了Ghast最多生成1隻 Wolf最多生成8隻以外 都是最多生成4隻 Biome Creature Monster WaterCreature Ambient ------------------------------------------------------------------------- Base [12]Sheep(4) [10]Spider(4) [10]Squid(4) [10]Bat(10) Hills [10]Pig(4) [10]Zombie(4) Plains [10]Chicken(4) [10]Skeleton(4) Snow [ 8]Cow(4) [10]Creeper(4) [10]Slime(4) [ 1]Enderman(4) ------------------------------------------------------------------------- Beach 無 Base Base Base Desert Ocean River ------------------------------------------------------------------------- Base再追加 Base再追加 Base Base Forest [ 5]Wolf(4) Taiga [ 8]Wolf(4) Jungle [10]Chicken(4) [ 2]Ocelot(1) Swamp [ 1]Slime(1) -------------------------------------------------------------------------- Mushroomland[8]Mushroom(4~8)無(你沒看錯不生怪跟烏賊)無 Base -------------------------------------------------------------------------- Hell 無 [ 50]Ghast(4) 無 無 [100]PigZombie(4) [ 1]MagmaCube(4) -------------------------------------------------------------------------- End 無 [10]Enderman(4) 無 無 -------------------------------------------------------------------------- SwampHut (7x5x9區域) [ 1]Witch(1) NetherBrige [10]Blaze(2~3) [ 5]PigZombie(4) [ 3]MagmaCube(4) [10]Skeleton(4) 4/5是WitherSkeleton 1/5是Skeleton 當生成點在這兩種建築物之中而且是要生成怪物的時候會替換成此清單 必須是系統生成過的建築,人造不行 結論:沼澤小屋生成跟沙漠神廟、叢林神廟是同類型生成(不同氣候生成不同種) 沼澤小屋少之又少隨機生成Witch的小屋又那麼小 Witch根本很難遇到(除了一開始生成小屋附贈的那隻) /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ [3]各種生物生成條件 最基礎的生成條件(隨機生成跟地圖創造時生成) 1. 生成位置距離24內不可以有玩家 2. (1)水生生物 上方位置:不能有實心方塊 生成位置:必須是 (2)非水生生物 上方位置:不能有實心方塊 生成位置:不可以有實心方塊以及液體(水、岩漿) 下方位置:必須是實心方塊,但不能是基岩、可以是上半磚or上半樓梯 不生怪的實心方塊:Bedrock 不實心方塊[不會生怪]:Ice GlowStone Leaves TNT EndPortalFrame 半磚樓梯是不實心方塊,但是特別追加條件上半磚or樓梯是會生怪 接下來是各種生物的生怪條件(隨機生成、地圖創造生成、生怪磚生成) Living (共通除了水生生物) 檢查生物即將生成"體積"區域無其他生物無方塊無液體阻擋 Monstar(地面怪物:不含(烈焰)史來姆、殭屍豬、烈焰怪、※魚) 亮度 <= (0~7)隨機 //結果是越暗生成機率越高 Blaze 亮度是 0~11(hell) 0~12 (real/end)//如果有人在這兩個區域弄出自訂的生怪磚 Sliverfish 生成位置距離5以內不能有玩家 (1)如果下方位置是石頭則會生成 (2)如果不是石頭,則檢查亮度是0~12(real/end) 0~11(hell) //同Blaze Animal (動物不含貓) 下方位置是草磚 && 亮度>8 Ocelot (豹貓) 2/3機率 && y>=63 && 下方位置是草磚樹葉 Slime (生成大小隨機) (1)如果是超平模式3/4會生成失敗 (2)沼澤氣候 && 70>y>50 && 亮度<=(0~7)隨機 //越暗生成機率越高 (3)特定chunk && y<40 && 1/10 PigZombie、MagmaCube(生成大小隨機) 只檢查Living 條件 Ghast 1/20機率會生成,其他檢查Living條件 Bat (1)y<63 (2)10/20~11/3 //萬聖節大量產生(?) 亮度<=(0~6)隨機 //越暗生成機率越高 (3)其他日期 亮度<=(0~3)隨機 //越暗生成機率越高 Squid 檢查生物即將生成"體積"區域無其他生物阻擋 //因為只能生在水中 63>y>45 //該位置不會是其他方塊 /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ [4]系統如何隨機生成生物 /* 現在開始就很枯燥了 */ 1 檢查設定:能夠生成敵對生物 或 能夠生成友善生物 才繼續做 2 根據所有玩家位置 紀錄所有以玩家中心17x17個chunk 然後記住只有以玩家中心15x15個chunk能夠生怪 3 for(四種類型生物各執行一次) 4 檢查該種類型的生物能否生成 //根據設定:能生成敵對或友善 時間能被400 ticks整除 //即每20秒才能生成一次 檢查該類型生物是否高過生成上限 //在[2]有提到 5 while(每個能生成的chunk都做一組生成) //每個chunk都會對各類型生物 6 如果這個chunk能夠生成 //各作一次生成 就從這個chunk隨機挑出一個位置 7 如果該位置不是實心方塊 && 該位置是能生成的材質//水or空氣 接下來會從該位置開始從41x41水平區域進行3x4次生成嘗試,選擇方式如下 while(3次) 8 紀錄下選定位置 while(4次) 9 將上次的位置稍微移動一下該座標 x : (0~5)隨機 - (0~5)隨機 // -5 ~ +5 不是平均分布 y : (0~0)隨機 - (0~0)隨機 // 沒變 z : (0~5)隨機 - (0~5)隨機 // -5 ~ +5 每次都會從上次移動的開始下一次移動 平均來說分布機率會是這樣http://i.imgur.com/iWBpV.png 九成會分布在距離中心8.5 http://i.imgur.com/rf8A7.png 10 檢查基礎的生成條件 //在[3]有提到 距離24內不部能有玩家 距離重生點24距離也不會生成 該位置跟上方位置要有空間 下風空間要是實體方塊(烏賊不檢查這個) 11 從該位置氣候該種類生成清單 依據權重選擇一種生物 //12次嘗試都是同種生物 進行該種生物的生成條件檢查 //都在[3]裡面 如果符合條件就生成生物 12 如果成功生成次數以達單次最多生成次數就換下一個chunk Ghast 1隻 Wolf 8隻 其他 4隻 /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ [5]地圖在產生時候生成生物 1 取得該chunk 特定位置的氣候的動物生成清單 2 while(1/10機率) // 10% 進行一次生成 1%進行第二次生成 ... 3 依據權重從清單裡面選擇一種生物 生成隻數為[2]裡面提到的生成隻數 //不含Ocelot x z 為 16x16隨機一點 //除了香菇牛是4~8隻以外 y 為該點最上層為該位置最上面的位置 //其他動物都是4隻 4 for(根據生成隻數) for(嘗試四次生成以確保能夠生成) 5 檢查基礎的生成條件 //在[3]有提到 符合就生成一隻生物,然後進行下隻生成 6 如果生成失敗就 隨機移動 x,z : (0~5)隨機 - (0~5)隨機 如果跑出chunk外則繼續隨機移動 y則是該位置最上層位置進行下次嘗試 /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ /*[6]生怪磚生成生物*/ /* ---------------SSSSssss>['n']分隔線['n']<ssssSSSS------------- */ To Be Continued... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.173.219.139
CP64:縮排 (驚 11/05 20:45
※ 編輯: jeffffliu 來自: 1.173.219.139 (11/05 20:50)
shin2190:用手機版看排版超整齊的 好像在看code… 11/05 21:06
※ 編輯: jeffffliu 來自: 1.173.219.139 (11/05 21:10)
jeffffliu:因為本來就是code 11/05 21:11
※ 編輯: jeffffliu 來自: 1.173.219.139 (11/05 21:14)
nadoka:蠹魚? 11/05 21:30
becca945:OuOb 11/05 21:31
Nuaaukw:這根本職業病了 XDDDDDD 地震!!! 11/05 21:41
jeffc815731:['n'] 你在code什麼啦sssSSSSS 11/05 21:52
gh0987:推推 11/05 21:52
jeffffliu:原本只是想知道Witch會不會生成不知不覺越看越多(汗 11/05 21:56
tsuyoshi0307:看不懂... 11/05 22:23
olys:code XDDDD 11/05 22:53
m339606:推!所以這部分能夠自己手動更改伺服器設定嗎? 11/06 00:06
tw00177843:快推!!免得被發現看不懂!! 11/06 00:20
jeffffliu:改了就變mod了(?) 11/06 00:32
jeffffliu:看不懂很正常 比較需要知道是 哪些區域會生 跟生成條件 11/06 00:33
※ 編輯: jeffffliu 來自: 1.173.214.84 (11/09 16:14) ※ 編輯: jeffffliu 來自: 1.173.214.84 (11/09 22:34) ※ 編輯: jeffffliu 來自: 1.173.214.84 (11/09 22:36)
jeffffliu:補充幾個不會生怪的方塊 11/09 22:36
※ 編輯: jeffffliu 來自: 1.173.214.84 (11/11 16:00)
jeffffliu:蘑菇島氣候的好處就是不生怪 11/15 12:36
※ 編輯: jeffffliu 來自: 1.173.216.71 (12/14 20:44) ※ 編輯: jeffffliu 來自: 114.39.144.101 (12/22 12:24)