【Terraria機(jī)制】有效房屋是如何判定的
有效房屋是Terraria中一個極有特色的機(jī)制,也是被提問最頻繁的話題之一。這個專欄將詳細(xì)解釋有效房屋的判定細(xì)節(jié)。專欄內(nèi)容由我自己實驗測試與下面的參考鏈接得到:
https://terraria.gamepedia.com/House
https://forums.terraria.org/index.php?threads/how-npc-housing-at-npc-rest-position-validation-does-work-an-unrevealed-game-change-in-1-3-5.75980
https://forums.terraria.org/index.php?threads/how-to-make-npc-stay-at-the-top-of-the-house.75978/

范圍及大小
一個有效房屋必須是由實體塊、平臺、門(或機(jī)關(guān)門/高門)圍成的連續(xù)封閉區(qū)域,并且這些實體塊/平臺/門共同組成這個區(qū)域的邊界。組成邊界的方塊不能全部是實體塊。區(qū)域的內(nèi)部和邊界占用的總格數(shù)最小60格,最大750格。以簡單的矩形區(qū)域為例,最小的一些例子有5*12(內(nèi)部3*10),6*10(內(nèi)部4*8),7*9(內(nèi)部5*7),8*8(內(nèi)部6*6)。
這里有兩個重要的概念。第一個概念是“連續(xù)”的封閉區(qū)域。對角的兩格也算連續(xù)。下圖所示的房屋是一整個連續(xù)封閉區(qū)域。第二個概念是邊界。把連續(xù)的封閉區(qū)域增大一圈,增大的這一圈就是這個區(qū)域的邊界。下圖所示的房屋中,除了上下左右的平臺和方塊,中間的三格方塊也算作邊界,因為把內(nèi)部區(qū)域增大一圈,不光會覆蓋外邊界,也會覆蓋中間三格。

必備家具
一個有效房屋必須包含至少一個有效光源、至少一個用于休息的家具、至少一個用于娛樂的家具。
有效光源包括所有火把、所有燈(大小1*3)、所有燈籠(大小1*2)、所有蠟燭、所有燭臺(大小2*2)、所有吊燈(大小3*3)、中式燈籠、圣誕燈、壁爐。需要注意的是燈柱、篝火、迪斯科燈不是有效光源。
用于休息的家具包括所有椅子、王座、所有長椅、所有床、所有馬桶(???)、所有沙發(fā)。
用于娛樂的家具包括所有桌子、所有梳妝臺、所有工作臺、所有浴缸、所有書架、所有鋼琴、煉藥桌、召喚桌、戰(zhàn)爭桌。
背景墻
一個有效房屋必須要有可以阻止刷怪的人工背景墻,不能阻止刷怪的自然背景墻的位置視為沒有墻。需要注意的是船帆屬于自然背景墻,而金字塔的沙巖磚墻、遺跡小屋的主題墻屬于人工背景墻。
人工背景墻不必鋪滿,但是要保證不會出現(xiàn)橫向或縱向的連續(xù)四格空洞。類似于四子棋,只要有四格空洞橫向或縱向連續(xù)排列,房屋無效。
腐化度
一個房屋的腐化度可能會影響該房屋的有效性,其具體影響機(jī)制見后續(xù)小節(jié),這小節(jié)中僅講腐化度計算。
只有房屋附近的一個矩形區(qū)域才參與腐化度計算。這個矩形區(qū)域內(nèi)每格腐/血方塊提供1點腐化度,每格神圣方塊提供-1點腐化度,每格向日葵提供-5點腐化度。注意是每格不是每個,如果一個向日葵整體都在該矩形區(qū)域內(nèi),因為向日葵總共有8格,這個向日葵將提供-40點腐化度!
矩形區(qū)域的右邊界距離房屋的右邊界(如果房屋形狀不規(guī)則,取最右邊的一格邊界,下同)42格,左邊界距離房屋左邊界42格,上邊界距離房屋上邊界40格,下邊界距離房屋下邊界43格。矩形寬度為房屋寬度+84格,矩形高度為房屋高度+83格,房屋寬度和高度包括邊界。希望這個信息能幫助大家理解有歧義的矩形邊界位置描述(距離是否包括端點)問題。
NPC站立點
一個有效房屋的邊界中一定有一個實體塊可以供NPC站立,為夜晚或下雨時NPC休息的位置。這個實體塊的正上方一格是房屋內(nèi)部(即要在地板上)。其次它附近的物塊擺放必須滿足一定條件。

如上圖,以唯一一個地板實體塊為例,紅色區(qū)域的下三格不允許有實體塊或平臺,綠色區(qū)域的下三格不允許有實體塊。其他部分無所謂。
除此以外,這個實體塊的得分還必須大于0。得分的算法:
得分初始值為50。
在綠色和藍(lán)色區(qū)域中的每有一格(注意是格不是個)門,得分-20;每有一格實體塊或平臺,得分-5;每有一格除寶箱以外的非實體塊,得分+5。
如果得分<=0,這個實體塊無效,算法結(jié)束。如果得分<50并且房屋的腐化度>=50,實體塊無效,算法結(jié)束。如果得分>=50并且房屋的腐化度>=得分,實體塊無效,算法結(jié)束。
在綠色和藍(lán)色區(qū)域中每有一格寶箱,得分-30,得分最低只能減到1。
在紅色區(qū)域中每有一格東西(啥都行,只要不是只有背景墻),得分-15。
如果得分>0,這個實體塊有效。

我們以上圖旭式監(jiān)獄為例。初始值50;藍(lán)色區(qū)域中共有8格平臺,綠色區(qū)域中共有3格工作臺和椅子,50-40+15=25;紅色區(qū)域有一格工作臺,25-15=10。所以這個實體塊有效。
如果火把放在紅色區(qū)域,那么得分會額外減15,變成-5,這個實體塊無效。

如果在綠色區(qū)域再加兩個火把,得分會加10,變成5,實體塊又會有效。已經(jīng)測試過只加一個火把,得分為0時實體塊無效。

一個房屋中可能有多個地板實體塊,如果所有的地板實體塊都無效,那么房屋無效,否則這個房屋的位置定為所有地板實體塊中分?jǐn)?shù)最高的那塊,NPC入住的徽標(biāo)就會顯示在那一塊上方。另外需要注意的一點是,紅色、綠色、藍(lán)色區(qū)域不僅可能包括房屋邊界,也可以包括房屋以外的格子。下圖的房屋是有效的,只有綠色區(qū)域中的8格平臺,得分為50-40=10。

但是往房屋外邊增加兩個平臺后,如果這兩個平臺在藍(lán)色區(qū)域內(nèi),得分會變?yōu)?0-50=0,方塊無效。

在外面的藍(lán)色區(qū)域再插了一個火把后,得分為50-50+5=5,方塊有效。

再看到我們一開始的這張圖,藍(lán)色區(qū)域和綠色區(qū)域有8格實體塊、兩格平臺、兩格火把和兩格椅子,紅色區(qū)域有1格實體塊,得分為50-40-10+10+10-15=5,有效。如果火把少一個,得分變?yōu)?;椅子放在下面,得分變?yōu)?5;工作臺放在上面,得分變?yōu)?5(有一格工作臺會進(jìn)入紅色區(qū)域),均無效。所以多的一個火把不是拿來裝飾的,椅子和工作臺擺放也是有講究的。

