「How settlements work」修訂間的差異

出自 骑砍中文百科
前往: 導覽搜尋
如何覆盖游戏默认定居点
如何覆盖游戏默认定居点
行 30: 行 30:
 
<big>Main_map 会被自动加载。</big><br>
 
<big>Main_map 会被自动加载。</big><br>
 
<br>
 
<br>
 +
<big>你现在可以在 settlements.xml 中根据你的所想自定义定居点,或者修改一些现有的定居点(如改变领主、繁荣度、产出等)。settlements.xml 中的每个实体都要有自己的id。</big><br>
 +
<big>在你的模组文件里的 Main_map/scene.xscene 中的每个 game_entity 都要在 settlements.xml 中有一个id,并且确保它们不会重复。</big><br>
 +
<br>
 +
<big>一个添加新实体的例子(添加到已有文件,不完全替换其中的内容),向 settlements.xml 中添加一个城镇两个村庄。</big>[https://pastebin.com/BuSbQ6x2 <big>查看示例</big>]<br>
 +
<big>请注意,village_M1_1 和 village_M1_2 两个村庄实体都要绑定到所属城镇:</big>
 +
<nowiki>trade_bound="Settlement.town_M1" bound="Settlement.town_M1"</nowiki>
 +
<br>
 +
<big>目前尚不清楚这两者有何不同,建议你将它们放在你希望它们属于的城镇,这些村庄还包括你希望它们生产什么的定义:</big>
 +
<nowiki>village_type="VillageType.fisherman"</nowiki><br>
 +
<big>村庄类型在 Modules/SandBox/ModuleData/spprojects.xml 中定义。</big>
 +
<big>这三个新的定居点 game_entity 需要在 Main_map/scene.xscene 文件中定义:</big>[https://pastebin.com/dXcKT7wf <big>查看示例</big>]

於 2020年4月23日 (四) 23:08 的修訂

訪問源文檔
返回目錄

定居點工作機制

本遊戲添加定居點的機制就是結合兩個XML文件:一個定義定居點的類型(藏身點、村莊、城鎮、城堡等),還有如產出、繁榮、村莊所屬的城鎮等其它相關參數,這個定義在基礎遊戲的 Modules/SandBox/ModuleData/settlements.xml 中。另一個文件是定義距離緩存的,在 Modules/SandBox/ModuleSata/Settlements_distance_cache.bin 中,可以通過代碼生成。

但以上定義並沒有定義定居點的實際外觀,外觀都定義在 Modules/SandBox/SceneObj/Main_map/scene.xscene 文件中。

未來SDK支持相關

從其它可用的 DLLs 中可以看出,未來定居點應該是可以通過編輯器直接編輯的。這個編輯器可以幫助放置定居點、定義定居點外觀和自動生成距離緩存等相關文件。但是在目前,編輯器還未發布,只能藉助於XML文件進行修改與定義。

距離緩存相關

目前尚不清楚距離緩存有何作用。在不使用它時,AI仍舊可正常訪問定居點,招募軍隊、販賣俘虜和購買物品,玩家也可以正常訪問定居點。距離緩存可能與一些AI決策有關,這只是猜測。這個距離緩存可以通過 SettlementPositionScript 中的 SaveSettlementDistanceCache() 方法創建,但 SettlementPositionScript 目前未在遊戲中使用,它可能用於前面所提到的地圖編輯器。這個類可以在 SandBox.View.dll 中找到。

如何覆蓋遊戲默認定居點

當創建mod時你可以複寫 SandBox 模組中的定義,但在文件中append(添加)內容是不可能的,所以如果要做更改就要一次性修改所有文件。

首先將 Modules/SandBox/ModuleData/settlements.xml 複製到 Modules/你的模組名/ModuleData/settlements.xml ,並且把 Modules/SandBox/SceneObj/Main_map (一個文件夾)複製到 Modules/你的模組名/SceneObj/Main_map
如果可能的話,請避免用記事本這類普通編輯器對文件進行編輯,而是使用像 Notepad++ 這類更強大的編輯器。

在 Modules/你的模組名/submodule.xml 添加以下這個 XmlNode:

		<XmlNode>
			<XmlName id="Settlements" path="settlements"/>
			<IncludeGameTypes>
				<GameType value = "Campaign"/>
				<GameType value = "CampaignStoryMode"/>
			</IncludeGameTypes>
		</XmlNode> 	

Main_map 會被自動加載。

你現在可以在 settlements.xml 中根據你的所想自定義定居點,或者修改一些現有的定居點(如改變領主、繁榮度、產出等)。settlements.xml 中的每個實體都要有自己的id。
在你的模組文件里的 Main_map/scene.xscene 中的每個 game_entity 都要在 settlements.xml 中有一個id,並且確保它們不會重複。

一個添加新實體的例子(添加到已有文件,不完全替換其中的內容),向 settlements.xml 中添加一個城鎮兩個村莊。查看示例
請注意,village_M1_1 和 village_M1_2 兩個村莊實體都要綁定到所屬城鎮:

trade_bound="Settlement.town_M1" bound="Settlement.town_M1"


目前尚不清楚這兩者有何不同,建議你將它們放在你希望它們屬於的城鎮,這些村莊還包括你希望它們生產什麼的定義:

village_type="VillageType.fisherman"

村莊類型在 Modules/SandBox/ModuleData/spprojects.xml 中定義。 這三個新的定居點 game_entity 需要在 Main_map/scene.xscene 文件中定義:查看示例